diff --git a/.gitignore b/.gitignore index ec021d210..fa066279c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ configure config.h.in +config.h.in~ autom4te.cache aclocal.m4 depcomp @@ -12,7 +13,7 @@ scripts/ZoneMinder/blib Makefile.in Makefile docs/_build - +compile config.guess config.h config.log @@ -24,6 +25,12 @@ misc/com.zoneminder.systemctl.policy misc/com.zoneminder.systemctl.rules misc/logrotate.conf misc/syslog.conf +onvif/modules/MYMETA.json +onvif/modules/MYMETA.yml +onvif/proxy/MYMETA.json +onvif/proxy/MYMETA.yml +scripts/ZoneMinder/Makefile.old +scripts/ZoneMinder/MYMETA.json scripts/ZoneMinder/MYMETA.yml scripts/ZoneMinder/lib/ZoneMinder/Base.pm scripts/ZoneMinder/lib/ZoneMinder/Config.pm diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..3899c241c --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "web/api/app/Plugin/Crud"] + path = web/api/app/Plugin/Crud + url = https://github.com/FriendsOfCake/crud.git diff --git a/.travis.yml b/.travis.yml index da5bf96b4..f51d80cbc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,8 +32,8 @@ install: - sudo make install-libs before_script: - cd $TRAVIS_BUILD_DIR - - if [ "$ZM_BUILDMETHOD" = "autotools" ]; then libtoolize --force; fi - - if [ "$ZM_BUILDMETHOD" = "autotools" ]; then aclocal; fi + - if [ "$ZM_BUILDMETHOD" = "autotools" ]; then libtoolize -v --force; fi + - if [ "$ZM_BUILDMETHOD" = "autotools" ]; then aclocal -I m4; fi - if [ "$ZM_BUILDMETHOD" = "autotools" ]; then autoheader; fi - if [ "$ZM_BUILDMETHOD" = "autotools" ]; then automake --force-missing --add-missing; fi - if [ "$ZM_BUILDMETHOD" = "autotools" ]; then autoconf; fi diff --git a/CMakeLists.txt b/CMakeLists.txt index ef04e1fba..049ca5d08 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,31 +1,57 @@ # Main CMake file for the ZoneMinder project. # Created by mastertheknife (Kfir Itzhak) -# The goal is to ease up the installation of zoneminder. -# Our current installation method (using autotools) is outdated, slow and breaks now and then. -# The CMake installation method will require no parameters at all, default should sufficient and reliable. -# It will be still possible to install ZoneMinder using autotools, they don't conflict with each other. The cmake way is a complete re-write (different syntax) and aims to be identical to the autotools way, -# by having options using the same name and leaving ZM totally unmodified, while providing exactly the same things that ZM expects (config.h, configuration in *.in files, etc). -# # For more information and installation, see the INSTALL file # cmake_minimum_required (VERSION 2.6) project (zoneminder) set(zoneminder_VERSION "1.28.1") +# make API version a minor of ZM version +set(zoneminder_API_VERSION "${zoneminder_VERSION}.1") -# CMake does not allow out-of-source build if CMakeCache.exists in the source folder. Abort and notify the user to save him from headache why it doesn't work. -if((NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)) AND (EXISTS "${CMAKE_SOURCE_DIR}/CMakeCache.txt")) - message(FATAL_ERROR " You are attempting to do an out-of-source build, but a cmake cache file for an in-source build exists. Please delete the file CMakeCache.txt from the source folder to proceed.") -endif((NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)) AND (EXISTS "${CMAKE_SOURCE_DIR}/CMakeCache.txt")) +# CMake does not allow out-of-source build if CMakeCache.exists +# in the source folder. Abort and notify the user +if( + (NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)) + AND (EXISTS "${CMAKE_SOURCE_DIR}/CMakeCache.txt")) + message(FATAL_ERROR " You are attempting to do an out-of-source build, + but a cmake cache file for an in-source build exists. Please delete + the file CMakeCache.txt from the source folder to proceed.") +endif( + (NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)) + AND (EXISTS "${CMAKE_SOURCE_DIR}/CMakeCache.txt")) -# Default build type. To change the build type, use the CMAKE_BUILD_TYPE configuration option. +# Default build type. To change the build type, +# use the CMAKE_BUILD_TYPE configuration option. if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type: Release or Debug" FORCE) + set(CMAKE_BUILD_TYPE + Release CACHE STRING "Build type: Release or Debug" FORCE) endif(NOT CMAKE_BUILD_TYPE) # Can assist in troubleshooting #set(CMAKE_VERBOSE_MAKEFILE ON) #set(CMAKE_INSTALL_ALWAYS ON) +# Host OS Check +set(HOST_OS "") +if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + set(HOST_OS "linux") +endif(${CMAKE_SYSTEM_NAME} STREQUAL "Linux") +if(${CMAKE_SYSTEM_NAME} MATCHES ".*(SunOS|Solaris).*") + set(HOST_OS "solaris") + set(SOLARIS 1) +endif(${CMAKE_SYSTEM_NAME} MATCHES ".*(SunOS|Solaris).*") +if(${CMAKE_SYSTEM_NAME} MATCHES ".*BSD.*") + set(HOST_OS "BSD") + set(BSD 1) +endif(${CMAKE_SYSTEM_NAME} MATCHES ".*BSD.*") +if(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") + set(HOST_OS "darwin") +endif(${CMAKE_SYSTEM_NAME} STREQUAL "Darwin") +if(NOT HOST_OS) + message(FATAL_ERROR + "ZoneMinder was unable to deterimine the host OS. Please report this. Value of CMAKE_SYSTEM_NAME: ${CMAKE_SYSTEM_NAME}") +endif(NOT HOST_OS) + # Default CLFAGS and CXXFLAGS: set(CMAKE_C_FLAGS_RELEASE "-Wall -D__STDC_CONSTANT_MACROS -O2") set(CMAKE_CXX_FLAGS_RELEASE "-Wall -D__STDC_CONSTANT_MACROS -O2") @@ -42,35 +68,80 @@ include (CheckFunctionExists) include (CheckPrototypeDefinition_fixed) include (CheckTypeSize) include (CheckStructHasMember) +include (CheckSendfile) # Configuration options -mark_as_advanced(FORCE ZM_EXTRA_LIBS ZM_MYSQL_ENGINE ZM_NO_MMAP CMAKE_INSTALL_FULL_BINDIR ZM_PERL_SUBPREFIX ZM_PERL_USE_PATH ZM_TARGET_DISTRO ZM_CONFIG_DIR) -set(ZM_RUNDIR "/var/run/zm" CACHE PATH "Location of transient process files, default: /var/run/zm") -set(ZM_SOCKDIR "/var/run/zm" CACHE PATH "Location of Unix domain socket files, default /var/run/zm") -set(ZM_TMPDIR "/var/tmp/zm" CACHE PATH "Location of temporary files, default: /tmp/zm") -set(ZM_LOGDIR "/var/log/zm" CACHE PATH "Location of generated log files, default: /var/log/zm") -set(ZM_WEBDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/zoneminder/www" CACHE PATH "Location of the web files, default: /${CMAKE_INSTALL_DATADIR}/zoneminder/www") -set(ZM_CGIDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBEXECDIR}/zoneminder/cgi-bin" CACHE PATH "Location of the cgi-bin files, default: /${CMAKE_INSTALL_LIBEXECDIR}/zoneminder/cgi-bin") -set(ZM_CONTENTDIR "/var/lib/zoneminder" CACHE PATH "Location of dynamic content (events and images), default: /var/lib/zoneminder") -set(ZM_DB_HOST "localhost" CACHE STRING "Hostname where ZoneMinder database located, default: localhost") -set(ZM_DB_NAME "zm" CACHE STRING "Name of ZoneMinder database, default: zm") -set(ZM_DB_USER "zmuser" CACHE STRING "Name of ZoneMinder database user, default: zmuser") -set(ZM_DB_PASS "zmpass" CACHE STRING "Password of ZoneMinder database user, default: zmpass") -set(ZM_WEB_USER "" CACHE STRING "The user apache or the local web server runs on. Leave empty for automatic detection. If that fails, you can use this variable to force") -set(ZM_WEB_GROUP "" CACHE STRING "The group apache or the local web server runs on, Leave empty to be the same as the web user") +mark_as_advanced( + FORCE ZM_EXTRA_LIBS + ZM_MYSQL_ENGINE + ZM_NO_MMAP + CMAKE_INSTALL_FULL_BINDIR + ZM_PERL_MM_PARMS + ZM_PERL_SEARCH_PATH + ZM_TARGET_DISTRO + ZM_CONFIG_DIR) + +set(ZM_RUNDIR "/var/run/zm" CACHE PATH + "Location of transient process files, default: /var/run/zm") +set(ZM_SOCKDIR "/var/run/zm" CACHE PATH + "Location of Unix domain socket files, default /var/run/zm") +set(ZM_TMPDIR "/var/tmp/zm" CACHE PATH + "Location of temporary files, default: /tmp/zm") +set(ZM_LOGDIR "/var/log/zm" CACHE PATH + "Location of generated log files, default: /var/log/zm") +set(ZM_WEBDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/zoneminder/www" CACHE PATH + "Location of the web files, default: /${CMAKE_INSTALL_DATADIR}/zoneminder/www") +set(ZM_CGIDIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBEXECDIR}/zoneminder/cgi-bin" CACHE PATH + "Location of the cgi-bin files, default: /${CMAKE_INSTALL_LIBEXECDIR}/zoneminder/cgi-bin") +set(ZM_CONTENTDIR "/var/lib/zoneminder" CACHE PATH + "Location of dynamic content (events and images), default: /var/lib/zoneminder") +set(ZM_DB_HOST "localhost" CACHE STRING + "Hostname where ZoneMinder database located, default: localhost") +set(ZM_DB_NAME "zm" CACHE STRING + "Name of ZoneMinder database, default: zm") +set(ZM_DB_USER "zmuser" CACHE STRING + "Name of ZoneMinder database user, default: zmuser") +set(ZM_DB_PASS "zmpass" CACHE STRING + "Password of ZoneMinder database user, default: zmpass") +set(ZM_WEB_USER "" CACHE STRING + "The user apache or the local web server runs on. Leave empty for automatic detection. + If that fails, you can use this variable to force") +set(ZM_WEB_GROUP "" CACHE STRING + "The group apache or the local web server runs on, + Leave empty to be the same as the web user") # Advanced -set(ZM_CONFIG_DIR "/${CMAKE_INSTALL_SYSCONFDIR}" CACHE PATH "Location of ZoneMinder configuration, default system config directory") -set(ZM_EXTRA_LIBS "" CACHE STRING "A list of optional libraries, separated by semicolons, e.g. ssl;theora") -set(ZM_MYSQL_ENGINE "InnoDB" CACHE STRING "MySQL engine to use with database, default: InnoDB") -set(ZM_NO_MMAP "OFF" CACHE BOOL "Set to ON to not use mmap shared memory. Shouldn't be enabled unless you experience problems with the shared memory. default: OFF") -set(ZM_NO_FFMPEG "OFF" CACHE BOOL "Set to ON to skip ffmpeg checks and force building ZM without ffmpeg. default: OFF") -set(ZM_NO_LIBVLC "OFF" CACHE BOOL "Set to ON to skip libvlc checks and force building ZM without libvlc. default: OFF") -set(ZM_NO_CURL "OFF" CACHE BOOL "Set to ON to skip cURL checks and force building ZM without cURL. default: OFF") -set(ZM_NO_X10 "OFF" CACHE BOOL "Set to ON to build ZoneMinder without X10 support. default: OFF") -set(ZM_ONVIF "OFF" CACHE BOOL "Set to ON to enable basic ONVIF support. This is EXPERIMENTAL and may not work with all cameras claiming to be ONVIF compliant. default: OFF") -set(ZM_PERL_SUBPREFIX "${CMAKE_INSTALL_LIBDIR}/perl5" CACHE PATH "Use a different directory for the zm perl modules. NOTE: This is a subprefix, e.g. lib will be turned into /lib, default: /perl5") -set(ZM_PERL_USE_PATH "${CMAKE_INSTALL_PREFIX}/${ZM_PERL_SUBPREFIX}" CACHE PATH "Override the include path for zm perl modules. Useful if you are moving the perl modules without using the ZM_PERL_SUBPREFIX option. default: /") -set(ZM_TARGET_DISTRO "" CACHE STRING "Build ZoneMinder for a specific distribution. Currently, valid names are: f21, f20, el6, OS13") +set(ZM_CONFIG_DIR "/${CMAKE_INSTALL_SYSCONFDIR}" CACHE PATH + "Location of ZoneMinder configuration, default system config directory") +set(ZM_EXTRA_LIBS "" CACHE STRING + "A list of optional libraries, separated by semicolons, e.g. ssl;theora") +set(ZM_MYSQL_ENGINE "InnoDB" CACHE STRING + "MySQL engine to use with database, default: InnoDB") +set(ZM_NO_MMAP "OFF" CACHE BOOL + "Set to ON to not use mmap shared memory. Shouldn't be enabled unless you + experience problems with the shared memory. default: OFF") +set(ZM_NO_FFMPEG "OFF" CACHE BOOL + "Set to ON to skip ffmpeg checks and force building ZM without ffmpeg. default: OFF") +set(ZM_NO_LIBVLC "OFF" CACHE BOOL +"Set to ON to skip libvlc checks and force building ZM without libvlc. default: OFF") +set(ZM_NO_CURL "OFF" CACHE BOOL + "Set to ON to skip cURL checks and force building ZM without cURL. default: OFF") +set(ZM_NO_X10 "OFF" CACHE BOOL + "Set to ON to build ZoneMinder without X10 support. default: OFF") +set(ZM_ONVIF "OFF" CACHE BOOL + "Set to ON to enable basic ONVIF support. This is EXPERIMENTAL and may not + work with all cameras claiming to be ONVIF compliant. default: OFF") +set(ZM_PERL_MM_PARMS INSTALLDIRS=vendor NO_PACKLIST=1 NO_PERLLOCAL=1 CACHE STRING + "By default, ZoneMinder's Perl modules are installed into the Vendor folders, + as defined by your installation of Perl. You can change that here. Consult Perl's + MakeMaker documentation for a definition of acceptable parameters. If you set this + to something that causes the modules to be installed outside Perl's normal search + path, then you will also need to set ZM_PERL_SEARCH_PATH accordingly.") +set(ZM_PERL_SEARCH_PATH "" CACHE PATH + "Use to add a folder to your Perl's search path. This will need to be set in cases + where ZM_PERL_MM_PARMS has been modified such that ZoneMinder's Perl modules are + installed outside Perl's default search path.") +set(ZM_TARGET_DISTRO "" CACHE STRING + "Build ZoneMinder for a specific distribution. Currently, valid names are: f21, f20, el6, OS13") # Reassign some variables if a target distro has been specified if((ZM_TARGET_DISTRO STREQUAL "f21") OR (ZM_TARGET_DISTRO STREQUAL "f20")) @@ -105,14 +176,19 @@ elseif(ZM_TARGET_DISTRO STREQUAL "OS13") endif((ZM_TARGET_DISTRO STREQUAL "f21") OR (ZM_TARGET_DISTRO STREQUAL "f20")) # Required for certain checks to work -set(CMAKE_EXTRA_INCLUDE_FILES ${CMAKE_EXTRA_INCLUDE_FILES} stdio.h stdlib.h math.h signal.h) +set(CMAKE_EXTRA_INCLUDE_FILES + ${CMAKE_EXTRA_INCLUDE_FILES} stdio.h stdlib.h math.h signal.h + ) # Required for including headers from the this folder include_directories("${CMAKE_BINARY_DIR}") # This is required to enable searching in lib64 (if exists), do not change set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS ON) # System checks -check_include_file("linux/videodev.h" HAVE_LINUX_VIDEODEV_H) +check_include_file("libv4l1-videodev.h" HAVE_LIBV4L1_VIDEODEV_H) +if(NOT HAVE_LIBV4L1_VIDEODEV_H) + check_include_file("linux/videodev.h" HAVE_LINUX_VIDEODEV_H) +endif(NOT HAVE_LIBV4L1_VIDEODEV_H) check_include_file("linux/videodev2.h" HAVE_LINUX_VIDEODEV2_H) check_include_file("execinfo.h" HAVE_EXECINFO_H) check_include_file("ucontext.h" HAVE_UCONTEXT_H) @@ -167,10 +243,12 @@ if(JPEG_FOUND) set(CMAKE_REQUIRED_INCLUDES "${JPEG_INCLUDE_DIR}") check_include_files("stdio.h;jpeglib.h" HAVE_JPEGLIB_H) if(NOT HAVE_JPEGLIB_H) - message(FATAL_ERROR " zm requires libjpeg headers - check that libjpeg development packages are installed") + message(FATAL_ERROR + "ZoneMinder requires libjpeg headers - check that libjpeg development packages are installed") endif(NOT HAVE_JPEGLIB_H) else(JPEG_FOUND) - message(FATAL_ERROR "zm requires jpeg but it was not found on your system") + message(FATAL_ERROR + "ZoneMinder requires jpeg but it was not found on your system") endif(JPEG_FOUND) # OpenSSL @@ -200,10 +278,12 @@ if(PTHREAD_LIBRARIES) mark_as_advanced(FORCE PTHREAD_LIBRARIES PTHREAD_INCLUDE_DIR) check_include_file("pthread.h" HAVE_PTHREAD_H) if(NOT HAVE_PTHREAD_H) - message(FATAL_ERROR " zm requires pthread headers - check that pthread development packages are installed") + message(FATAL_ERROR + "ZoneMinder requires pthread headers - check that pthread development packages are installed") endif(NOT HAVE_PTHREAD_H) else(PTHREAD_LIBRARIES) - message(FATAL_ERROR "zm requires pthread but it was not found on your system") + message(FATAL_ERROR + "ZoneMinder requires pthread but it was not found on your system") endif(PTHREAD_LIBRARIES) # pcre (using find_library and find_path) @@ -275,10 +355,12 @@ if(MYSQLCLIENT_LIBRARIES) mark_as_advanced(FORCE MYSQLCLIENT_LIBRARIES MYSQLCLIENT_INCLUDE_DIR) check_include_file("mysql/mysql.h" HAVE_MYSQL_H) if(NOT HAVE_MYSQL_H) - message(FATAL_ERROR "zm requires MySQL headers - check that MySQL development packages are installed") + message(FATAL_ERROR + "ZoneMinder requires MySQL headers - check that MySQL development packages are installed") endif(NOT HAVE_MYSQL_H) else(MYSQLCLIENT_LIBRARIES) - message(FATAL_ERROR "zm requires mysqlclient but it was not found on your system") + message(FATAL_ERROR + "ZoneMinder requires mysqlclient but it was not found on your system") endif(MYSQLCLIENT_LIBRARIES) set(PATH_FFMPEG "") @@ -290,7 +372,7 @@ if(NOT ZM_NO_FFMPEG) if(AVFORMAT_LIBRARIES) set(HAVE_LIBAVFORMAT 1) list(APPEND ZM_BIN_LIBS "${AVFORMAT_LIBRARIES}") - find_path(AVFORMAT_INCLUDE_DIR "libavformat/avformat.h") + find_path(AVFORMAT_INCLUDE_DIR "libavformat/avformat.h" /usr/include/ffmpeg) if(AVFORMAT_INCLUDE_DIR) include_directories("${AVFORMAT_INCLUDE_DIR}") set(CMAKE_REQUIRED_INCLUDES "${AVFORMAT_INCLUDE_DIR}") @@ -307,7 +389,7 @@ if(NOT ZM_NO_FFMPEG) if(AVCODEC_LIBRARIES) set(HAVE_LIBAVCODEC 1) list(APPEND ZM_BIN_LIBS "${AVCODEC_LIBRARIES}") - find_path(AVCODEC_INCLUDE_DIR "libavcodec/avcodec.h") + find_path(AVCODEC_INCLUDE_DIR "libavcodec/avcodec.h" /usr/include/ffmpeg) if(AVCODEC_INCLUDE_DIR) include_directories("${AVCODEC_INCLUDE_DIR}") set(CMAKE_REQUIRED_INCLUDES "${AVCODEC_INCLUDE_DIR}") @@ -324,7 +406,7 @@ if(NOT ZM_NO_FFMPEG) if(AVDEVICE_LIBRARIES) set(HAVE_LIBAVDEVICE 1) list(APPEND ZM_BIN_LIBS "${AVDEVICE_LIBRARIES}") - find_path(AVDEVICE_INCLUDE_DIR "libavdevice/avdevice.h") + find_path(AVDEVICE_INCLUDE_DIR "libavdevice/avdevice.h" /usr/include/ffmpeg) if(AVDEVICE_INCLUDE_DIR) include_directories("${AVDEVICE_INCLUDE_DIR}") set(CMAKE_REQUIRED_INCLUDES "${AVDEVICE_INCLUDE_DIR}") @@ -341,7 +423,7 @@ if(NOT ZM_NO_FFMPEG) if(AVUTIL_LIBRARIES) set(HAVE_LIBAVUTIL 1) list(APPEND ZM_BIN_LIBS "${AVUTIL_LIBRARIES}") - find_path(AVUTIL_INCLUDE_DIR "libavutil/avutil.h") + find_path(AVUTIL_INCLUDE_DIR "libavutil/avutil.h" /usr/include/ffmpeg) if(AVUTIL_INCLUDE_DIR) include_directories("${AVUTIL_INCLUDE_DIR}") set(CMAKE_REQUIRED_INCLUDES "${AVUTIL_INCLUDE_DIR}") @@ -359,7 +441,7 @@ if(NOT ZM_NO_FFMPEG) if(SWSCALE_LIBRARIES) set(HAVE_LIBSWSCALE 1) list(APPEND ZM_BIN_LIBS "${SWSCALE_LIBRARIES}") - find_path(SWSCALE_INCLUDE_DIR "libswscale/swscale.h") + find_path(SWSCALE_INCLUDE_DIR "libswscale/swscale.h" /usr/include/ffmpeg) if(SWSCALE_INCLUDE_DIR) include_directories("${SWSCALE_INCLUDE_DIR}") set(CMAKE_REQUIRED_INCLUDES "${SWSCALE_INCLUDE_DIR}") @@ -372,7 +454,9 @@ if(NOT ZM_NO_FFMPEG) endif(SWSCALE_LIBRARIES) # Find the path to the ffmpeg executable - find_program(FFMPEG_EXECUTABLE ffmpeg PATH_SUFFIXES ffmpeg) + find_program(FFMPEG_EXECUTABLE + NAMES ffmpeg avconv + PATH_SUFFIXES ffmpeg) if(FFMPEG_EXECUTABLE) set(PATH_FFMPEG "${FFMPEG_EXECUTABLE}") set(OPT_FFMPEG "yes") @@ -405,7 +489,8 @@ endif(NOT ZM_NO_LIBVLC) # Check for gnutls or crypto if((NOT HAVE_LIBCRYPTO) AND (NOT HAVE_LIBGNUTLS)) - message(FATAL_ERROR " zm requires crypto or gnutls but none were found on your system") + message(FATAL_ERROR + "ZoneMinder requires crypto or gnutls but none were found on your system") endif((NOT HAVE_LIBCRYPTO) AND (NOT HAVE_LIBGNUTLS)) # Check for V4L header files and enable ZM_HAS_V4L, ZM_HAS_V4L1, ZM_HAS_V4L2 accordingly @@ -413,17 +498,22 @@ endif((NOT HAVE_LIBCRYPTO) AND (NOT HAVE_LIBGNUTLS)) set(ZM_HAS_V4L 0) set(ZM_HAS_V4L1 0) set(ZM_HAS_V4L2 0) -if(HAVE_LINUX_VIDEODEV_H) +if(HAVE_LINUX_VIDEODEV_H OR HAVE_LIBV4L1_VIDEODEV_H) set(ZM_HAS_V4L 1) set(ZM_HAS_V4L1 1) -endif(HAVE_LINUX_VIDEODEV_H) +endif(HAVE_LINUX_VIDEODEV_H OR HAVE_LIBV4L1_VIDEODEV_H) if(HAVE_LINUX_VIDEODEV2_H) set(ZM_HAS_V4L 1) set(ZM_HAS_V4L2 1) endif(HAVE_LINUX_VIDEODEV2_H) -if((NOT HAVE_LINUX_VIDEODEV_H) AND (NOT HAVE_LINUX_VIDEODEV2_H)) - message(AUTHOR_WARNING " Video 4 Linux headers weren't found - Analog and USB camera support will not be available") -endif((NOT HAVE_LINUX_VIDEODEV_H) AND (NOT HAVE_LINUX_VIDEODEV2_H)) +if((NOT HAVE_LINUX_VIDEODEV_H) + AND (NOT HAVE_LIBV4L1_VIDEODEV_H) + AND (NOT HAVE_LINUX_VIDEODEV2_H)) + message(AUTHOR_WARNING + "Video 4 Linux headers weren't found - Analog and USB camera support will not be available") +endif((NOT HAVE_LINUX_VIDEODEV_H) + AND (NOT HAVE_LIBV4L1_VIDEODEV_H) + AND (NOT HAVE_LINUX_VIDEODEV2_H)) # Check for PCRE and enable ZM_PCRE accordingly set(ZM_PCRE 0) if(HAVE_LIBPCRE AND HAVE_PCRE_H) @@ -444,26 +534,37 @@ if(ZM_ONVIF) set(ZM_HAS_ONVIF 1) endif(ZM_ONVIF) -# Check for authenication functions +# Check for authentication functions if(HAVE_OPENSSL_MD5_H) set(CMAKE_REQUIRED_LIBRARIES "${OPENSSL_LIBRARIES}") set(CMAKE_REQUIRED_INCLUDES "${OPENSSL_INCLUDE_DIR}") - check_prototype_definition(MD5 "unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md)" "NULL" "openssl/md5.h" HAVE_MD5_OPENSSL) + check_prototype_definition( + MD5 + "unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md)" "NULL" "openssl/md5.h" + HAVE_MD5_OPENSSL) endif(HAVE_OPENSSL_MD5_H) if(HAVE_GNUTLS_OPENSSL_H) set(CMAKE_REQUIRED_LIBRARIES "${GNUTLS_LIBRARIES}") set(CMAKE_REQUIRED_INCLUDES "${GNUTLS_INCLUDE_DIR}") - check_prototype_definition(MD5 "unsigned char *MD5 (const unsigned char *buf, unsigned long len, unsigned char *md)" "NULL" "gnutls/openssl.h" HAVE_MD5_GNUTLS) + check_prototype_definition( + MD5 + "unsigned char *MD5 (const unsigned char *buf, unsigned long len, unsigned char *md)" "NULL" "gnutls/openssl.h" + HAVE_MD5_GNUTLS) endif(HAVE_GNUTLS_OPENSSL_H) if(HAVE_GNUTLS_GNUTLS_H) set(CMAKE_REQUIRED_LIBRARIES "${GNUTLS_LIBRARIES}") set(CMAKE_REQUIRED_INCLUDES "${GNUTLS_INCLUDE_DIR}") - check_prototype_definition(gnutls_fingerprint "int gnutls_fingerprint (gnutls_digest_algorithm_t algo, const gnutls_datum_t * data, void *result, size_t * result_size)" "0" "stdlib.h;gnutls/gnutls.h" HAVE_DECL_GNUTLS_FINGERPRINT) + check_prototype_definition( + gnutls_fingerprint + "int gnutls_fingerprint (gnutls_digest_algorithm_t algo, const gnutls_datum_t * data, void *result, size_t * result_size)" "0" "stdlib.h;gnutls/gnutls.h" + HAVE_DECL_GNUTLS_FINGERPRINT) endif(HAVE_GNUTLS_GNUTLS_H) if(HAVE_MD5_OPENSSL OR HAVE_MD5_GNUTLS) set(HAVE_DECL_MD5 1) else(HAVE_MD5_OPENSSL OR HAVE_MD5_GNUTLS) - message(AUTHOR_WARNING " ZM requires a working MD5 function for hashed authenication but none were found - hashed authenication will not be available") + message(AUTHOR_WARNING + "ZoneMinder requires a working MD5 function for hashed authenication but + none were found - hashed authenication will not be available") endif(HAVE_MD5_OPENSSL OR HAVE_MD5_GNUTLS) # Dirty fix for zm_user only using openssl's md5 if gnutls and gcrypt are not available. # This needs to be fixed in zm_user.[h,cpp] but such fix will also require changes to configure.ac @@ -475,26 +576,40 @@ endif(HAVE_LIBCRYPTO AND HAVE_OPENSSL_MD5_H AND HAVE_MD5_OPENSSL) # Check for Perl find_package(Perl) if(NOT PERL_FOUND) - message(FATAL_ERROR "zm requires Perl 5.6.0 or newer but it was not found on your system") + message(FATAL_ERROR + "ZoneMinder requires Perl 5.6.0 or newer but it was not found on your system") endif(NOT PERL_FOUND) # Checking for perl modules requires FindPerlModules.cmake # Check all required modules at once # TODO: Add checking for the optional modules -find_package(PerlModules COMPONENTS Sys::Syslog DBI DBD::mysql Getopt::Long Time::HiRes Date::Manip LWP::UserAgent ExtUtils::MakeMaker ${ZM_MMAP_PERLPACKAGE}) +find_package( + PerlModules COMPONENTS Sys::Syslog DBI DBD::mysql + Getopt::Long Time::HiRes Date::Manip LWP::UserAgent + ExtUtils::MakeMaker ${ZM_MMAP_PERLPACKAGE}) if(NOT PERLMODULES_FOUND) - message(FATAL_ERROR "Not all required perl modules were found on your system") + message(FATAL_ERROR + "Not all required perl modules were found on your system") endif(NOT PERLMODULES_FOUND) -# Attempt to check which user apache (or other web server) runs on by searching for a user beginning with apache or www and then cutting the user from the first matching user line +# Attempt to check which user apache (or other web server) runs on by +# searching for a user beginning with apache or www and then cutting the user +# from the first matching user line if(ZM_WEB_USER STREQUAL "") - # Check for a user matching ^apache and cut the username from the userline in the first match + # Check for a user matching ^apache and cut the username from the + # userline in the first match file(STRINGS "/etc/passwd" userline_apache REGEX "^apache") file(STRINGS "/etc/passwd" userline_www REGEX "^www") if(NOT (userline_apache STREQUAL "")) - execute_process(COMMAND echo ${userline_apache} COMMAND cut -d: -f1 OUTPUT_VARIABLE ZM_WEB_USER OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( + COMMAND echo ${userline_apache} + COMMAND cut -d: -f1 OUTPUT_VARIABLE ZM_WEB_USER + OUTPUT_STRIP_TRAILING_WHITESPACE) elseif(NOT (userline_www STREQUAL "")) - execute_process(COMMAND echo ${userline_www} COMMAND cut -d: -f1 OUTPUT_VARIABLE ZM_WEB_USER OUTPUT_STRIP_TRAILING_WHITESPACE) + execute_process( + COMMAND echo ${userline_www} + COMMAND cut -d: -f1 OUTPUT_VARIABLE ZM_WEB_USER + OUTPUT_STRIP_TRAILING_WHITESPACE) endif(NOT (userline_apache STREQUAL "")) message(STATUS "Detected web server user: ${ZM_WEB_USER}") endif(ZM_WEB_USER STREQUAL "") @@ -508,13 +623,15 @@ message(STATUS "Using web group: ${ZM_WEB_GROUP}") # Check for polkit find_package(Polkit) if(NOT POLKIT_FOUND) - message(FATAL_ERROR "Running ZoneMinder requires polkit. Building ZoneMinder requires the polkit development package.") + message(FATAL_ERROR + "Running ZoneMinder requires polkit. Building ZoneMinder requires the polkit development package.") endif(NOT POLKIT_FOUND) # Some variables that zm expects set(ZM_PID "${ZM_RUNDIR}/zm.pid") set(ZM_CONFIG "${ZM_CONFIG_DIR}/zm.conf") set(VERSION "${zoneminder_VERSION}") +set(API_VERSION "${zoneminder_API_VERSION}") set(PKGDATADIR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/zoneminder") set(BINDIR "${CMAKE_INSTALL_FULL_BINDIR}") set(LIBDIR "${CMAKE_INSTALL_FULL_LIBDIR}") @@ -524,7 +641,11 @@ set(CGI_PREFIX "${ZM_CGIDIR}") set(WEB_USER "${ZM_WEB_USER}") set(WEB_GROUP "${ZM_WEB_GROUP}") set(ZM_DB_TYPE "mysql") -set(EXTRA_PERL_LIB "use lib '${ZM_PERL_USE_PATH}';") +if(ZM_PERL_SEARCH_PATH) + set(EXTRA_PERL_LIB "use lib '${ZM_PERL_SEARCH_PATH}'; # Include custom perl install path") +else(ZM_PERL_SEARCH_PATH) + set(EXTRA_PERL_LIB "# Include from system perl paths only") +endif(ZM_PERL_SEARCH_PATH) # Generate files from the .in files configure_file(zm.conf.in "${CMAKE_CURRENT_BINARY_DIR}/zm.conf" @ONLY) @@ -540,9 +661,9 @@ add_subdirectory(web) add_subdirectory(misc) # Enable ONVIF support -if (ZM_ONVIF) +if(ZM_ONVIF) add_subdirectory(onvif) -endif (ZM_ONVIF) +endif(ZM_ONVIF) # Process distro subdirectories if((ZM_TARGET_DISTRO STREQUAL "f21") OR (ZM_TARGET_DISTRO STREQUAL "f20")) @@ -561,9 +682,11 @@ message(STATUS "Optional libraries not found:${optlibsnotfound}") message(STATUS "Running ZoneMinder configuration generator") execute_process(COMMAND perl ./zmconfgen.pl RESULT_VARIABLE zmconfgen_result) if(zmconfgen_result EQUAL 0) - message(STATUS "ZoneMinder configuration generator completed successfully") + message(STATUS + "ZoneMinder configuration generator completed successfully") else(zmconfgen_result EQUAL 0) - message(FATAL_ERROR "ZoneMinder configuration generator failed. Exit code: ${zmconfgen_result}") + message(FATAL_ERROR + "ZoneMinder configuration generator failed. Exit code: ${zmconfgen_result}") endif(zmconfgen_result EQUAL 0) # Install zm.conf diff --git a/INSTALL b/INSTALL index 3a5b3630e..8f892e840 100644 --- a/INSTALL +++ b/INSTALL @@ -53,8 +53,8 @@ Advanced: ZM_NO_MMAP Set to ON to not use mmap shared memory. Shouldn't be enabled unless you experience problems with the shared memory. default: OFF ZM_NO_FFMPEG Set to ON to skip ffmpeg checks and force building ZM without ffmpeg. default: OFF ZM_NO_X10 Set to ON to build ZoneMinder without X10 support. default: OFF - ZM_PERL_SUBPREFIX Use a different directory for the zm perl modules. NOTE: This is a subprefix, e.g. /lib will be turned into /lib, default: /perl5 - ZM_PERL_USE_PATH Override the include path for zm perl modules. Useful if you are moving the perl modules without using the ZM_PERL_SUBPREFIX option. default: / + ZM_PERL_MM_PARMS By default, ZoneMinder's Perl modules are installed into the Vendor folders, as defined by your installation of Perl. You can change that here. Consult Perl's MakeMaker documentation for a definition of acceptable parameters. If you set this to something that causes the modules to be installed outside Perl's normal serach path, then you will also need to set ZM_PERL_SEARCH_PATH accordingly. default: "INSTALLDIRS=vendor NO_PACKLIST=1 NO_PERLLOCAL=1" + ZM_PERL_SEARCH_PATH Use to add a folder to your Perl's search path. This will need to be set in cases where ZM_PERL_MM_PARMS has been modified such that ZoneMinder's Perl modules are installed outside Perl's default search path. default: "" Useful configuration options provided by cmake: CMAKE_VERBOSE_MAKEFILE - Set this to ON (default OFF) to see what cmake is doing. Very useful for troubleshooting. @@ -82,6 +82,7 @@ Basic steps for installing ZoneMinder on a fresh system ------------------------------------------------------- 1) After installing all the required dependencies, in the project directory, run "cmake [extra options] ." This behaves like ./configure. It is also possible to supply configuration options, e.g. cmake -DZM_DB_PASS="mypass" . +IMPORTANT: Don't forget the dot "." at the end. 2) Run "make" to compile ZoneMinder 3) Run "make install" (as root, or use sudo) to install ZoneMinder to your system. 4) Create a directory for the content and the necessary symlinks by running zmlinkcontent.sh with the directory you want to use. e.g. ./zmlinkcontent.sh /nfs/zm @@ -92,9 +93,19 @@ NOTE: The database server, database name, user and password can be different and 8) Create an apache virtual host for ZoneMinder. Make sure to use the same paths as ZM_WEBDIR and ZM_CGIDIR in /etc/zm.conf 9) Create other config if desired (e.g. rsyslog, logrotate and such). Some of this can be found in /share/zoneminder/misc or project/misc directory -10) Setup an appropriate startup script for your system. A generic sys v init script is here: /scripts/zm while a generic systemd service file is here: /misc/zoneminder.service -You must determine which file to use, verify it is correct, and then copy it to the correct location. Consult your distro's documentation. Note that distros using systemd also -require /misc/zoneminder-tmpfiles.conf to be copied into the system's tmpfiles.d folder. +10) Setup an appropriate startup script for your system. Two generic startup scripts have been provided, a legacy Sys V Init script and a Systemd service file. + +*Sys V Init Setup* +- Copy the sys v init script /scripts/zm from the build folder to /etc/init. +- Inspect the contents to make sure they apply to your distro. + +*SystemD Setup* +- Copy the zoneminder systemd service file /misc/zoneminder.service from the build folder to the systemd service file location. + For Redhat based distros, that folder is /usr/lib/systemd/system. +- Inspect the contents to make sure they apply to your distro. +- Tell systemd to load the new service file: "sudo systemctl daemon-reload". +- Copy /misc/zoneminder-tmpfiles.conf to /etc/tmpfiles.d +- Tell systemd to process this file: "sudo /usr/bin/systemd-tmpfiles --create /etc/tmpfiles.d/zoneminder.conf". Basic steps for upgrading ZoneMinder ------------------------------------ diff --git a/Makefile.am b/Makefile.am index f6d46bc3d..62f767e75 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,5 @@ AUTOMAKE_OPTIONS = foreign +ACLOCAL_AMFLAGS = -I m4 # And these to the user and group of your webserver webuser = @WEB_USER@ diff --git a/README.md b/README.md index e43da4ccc..052a0467c 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,46 @@ All documentation for ZoneMinder is now online at http://www.zoneminder.com/wiki ZoneMinder is an integrated set of applications which provide a complete surveillance solution allowing capture, analysis, recording and monitoring of any CCTV or security cameras attached to a Linux based machine. It is designed to run on distributions which support the Video For Linux (V4L) interface and has been tested with video cameras attached to BTTV cards, various USB cameras and also supports most IP network cameras. -## Requirements +## Installation Methods -If you are installing ZoneMinder from a package, that package should provide all of the needed core components. +### Building from Source is Discouraged -### Packages +Historically, installing ZoneMinder onto your system required building from source code by issuing the traditional configure, make, make install commands. To get ZoneMinder to build, all of its dependencies had to be determined and installed beforehand. Init and logrotate scripts had to be manually copied into place following the build. Optional packages such as jscalendar and Cambozola had to be manually installed. Uninstalls could leave stale files around, which could cause problems during an upgrade. Speaking of upgrades, when it comes time to upgrade all these manual steps must be repeated again. -If you are compiling ZoneMinder from source, the below list contains the packages needed to get ZoneMinder built: +Better methods exist today that do much of this for you. The current development team, along with other volunteers, have taken great strides in providing the resources necessary to avoid building from source. + +### Install from a Package Repository + +This is the recommended method to install ZoneMinder onto your system. ZoneMinder packages are maintained for the following distros: + +- Ubuntu via [Iconnor's PPA](https://launchpad.net/~iconnor/+archive/ubuntu/zoneminder) +- Debian from their [default repository](https://packages.debian.org/search?searchon=names&keywords=zoneminder) +- RHEL/CentOS and clones via [zmrepo](http://zmrepo.zoneminder.com/) +- Fedora via [zmrepo](http://zmrepo.zoneminder.com/) +- OpenSuse via [third party repository](http://www.zoneminder.com/wiki/index.php/Installing_using_ZoneMinder_RPMs_for_SuSE) +- Maegia from their default repository + +If a repository that hosts ZoneMinder packages is not available for your distro, then you are encouraged to build your own package, rather than build from source. While each distro is different in ways that set it apart from all the others, they are often similar enough to allow you to adapt another distro's package building instructions to your own. + +### Building a ZoneMinder Package + +Building ZoneMinder into a package is not any harder than building from source. As a matter of fact, if you have successfully built ZoneMinder from source in the past, then you may find these steps to be easier. + +When building a package, it is best to do this work in a separate environment, dedicated to development purposes. This could be as simple as creating a virtual machine, using Docker, or using mock. All it takes is one “Oops” to regret doing this work on your production server. + +Lastly, if you desire to build a development snapshot from the master branch, it is recommended you first build your package using an official release of ZoneMinder. This will help identify whether any problems you may encounter are caused by the build process or is a new issue in the master branch. + +What follows are instructions for various distros to build ZoneMinder into a package. + +### Package Maintainters +Many of the ZoneMinder configration variable default values are not configurable at build time through autotools or cmake. A new tool called *zmeditconfigdata.sh* has been added to allow package maintainers to manipulate any variable stored in ConfigData.pm without patching the source. + +For example, let's say I have created a new ZoneMinder package that contains the cambolzola javascript file. However, by default cambozola support is turned off. To fix that, add this to the pacakging script: +```bash +./utils/zmeditconfigdata.sh ZM_OPT_CAMBOZOLA yes +``` + +Note that zmeditconfigdata.sh is intended to be called, from the root build folder, prior to running cmake or configure. #### Ubuntu @@ -101,42 +134,118 @@ root@host:~# aptitude install -y gdebi; root@host:~# gdebi /root/zoneminder_1.26.4-1_amd64.deb; ``` -#### CentOS / RHEL +#### Fedora / CentOS / RHEL -Additional repositories must be added before one can build zoneminder on CentOS or RHEL: +***DRAFT* ** Needs Testing -1. Zmrepo [ZoneMinder WiKi](http://www.zoneminder.com/wiki/index.php/CentOS#Zmrepo_-_A_ZoneMinder_repository_for_RPM_based_distros) -2. EPEL https://fedoraproject.org/wiki/EPEL -3. RPMFusion: http://rpmfusion.org/ +##### Background +The following method documents how to build ZoneMinder into an RPM package, compatible with Fedora, Redhat, CentOS, and other compatible clones. This is exactly how the RPMS in zmrepo are built. -When adding third party repositories, it is highly recommended that the user also install and configure yum priorities as documented in the [CentOS WiKi](http://wiki.centos.org/PackageManagement/Yum/Priorities) +The method documented below was chosen because: +- All of ZoneMinder's dependencies are downloaded and installed automatically +- Cross platform capable. The build host does not have to be the same distro or release version as the target. +- Once your build environment is set up, few steps are required to run the build again in the future. +- Troubleshooting becomes easier if we are all building ZoneMinder the same way. -Prioritize the repositories: +The build instructions below make use of a custom script called "buildzm.sh". Advanced users are encouraged to view the contents of this script. Notice that the script doesn't really do a whole lot. The goal of the script is to simply make the process a little easier for the first time user. Once you become familar with the build process, you can issue the mock commands found in the buildzm.sh script yourself if you so desire. -1. Base -2. EPEL -3. RPMFusion -4. Zmrepo +***IMPORTANT*** +Certain commands in these instructions require root privileges while other commands do not. Pay close attention to this. If the instructions below state to issue a command without a “sudo” prefix, then you should *not* be root while issuing the command. Getting this incorrect will result in a failed build. -Once your repos are in order, install the following: -```bash -sudo yum install cmake bzip2-devel ffmpeg ffmpeg-devel gnutls-devel httpd libjpeg-turbo libjpeg-turbo-devel mysql-devel mysql-server pcre-devel \ -perl-Archive-Tar perl-Archive-Zip perl-Convert-BinHex perl-Date-Manip perl-DBD-MySQL perl-DBI perl-Device-SerialPort perl-Email-Date-Format perl-IO-stringy \ -perl-IO-Zlib perl-MailTools perl-MIME-Lite perl-MIME-tools perl-MIME-Types perl-Module-Load perl-Package-Constants perl-Sys-Mmap perl-Time-HiRes \ -perl-TimeDate perl-YAML-Syck perl-X10 perl-URI-Encode php php-cli php-mysql x264 vlc-devel vlc-core \ -libcurl libcurl-devel polkit-devel git +##### Set Up Your Environment +Before you begin, set up an rpmbuild environment by following [this guide](http://wiki.centos.org/HowTos/SetupRpmBuildEnvironment) by the CentOS developers. + +Next, navigate to [Zmrepo](http://zmrepo.zoneminder.com/), and follow the instructions to enable zmrepo on your system. + +With zmrepo enabled, issue the following command: +````bash +sudo yum install zmrepo-mock-configs mock ``` -To build from the master branch: +Add your user account to the group mock: ```bash -git clone https://github.com/ZoneMinder/ZoneMinder.git -cd ZoneMinder -cmake . -make -sudo make install +sudo gpasswd -a {your account name} mock ``` -IMPORTANT: Don't forget the trailing "." when calling cmake +Your build environment is now set up. + +##### Build from SRPM +To continue, you need a ZoneMinder SRPM. For starters, let's use one of the SRPMS from zmrepo. Go browse the [Zmrepo](http://zmrepo.zoneminder.com/) site and choose an appropriate SRPM and place it into the ~/rpmbuild/SRPMS folder. + +For CentOS 7, I have chosen the following SRPM: +```bash +wget -P ~/rpmbuild/SRPMS http://zmrepo.zoneminder.com/el/7/SRPMS/zoneminder-1.28.1-2.el7.centos.src.rpm +``` + +Now comes the fun part. To build ZoneMinder, issue the following command: +```bash +buildzm.sh zmrepo-el7-x86_64 ~/rpmbuild/SRPMS/zoneminder-1.28.1-2.el7.centos.src.rpm +``` + +Want to build ZoneMinder for Fedora, instead of CentOS, from the same host? Once you download the Fedora SRPM, issue the following: +```bash +buildzm.sh zmrepo-f21-x86_64 ~/rpmbuild/SRPMS/zoneminder-1.28.1-1.fc21.src.rpm +``` +Notice that the buildzm.sh tool requires the following parameters: +```bash +buildzm.sh MOCKCONFIG ZONEMINDER_SRPM +``` +The list of available Mock config files are available here: +```bash +ls /etc/mock/zmrepo*.cfg +``` + +You choose the config file based on the desired distro (e.g. el6, el7, f20, f21) and basearch (e.g. x86, x86_64, arhmhfp). Notice that, when specifying the Mock config as a commandline parameter, you should leave off the ".cfg" filename extension. + +##### Installation +Once the build completes, you will be presented with a folder containing the RPM's that were built. Copy the newly built ZoneMinder RPM to the desired system, enable zmrepo per the instruction on the [Zmrepo](http://zmrepo.zoneminder.com/) website, and then install the rpm by issuing the appropriate yum install command. Finish the installation by following the zoneminder setup instructions in the distro specific readme file, named README.{distroname}, which will be installed into the /usr/share/doc/zoneminder* folder. + +Finally, you may want to consider editing the zmrepo repo file under /etc/yum.repos.d and placing an “exclude=zoneminder*” line into the config file. This will prevent your system from overwriting your manually built RPM with the ZoneMinder RPM found in the repo. + +##### How to Modify the Source Prior to Build +** UNFINISHED ** + +Before attempting this part of the instructions, make sure and follow the previous instructions for building one of the unmodified SRPMS from zmrepo. Knowing this part works will assist in troubleshooting should something go wrong. + +These instructions may vary depending on what exactly you want to do. The following example assumes you want to build a development snapshot from the master branch. + +From the previous instructions, we downloaded a CentOS 7 ZoneMinder SRPM and placed it into ~/rpmbuild/SRPMS. For this example, install it onto your system: +```bash +rpm -Uvh ~/rpmbuild/SRPMS/zoneminder-1.28.1-2.el7.centos.src.rpm +``` + +IMPORTANT: This operation must be done with your normal user account. Do *not* perform this command as root. + +Make sure you have git installed: +```bash +sudo yum install git +``` + +Now clone the ZoneMinder git repository: +```bash +git clone https://github.com/ZoneMinder/ZoneMinder +``` +This will create a sub-folder called ZoneMinder, which will contain the latest developement. + +We want to turn this into a tarball, but first we need to figure out what to name it. Look here: +```bash +ls ~/rpmbuild/SOURCES +``` +The tarball from the previsouly installed SRPM should be there. This is the name we will use. For this example, the name is ZoneMinder-1.28.1.tar.gz. From one folder above the local ZoneMinder git repository, execute the following: +```bash +mv ZoneMinder ZoneMinder-1.28.1 +tar -cvzf ~/rpmbuild/SOURCES/ZoneMinder-1.28.1.tar.gz ZoneMinder-1.28.1/* +``` +The trailing "/*" leaves off the hidden dot "." file and folders from the git repo, which is what we want. +Note that we are overwriting the original tarball. If you wish to keep the original tarball then create a copy prior to creating the new tarball. + +Now build a new src.rpm: +```bash +rpmbuild -bs --nodeps ~/rpmbuild/SPECS/zoneminder.el7.spec +``` +This step will overwrite the SRPM you originally downloaded, so you may want to back it up prior to completing this step. Note that the name of the specfile will vary slightly depending on what distro you are building for. + +You should now have a a new SRPM under ~/rpmbuild/SRPMS. In our example, the SRPM is called zoneminder-1.28.1-2.el7.centos.src.rpm. Now follow the previous instructions that describe how to use the buildzm script, using ~/rpmbuild/SRPMS/zoneminder-1.28.1-2.el7.centos.src.rpm as the path to your SRPM. #### Docker @@ -144,11 +253,6 @@ Docker is a system to run applications inside isolated containers. ZoneMinder, a Dockerfile contained in this repository. However, there is still work needed to ensure that the main ZM features work properly and are documented. -### ffmpeg - -This release of ZoneMinder has been tested on and works with ffmpeg version N-55540-g93f4277. - - ## Contribution Model and Development * Source hosted at [GitHub](https://github.com/ZoneMinder/ZoneMinder/) @@ -169,14 +273,4 @@ the following steps. 6. Create new Pull Request 7. The team will then review, discuss and hopefully merge your changes. -### Package Maintainters -Many of the ZoneMinder configration variable default values are not configurable at build time through autotools or cmake. A new tool called *zmeditconfigdata.sh* has been added to allow package maintainers to manipulate any variable stored in ConfigData.pm without patching the source. - -For example, let's say I have created a new ZoneMinder package that contains the cambolzola javascript file. However, by default cambozola support is turned off. To fix that, add this to the pacakging script: -```bash -./utils/zmeditconfigdata.sh ZM_OPT_CAMBOZOLA yes -``` - -Note that zmeditconfigdata.sh is intended to be called, from the root build folder, prior to running cmake or configure. - [![Analytics](https://ga-beacon.appspot.com/UA-15147273-6/ZoneMinder/README.md)](https://github.com/igrigorik/ga-beacon) diff --git a/bootstrap.sh b/bootstrap.sh index 681d5b319..0bc041f18 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -1,5 +1,5 @@ #!/bin/bash -aclocal +aclocal -I m4 autoheader automake --add-missing autoconf diff --git a/cmake/Modules/CheckSendfile.cmake b/cmake/Modules/CheckSendfile.cmake new file mode 100644 index 000000000..1796b92e3 --- /dev/null +++ b/cmake/Modules/CheckSendfile.cmake @@ -0,0 +1,58 @@ +# Check whether sendfile() is supported and what prototype it has +include(CheckCSourceCompiles) +if (UNIX OR MINGW) +SET(CMAKE_REQUIRED_DEFINITIONS -Werror-implicit-function-declaration) +endif() +check_c_source_compiles("#include +#include +int main() +{ +sendfile(1, 1, NULL, 0); +return 0; +}" HAVE_SENDFILE4_SUPPORT) +if(HAVE_SENDFILE4_SUPPORT) +add_definitions(-DHAVE_SENDFILE4_SUPPORT=1) +unset(CMAKE_REQUIRED_DEFINITIONS) +message(STATUS "Sendfile support: Linux/Solaris sendfile()") +return() +endif() +find_library(SENDFILE_LIBRARIES NAMES sendfile) +if(SENDFILE_LIBRARIES) +include(CheckLibraryExists) +check_library_exists(sendfile sendfile ${SENDFILE_LIBRARIES} HAVE_SENDFILE4_SUPPORT) +if(HAVE_SENDFILE4_SUPPORT) +add_definitions(-DHAVE_SENDFILE4_SUPPORT=1) +unset(CMAKE_REQUIRED_DEFINITIONS) +message(STATUS "Sendfile support: Solaris sendfile()") +return() +endif() +endif() +set(SENDFILE_LIBRARIES "") +check_c_source_compiles("#include +#include +int main() +{ +sendfile(1, 1, 0, 0, NULL, NULL, 0); +return 0; +}" HAVE_SENDFILE7_SUPPORT) +if(HAVE_SENDFILE7_SUPPORT) +add_definitions(-DHAVE_SENDFILE7_SUPPORT=1) +unset(CMAKE_REQUIRED_DEFINITIONS) +message(STATUS "Sendfile support: FreeBSD sendfile()") +return() +endif() +check_c_source_compiles("#include +#include +#include +int main() +{ +sendfile(1, 1, 0, NULL, NULL, 0); +return 0; +}" HAVE_SENDFILE6_SUPPORT) +if(HAVE_SENDFILE6_SUPPORT) +add_definitions(-DHAVE_SENDFILE6_SUPPORT=1) +unset(CMAKE_REQUIRED_DEFINITIONS) +message(STATUS "Sendfile support: MacOS sendfile()") +return() +endif() + diff --git a/cmake/Modules/FindPolkit.cmake b/cmake/Modules/FindPolkit.cmake index 62b386a90..cd7903176 100644 --- a/cmake/Modules/FindPolkit.cmake +++ b/cmake/Modules/FindPolkit.cmake @@ -19,7 +19,7 @@ # use pkg-config to get the directories and then use these values # in the FIND_PATH() and FIND_LIBRARY() calls find_package(PkgConfig) - pkg_check_modules(PC_POLKIT polkit-gobject-1) + pkg_search_module(PC_POLKIT polkit-gobject-1 polkit) #pkg_check_modules(PC_POLKIT_AGENT polkit-agent-1) set(POLKIT_DEFINITIONS ${PC_POLKIT_CFLAGS_OTHER}) endif (NOT WIN32) @@ -31,8 +31,8 @@ HINTS ${PC_POLKIT_INCLUDE_DIRS} ) find_path( POLKIT_INCLUDE_DIR - NAMES polkit/polkit.h - PATH_SUFFIXES polkit-1 + NAMES polkit/polkit.h libpolkit/libpolkit.h + PATH_SUFFIXES polkit-1 polkit HINTS ${PC_POLKIT_INCLUDE_DIRS} ) #find_path( POLKIT_AGENT_INCLUDE_DIR @@ -43,7 +43,7 @@ #set(POLKIT_INCLUDE_DIRS ${GLIB2_INCLUDE_DIR} ${_POLKIT_INCLUDE_DIR}) #set(POLKIT_AGENT_INCLUDE_DIRS ${GLIB2_INCLUDE_DIR} ${_POLKIT_AGENT_INCLUDE_DIR}) find_library( POLKIT_LIBRARIES - NAMES polkit-gobject-1 + NAMES polkit-gobject-1 polkit HINTS ${PC_POLKIT_LIBDIR} ) #find_library( POLKIT_AGENT_LIBRARY diff --git a/configure.ac b/configure.ac index 0cde4661b..c3d265272 100644 --- a/configure.ac +++ b/configure.ac @@ -1,8 +1,13 @@ +# +# Building ZoneMinder via Autotools will be depreciated soon +# For instructions on building with cmake, please see INSTALL +# AC_PREREQ(2.59) AC_INIT(zm,1.28.1,[http://www.zoneminder.com/forums/ - Please check FAQ first],zoneminder,http://www.zoneminder.com/downloads.html) AM_INIT_AUTOMAKE AC_CONFIG_SRCDIR(src/zm.h) AC_CONFIG_HEADERS(config.h) +AC_CONFIG_MACRO_DIR([m4]) AC_SUBST([AM_CXXFLAGS], [-D__STDC_CONSTANT_MACROS]) @@ -26,6 +31,17 @@ case $host_os in *BSD*) # Do something specific for BSD HOST_OS='BSD' + AC_DEFINE(BSD,1,"This is a BSD system") + ;; + *bsd*) + # Do something specific for BSD + HOST_OS='BSD' + AC_DEFINE(BSD,1,"This is a BSD system") + ;; + *solaris*) + # Do something specific for Solaris + HOST_OS='solaris' + AC_DEFINE(SOLARIS,1,"We are running a Solaroid OS [tested on OmniOS]") ;; *) #Default Case @@ -315,22 +331,20 @@ AC_FUNC_STRTOD AC_FUNC_VPRINTF AC_CHECK_FUNCS([gethostbyname gethostname gettimeofday memmove memset mkdir munmap posix_memalign putenv select sendfile socket sqrt strcasecmp strchr strcspn strerror strncasecmp strrchr strspn strstr strtol strtoull]) AC_CHECK_FUNCS([syscall sleep usleep ioctl ioctlsocket sigaction]) - +# this is required for freebsd to compile. Look for it in m4/ac_check_sendfile.m4 +AC_CHECK_SENDFILE # Other programs AC_CHECK_PROG(OPT_FFMPEG,ffmpeg,yes,no) AC_PATH_PROG(PATH_FFMPEG,ffmpeg) -AC_CHECK_PROG(OPT_NETPBM,pnmscale,yes,no) -AC_PATH_PROG(PATH_NETPBM,pnmscale) -if test "$OPT_NETPBM" == "yes"; then -PATH_NETPBM=`dirname $PATH_NETPBM` -fi # Checks for libraries. AC_CHECK_LIB(rt,clock_gettime,,AC_MSG_ERROR(zm requires librt)) AC_SEARCH_LIBS(mysql_init,[mysqlclient mariadbclient],,AC_MSG_ERROR(zm requires libmysqlclient.a or libmariadbclient.a)) AC_CHECK_LIB(jpeg,jpeg_start_compress,,AC_MSG_ERROR(zm requires libjpeg.a)) AC_CHECK_LIB(pthread,pthread_create,,AC_MSG_ERROR(zm requires libpthread.a)) +if test "$BSD" == "0"; then AC_CHECK_LIB(dl,dlsym,,AC_MSG_ERROR(zm requires libdl.a)) +fi if test "$ZM_SSL_LIB" == "openssl"; then AC_CHECK_HEADERS(openssl/md5.h,,AC_MSG_WARN(zm requires openssl/md5.h header to be installed for openssl),) AC_CHECK_LIB(crypto,MD5,,AC_MSG_WARN([libcrypto.a is required for authenticated streaming - use ZM_SSL_LIB option to select gnutls instead])) @@ -373,14 +387,26 @@ AC_CHECK_HEADERS(execinfo.h,,,) AC_CHECK_HEADERS(ucontext.h,,,) AC_CHECK_HEADERS(sys/syscall.h,,,) AC_CHECK_HEADERS(pthread.h,,,) -AC_CHECK_HEADERS(linux/videodev.h,AC_SUBST(ZM_HAS_V4L1,1),AC_SUBST(ZM_HAS_V4L1,0),) -AC_CHECK_HEADERS(linux/videodev2.h,AC_SUBST(ZM_HAS_V4L2,1),AC_SUBST(ZM_HAS_V4L2,0),) + +# Check for Video for Linux 1 Header Files +ZM_HAS_V4L1=0 +AC_CHECK_HEADERS([libv4l1-videodev.h linux/videodev.h],[ZM_HAS_V4L1=1; break;],,) +AC_SUBST(ZM_HAS_V4L1) + +# Check for Video for Linux 2 Header Files +ZM_HAS_V4L2=0 +AC_CHECK_HEADERS(linux/videodev2.h,ZM_HAS_V4L2=1,,) +AC_SUBST(ZM_HAS_V4L2) + +# Set global Video for Linux flag +ZM_HAS_V4L=0 if test "$ZM_HAS_V4L1" == "1" || test "$ZM_HAS_V4L2" == "1"; then -AC_SUBST(ZM_HAS_V4L,1) +ZM_HAS_V4L=1 else -AC_SUBST(ZM_HAS_V4L,0) AC_MSG_WARN(zm requires Video4Linux or Video4Linux2 to be installed for analog or USB camera support) fi +AC_SUBST(ZM_HAS_V4L) + AC_CHECK_HEADERS(jpeglib.h,,AC_MSG_ERROR(zm requires libjpeg headers to be installed),) AC_CHECK_HEADERS(mysql/mysql.h,,AC_MSG_ERROR(zm requires MySQL headers - check that MySQL development packages are installed),) AC_LANG_PUSH([C]) @@ -470,32 +496,6 @@ fi AC_SUBST(PERL_MM_PARMS) AC_SUBST(EXTRA_PERL_LIB) -# -# Platform specific setup -# -############################# -AC_CANONICAL_HOST -# Check for which host we are on and setup a few things -# specifically based on the host -case $host_os in - darwin* ) - # Do something specific for mac - HOST_OS='darwin' - ;; - linux*) - # Do something specific for linux - HOST_OS='linux' - ;; - *BSD*) - # Do something specific for BSD - HOST_OS='BSD' - ;; - *) - #Default Case - AC_MSG_ERROR([Your platform is not currently supported]) - ;; -esac - AC_CONFIG_FILES([Makefile zm.conf zmconfgen.pl db/Makefile db/zm_create.sql misc/Makefile misc/apache.conf misc/logrotate.conf misc/syslog.conf misc/com.zoneminder.systemctl.policy misc/com.zoneminder.systemctl.rules onvif/Makefile onvif/scripts/Makefile scripts/Makefile scripts/zm scripts/zmaudit.pl scripts/zmcontrol.pl scripts/zmdc.pl scripts/zmfilter.pl scripts/zmpkg.pl scripts/zmtrack.pl scripts/zmcamtool.pl scripts/zmsystemctl.pl scripts/zmtrigger.pl scripts/zmupdate.pl scripts/zmvideo.pl scripts/zmwatch.pl scripts/zmx10.pl scripts/zmdbbackup scripts/zmdbrestore scripts/zmeventdump scripts/zmlogrotate.conf scripts/ZoneMinder/lib/ZoneMinder/Base.pm scripts/ZoneMinder/lib/ZoneMinder/Config.pm scripts/ZoneMinder/lib/ZoneMinder/Memory.pm scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm src/Makefile src/zm_config.h web/Makefile web/ajax/Makefile web/css/Makefile web/graphics/Makefile web/includes/Makefile web/includes/config.php web/js/Makefile web/lang/Makefile web/skins/Makefile web/skins/classic/Makefile web/skins/classic/ajax/Makefile web/skins/classic/css/Makefile web/skins/classic/css/classic/Makefile web/skins/classic/css/classic/views/Makefile web/skins/classic/css/flat/Makefile web/skins/classic/css/flat/views/Makefile web/skins/classic/graphics/Makefile web/skins/classic/includes/Makefile web/skins/classic/js/Makefile web/skins/classic/lang/Makefile web/skins/classic/views/Makefile web/skins/classic/views/js/Makefile web/skins/mobile/Makefile web/skins/mobile/ajax/Makefile web/skins/mobile/css/Makefile web/skins/mobile/graphics/Makefile web/skins/mobile/includes/Makefile web/skins/mobile/lang/Makefile web/skins/mobile/views/Makefile web/skins/mobile/views/css/Makefile web/tools/Makefile web/tools/mootools/Makefile web/views/Makefile web/skins/xml/Makefile web/skins/xml/views/Makefile web/skins/xml/includes/Makefile]) # Create the definitions for compilation and defaults for the database diff --git a/db/zm_create.sql.in b/db/zm_create.sql.in index 8777bca33..803045a5b 100644 --- a/db/zm_create.sql.in +++ b/db/zm_create.sql.in @@ -382,15 +382,29 @@ CREATE TABLE `Monitors` ( -- -- Table structure for table `States` +-- Added IsActive to track custom run states -- DROP TABLE IF EXISTS `States`; CREATE TABLE `States` ( + `Id` int(10) unsigned NOT NULL auto_increment, `Name` varchar(64) NOT NULL default '', `Definition` text NOT NULL, - PRIMARY KEY (`Name`) + `IsActive` tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (`Id`) ) ENGINE=@ZM_MYSQL_ENGINE@; +-- +-- Table structure for table `Servers` +-- + +DROP TABLE IF EXISTS `Servers`; +CREATE TABLE `Servers` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` varchar(64) NOT NULL default '', + `State_Id` int(10) unsigned, + PRIMARY KEY (`Id`) +) ENGINE=@ZM_MYSQL_ENGINE@; -- -- Table structure for table `Stats` -- @@ -559,6 +573,11 @@ INSERT INTO Controls VALUES (NULL,'Toshiba IK-WB11A','Remote','Toshiba_IK_WB11A' INSERT INTO Controls VALUES (NULL,'WanscamPT','Remote','Wanscam',1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,16,0,0,0,0,0,1,16,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0); INSERT INTO Controls VALUES (NULL,'3S Domo N5071', 'Remote', '3S', 0, 0, 1, 1, 0, 1, 1, 0, 0, 9999, 0, 9999, 0, 0, 0, 1, 1, 1, 1, 0, 0, 9999, 20, 9999, 0, 0, 0, 1, 1, 1, 1, 0, 0, 9999, 1, 9999, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 1, 0, 1, 1, 0, 0, 0, 0, 1, -180, 180, 40, 100, 1, 40, 100, 0, 0, 1, -180, 180, 40, 100, 1, 40, 100, 0, 0, 0, 0); INSERT INTO Controls VALUES (NULL,'ONVIF Camera','Ffmpeg','onvif',0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,255,16,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,6,1,1,0,0,0,1,10,0,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0); +INSERT INTO `Controls` VALUES (NULL,'Foscam 9831W','Ffmpeg','FI9831W',0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,16,1,1,1,1,0,0,0,1,1,0,360,0,360,1,0,4,0,0,1,0,90,0,90,0,0,0,0,0,0,0); +INSERT INTO `Controls` VALUES (NULL,'Foscam FI8918W','Ffmpeg','FI8918W',0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,8,0,1,1,1,0,0,0,1,1,0,360,0,360,1,0,4,0,0,1,0,90,0,90,1,0,4,0,0,0,0); + + + -- -- Add some monitor preset values diff --git a/db/zm_update-1.28.99.sql b/db/zm_update-1.28.99.sql index 5c2c9aeff..b9286dc24 100644 --- a/db/zm_update-1.28.99.sql +++ b/db/zm_update-1.28.99.sql @@ -4,6 +4,8 @@ -- -- Add Controls definition for ONVIF +-- Add Controls definition for FI9831W +-- Add Controls definition for FI8918W -- INSERT INTO Controls SELECT * FROM (SELECT NULL as Id, @@ -109,3 +111,268 @@ WHERE NOT EXISTS ( SELECT Name FROM Controls WHERE name = 'ONVIF Camera' ) LIMIT 1; +INSERT INTO Controls +SELECT * FROM (SELECT NULL as Id, + 'Foscam 9831W' as Name, + 'Ffmpeg' as Type, + 'FI9831W' as Protocol, + 0 as CanWake, + 0 as CanSleep, + 1 as CanReset, + 0 as CanZoom, + 0 as CanAutoZoom, + 0 as CanZoomAbs, + 0 as CanZoomRel, + 0 as CanZoomCon, + 0 as MinZoomRange, + 0 as MaxZoomRange, + 0 as MinZoomStep, + 0 as MaxZoomStep, + 0 as HasZoomSpeed, + 0 as MinZoomSpeed, + 0 as MaxZoomSpeed, + 0 as CanFocus, + 0 as CanAutoFocus, + 0 as CanFocusAbs, + 0 as CanFocusRel, + 0 as CanFocusCon, + 0 as MinFocusRange, + 0 as MaxFocusRange, + 0 as MinFocusStep, + 0 as MaxFocusStep, + 0 as HasFocusSpeed, + 0 as MinFocusSpeed, + 0 as MaxFocusSpeed, + 0 as CanIris, + 0 as CanAutoIris, + 0 as CanIrisAbs, + 0 as CanIrisRel, + 0 as CanIrisCon, + 0 as MinIrisRange, + 0 as MaxIrisRange, + 0 as MinIrisStep, + 0 as MaxIrisStep, + 0 as HasIrisSpeed, + 0 as MinIrisSpeed, + 0 as MaxIrisSpeed, + 0 as CanGain, + 0 as CanAutoGain, + 0 as CanGainAbs, + 0 as CanGainRel, + 0 as CanGainCon, + 0 as MinGainRange, + 0 as MaxGainRange, + 0 as MinGainStep, + 0 as MaxGainStep, + 0 as HasGainSpeed, + 0 as MinGainSpeed, + 0 as MaxGainSpeed, + 0 as CanWhite, + 0 as CanAutoWhite, + 0 as CanWhiteAbs, + 0 as CanWhiteRel, + 0 as CanWhiteCon, + 0 as MinWhiteRange, + 0 as MaxWhiteRange, + 0 as MinWhiteStep, + 0 as MaxWhiteStep, + 0 as HasWhiteSpeed, + 0 as MinWhiteSpeed, + 0 as MaxWhiteSpeed, + 0 as HasPresets, + 16 as NumPresets, + 1 as HasHomePreset, + 1 as CanSetPresets, + 1 as CanMove, + 1 as CanMoveDiag, + 0 as CanMoveMap, + 0 as CanMoveAbs, + 0 as CanMoveRel, + 1 as CanMoveCon, + 1 as CanPan, + 0 as MinPanRange, + 360 as MaxPanRange, + 0 as MinPanStep, + 360 as MaxPanStep, + 1 as HasPanSpeed, + 0 as MinPanSpeed, + 4 as MaxPanSpeed, + 0 as HasTurboPan, + 0 as TurboPanSpeed, + 1 as CanTilt, + 0 as MinTiltRange, + 90 as MaxTiltRange, + 0 as MinTiltStep, + 90 as MaxTiltStep, + 0 as HasTiltSpeed, + 0 as MinTiltSpeed, + 0 as MaxTiltSpeed, + 0 as HasTurboTilt, + 0 as TurboTiltSpeed, + 0 as CanAutoScan, + 0 as NumScanPaths) AS tmp +WHERE NOT EXISTS ( + SELECT Name FROM Controls WHERE name = 'Foscam 9831W' +) LIMIT 1; + +INSERT INTO Controls +SELECT * FROM (SELECT NULL as Id, + 'Foscam FI8918W' as Name, + 'Ffmpeg' as Type, + 'FI8918W' as Protocol, + 0 as CanWake, + 0 as CanSleep, + 1 as CanReset, + 0 as CanZoom, + 0 as CanAutoZoom, + 0 as CanZoomAbs, + 0 as CanZoomRel, + 0 as CanZoomCon, + 0 as MinZoomRange, + 0 as MaxZoomRange, + 0 as MinZoomStep, + 0 as MaxZoomStep, + 0 as HasZoomSpeed, + 0 as MinZoomSpeed, + 0 as MaxZoomSpeed, + 0 as CanFocus, + 0 as CanAutoFocus, + 0 as CanFocusAbs, + 0 as CanFocusRel, + 0 as CanFocusCon, + 0 as MinFocusRange, + 0 as MaxFocusRange, + 0 as MinFocusStep, + 0 as MaxFocusStep, + 0 as HasFocusSpeed, + 0 as MinFocusSpeed, + 0 as MaxFocusSpeed, + 0 as CanIris, + 0 as CanAutoIris, + 0 as CanIrisAbs, + 0 as CanIrisRel, + 0 as CanIrisCon, + 0 as MinIrisRange, + 0 as MaxIrisRange, + 0 as MinIrisStep, + 0 as MaxIrisStep, + 0 as HasIrisSpeed, + 0 as MinIrisSpeed, + 0 as MaxIrisSpeed, + 0 as CanGain, + 0 as CanAutoGain, + 0 as CanGainAbs, + 0 as CanGainRel, + 0 as CanGainCon, + 0 as MinGainRange, + 0 as MaxGainRange, + 0 as MinGainStep, + 0 as MaxGainStep, + 0 as HasGainSpeed, + 0 as MinGainSpeed, + 0 as MaxGainSpeed, + 0 as CanWhite, + 0 as CanAutoWhite, + 0 as CanWhiteAbs, + 0 as CanWhiteRel, + 0 as CanWhiteCon, + 0 as MinWhiteRange, + 0 as MaxWhiteRange, + 0 as MinWhiteStep, + 0 as MaxWhiteStep, + 0 as HasWhiteSpeed, + 0 as MinWhiteSpeed, + 0 as MaxWhiteSpeed, + 0 as HasPresets, + 8 as NumPresets, + 0 as HasHomePreset, + 1 as CanSetPresets, + 1 as CanMove, + 1 as CanMoveDiag, + 0 as CanMoveMap, + 0 as CanMoveAbs, + 0 as CanMoveRel, + 1 as CanMoveCon, + 1 as CanPan, + 0 as MinPanRange, + 360 as MaxPanRange, + 0 as MinPanStep, + 360 as MaxPanStep, + 1 as HasPanSpeed, + 0 as MinPanSpeed, + 4 as MaxPanSpeed, + 0 as HasTurboPan, + 0 as TurboPanSpeed, + 1 as CanTilt, + 0 as MinTiltRange, + 90 as MaxTiltRange, + 0 as MinTiltStep, + 90 as MaxTiltStep, + 0 as HasTiltSpeed, + 0 as MinTiltSpeed, + 0 as MaxTiltSpeed, + 0 as HasTurboTilt, + 0 as TurboTiltSpeed, + 0 as CanAutoScan, + 0 as NumScanPaths) AS tmp +WHERE NOT EXISTS ( + SELECT Name FROM Controls WHERE name = 'Foscam FI8918W' +) LIMIT 1; + +-- +-- Hide USE_DEEP_STORAGE from user to prevent accidental event loss +-- +UPDATE `zm`.`Config` SET `Category`='hidden' WHERE `Name`='ZM_USE_DEEP_STORAGE'; + +-- +-- Add Id column to State +-- + +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE table_name = 'States' + AND table_schema = DATABASE() + AND column_name = 'Id' + ) > 0, +"SELECT 'Column Id exists in States'", +"ALTER TABLE States ALTER Name DROP PRIMARY KEY;ALTER TABLE `States` ADD `Id` int(10) unsigned auto_increment NOT NULL PRIMARY KEY FIRST" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; + +-- The States table will be updated to have a new column called IsActive +-- used to keep track of which custom state is active (if any) +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.COLUMNS + WHERE table_name = 'States' + AND table_schema = DATABASE() + AND column_name = 'IsActive' + ) > 0, +"SELECT 'Column IsActive exists in States'", +"ALTER TABLE `States` ADD `IsActive` tinyint(3) unsigned not null default 0 AFTER `Definition`" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; + +SET @s = (SELECT IF( + (SELECT COUNT(*) + FROM INFORMATION_SCHEMA.TABLES + WHERE table_name = 'Servers' + AND table_schema = DATABASE() + ) > 0, +"SELECT 'Servers table exists'", +"CREATE TABLE `Servers` ( + `Id` int(10) unsigned NOT NULL auto_increment, + `Name` varchar(64) NOT NULL default '', + `State_Id` int(10) unsigned, + PRIMARY KEY (`Id`) +)" +)); + +PREPARE stmt FROM @s; +EXECUTE stmt; + diff --git a/distros/debian_cmake/rules b/distros/debian_cmake/rules index 0bf0f3362..aa0501ab1 100755 --- a/distros/debian_cmake/rules +++ b/distros/debian_cmake/rules @@ -22,7 +22,6 @@ override_dh_auto_configure: -DZM_CGIDIR=/usr/lib/cgi-bin \ -DZM_WEB_USER=www-data \ -DZM_WEB_GROUP=www-data \ - -DZM_PERL_SUBPREFIX=/share/perl5 \ -DCMAKE_INSTALL_SYSCONFDIR=etc/zm override_dh_auto_install: diff --git a/distros/fedora/CMakeLists.txt b/distros/fedora/CMakeLists.txt index 7409a2e39..deec840f7 100644 --- a/distros/fedora/CMakeLists.txt +++ b/distros/fedora/CMakeLists.txt @@ -32,7 +32,7 @@ install(CODE "execute_process(COMMAND ln -sf ../../java/cambozola.jar \"\$ENV{DE # Install auxillary files required to run zoneminder on Fedora install(FILES zoneminder.conf DESTINATION /etc/httpd/conf.d PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) install(FILES zoneminder.logrotate DESTINATION /etc/logrotate.d RENAME zoneminder PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) -install(FILES zoneminder.tmpfiles DESTINATION /etc/tmpfiles.d RENAME zoneminder.conf PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) +install(FILES ../../misc/zoneminder-tmpfiles.conf DESTINATION /etc/tmpfiles.d RENAME zoneminder.conf PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) install(FILES redalert.wav DESTINATION ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/zoneminder/www/sounds PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) install(FILES zoneminder.service DESTINATION /usr/lib/systemd/system PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) diff --git a/distros/fedora/archive/zoneminder.cmake.f19.spec b/distros/fedora/archive/zoneminder.cmake.f19.spec index a7aee3265..771209247 100644 --- a/distros/fedora/archive/zoneminder.cmake.f19.spec +++ b/distros/fedora/archive/zoneminder.cmake.f19.spec @@ -72,7 +72,6 @@ too much degradation of performance. %build %cmake \ -DZM_TARGET_DISTRO="f19" \ - -DZM_PERL_SUBPREFIX=`x="%{perl_vendorlib}" ; echo ${x#"%{_prefix}"}` \ %{?_without_ffmpeg:-DZM_NO_FFMPEG=ON} \ %{?_without_x10:-DZM_NO_X10=ON} \ . diff --git a/distros/fedora/zoneminder.f20.spec b/distros/fedora/zoneminder.f20.spec index 29da79014..59dfa6c1e 100644 --- a/distros/fedora/zoneminder.f20.spec +++ b/distros/fedora/zoneminder.f20.spec @@ -10,7 +10,7 @@ %define _without_x10 1 Name: zoneminder -Version: 1.28.0 +Version: 1.28.1 Release: 1%{?dist} Summary: A camera monitoring and analysis tool Group: System Environment/Daemons @@ -31,14 +31,14 @@ BuildRequires: perl(MIME::Entity) perl(MIME::Lite) BuildRequires: perl(PHP::Serialization) perl(Sys::Mmap) BuildRequires: perl(Time::HiRes) perl(Net::SFTP::Foreign) BuildRequires: perl(Expect) perl(Sys::Syslog) -BuildRequires: gcc gcc-c++ vlc-devel libcurl-devel +BuildRequires: gcc gcc-c++ vlc-devel libcurl-devel libv4l-devel %{!?_without_ffmpeg:BuildRequires: ffmpeg-devel} %{!?_without_x10:BuildRequires: perl(X10::ActiveHome) perl(Astro::SunTime)} # cmake needs the following installed at build time due to the way it auto-detects certain parameters BuildRequires: httpd polkit-devel %{!?_without_ffmpeg:BuildRequires: ffmpeg} -Requires: httpd php php-mysql cambozola polkit net-tools +Requires: httpd php php-mysql cambozola polkit net-tools psmisc Requires: libjpeg-turbo vlc-core libcurl Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) Requires: perl(DBD::mysql) perl(Archive::Tar) perl(Archive::Zip) @@ -76,7 +76,6 @@ too much degradation of performance. %build %cmake \ -DZM_TARGET_DISTRO="f20" \ - -DZM_PERL_SUBPREFIX=`x="%{perl_vendorlib}" ; echo ${x#"%{_prefix}"}` \ %{?_without_ffmpeg:-DZM_NO_FFMPEG=ON} \ %{?_without_x10:-DZM_NO_X10=ON} \ . diff --git a/distros/fedora/zoneminder.f21.spec b/distros/fedora/zoneminder.f21.spec index b0b623591..94986336e 100644 --- a/distros/fedora/zoneminder.f21.spec +++ b/distros/fedora/zoneminder.f21.spec @@ -31,14 +31,14 @@ BuildRequires: perl(MIME::Entity) perl(MIME::Lite) BuildRequires: perl(PHP::Serialization) perl(Sys::Mmap) BuildRequires: perl(Time::HiRes) perl(Net::SFTP::Foreign) BuildRequires: perl(Expect) perl(Sys::Syslog) -BuildRequires: gcc gcc-c++ vlc-devel libcurl-devel +BuildRequires: gcc gcc-c++ vlc-devel libcurl-devel libv4l-devel %{!?_without_ffmpeg:BuildRequires: ffmpeg-devel} %{!?_without_x10:BuildRequires: perl(X10::ActiveHome) perl(Astro::SunTime)} # cmake needs the following installed at build time due to the way it auto-detects certain parameters BuildRequires: httpd polkit-devel %{!?_without_ffmpeg:BuildRequires: ffmpeg} -Requires: httpd php php-mysql cambozola polkit net-tools +Requires: httpd php php-mysql cambozola polkit net-tools psmisc Requires: libjpeg-turbo vlc-core libcurl Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) Requires: perl(DBD::mysql) perl(Archive::Tar) perl(Archive::Zip) @@ -76,7 +76,6 @@ too much degradation of performance. %build %cmake \ -DZM_TARGET_DISTRO="f21" \ - -DZM_PERL_SUBPREFIX=`x="%{perl_vendorlib}" ; echo ${x#"%{_prefix}"}` \ %{?_without_ffmpeg:-DZM_NO_FFMPEG=ON} \ %{?_without_x10:-DZM_NO_X10=ON} \ . @@ -155,8 +154,6 @@ fi %{!?_without_x10:%{_bindir}/zmx10.pl} %{perl_vendorlib}/ZoneMinder* -%{perl_vendorlib}/%{_arch}-linux-thread-multi/auto/ZoneMinder* -#%{perl_archlib}/ZoneMinder* %{_mandir}/man*/* %dir %{_libexecdir}/zoneminder %{_libexecdir}/zoneminder/cgi-bin diff --git a/distros/redhat/CMakeLists.txt b/distros/redhat/CMakeLists.txt index 7422be107..fe69c6371 100644 --- a/distros/redhat/CMakeLists.txt +++ b/distros/redhat/CMakeLists.txt @@ -16,7 +16,7 @@ else(ZM_TARGET_DISTRO STREQUAL "el7") endif(ZM_TARGET_DISTRO STREQUAL "el7") # Download jscalendar & move files into position -file(DOWNLOAD http://softlayer-dal.dl.sourceforge.net/project/jscalendar/jscalendar/1.0/jscalendar-1.0.zip ${CMAKE_CURRENT_SOURCE_DIR}/jscalendar-1.0.zip LOG jsc_log STATUS download_jsc) +file(DOWNLOAD http://nbtelecom.dl.sourceforge.net/project/jscalendar/jscalendar/1.0/jscalendar-1.0.zip ${CMAKE_CURRENT_SOURCE_DIR}/jscalendar-1.0.zip LOG jsc_log STATUS download_jsc) #message(STATUS "Log of jscalender script was: ${jsc_log}") if(download_jsc EQUAL 0) message(STATUS "Jscalander successfully downloaded. Installing...") @@ -58,7 +58,7 @@ if(ZM_TARGET_DISTRO STREQUAL "el7") install(FILES zoneminder.el7.conf DESTINATION /etc/httpd/conf.d RENAME zoneminder.conf PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) install(FILES zoneminder.el7.logrotate DESTINATION /etc/logrotate.d RENAME zoneminder PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) install(FILES zoneminder.service DESTINATION /usr/lib/systemd/system PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) - install(FILES zoneminder.tmpfiles DESTINATION /etc/tmpfiles.d RENAME zoneminder.conf PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) + install(FILES ../../misc/zoneminder-tmpfiles.conf DESTINATION /etc/tmpfiles.d RENAME zoneminder.conf PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) else(ZM_TARGET_DISTRO STREQUAL "el7") install(FILES zoneminder.el6.conf DESTINATION /etc/httpd/conf.d RENAME zoneminder.conf PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) install(FILES zoneminder.el6.logrotate DESTINATION /etc/logrotate.d RENAME zoneminder PERMISSIONS OWNER_WRITE OWNER_READ GROUP_READ WORLD_READ) diff --git a/distros/redhat/zoneminder.el6.spec b/distros/redhat/zoneminder.el6.spec index 645a6f1e2..e50db96e7 100644 --- a/distros/redhat/zoneminder.el6.spec +++ b/distros/redhat/zoneminder.el6.spec @@ -4,7 +4,7 @@ %define zmgid_final apache Name: zoneminder -Version: 1.28.0 +Version: 1.28.1 Release: 1%{?dist} Summary: A camera monitoring and analysis tool Group: System Environment/Daemons @@ -30,7 +30,7 @@ BuildRequires: libcurl-devel vlc-devel ffmpeg-devel polkit-devel # cmake needs the following installed at build time due to the way it auto-detects certain parameters BuildRequires: httpd ffmpeg -Requires: httpd php php-mysql mysql-server libjpeg-turbo polkit net-tools +Requires: httpd php php-mysql mysql-server libjpeg-turbo polkit net-tools psmisc Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) Requires: perl(DBD::mysql) perl(Archive::Tar) perl(Archive::Zip) Requires: perl(MIME::Entity) perl(MIME::Lite) perl(Net::SMTP) perl(Net::FTP) @@ -73,7 +73,7 @@ too much degradation of performance. %build # Have to override CMAKE_INSTALL_LIBDIR for cmake < 2.8.7 due to this bug: # https://bugzilla.redhat.com/show_bug.cgi?id=795542 -%cmake -DZM_TARGET_DISTRO="el6" -DCMAKE_INSTALL_LIBDIR:PATH=%{_lib} -DZM_PERL_SUBPREFIX=`x="%{perl_vendorlib}" ; echo ${x#"%{_prefix}"}` . +%cmake -DZM_TARGET_DISTRO="el6" -DCMAKE_INSTALL_LIBDIR:PATH=%{_lib} . make %{?_smp_mflags} @@ -143,7 +143,7 @@ rm -rf %{_docdir}/%{name}-%{version} %{_bindir}/zmcamtool.pl %{_bindir}/zmsystemctl.pl %{_bindir}/zmx10.pl -%{_bindir}/zmonvif-probe.pl +#%{_bindir}/zmonvif-probe.pl %{perl_vendorlib}/ZoneMinder* %{perl_vendorlib}/%{_arch}-linux-thread-multi/auto/ZoneMinder* diff --git a/distros/redhat/zoneminder.el7.spec b/distros/redhat/zoneminder.el7.spec index ec35e692e..63d7fe920 100644 --- a/distros/redhat/zoneminder.el7.spec +++ b/distros/redhat/zoneminder.el7.spec @@ -27,12 +27,12 @@ BuildRequires: perl(MIME::Entity) perl(MIME::Lite) BuildRequires: perl(PHP::Serialization) perl(Sys::Mmap) BuildRequires: perl(Time::HiRes) perl(Net::SFTP::Foreign) BuildRequires: perl(Expect) perl(Sys::Syslog) -BuildRequires: gcc gcc-c++ vlc-devel libcurl-devel +BuildRequires: gcc gcc-c++ vlc-devel libcurl-devel libv4l-devel BuildRequires: ffmpeg ffmpeg-devel perl(X10::ActiveHome) perl(Astro::SunTime) # cmake needs the following installed at build time due to the way it auto-detects certain parameters BuildRequires: httpd polkit-devel -Requires: httpd php php-mysql mariadb-server polkit net-tools +Requires: httpd php php-mysql mariadb-server polkit net-tools psmisc Requires: libjpeg-turbo vlc-core libcurl Requires: perl(:MODULE_COMPAT_%(eval "`%{__perl} -V:version`"; echo $version)) Requires: perl(DBD::mysql) perl(Archive::Tar) perl(Archive::Zip) @@ -69,7 +69,6 @@ too much degradation of performance. %build %cmake \ -DZM_TARGET_DISTRO="el7" \ - -DZM_PERL_SUBPREFIX=`x="%{perl_vendorlib}" ; echo ${x#"%{_prefix}"}` \ . make %{?_smp_mflags} @@ -108,6 +107,8 @@ if [ $1 -eq 0 ] ; then # Package removal, not upgrade /bin/systemctl --no-reload disable zoneminder.service > /dev/null 2>&1 || : /bin/systemctl stop zoneminder.service > /dev/null 2>&1 || : + echo -e "\nRemoving ZoneMinder SELinux policy module. Please wait.\n" + /usr/sbin/semodule -r local_zoneminder.pp fi %postun @@ -129,7 +130,8 @@ fi %files %defattr(-,root,root,-) -%doc AUTHORS COPYING README.md distros/redhat/README.Centos7 distros/redhat/jscalendar-doc +%doc AUTHORS BUGS ChangeLog COPYING LICENSE NEWS README.md distros/redhat/README.Centos7 distros/redhat/jscalendar-doc +%doc distros/redhat/cambozola-doc distros/redhat/local_zoneminder.te %config %attr(640,root,%{zmgid_final}) /etc/zm/zm.conf %config(noreplace) %attr(644,root,root) /etc/httpd/conf.d/zoneminder.conf %config(noreplace) /etc/tmpfiles.d/zoneminder.conf @@ -157,7 +159,8 @@ fi %{_bindir}/zmx10.pl %{perl_vendorlib}/ZoneMinder* -%{perl_vendorlib}/%{_arch}-linux-thread-multi/auto/ZoneMinder* +%{perl_vendorarch}/auto/ZoneMinder/.packlist +#%{perl_vendorlib}/%{_arch}-linux-thread-multi/auto/ZoneMinder* #%{perl_archlib}/ZoneMinder* %{_mandir}/man*/* %dir %{_libexecdir}/zoneminder diff --git a/distros/ubuntu1204/changelog b/distros/ubuntu1204/changelog index ad9212d40..2dfc8b63c 100644 --- a/distros/ubuntu1204/changelog +++ b/distros/ubuntu1204/changelog @@ -1,3 +1,16 @@ +zoneminder (1.28.1+1-trusty-SNAPSHOT2015030201) trusty; urgency=medium + + * maybe fix for RTSP Basic Auth + * Also remove dependency on netpbm + + -- Isaac Connor Mon, 02 Mar 2015 11:25:59 -0500 + +zoneminder (1.28.1+1-utopic-SNAPSHOT2015022301) utopic; urgency=medium + + * Big merge of onvif support and some fixes. + + -- Isaac Connor Mon, 23 Feb 2015 19:45:45 -0500 + zoneminder (1.28.0+1-trusty-SNAPSHOT2015021201) trusty; urgency=medium * add mysql-client-5.6 as a dependency instaed of mysql-client. diff --git a/distros/ubuntu1204/control b/distros/ubuntu1204/control index f9a5a1a1b..b1be82b34 100644 --- a/distros/ubuntu1204/control +++ b/distros/ubuntu1204/control @@ -2,12 +2,12 @@ Source: zoneminder Section: net Priority: optional Maintainer: Isaac Connor -Build-Depends: debhelper (>= 9), autoconf, automake, quilt, libphp-serialization-perl, libgnutls-dev, libmysqlclient-dev | libmariadbclient-dev, libdbd-mysql-perl, libdate-manip-perl, libwww-perl, libjpeg8-dev|libjpeg9-dev|libjpeg62-turbo-dev, libpcre3-dev, libavcodec-dev, libavformat-dev (>= 3:0.svn20090204), libswscale-dev (>= 3:0.svn20090204), libavutil-dev, libv4l-dev (>= 0.8.3), libbz2-dev, libtool, libsys-mmap-perl, ffmpeg | libav-tools, libnetpbm10-dev, libavdevice-dev, libdevice-serialport-perl, libpcre3, libarchive-zip-perl, libmime-lite-perl, dh-autoreconf, libvlccore-dev, libvlc-dev, libcurl4-gnutls-dev | libcurl4-nss-dev | libcurl4-openssl-dev, libgcrypt11-dev, libpolkit-gobject-1-dev +Build-Depends: debhelper (>= 9), autoconf, automake, quilt, libphp-serialization-perl, libgnutls-dev, libmysqlclient-dev | libmariadbclient-dev, libdbd-mysql-perl, libdate-manip-perl, libwww-perl, libjpeg8-dev|libjpeg9-dev|libjpeg62-turbo-dev, libpcre3-dev, libavcodec-dev, libavformat-dev (>= 3:0.svn20090204), libswscale-dev (>= 3:0.svn20090204), libavutil-dev, libv4l-dev (>= 0.8.3), libbz2-dev, libtool, libsys-mmap-perl, ffmpeg | libav-tools, libavdevice-dev, libdevice-serialport-perl, libpcre3, libarchive-zip-perl, libmime-lite-perl, dh-autoreconf, libvlccore-dev, libvlc-dev, libcurl4-gnutls-dev | libcurl4-nss-dev | libcurl4-openssl-dev, libgcrypt11-dev, libpolkit-gobject-1-dev Standards-Version: 3.9.4 Package: zoneminder Architecture: any -Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, apache2, libapache2-mod-php5 | libapache2-mod-fcgid, php5, php5-mysql|php5-mysqlnd, libphp-serialization-perl, libdate-manip-perl, libmime-lite-perl, libmime-tools-perl, mariadb-client|mysql-client|mysql-client-5.6, libwww-perl, libarchive-tar-perl, libarchive-zip-perl, libdevice-serialport-perl, libpcre3, ffmpeg | libav-tools, rsyslog | system-log-daemon, libmodule-load-perl, libsys-mmap-perl, libjson-any-perl, netpbm, libavdevice53 | libavdevice55, libjpeg8|libjpeg9|libjpeg62-turbo, zip, libnet-sftp-foreign-perl, libio-pty-perl, libexpect-perl, libvlccore5 | libvlccore7 | libvlccore8, libvlc5, libcurl4-gnutls-dev | libcurl4-nss-dev | libcurl4-openssl-dev, libpolkit-gobject-1-0, liburi-encode-perl +Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, apache2, libapache2-mod-php5 | libapache2-mod-fcgid, php5, php5-mysql|php5-mysqlnd, libphp-serialization-perl, libdate-manip-perl, libmime-lite-perl, libmime-tools-perl, mariadb-client|mysql-client|mysql-client-5.6, libwww-perl, libarchive-tar-perl, libarchive-zip-perl, libdevice-serialport-perl, libpcre3, ffmpeg | libav-tools, rsyslog | system-log-daemon, libmodule-load-perl, libsys-mmap-perl, libjson-any-perl, libavdevice53 | libavdevice55, libjpeg8|libjpeg9|libjpeg62-turbo, zip, libnet-sftp-foreign-perl, libio-pty-perl, libexpect-perl, libvlccore5 | libvlccore7 | libvlccore8, libvlc5, libcurl4-gnutls-dev | libcurl4-nss-dev | libcurl4-openssl-dev, libpolkit-gobject-1-0, liburi-encode-perl Recommends: mysql-server|mariadb-server Description: Video camera security and surveillance solution ZoneMinder is intended for use in single or multi-camera video security diff --git a/distros/ubuntu1504/README.Debian b/distros/ubuntu1504/README.Debian new file mode 100644 index 000000000..b8ea413e3 --- /dev/null +++ b/distros/ubuntu1504/README.Debian @@ -0,0 +1,51 @@ +zoneminder for Debian +--------------------- + +There is one manual step to get the web interface working. +You need to link /etc/zm/apache.conf to /etc/apache2/conf.d/zoneminder.conf, +then reload the apache config (i.e. /etc/init.d/apache2 reload) + +Changing the location for images and events +------------------------------------------- + +Zoneminder, in its upstream form, stores data in /usr/share/zoneminder/. This +package modifies that by changing /usr/share/zoneminder/images and +/usr/share/zoneminder/events to symlinks to directories under +/var/cache/zoneminder. + +There are numerous places these could be put and ways to do it. But, at the +moment, if you change this, an upgrade will fail with a warning about these +locations having changed (the reason for this was that previously, an upgrade +would silently revert the changes and cause event loss - refer +bug #608793). + +If you do want to change the location, here are a couple of suggestions. +(thanks to vagrant@freegeek.org): + +These lines in fstab could allow you to bind-mount an alternate location + + /dev/sdX1 /otherdrive ext3 defaults 0 2 + /otherdrive/zoneminder/images /var/cache/zoneminder/images bind defaults 0 2 + /otherdrive/zoneminder/events /var/cache/zoneminder/events bind defaults 0 2 + + or if you have a separate partition for each: + + /dev/sdX1 /var/cache/zoneminder/images ext3 defaults 0 2 + /dev/sdX2 /var/cache/zoneminder/events ext3 defaults 0 2 + + + + -- Peter Howard , Sun, 16 Jan 2010 01:35:51 +1100 + +Access to /dev/video* +--------------------- + +For cameras which require access to /dev/video*, zoneminder may need the +www-data user added to the video group in order to see those cameras: + + adduser www-data video + +Note that all web applications running on the zoneminder server will then have +access to all video devices on the system. + + -- Vagrant Cascadian Sun, 27 Mar 2011 13:06:56 -0700 diff --git a/distros/ubuntu1504/apache.conf b/distros/ubuntu1504/apache.conf new file mode 100644 index 000000000..92a2b6414 --- /dev/null +++ b/distros/ubuntu1504/apache.conf @@ -0,0 +1,9 @@ +Alias /zm /usr/share/zoneminder + + + php_flag register_globals off + Options Indexes FollowSymLinks + + DirectoryIndex index.php + + diff --git a/distros/ubuntu1504/changelog b/distros/ubuntu1504/changelog new file mode 100644 index 000000000..2dfc8b63c --- /dev/null +++ b/distros/ubuntu1504/changelog @@ -0,0 +1,86 @@ +zoneminder (1.28.1+1-trusty-SNAPSHOT2015030201) trusty; urgency=medium + + * maybe fix for RTSP Basic Auth + * Also remove dependency on netpbm + + -- Isaac Connor Mon, 02 Mar 2015 11:25:59 -0500 + +zoneminder (1.28.1+1-utopic-SNAPSHOT2015022301) utopic; urgency=medium + + * Big merge of onvif support and some fixes. + + -- Isaac Connor Mon, 23 Feb 2015 19:45:45 -0500 + +zoneminder (1.28.0+1-trusty-SNAPSHOT2015021201) trusty; urgency=medium + + * add mysql-client-5.6 as a dependency instaed of mysql-client. + + -- Isaac Connor Fri, 13 Feb 2015 09:35:13 -0500 + +zoneminder (1.28.0+1-trusty-SNAPSHOT2015011101) trusty; urgency=medium + + * small changes + + -- Isaac Connor Fri, 12 Dec 2014 16:38:36 -0500 + +zoneminder (1.28.0+1-utopic-SNAPSHOT2014112001) utopic; urgency=medium + + * Various fixes and developments since 1.28.0. Includes Digest-Auth for HTTP and better for RTSP + + -- Isaac Connor Thu, 20 Nov 2014 10:57:57 -0500 + +zoneminder (1.28.0-trusty) trusty; urgency=medium + + * Release + + -- Isaac Connor Fri, 17 Oct 2014 09:25:55 -0400 + +zoneminder (1.27.99+1-trusty-SNAPSHOT2014101401) trusty; urgency=medium + + * Several PR merges in big push for 1.28.0 + + -- Isaac Connor Tue, 14 Oct 2014 09:28:29 -0400 + +zoneminder (1.27.99+1-trusty-SNAPSHOT2014092601) trusty; urgency=medium + + * style updates and db fixes for database logging filters + + -- Isaac Connor Fri, 26 Sep 2014 14:44:45 -0400 + +zoneminder (1.27.99+1-trusty-SNAPSHOT2014090801) trusty; urgency=medium + + * several segfault fixes for local cameras + + -- Isaac Connor Mon, 08 Sep 2014 16:56:57 -0400 + +zoneminder (1.27.99+1-trusty-SNAPSHOT2014090701) trusty; urgency=medium + + * Fix segfaults for local cameras, also now includes the systemd support patch + + -- Isaac Connor Sun, 07 Sep 2014 17:19:01 -0400 + +zoneminder (1.27.99+1-trusty-SNAPSHOT2014082102) trusty; urgency=medium + + * Fix UI inputs for v4l multibuffer and captures per frame + + -- Isaac Connor Thu, 21 Aug 2014 12:03:31 -0400 + +zoneminder (1.27.99+1-trusty-SNAPSHOT2014082101) trusty; urgency=medium + + * fall back to Config table values for V4l MultiBUffer and Captures Per Frame + * add mention of monitor page settings for thse in the config table + + -- Isaac Connor Thu, 21 Aug 2014 10:04:46 -0400 + +zoneminder (1.27.99+1-precise-SNAPSHOT2014080601) precise; urgency=medium + + * improve error messages + * Make zmupdate re-run the most recent patch so that people running the daily builds get their db updates + + -- Isaac Connor Wed, 06 Aug 2014 20:20:20 -0400 + +zoneminder (1.27.0+1-trusty-v4ltomonitor-1) trusty; urgency=high + + * Snapshot release - + + -- Isaac Connor Wed, 09 Jul 2014 21:35:29 -0400 diff --git a/distros/ubuntu1504/compat b/distros/ubuntu1504/compat new file mode 100644 index 000000000..ec635144f --- /dev/null +++ b/distros/ubuntu1504/compat @@ -0,0 +1 @@ +9 diff --git a/distros/ubuntu1504/control b/distros/ubuntu1504/control new file mode 100644 index 000000000..5b63046c3 --- /dev/null +++ b/distros/ubuntu1504/control @@ -0,0 +1,40 @@ +Source: zoneminder +Section: net +Priority: optional +Maintainer: Isaac Connor +Build-Depends: debhelper (>= 9), dh-systemd (>= 1.5), autoconf, automake, quilt, libphp-serialization-perl, libgnutls-dev, libmysqlclient-dev | libmariadbclient-dev, libdbd-mysql-perl, libdate-manip-perl, libwww-perl, libjpeg8-dev|libjpeg9-dev|libjpeg62-turbo-dev, libpcre3-dev, libavcodec-ffmpeg-dev, libavformat-ffmpeg-dev, libswscale-ffmpeg-dev, libavutil-ffmpeg-dev, libv4l-dev (>= 0.8.3), libbz2-dev, libtool, libsys-mmap-perl, ffmpeg, libavdevice-ffmpeg-dev, libdevice-serialport-perl, libpcre3, libarchive-zip-perl, libmime-lite-perl, dh-autoreconf, libvlccore-dev, libvlc-dev, libcurl4-gnutls-dev | libcurl4-nss-dev | libcurl4-openssl-dev, libgcrypt11-dev, libpolkit-gobject-1-dev +Standards-Version: 3.9.4 + +Package: zoneminder +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends}, ${perl:Depends}, apache2, libapache2-mod-php5 | libapache2-mod-fcgid, php5, php5-mysql|php5-mysqlnd, libphp-serialization-perl, libdate-manip-perl, libmime-lite-perl, libmime-tools-perl, mariadb-client|mysql-client|mysql-client-5.6, libwww-perl, libarchive-tar-perl, libarchive-zip-perl, libdevice-serialport-perl, libpcre3, ffmpeg, rsyslog | system-log-daemon, libmodule-load-perl, libsys-mmap-perl, libjson-any-perl, libavdevice-ffmpeg56, libjpeg8|libjpeg9|libjpeg62-turbo, zip, libnet-sftp-foreign-perl, libio-pty-perl, libexpect-perl, libvlccore5 | libvlccore7 | libvlccore8, libvlc5, libcurl4-gnutls-dev | libcurl4-nss-dev | libcurl4-openssl-dev, libpolkit-gobject-1-0, liburi-encode-perl +Recommends: mysql-server|mariadb-server +Description: Video camera security and surveillance solution + ZoneMinder is intended for use in single or multi-camera video security + applications, including commercial or home CCTV, theft prevention and child + or family member or home monitoring and other care scenarios. It + supports capture, analysis, recording, and monitoring of video data coming + from one or more video or network cameras attached to a Linux system. + ZoneMinder also support web and semi-automatic control of Pan/Tilt/Zoom + cameras using a variety of protocols. It is suitable for use as a home + video security system and for commercial or professional video security + and surveillance. It can also be integrated into a home automation system + via X.10 or other protocols. + +Package: zoneminder-dbg +Section: debug +Priority: extra +Architecture: any +Depends: zoneminder (= ${binary:Version}), ${misc:Depends} +Description: Debugging symbols for zoneminder. + ZoneMinder is a video camera security and surveillance solution. + ZoneMinder is intended for use in single or multi-camera video security + applications, including commercial or home CCTV, theft prevention and child + or family member or home monitoring and other care scenarios. It + supports capture, analysis, recording, and monitoring of video data coming + from one or more video or network cameras attached to a Linux system. + ZoneMinder also support web and semi-automatic control of Pan/Tilt/Zoom + cameras using a variety of protocols. It is suitable for use as a home + video security system and for commercial or professional video security + and surveillance. It can also be integrated into a home automation system + via X.10 or other protocols. diff --git a/distros/ubuntu1504/copyright b/distros/ubuntu1504/copyright new file mode 100644 index 000000000..a177502a0 --- /dev/null +++ b/distros/ubuntu1504/copyright @@ -0,0 +1,22 @@ +Copyright: + +Copyright 2002 Philip Coombes + +License: + +This package 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 package 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 package; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian GNU/Linux systems, the text of the GPL can be found in +/usr/share/common-licenses/GPL. diff --git a/distros/ubuntu1504/dirs b/distros/ubuntu1504/dirs new file mode 100644 index 000000000..4178482c1 --- /dev/null +++ b/distros/ubuntu1504/dirs @@ -0,0 +1,6 @@ +var/log/zm +var/lib/zm +var/cache/zoneminder/events +var/cache/zoneminder/images +var/cache/zoneminder/temp +usr/share/zoneminder/db diff --git a/distros/ubuntu1504/docs b/distros/ubuntu1504/docs new file mode 100644 index 000000000..b43bf86b5 --- /dev/null +++ b/distros/ubuntu1504/docs @@ -0,0 +1 @@ +README.md diff --git a/distros/ubuntu1504/install b/distros/ubuntu1504/install new file mode 100644 index 000000000..4b0009cea --- /dev/null +++ b/distros/ubuntu1504/install @@ -0,0 +1,12 @@ +usr/bin +usr/lib/cgi-bin +usr/share/man +usr/share/perl5/ZoneMinder +usr/share/perl5/ZoneMinder.pm +usr/share/polkit-1/actions +usr/share/polkit-1/rules.d +usr/share/zoneminder +etc/zm +db/zm_create.sql usr/share/zoneminder/db +db/zm_update-*.sql usr/share/zoneminder/db +debian/apache.conf etc/zm diff --git a/distros/ubuntu1504/links b/distros/ubuntu1504/links new file mode 100644 index 000000000..9715ee428 --- /dev/null +++ b/distros/ubuntu1504/links @@ -0,0 +1,4 @@ +var/cache/zoneminder/events usr/share/zoneminder/events +var/cache/zoneminder/images usr/share/zoneminder/images +var/cache/zoneminder/temp usr/share/zoneminder/temp +usr/lib/cgi-bin usr/share/zoneminder/cgi-bin diff --git a/onvif/modules/pm_to_blib b/distros/ubuntu1504/patches/series similarity index 100% rename from onvif/modules/pm_to_blib rename to distros/ubuntu1504/patches/series diff --git a/distros/ubuntu1504/postinst b/distros/ubuntu1504/postinst new file mode 100644 index 000000000..e009a9799 --- /dev/null +++ b/distros/ubuntu1504/postinst @@ -0,0 +1,53 @@ +#! /bin/sh + +set -e + +if [ "$1" = "configure" ]; then + if [ -e "/lib/systemd/system/mysql.service" ]; then + # + # Get mysql started if it isn't + # + if ! $(systemctl is-active mysql >/dev/null 2>&1); then + systemctl start mysql + fi + if $(systemctl is-active mysql >/dev/null 2>&1); then + mysqladmin --defaults-file=/etc/mysql/debian.cnf -f reload + # test if database if already present... + if ! $(echo quit | mysql --defaults-file=/etc/mysql/debian.cnf zm > /dev/null 2> /dev/null) ; then + cat /usr/share/zoneminder/db/zm_create.sql | mysql --defaults-file=/etc/mysql/debian.cnf + echo 'grant lock tables, alter,select,insert,update,delete on zm.* to 'zmuser'@localhost identified by "zmpass";' | mysql --defaults-file=/etc/mysql/debian.cnf mysql + fi + + systemctl stop zoneminder || true #not sure about "|| true" + zmupdate.pl --nointeractive + + else + echo 'NOTE: mysql not running, please start mysql and run dpkg-reconfigure zoneminder when it is running.' + fi + else + echo 'mysql not found, assuming remote server.' + fi + chown www-data:www-data /var/log/zm + chown www-data:www-data /var/lib/zm/ + if [ -z "$2" ]; then + chown www-data:www-data -R /var/cache/zoneminder + fi +fi +# Ensure zoneminder is stopped... +if [ -e "/lib/systemd/system/zoneminder.service" ]; then #changed from -x to -e, could be wrong + if systemctl is-active zoneminder >/dev/null 2>&1 ; then + systemctl stop zoneminder || exit $? + fi +fi + +if [ "$1" = "configure" ]; then + if [ -z "$2" ]; then + chown www-data:www-data /var/log/zm + chown www-data:www-data /var/lib/zm/ + chown www-data:www-data -R /var/cache/zoneminder + else + chown www-data:www-data /var/log/zm + zmupdate.pl + fi +fi +#DEBHELPER# diff --git a/distros/ubuntu1504/postrm b/distros/ubuntu1504/postrm new file mode 100644 index 000000000..28a00a7a0 --- /dev/null +++ b/distros/ubuntu1504/postrm @@ -0,0 +1,9 @@ +#! /bin/sh +# set -e # to be reinstated later + +if [ "$1" = "purge" ]; then + echo 'delete from user where User="zmuser";' | mysql --defaults-file=/etc/mysql/debian.cnf mysql + echo 'delete from db where User="zmuser";' | mysql --defaults-file=/etc/mysql/debian.cnf mysql + mysqladmin --defaults-file=/etc/mysql/debian.cnf -f drop zm +fi +#DEBHELPER# diff --git a/distros/ubuntu1504/preinst b/distros/ubuntu1504/preinst new file mode 100755 index 000000000..6cd01ba55 --- /dev/null +++ b/distros/ubuntu1504/preinst @@ -0,0 +1,32 @@ +#!/bin/sh + +set -e + +abort=false +if [ -L /usr/share/zoneminder/events ]; then + l=$(readlink /usr/share/zoneminder/events) + if [ "$l" != "/var/cache/zoneminder/events" ]; then + abort=true + fi +fi +if [ -L /usr/share/zoneminder/images ]; then + l=$(readlink /usr/share/zoneminder/images ) + if [ "$l" != "/var/cache/zoneminder/images" ]; then + abort=true + fi +fi + +if [ "$abort" = "true" ]; then + cat >&2 << EOF +Aborting installation of zoneminder due to non-default symlinks in +/usr/share/zoneminder for the images and/or events directory, which could +result in loss of data. Please move your data in each of these directories to +/var/cache/zoneminder before installing zoneminder from the package. +EOF + exit 1 + +fi + +#DEBHELPER# + +exit 0 diff --git a/distros/ubuntu1504/rules b/distros/ubuntu1504/rules new file mode 100755 index 000000000..280d5faef --- /dev/null +++ b/distros/ubuntu1504/rules @@ -0,0 +1,67 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + +CFLAGS = -Wall -g +CPPFLAGS = -D__STDC_CONSTANT_MACROS +CXXFLAGS = -DHAVE_LIBCRYPTO + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +%: + dh $@ --with quilt,autoreconf,systemd + +override_dh_auto_configure: + CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" dh_auto_configure -- --host=$(DEB_HOST_GNU_TYPE) --build=$(DEB_BUILD_GNU_TYPE) --sysconfdir=/etc/zm --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info --with-mysql=/usr --with-mariadb=/usr --with-webdir=/usr/share/zoneminder --with-ffmpeg=/usr --with-cgidir=/usr/lib/cgi-bin --with-webuser=www-data --with-webgroup=www-data --enable-crashtrace=no --enable-mmap=yes + +override_dh_clean: + # Add here commands to clean up after the build process. + [ ! -f Makefile ] || $(MAKE) distclean + dh_clean + +override_dh_install: + dh_install --fail-missing + # + # NOTE: This is a short-term kludge; hopefully changes in the next + # upstream version will render this unnecessary. + rm -rf debian/zoneminder/usr/share/zoneminder/events + rm -rf debian/zoneminder/usr/share/zoneminder/images + rm -rf debian/zoneminder/usr/share/zoneminder/temp + dh_link var/cache/zoneminder/events usr/share/zoneminder/events + dh_link var/cache/zoneminder/images usr/share/zoneminder/images + dh_link var/cache/zoneminder/temp usr/share/zoneminder/temp + + # + # This is a slightly lesser kludge; moving the cgi stuff to + # /usr/share/zoneminder/cgi-bin breaks one set of behavior, + # having it just in /usr/lib/cgi-bin breaks another bit of + # behavior. + # + dh_link usr/lib/cgi-bin usr/share/zoneminder/cgi-bin + +override_dh_fixperms: + dh_fixperms + chown root:root debian/zoneminder/etc/zm/zm.conf + +override_dh_auto_test: + # do not run tests... + +.PHONY: override_dh_strip +override_dh_strip: + dh_strip --dbg-package=zoneminder-dbg diff --git a/distros/ubuntu1504/watch b/distros/ubuntu1504/watch new file mode 100644 index 000000000..5a8a9c4d7 --- /dev/null +++ b/distros/ubuntu1504/watch @@ -0,0 +1,3 @@ +version=3 +http://www.zoneminder.com/downloads.html \ + .*/ZoneMinder-(.*).tar.gz diff --git a/distros/ubuntu1504/zoneminder.service b/distros/ubuntu1504/zoneminder.service new file mode 100644 index 000000000..3ce608a49 --- /dev/null +++ b/distros/ubuntu1504/zoneminder.service @@ -0,0 +1,16 @@ +# ZoneMinder systemd unit file + # This file is intended to work with all Linux distributions + [Unit] + Description=ZoneMinder CCTV recording and security system + After=network.target mysql.service apache2.service + Requires=mysql.service apache2.service + [Service] + User=www-data + Type=forking + ExecStart=/usr/bin/zmpkg.pl start + ExecReload=/usr/bin/zmpkg.pl restart + ExecStop=/usr/bin/zmpkg.pl stop + PIDFile="/run/zm/zm.pid" + [Install] + WantedBy=multi-user.target + diff --git a/distros/ubuntu1504/zoneminder.tmpfile b/distros/ubuntu1504/zoneminder.tmpfile new file mode 100644 index 000000000..036883750 --- /dev/null +++ b/distros/ubuntu1504/zoneminder.tmpfile @@ -0,0 +1,2 @@ +d /var/run/zm 0755 www-data www-data + diff --git a/distros/ubuntu1504_cmake_split_packages/README.Debian b/distros/ubuntu1504_cmake_split_packages/README.Debian new file mode 100644 index 000000000..a49b6be72 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/README.Debian @@ -0,0 +1,51 @@ +zoneminder for Debian +--------------------- + +There is one manual step to get the web interface working. +You need to link /etc/zm/apache.conf to /etc/apache2/conf.d/zoneminder.conf, +then reload the apache config (i.e. /etc/init.d/apache2 reload) + +Changing the location for images and events +------------------------------------------- + +Zoneminder, in its upstream form, stores data in /usr/share/zoneminder/. This +package modifies that by changing /usr/share/zoneminder/images and +/usr/share/zoneminder/events to symlinks to directories under +/var/cache/zoneminder. + +There are numerous places these could be put and ways to do it. But, at the +moment, if you change this, an upgrade will fail with a warning about these +locations having changed (the reason for this was that previously, an upgrade +would silently revert the changes and cause event loss - refer +bug #608793). + +If you do want to change the location, here are a couple of suggestions. + +These lines would mount /dev/sdX1 to /video_storage, and then 'link' /video_storage +to the locations that ZoneMinder expects them to be at. + + /dev/sdX1 /video_storage ext4 defaults 0 2 + /video_storage/zoneminder/images /var/cache/zoneminder/images none bind 0 2 + /video_storage/zoneminder/events /var/cache/zoneminder/events none bind 0 2 + + or if you have a separate partition for each: + + /dev/sdX1 /var/cache/zoneminder/images ext4 defaults 0 2 + /dev/sdX2 /var/cache/zoneminder/events ext4 defaults 0 2 + + + + -- Peter Howard , Sun, 16 Jan 2010 01:35:51 +1100 + +Access to /dev/video* +--------------------- + +For cameras which require access to /dev/video*, zoneminder may need the +www-data user added to the video group in order to see those cameras: + + adduser www-data video + +Note that all web applications running on the zoneminder server will then have +access to all video devices on the system. + + -- Vagrant Cascadian Sun, 27 Mar 2011 13:06:56 -0700 diff --git a/distros/ubuntu1504_cmake_split_packages/apache.conf b/distros/ubuntu1504_cmake_split_packages/apache.conf new file mode 100644 index 000000000..92a2b6414 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/apache.conf @@ -0,0 +1,9 @@ +Alias /zm /usr/share/zoneminder + + + php_flag register_globals off + Options Indexes FollowSymLinks + + DirectoryIndex index.php + + diff --git a/distros/ubuntu1504_cmake_split_packages/autoreconf.after b/distros/ubuntu1504_cmake_split_packages/autoreconf.after new file mode 100644 index 000000000..3c8876cf7 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/autoreconf.after @@ -0,0 +1,5794 @@ +36ac0113f42c54a133e022c7283ac15c ./distros/fedora/zoneminder.f21.spec +631d9c1038bd50afa7ea1e208276b24a ./distros/fedora/zoneminder.service +fdbb1d11248d7a419925fb12fa96544d ./distros/fedora/zoneminder.f20.spec +cf2ce0ab0f4f4292a4fd7d54930ef01e ./distros/fedora/archive/zoneminder-1.24.4-installfix.patch +da387752f159ad3bd954e08e7922ffe1 ./distros/fedora/archive/zoneminder.cmake.f19.spec +ec5eb5968e1886147d0eca41e743f717 ./distros/fedora/archive/zoneminder-1.26.3-noffmpeg.patch +d758e9c7bc19cf3763159cfaf55e986a ./distros/fedora/archive/zoneminder-1.26.0-defaults.patch +93ed9713478770fb9ab5beb4754f253f ./distros/fedora/archive/zoneminder.f19.spec +6535fdd440ca5b4c70ccf6286ad67226 ./distros/fedora/archive/zoneminder-1.26.4-dbinstall.patch +b37d0026d5f9462c5fb507fcc916dd5f ./distros/fedora/archive/zoneminder-1.26.3-dbinstall.patch +9a739e4bfcbb66cdd7c7dec4c217470c ./distros/fedora/archive/zoneminder-1.24.3-runlevel.patch +bf41ee3264703476ab072c6e88da83d1 ./distros/fedora/zoneminder.tmpfiles +b77af584efc3de215dd3a9d449989763 ./distros/fedora/README.Fedora +430610b251c76f3adc1adf9e9037c9e3 ./distros/fedora/redalert.wav +dff3db013c22afeb7d6c9dc4eb105f43 ./distros/fedora/zoneminder-1.28.0-defaults.patch +a2bed831afd59ad6ea3b972d4c6e2593 ./distros/fedora/zoneminder.conf +ff9d8cf901e30e8e7b655cf1b6a220f0 ./distros/fedora/zoneminder.logrotate +cd02fd93bc998dbeca5607fc631fe654 ./distros/fedora/CMakeLists.txt +67df387e312fa2ca4d524475c5a8b269 ./distros/debian_cmake/dirs +7c5aba41f53293b712fd86d08ed5b36e ./distros/debian_cmake/compat +e2e2f9b1d2026a2f6a47030b7322c09e ./distros/debian_cmake/init.d +6b097e14fd6f6a41b162a326d47c3c0c ./distros/debian_cmake/README.Debian +5069cdb6ed90d359f09e87a5eb9db612 ./distros/debian_cmake/copyright +f78d9f1a9f4de83e74c41abe5a762bd6 ./distros/debian_cmake/control +a81b6820a3399e20412e77034e838412 ./distros/debian_cmake/rules +327c45c200cd66e796ae059c709c0adb ./distros/debian_cmake/watch +62bcc6a3d313ff213dc27c14326dd61e ./distros/debian_cmake/links +20eb5d0df8842df2df7e75d60330d3b9 ./distros/debian_cmake/apache.conf +e7266ba90319421311eae24c9009c9d2 ./distros/debian_cmake/preinst +a15f40ea51f88083dffd1df1fa55087f ./distros/debian_cmake/install +ac036608c5c402f92926505d0f0ab0e4 ./distros/debian_cmake/docs +50b93d6ff071d0e219223cf2453954c7 ./distros/debian_cmake/postrm +145566735fa890c4ae69a40667530e1c ./distros/debian_cmake/postinst +f41e52c62d427e15ac1dcc644f2195f2 ./distros/debian_cmake/changelog +d1e124500a76c585074b6c67f1e269b4 ./distros/debian/README.source +9072a65367b02191e3558347bbd8d68e ./distros/debian/dirs +7c5aba41f53293b712fd86d08ed5b36e ./distros/debian/compat +b5a54033efcc9ff3c29b8f56771b31e7 ./distros/debian/init.d +6b097e14fd6f6a41b162a326d47c3c0c ./distros/debian/README.Debian +722ee23d6e76b10f1eae240ea1a49117 ./distros/debian/copyright +f41f5d0666b79f255f83d89d170ad70e ./distros/debian/control +71ecb15d7b4c2ffa86c39c4950bdaa69 ./distros/debian/rules +327c45c200cd66e796ae059c709c0adb ./distros/debian/watch +62bcc6a3d313ff213dc27c14326dd61e ./distros/debian/links +83f158b9cfd39180e8210a11849a5326 ./distros/debian/apache.conf +e7266ba90319421311eae24c9009c9d2 ./distros/debian/preinst +3295df67ccd495efd40c4070bc7db9fe ./distros/debian/install +ac036608c5c402f92926505d0f0ab0e4 ./distros/debian/docs +d41d8cd98f00b204e9800998ecf8427e ./distros/debian/patches/series +c97d936f197ff61af4cf1ff4411c1b87 ./distros/debian/postrm +145566735fa890c4ae69a40667530e1c ./distros/debian/postinst +b6a1e435a67a5e42de84b1b8e96a0b9a ./distros/debian/changelog +45384403199eccd6476d1bf8d03f3b63 ./distros/ubuntu1410/zoneminder-core.config +112313e5183853584e6438f1e93b5d1c ./distros/ubuntu1410/zoneminder-ui-base.config +c4dc6c754dc0459e8fa55f936ac44fce ./distros/ubuntu1410/zoneminder-core.dirs +7c5aba41f53293b712fd86d08ed5b36e ./distros/ubuntu1410/compat +6b097e14fd6f6a41b162a326d47c3c0c ./distros/ubuntu1410/README.Debian +722ee23d6e76b10f1eae240ea1a49117 ./distros/ubuntu1410/copyright +74aaf1c7713607d0b7c61e57413bbed9 ./distros/ubuntu1410/zoneminder-core.links +108c6ab0bd6fb0b90e100b058c210bbb ./distros/ubuntu1410/zoneminder-database.templates +cf5c4ec672f574a27a00eb44352230ed ./distros/ubuntu1410/zoneminder-ui-base.postinst +96582f0c2d26f43896dd1722aa7ffdce ./distros/ubuntu1410/control +38238d0966419b17181186f70275e216 ./distros/ubuntu1410/rules +d261cd2b2faa4dac157335e1e4f46b9f ./distros/ubuntu1410/po/POTFILES.in +b58fa875bbbe10155ef03bbd2876cabc ./distros/ubuntu1410/po/templates.pot +64f325327eb820f669f1d2a712d72876 ./distros/ubuntu1410/po/fr.po +bb2acd3aac786d4c9acce222e1d57266 ./distros/ubuntu1410/zoneminder-core.zoneminder.tmpfile +15aeddec2ea55d4520a3dd0301352d44 ./distros/ubuntu1410/zoneminder-core.install +01230c86823e3435f6a3c3199aaf23d3 ./distros/ubuntu1410/zoneminder-ui-xml.install +50e99e2362d2656d7e91a427ed6e4d5f ./distros/ubuntu1410/autoreconf.after +4c4678a2118fbef1bd0a49850ef49f32 ./distros/ubuntu1410/zoneminder-ui-base.install +41efc1fe6275460f9e9e7a32d3a8b8cb ./distros/ubuntu1410/autoreconf.before +20eb5d0df8842df2df7e75d60330d3b9 ./distros/ubuntu1410/apache.conf +7d5984727b13f2413a808c0a49064666 ./distros/ubuntu1410/zoneminder-core.preinst +2ea8b5e539b9d3fef230d7a684fe4fd4 ./distros/ubuntu1410/zoneminder-ui-mobile.install +c22bccac94ac55e91dfd0cda85a501a0 ./distros/ubuntu1410/zoneminder-database.prerm +e1c77e20b631d23c141cf45206d1ba51 ./distros/ubuntu1410/zoneminder-core.templates +b00d28a06ea5bc8e71c7a7511d0f742e ./distros/ubuntu1410/zoneminder-core.postrm +9b039676f7f85562d44adcf2b54ae6c2 ./distros/ubuntu1410/zoneminder-core.postinst +9f2fa1326e1853f1667be70a7aa09018 ./distros/ubuntu1410/zoneminder-core.zoneminder.service +37ccc83bb75a9a07d3e6fdcfd3933761 ./distros/ubuntu1410/zoneminder-database.postrm +893c9cc302f18b3ea7748b4cce97b4b2 ./distros/ubuntu1410/libzoneminder-perl.install +38e25f9e02f0f724dad69c4e1a3dc1d5 ./distros/ubuntu1410/zoneminder-ui-base.templates +ac036608c5c402f92926505d0f0ab0e4 ./distros/ubuntu1410/docs +00d1f9796ead7022af0f475bad88a421 ./distros/ubuntu1410/zoneminder-database.install +c85387fb53ef02b1f00924e8b44201f6 ./distros/ubuntu1410/zoneminder-database.config +2ee1c3c6ce369d02b44e652fa22bde5c ./distros/ubuntu1410/zoneminder-ui-base.postrm +726518a41553bb4f6b3f9e7051d88f1b ./distros/ubuntu1410/zoneminder-ui-classic.install +1ab0f150b42784da2e07475029c7cde6 ./distros/ubuntu1410/zoneminder-database.postinst +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1410/patches/series +462b03b0667e79179d457a5e33f735d8 ./distros/ubuntu1410/zoneminder-ui-base.links +ac3e41e591a82f16e3929a4bade77669 ./distros/ubuntu1410/source/options +c5fc031a250b2d76fe051ac3621620ab ./distros/ubuntu1410/source/format +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1410/source/local-options +34a5614f084b1018b9934117e621e55d ./distros/ubuntu1410/zoneminder-database.dirs +b5a54033efcc9ff3c29b8f56771b31e7 ./distros/ubuntu1410/zoneminder-core.zoneminder.init +1164bc28aca7c5ba42aa44c6b316dd15 ./distros/ubuntu1410/changelog +9336fe757053e0128a2899b9505e8c4f ./distros/ubuntu1504/zoneminder.service +9072a65367b02191e3558347bbd8d68e ./distros/ubuntu1504/dirs +7ea3643e1460f62055316fb5e3b4e5a8 ./distros/ubuntu1504/zoneminder.tmpfile +7c5aba41f53293b712fd86d08ed5b36e ./distros/ubuntu1504/compat +ebff2c7cf2c7bd2c7a85bd523f54bfbf ./distros/ubuntu1504/README.Debian +722ee23d6e76b10f1eae240ea1a49117 ./distros/ubuntu1504/copyright +cc1eb330c4affceca07da2cb20f0a8b1 ./distros/ubuntu1504/control +5fdf0f8c6cdf05b8e155da2cae0c07d0 ./distros/ubuntu1504/rules +327c45c200cd66e796ae059c709c0adb ./distros/ubuntu1504/watch +62bcc6a3d313ff213dc27c14326dd61e ./distros/ubuntu1504/links +20eb5d0df8842df2df7e75d60330d3b9 ./distros/ubuntu1504/apache.conf +e7266ba90319421311eae24c9009c9d2 ./distros/ubuntu1504/preinst +3295df67ccd495efd40c4070bc7db9fe ./distros/ubuntu1504/install +ac036608c5c402f92926505d0f0ab0e4 ./distros/ubuntu1504/docs +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1504/patches/series +c97d936f197ff61af4cf1ff4411c1b87 ./distros/ubuntu1504/postrm +057c752f843bdd21580068f36104179a ./distros/ubuntu1504/postinst +7bc0395a55a27a028e557094adc61bb6 ./distros/ubuntu1504/changelog +9072a65367b02191e3558347bbd8d68e ./distros/raspbian/dirs +e94a52235b47e7270c9265b24f273ec6 ./distros/raspbian/files +7c5aba41f53293b712fd86d08ed5b36e ./distros/raspbian/compat +b5a54033efcc9ff3c29b8f56771b31e7 ./distros/raspbian/init.d +4a04bb22fdc3f8feb204ac95d1626c79 ./distros/raspbian/zoneminder.debhelper.log +6b097e14fd6f6a41b162a326d47c3c0c ./distros/raspbian/README.Debian +923300b9c0c8ef1b6d58844bf05cbead ./distros/raspbian/zoneminder-dbg/DEBIAN/md5sums +f119684c9021cbb23b17a266b716bab2 ./distros/raspbian/zoneminder-dbg/DEBIAN/control +4dd50a5c0b8b83eec017e1c108fa770c ./distros/raspbian/zoneminder-dbg/usr/share/doc/zoneminder-dbg/changelog.Debian.gz +722ee23d6e76b10f1eae240ea1a49117 ./distros/raspbian/zoneminder-dbg/usr/share/doc/zoneminder-dbg/copyright +27fcd0f464860f34ee715c84d1de9734 ./distros/raspbian/zoneminder-dbg/usr/share/doc/zoneminder-dbg/changelog.gz +b574b284b16492ed28729aeb5fbb66f5 ./distros/raspbian/zoneminder/DEBIAN/md5sums +01b4460a1f2d4ac1ff63b035f41c303b ./distros/raspbian/zoneminder/DEBIAN/control +995d2b90f757a0f7dd61af0c43f0cab6 ./distros/raspbian/zoneminder/DEBIAN/prerm +f8f4897acefb466933adb9629373f041 ./distros/raspbian/zoneminder/DEBIAN/preinst +c644056d57e40334389691b652c172f5 ./distros/raspbian/zoneminder/DEBIAN/conffiles +441213273c9e3878a835f6b3122ee83d ./distros/raspbian/zoneminder/DEBIAN/postrm +ba453ba095c7811aad2e54caf47b41b9 ./distros/raspbian/zoneminder/DEBIAN/postinst +4b3afb84b2b71ef56df09997a350bd04 ./distros/raspbian/zoneminder/usr/share/zoneminder/graphics/spinner.gif +e07c0775523271d629035dc8921dffc7 ./distros/raspbian/zoneminder/usr/share/zoneminder/graphics/favicon.ico +a840cd88b33f95a014cd654e0a615fd9 ./distros/raspbian/zoneminder/usr/share/zoneminder/graphics/transparent.gif +718d8596a14d123d83afb0d5d6d6fd96 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/includes/init.php +cf2a637c699c32648c715d2faec7c4de ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/includes/config.php +9355288fed99c00c68f8623a3e73280e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/includes/functions.php +96a21cecd35ed5d1b732bfe74b1535ef ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/views/actions.php +83f5492302df18de8c7090a9fa8ac3e7 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/views/notfound.png +f487b23a0841587841fd3dd34306d677 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/views/console.php +d41d8cd98f00b204e9800998ecf8427e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/views/none.php +33d9276165e48e85f9b76d96ceb72c43 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/skin.php +67bdd7f59ebc311b9cd8954d57f68c2d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/css/skin.css +0814d7addb49c87b8cc29eaff5c8effc ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/includes/init.php +2e1176dc3923dd9a44b19754139a1555 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/includes/control_functions.php +3f1549ab15e953d0e1eb5ea978677e8d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/includes/config.php +5c15d51173b096e5597c329511ce7d74 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/includes/functions.php +d5b4372487f53fadf1da7397ae10c77b ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/frame.php +224db60a7b9d89678e3ca4a5de5803fb ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/filter.php +fcf239e684be46104251247cfc51265f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/login.php +63c88c56fe6c4104f811847f70fe7b6d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/watch.php +d52ac90fc23bfc97a3b9afe117c66642 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/event.php +5a61e2227587163542bebb4dfb77fe1f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/css/console.css +6d8509c58a57938eedadb498c9fd9961 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/error.php +e5c59543e4dce3d2719a2d9a8b52fa9c ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/state.php +c121ca1f9a8c4b693b3dcb4bd63d8e7e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/montage.php +1ad2154c2ab8d4e651087584ff533359 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/events.php +6ee5d2b987944284e0fd52e158d70c52 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/console.php +97f6771e6e530e0323c8a7455d4c087b ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/devices.php +e9202a011a59bcb4f4e49a9811f56b03 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/eventdetails.php +4707ce2043a6964c6b0886f8404b37da ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/function.php +b42a65ca6f80ffe2ef69b1bf6d0dfd05 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/video.php +1ee43243aff2957f555b2025fe121ddb ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/skin.php +b08bbad185d4f141f4e16a32961f7e10 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/point-o.gif +3aea4c08fe3d0882bbb50d6a880b9d3e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/center.gif +10481c373da9f2e33955f5f684701e35 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-ur.gif +4253a17d69f9c9f105864b57ef1da4ee ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-l-u.gif +2357c0f1dec549fb5866341acf2f8e64 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-dl.gif +b36b743446eb998574343b265fc2a327 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-dr.gif +de6d2a2b0bd54f72d5c8bde9fddfc56f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-ul.gif +93f79d7c400d1988e58791d692050380 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/point-g.gif +6a948184e447f61a38d54609194eb647 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-l-d.gif +e252c31fdb0b3a65a082069b37042a0f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/seq-u.gif +330f0709c7b846ed5b3e990a6b0b6839 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-u.gif +0c2b9346b65233183cca8dbaa6ee1db2 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-s-d.gif +dad7467542959f7e571f12d0a4988c98 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-r.gif +2c0f5bb849832ea968cffc648d45381c ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-d.gif +2e743de572b45088c05f0471f63fb710 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/point-r.gif +98212c6b29fcd9a09e6d16607fe65909 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/seq-d.gif +269dca955356f221c9ea271f3e259763 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-l.gif +4b755122db75084dd39297fbc1822f27 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-s-u.gif +d41d8cd98f00b204e9800998ecf8427e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/includes/init.php +7c60f2ccaa5b4473b5f9a942c5fea373 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/includes/timeline_functions.php +b6787b20659ab4ae5b06cb9f9900330d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/includes/control_functions.php +5248a1135175c05b1860dac97cca5c0f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/includes/config.php +eff1e8ea2a5418ed47ce69386b4a3e61 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/includes/export_functions.php +1b3a274b77c824b4506765106205f598 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/includes/functions.php +4d1463e6bc5ed133ede23e6372bcbdbf ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/controlcaps.php +1b57a2fecd32647215f68998bffba25a ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/controlpreset.php +97bd8f9eae89b8bb897559ffa0694228 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/monitor.php +c614ed7ac478bf5c9ef863900d89ea66 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/frame.php +21495b9af3361009cb8e77f0fec4a996 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/filter.php +1d675229155ceaa8982d2fc47d47d5f6 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/options.php +8d0be05a8725ed889b056ab3d2acb505 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/frames.php +4ca1ad1cf9c24ab566ff570a8305306a ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/status.php +b571e7b897a14ba6c0af756371fcd197 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/login.php +cc6a31182fde7213ccd9f4d7a2dbe109 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/Makefile.am +c942ee3fa4859956057ca8a17be36989 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/eventdetail.php +9dcd343147a4b8215917b8eaf9441ba8 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/watch.php +35922ff1e4668805878c6343db3d2b18 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/optionhelp.php +3d10f253482dd12a0aaab55ce50f061e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/event.php +16d0a8a023a63797d1ea004e8ece32c6 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/user.php +548571006c1c33eeaec9d288b7d21515 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/postlogin.php +fd250dfd1edcc92d496d00b6e2963c48 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/cycle.php +0a7f4b83bbca22a5061f3f8b3771b3d2 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/donate.php +276b51cb4307b90a5cc3c1c44f86b005 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/version.php +ec4c3a85ce7b717945430d5379e5f5ff ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/device.php +379433cd368bd32608864eb304b02b64 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/groups.php +93a837f7db6bf5a045d3395e6c179718 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/error.php +d358cffe766ff93aafadc9f869c7a07e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/state.php +f675151b8785b307bf2c61efc3e2fa04 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/montage.php +f9c5481d113f67d002883034dddf385a ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/blank.php +5139dfbe378e17b3178b4959b9bf20f7 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/events.php +746ae2ce61073d614242cb3d6c082bce ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/settings.php +1d7491908b75a297519e740c5784e0f1 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/group.php +c3055c24489a3c952e31e105a711545e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/controlcap.php +abb35b5a54dda62386d3aa5abf9720f4 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/control.php +ff693078fbc15e321062d69c302c6aac ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/zones.php +3d9e4bcae9ec10838960e96cdc369fd7 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/filtersave.php +b611697aa6485b9e6ff6a8b342808b2d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/console.php +d95c44748df26ca2bec7d4afb079782d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/zone.php +d5f0879cbf85c330bb0e9b02aa772665 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/monitorprobe.php +189b2cb541386af6138ec96b96538026 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/devices.php +f85cbc69e7d95b4119311c726d9f672f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/monitorpreset.php +16064caa25b6c51360e10ee91210e8fe ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/state.js +c15861718da9974b057a4e6641759bad ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/group.js +de8db540180b86df8d0fc4724df3f12b ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/user.js +59920201dfac5f9a4431f4f3a4e0364b ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/version.js +017aafda61cee8bdf65f36eedcd91644 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/console.js +0dd3c64eb2002ffda9f7cb5a57d45457 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/donate.js +7a9e7f334a1c84d56850ac3b79cd5170 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/log.js +acd524f854058f342f34d0afafbb6075 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/Makefile.am +4628f8f6e13462b957e9ab7c267ded80 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/events.js.php +832e7495163a6ef5c842475f7d44962f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/video.js.php +5cc3fc883beec9e3d1b2a9134a09a72e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/montage.js +63b5fb3cd5a7d7b5479804fac1a02ed8 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/options.js.php +3a8b64c9424f1a9ce02973021f3f1014 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/login.js +437d1084299d1163d36bd83355178a5b ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/events.js +f95f51f93a153403f28bec13da9f079e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitorpreset.js +c125327fce8e049519bb826cce5417f3 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/watch.js +56c208506cecd6a242e38d9c347558ba ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/state.js.php +59f48f29901bf0b1d2dcdbd0287a7243 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/video.js +6656671bba812476fb7964edab8ed7d5 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/groups.js +8c5c9cc7e4961559e345220c9653aec8 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/version.js.php +f9840e08f9ca3c9966315657cfdf47f5 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitorprobe.js +03cd81247cc90a19db3cba077fd00b6e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/control.js +0f09e33012eee04a62ebdb2b05c7b03a ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/cycle.js.php +925a1cf53b3191680541872b4c38b576 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/cycle.js +d80aeb3b09c3bb4db635aaab6a34dd69 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/timeline.js.php +2c9f71673c49866ef4dd2bae89658d72 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/filter.js.php +1ef503037a66111e5bde441ba8ce20cd ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/event.js +32ef30d8527086aa9ee63b73ac5df86d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/console.js.php +51f2f8a12c688c3c0e70f04929295c99 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/watch.js.php +cade1c87dd48210dcc61fbc2541e76a5 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/filter.js +2da7d63e3e1a8b4a7ddc42506e714873 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/controlpreset.js.php +9dbbc338d288c7053ca08ade4be2a08e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/event.js.php +18f6033a5de91a16561626debedbd04f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/zone.js.php +f7ed288a9c1556499ff689b277091074 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/export.js +c66feb02c549f81b7910dd31c23964b1 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitor.js.php +0062d1966577b1a04e9b430adf20e441 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/controlpreset.js +99f2883fd66369e397c28730093e0039 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/montage.js.php +f95d23b81ff41694e0f61ba33f116eff ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitor.js +d446cdfa58d7a052b099e65e1417296e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/donate.js.php +9122fd4adc69210dd059f703878da027 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/timeline.js +2cdc936339c10744b45be5560eae9488 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/devices.js +98c7d638b7e90ddae6aabc103a3a197a ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/zone.js +6a329d8f40a74659b1e1fc10763c6f6e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/export.js.php +f6db2543d3af0dd4f80a777a4dfc0c69 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/log.php +f142b8cf2d848d8277d605cc0bb5c7f0 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/none.php +b5b778dd3c8bac8c57e4cefea824eebe ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/export.php +07233ba0c8343b441c0532979c56a411 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/function.php +e77abc6802a1da3e4fd62e646a023f46 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/stats.php +bcd5568ad30fbf43c37b1fb067f6fcba ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/video.php +1551da8d4beb70e03872bf2aadecafa8 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/bandwidth.php +e4d9576ea7fc0d077e8f676ca3214510 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/logout.php +2bf800f3105556313be01bd3b4c42aca ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/timeline.php +1b5888dd1130c2624e3a89ec6914641e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/skin.php +1d4fc58a4fb06f37e330419e1de5ccc5 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/js/skin.js.php +dfb38ec6d3f08243b8ed1d3fc3b3370e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/js/skin.js +8218a18edccf1204d7f6b5be75fd0d78 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/es_ar.php +589fbc097bf0eeaf0470127f7760ec1e ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/pt_br.php +37850e5a2c5496828512b7e752d59ee8 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/dk_dk.php +b194629ea544221b206616c18a0c148a ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/hu_hu.php +b8015b85b9c032dcb061761731b084b8 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/fr_fr.php +b5c7fe7fa19ab9532b4a30723e099881 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/pl_pl.php +5ddb50407c87162ef3bd88cc88a69de1 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/it_it.php +ff9185a540eda7598ce4607045cbfb95 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/se_se.php +0d46d10e46dbbfcdfa3be6ef5ffd0eeb ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/nl_nl.php +bc88aced50114c408e703089ed2c58a1 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/ru_ru.php +6ee18a4395de40fb7e74876ca8725768 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/ro_ro.php +2ce9bebd55d946cf4ea9d0776df0cc7d ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/en_us.php +321a20460bb594abb17b3b925f6c98f2 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/cn_zh.php +c4555f9101c6d257b03cb409fae4529d ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/big5_big5.php +cb3bc7a87a69793b4b7bf90f1737b6b4 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/et_ee.php +fc2bf1773c63c42f4da071ce417a7aec ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/ja_jp.php +86ed6db147aeb77e12b76f47bf3364b5 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/cs_cz.php +42cd66b87061957f08489cb649fa8adf ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/en_gb.php +c53b9bede29062c0e76271c91367a04a ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/he_il.php +c777020c596cee7ceddc1646f19a3080 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/de_de.php +f3a96b4e82b5e7d722d860b0371e92e2 ./distros/raspbian/zoneminder/usr/share/zoneminder/css/reset.css +d3f02477779fa8a2cddd1c1605583b96 ./distros/raspbian/zoneminder/usr/share/zoneminder/css/overlay.css +a21186623f461fbdf94a1000fb081ee0 ./distros/raspbian/zoneminder/usr/share/zoneminder/css/spinner.css +5dae654caa50798391cecd6e67a49efc ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/actions.php +ea76e136916631c564343e24df07de2b ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/logger.php +8ae8d5b773c4cc9cda879f57aee04dfe ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/control_functions.php +742ad5a8e5eef1b9ce20f1beb5905aed ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/lang.php +ebad7dc7382183db4dd29537868bcae6 ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/config.php +63bdb662ad9c56e1f39a856d67ae1432 ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/database.php +ee1cea9e8373c99741824f8f7be3e4b9 ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/functions.php +d9b8cc5ecc4a1f26e057df31675b55cd ./distros/raspbian/zoneminder/usr/share/zoneminder/views/file.php +90e3a0c17c6d5ac8b0b30e749c89a4ce ./distros/raspbian/zoneminder/usr/share/zoneminder/views/image.php +6dee62a0963ecdc4b7ccb353b7ae7424 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.27.0.sql +bd8b4735fee0bbb064a140819347df6d ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.0.1.sql +632200d5a6238e256e7cf80de95156dd ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.19.2.sql +821f1c1d6c52f99dd47ac14d61fa5640 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.22.2.sql +9045cba37b57d8956c428b1c137ffdff ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_create.sql +8b07b11c7cad1914c3ea833b8ed5817b ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.24.3.sql +3fca704937207aa222e77210aa0c25e0 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.19.5.sql +97edc0c5579da47e346d42df1e545eb0 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.20.0.sql +92d0e29600b0f23c3cabdc02ce6259e2 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.11.sql +08d098374092ba16eb3459a1aa2a8229 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.24.4.sql +54f6c2d009ad16095cad89d9855c91c2 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.27.99.0.sql +4c5855feeaaf945c29c43292e5c74197 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.26.3.sql +c1594ffeff663ea370dbbaeb272e10db ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.22.1.sql +e2dbebece1d49bea27f756895a663f86 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.16.sql +2b89f4c950e227e9313cf7418727f3de ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.26.0.sql +7c452e51249b26c7d6bc2651bd008680 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.21.2.sql +92d5871c239ea24a2bdd738e0776a750 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.28.0.sql +f96d352e85bbffb74ae0c6b354c76cac ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.24.2.sql +85c2f951462a9ca699af571910b2f5e7 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.21.0.sql +6f75164dc4ab8e6189ccc8a2f3a006e4 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.17.2.sql +8601c639ef779f73b37e00df75329bf0 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.13.sql +4466a07866e466e4a69a6986b2f1d0cb ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.23.1.sql +6314f20b3f02056792caf93944965fd8 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.23.0.sql +452cced335ec34b78b4d091b7901ffd5 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.21.1.sql +4ec7ea6a41ced9a48b5922f359a56b6b ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.19.4.sql +c75ceef3b6954b8a8047010bea8d6d4f ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.7.sql +5d46d42dd9f62cdaedd5190f05b0a618 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.24.0.sql +8388ea9b05577c775206dcfd5df72856 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.18.0.sql +bee064f205c14f5c20501e739ce80a1e ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.8.sql +990aade37fd26b6fa4ffdd3a13c48b24 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.19.1.sql +34d526653752e2ec9722b21a007d79e8 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.22.3.sql +e35625686e01f368b3f8f87359aaac7c ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.15.sql +9c82b2ea73453054f9a69c787ec3596b ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.22.0.sql +2f7281f19a02402c8a2b603143bc203d ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.12.sql +07f00f03f78eca783cfc115fcf1168aa ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.19.3.sql +83decad8946e51529e7f7bbc13c743cf ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.24.1.sql +795313d24e9c26b3557feb386df603c6 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.26.1.sql +be7fe21854b261df5b6b28d92ce0dad4 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.19.0.sql +2740f9a92352e7d91be18a67115be71d ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.20.1.sql +ee60615a820f97e43ebab88f173b9921 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.26.5.sql +5880f07d8c485d28a002e45a254c47a5 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.17.1.sql +b7468afae4c69e654a4c61feec101730 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.18.1.sql +9c0fc358cdc873030b0367d005f6b765 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.21.4.sql +fd4e7c581673c85f9734bfdf45337b99 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.23.2.sql +54464055410fdae4f296c00c963bdd4c ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.23.3.sql +dd2109c3b45b0243d92e21031b7a55e0 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.9.sql +6c09c69e9b66b83a0b8ef8f37f985ebc ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.21.3.sql +5983fcbe9f352433a8cdba6dadea4d5a ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.10.sql +e0651ab19ce94e12f2a05481d4847b52 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.26.2.sql +06031ab17a0397dcc824cf7e56610771 ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/status.php +c518c03f8783cfb822d3fab322c66bd7 ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/event.php +433c99927f1961f159562627f3c79800 ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/alarm.php +c65641a2edd9bac342684936c391d444 ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/control.php +bcf111c3a38a3a94d5600f33d89416eb ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/zone.php +74836750b8f89f54054ffb31cd67f135 ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/log.php +bf81f42111e73d054802f0aa72027c8e ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/stream.php +d108695d5815a3fd528df2403f3c50cd ./distros/raspbian/zoneminder/usr/share/zoneminder/index.php +6d1a5880671e67c0d6384a9d33143309 ./distros/raspbian/zoneminder/usr/share/zoneminder/js/logger.js +1eb33d67d6069ec8723920e59e602d31 ./distros/raspbian/zoneminder/usr/share/zoneminder/js/overlay.js +2f4357273ede74623cd7f3dbc210da7f ./distros/raspbian/zoneminder/usr/share/zoneminder/js/mootools.ext.js +861459718684608408e7427d85ad732d ./distros/raspbian/zoneminder/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-nc.js +d514b6d7bbe53cd04ec0558821146e1f ./distros/raspbian/zoneminder/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-yc.js +0c240ed4306c44e2cb6206b11919afa8 ./distros/raspbian/zoneminder/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-yc.js +0b90452e783f31a382c06155a8a3605a ./distros/raspbian/zoneminder/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-nc.js +567590c0a9aa08352375bc19ca34c449 ./distros/raspbian/zoneminder/usr/share/polkit-1/actions/com.zoneminder.systemctl.policy +176294d55f322804317befe0c8129348 ./distros/raspbian/zoneminder/usr/share/polkit-1/rules.d/com.zoneminder.systemctl.rules +4dd50a5c0b8b83eec017e1c108fa770c ./distros/raspbian/zoneminder/usr/share/doc/zoneminder/changelog.Debian.gz +6b097e14fd6f6a41b162a326d47c3c0c ./distros/raspbian/zoneminder/usr/share/doc/zoneminder/README.Debian +722ee23d6e76b10f1eae240ea1a49117 ./distros/raspbian/zoneminder/usr/share/doc/zoneminder/copyright +bf234f8325eef492dfd31ccc1d044dbc ./distros/raspbian/zoneminder/usr/share/doc/zoneminder/README.md.gz +27fcd0f464860f34ee715c84d1de9734 ./distros/raspbian/zoneminder/usr/share/doc/zoneminder/changelog.gz +3d9d9875bcba0fd1bd20b0da452ec99a ./distros/raspbian/zoneminder/usr/lib/cgi-bin/zms +3d9d9875bcba0fd1bd20b0da452ec99a ./distros/raspbian/zoneminder/usr/lib/cgi-bin/nph-zms +e73a0d5ac32d84894e6111a7d386989c ./distros/raspbian/zoneminder/usr/bin/zmaudit.pl +6dcdcf2fedd7141a9200f8c5f965a726 ./distros/raspbian/zoneminder/usr/bin/zmcamtool.pl +7d228dbdb071e161000473b32f796590 ./distros/raspbian/zoneminder/usr/bin/zmsystemctl.pl +a8a7ff2d987e9f694b4bd55bc8fd2868 ./distros/raspbian/zoneminder/usr/bin/zmvideo.pl +c5d8693a57ee669e43a0e091f50f99c9 ./distros/raspbian/zoneminder/usr/bin/zmf +6a3b69b9647a78e7c4f3256b45fa4b2b ./distros/raspbian/zoneminder/usr/bin/zmcontrol.pl +c56439aa4e9126c4b64bd3e9f3a4b00e ./distros/raspbian/zoneminder/usr/bin/zmwatch.pl +a20e15c8b5c8261e4e6a53bb8b4b09fb ./distros/raspbian/zoneminder/usr/bin/zmc +2d1f8febad357dd2bac9e9946e248c49 ./distros/raspbian/zoneminder/usr/bin/zmdc.pl +818dda5e2680bb3d7b3b9809b7a098a1 ./distros/raspbian/zoneminder/usr/bin/zmtrack.pl +a79d951c23921f01dbbb1d428140c95e ./distros/raspbian/zoneminder/usr/bin/zmstreamer +777fedf0edcdb13572149635a84b1e23 ./distros/raspbian/zoneminder/usr/bin/zmpkg.pl +527926beeaea4e9dfd0006d069b9684f ./distros/raspbian/zoneminder/usr/bin/zmupdate.pl +5e864d2a5261c07f315114de6f29f65b ./distros/raspbian/zoneminder/usr/bin/zma +e1e265fb18764b8a0483e8f4372f08fb ./distros/raspbian/zoneminder/usr/bin/zmtrigger.pl +414f4912d096962faac65074125c29cd ./distros/raspbian/zoneminder/usr/bin/zmx10.pl +3e629a608f101b9832a25abd451cb336 ./distros/raspbian/zoneminder/usr/bin/zmu +2819a863d9385427caa75edb10fbbd5d ./distros/raspbian/zoneminder/usr/bin/zmfilter.pl +b5a54033efcc9ff3c29b8f56771b31e7 ./distros/raspbian/zoneminder/etc/init.d/zoneminder +00537a51e40686957c8fa7b3e9b41d7b ./distros/raspbian/zoneminder/etc/zm/zm.conf +83f158b9cfd39180e8210a11849a5326 ./distros/raspbian/zoneminder/etc/zm/apache.conf +722ee23d6e76b10f1eae240ea1a49117 ./distros/raspbian/copyright +3b6cd95d0bb0767e8c3f61dca32f4356 ./distros/raspbian/control +4b3afb84b2b71ef56df09997a350bd04 ./distros/raspbian/tmp/usr/share/zoneminder/graphics/spinner.gif +e07c0775523271d629035dc8921dffc7 ./distros/raspbian/tmp/usr/share/zoneminder/graphics/favicon.ico +a840cd88b33f95a014cd654e0a615fd9 ./distros/raspbian/tmp/usr/share/zoneminder/graphics/transparent.gif +718d8596a14d123d83afb0d5d6d6fd96 ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/includes/init.php +cf2a637c699c32648c715d2faec7c4de ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/includes/config.php +9355288fed99c00c68f8623a3e73280e ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/includes/functions.php +96a21cecd35ed5d1b732bfe74b1535ef ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/views/actions.php +83f5492302df18de8c7090a9fa8ac3e7 ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/views/notfound.png +f487b23a0841587841fd3dd34306d677 ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/views/console.php +d41d8cd98f00b204e9800998ecf8427e ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/views/none.php +33d9276165e48e85f9b76d96ceb72c43 ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/skin.php +67bdd7f59ebc311b9cd8954d57f68c2d ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/css/skin.css +0814d7addb49c87b8cc29eaff5c8effc ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/includes/init.php +2e1176dc3923dd9a44b19754139a1555 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/includes/control_functions.php +3f1549ab15e953d0e1eb5ea978677e8d ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/includes/config.php +5c15d51173b096e5597c329511ce7d74 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/includes/functions.php +d5b4372487f53fadf1da7397ae10c77b ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/frame.php +224db60a7b9d89678e3ca4a5de5803fb ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/filter.php +fcf239e684be46104251247cfc51265f ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/login.php +63c88c56fe6c4104f811847f70fe7b6d ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/watch.php +d52ac90fc23bfc97a3b9afe117c66642 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/event.php +5a61e2227587163542bebb4dfb77fe1f ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/css/console.css +6d8509c58a57938eedadb498c9fd9961 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/error.php +e5c59543e4dce3d2719a2d9a8b52fa9c ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/state.php +c121ca1f9a8c4b693b3dcb4bd63d8e7e ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/montage.php +1ad2154c2ab8d4e651087584ff533359 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/events.php +6ee5d2b987944284e0fd52e158d70c52 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/console.php +97f6771e6e530e0323c8a7455d4c087b ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/devices.php +e9202a011a59bcb4f4e49a9811f56b03 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/eventdetails.php +4707ce2043a6964c6b0886f8404b37da ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/function.php +b42a65ca6f80ffe2ef69b1bf6d0dfd05 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/video.php +1ee43243aff2957f555b2025fe121ddb ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/skin.php +b08bbad185d4f141f4e16a32961f7e10 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/point-o.gif +3aea4c08fe3d0882bbb50d6a880b9d3e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/center.gif +10481c373da9f2e33955f5f684701e35 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-ur.gif +4253a17d69f9c9f105864b57ef1da4ee ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-l-u.gif +2357c0f1dec549fb5866341acf2f8e64 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-dl.gif +b36b743446eb998574343b265fc2a327 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-dr.gif +de6d2a2b0bd54f72d5c8bde9fddfc56f ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-ul.gif +93f79d7c400d1988e58791d692050380 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/point-g.gif +6a948184e447f61a38d54609194eb647 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-l-d.gif +e252c31fdb0b3a65a082069b37042a0f ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/seq-u.gif +330f0709c7b846ed5b3e990a6b0b6839 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-u.gif +0c2b9346b65233183cca8dbaa6ee1db2 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-s-d.gif +dad7467542959f7e571f12d0a4988c98 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-r.gif +2c0f5bb849832ea968cffc648d45381c ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-d.gif +2e743de572b45088c05f0471f63fb710 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/point-r.gif +98212c6b29fcd9a09e6d16607fe65909 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/seq-d.gif +269dca955356f221c9ea271f3e259763 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-l.gif +4b755122db75084dd39297fbc1822f27 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-s-u.gif +d41d8cd98f00b204e9800998ecf8427e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/includes/init.php +7c60f2ccaa5b4473b5f9a942c5fea373 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/includes/timeline_functions.php +b6787b20659ab4ae5b06cb9f9900330d ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/includes/control_functions.php +5248a1135175c05b1860dac97cca5c0f ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/includes/config.php +eff1e8ea2a5418ed47ce69386b4a3e61 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/includes/export_functions.php +1b3a274b77c824b4506765106205f598 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/includes/functions.php +4d1463e6bc5ed133ede23e6372bcbdbf ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/controlcaps.php +1b57a2fecd32647215f68998bffba25a ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/controlpreset.php +97bd8f9eae89b8bb897559ffa0694228 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/monitor.php +c614ed7ac478bf5c9ef863900d89ea66 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/frame.php +21495b9af3361009cb8e77f0fec4a996 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/filter.php +1d675229155ceaa8982d2fc47d47d5f6 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/options.php +8d0be05a8725ed889b056ab3d2acb505 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/frames.php +4ca1ad1cf9c24ab566ff570a8305306a ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/status.php +b571e7b897a14ba6c0af756371fcd197 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/login.php +cc6a31182fde7213ccd9f4d7a2dbe109 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/Makefile.am +c942ee3fa4859956057ca8a17be36989 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/eventdetail.php +9dcd343147a4b8215917b8eaf9441ba8 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/watch.php +35922ff1e4668805878c6343db3d2b18 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/optionhelp.php +3d10f253482dd12a0aaab55ce50f061e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/event.php +16d0a8a023a63797d1ea004e8ece32c6 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/user.php +548571006c1c33eeaec9d288b7d21515 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/postlogin.php +fd250dfd1edcc92d496d00b6e2963c48 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/cycle.php +0a7f4b83bbca22a5061f3f8b3771b3d2 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/donate.php +276b51cb4307b90a5cc3c1c44f86b005 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/version.php +ec4c3a85ce7b717945430d5379e5f5ff ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/device.php +379433cd368bd32608864eb304b02b64 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/groups.php +93a837f7db6bf5a045d3395e6c179718 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/error.php +d358cffe766ff93aafadc9f869c7a07e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/state.php +f675151b8785b307bf2c61efc3e2fa04 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/montage.php +f9c5481d113f67d002883034dddf385a ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/blank.php +5139dfbe378e17b3178b4959b9bf20f7 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/events.php +746ae2ce61073d614242cb3d6c082bce ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/settings.php +1d7491908b75a297519e740c5784e0f1 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/group.php +c3055c24489a3c952e31e105a711545e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/controlcap.php +abb35b5a54dda62386d3aa5abf9720f4 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/control.php +ff693078fbc15e321062d69c302c6aac ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/zones.php +3d9e4bcae9ec10838960e96cdc369fd7 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/filtersave.php +b611697aa6485b9e6ff6a8b342808b2d ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/console.php +d95c44748df26ca2bec7d4afb079782d ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/zone.php +d5f0879cbf85c330bb0e9b02aa772665 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/monitorprobe.php +189b2cb541386af6138ec96b96538026 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/devices.php +f85cbc69e7d95b4119311c726d9f672f ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/monitorpreset.php +16064caa25b6c51360e10ee91210e8fe ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/state.js +c15861718da9974b057a4e6641759bad ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/group.js +de8db540180b86df8d0fc4724df3f12b ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/user.js +59920201dfac5f9a4431f4f3a4e0364b ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/version.js +017aafda61cee8bdf65f36eedcd91644 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/console.js +0dd3c64eb2002ffda9f7cb5a57d45457 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/donate.js +7a9e7f334a1c84d56850ac3b79cd5170 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/log.js +acd524f854058f342f34d0afafbb6075 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/Makefile.am +4628f8f6e13462b957e9ab7c267ded80 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/events.js.php +832e7495163a6ef5c842475f7d44962f ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/video.js.php +5cc3fc883beec9e3d1b2a9134a09a72e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/montage.js +63b5fb3cd5a7d7b5479804fac1a02ed8 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/options.js.php +3a8b64c9424f1a9ce02973021f3f1014 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/login.js +437d1084299d1163d36bd83355178a5b ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/events.js +f95f51f93a153403f28bec13da9f079e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/monitorpreset.js +c125327fce8e049519bb826cce5417f3 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/watch.js +56c208506cecd6a242e38d9c347558ba ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/state.js.php +59f48f29901bf0b1d2dcdbd0287a7243 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/video.js +6656671bba812476fb7964edab8ed7d5 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/groups.js +8c5c9cc7e4961559e345220c9653aec8 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/version.js.php +f9840e08f9ca3c9966315657cfdf47f5 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/monitorprobe.js +03cd81247cc90a19db3cba077fd00b6e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/control.js +0f09e33012eee04a62ebdb2b05c7b03a ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/cycle.js.php +925a1cf53b3191680541872b4c38b576 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/cycle.js +d80aeb3b09c3bb4db635aaab6a34dd69 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/timeline.js.php +2c9f71673c49866ef4dd2bae89658d72 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/filter.js.php +1ef503037a66111e5bde441ba8ce20cd ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/event.js +32ef30d8527086aa9ee63b73ac5df86d ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/console.js.php +51f2f8a12c688c3c0e70f04929295c99 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/watch.js.php +cade1c87dd48210dcc61fbc2541e76a5 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/filter.js +2da7d63e3e1a8b4a7ddc42506e714873 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/controlpreset.js.php +9dbbc338d288c7053ca08ade4be2a08e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/event.js.php +18f6033a5de91a16561626debedbd04f ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/zone.js.php +f7ed288a9c1556499ff689b277091074 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/export.js +c66feb02c549f81b7910dd31c23964b1 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/monitor.js.php +0062d1966577b1a04e9b430adf20e441 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/controlpreset.js +99f2883fd66369e397c28730093e0039 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/montage.js.php +f95d23b81ff41694e0f61ba33f116eff ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/monitor.js +d446cdfa58d7a052b099e65e1417296e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/donate.js.php +9122fd4adc69210dd059f703878da027 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/timeline.js +2cdc936339c10744b45be5560eae9488 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/devices.js +98c7d638b7e90ddae6aabc103a3a197a ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/zone.js +6a329d8f40a74659b1e1fc10763c6f6e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/export.js.php +f6db2543d3af0dd4f80a777a4dfc0c69 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/log.php +f142b8cf2d848d8277d605cc0bb5c7f0 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/none.php +b5b778dd3c8bac8c57e4cefea824eebe ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/export.php +07233ba0c8343b441c0532979c56a411 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/function.php +e77abc6802a1da3e4fd62e646a023f46 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/stats.php +bcd5568ad30fbf43c37b1fb067f6fcba ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/video.php +1551da8d4beb70e03872bf2aadecafa8 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/bandwidth.php +e4d9576ea7fc0d077e8f676ca3214510 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/logout.php +2bf800f3105556313be01bd3b4c42aca ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/timeline.php +1b5888dd1130c2624e3a89ec6914641e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/skin.php +1d4fc58a4fb06f37e330419e1de5ccc5 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/js/skin.js.php +dfb38ec6d3f08243b8ed1d3fc3b3370e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/js/skin.js +8218a18edccf1204d7f6b5be75fd0d78 ./distros/raspbian/tmp/usr/share/zoneminder/lang/es_ar.php +589fbc097bf0eeaf0470127f7760ec1e ./distros/raspbian/tmp/usr/share/zoneminder/lang/pt_br.php +37850e5a2c5496828512b7e752d59ee8 ./distros/raspbian/tmp/usr/share/zoneminder/lang/dk_dk.php +b194629ea544221b206616c18a0c148a ./distros/raspbian/tmp/usr/share/zoneminder/lang/hu_hu.php +b8015b85b9c032dcb061761731b084b8 ./distros/raspbian/tmp/usr/share/zoneminder/lang/fr_fr.php +b5c7fe7fa19ab9532b4a30723e099881 ./distros/raspbian/tmp/usr/share/zoneminder/lang/pl_pl.php +5ddb50407c87162ef3bd88cc88a69de1 ./distros/raspbian/tmp/usr/share/zoneminder/lang/it_it.php +ff9185a540eda7598ce4607045cbfb95 ./distros/raspbian/tmp/usr/share/zoneminder/lang/se_se.php +0d46d10e46dbbfcdfa3be6ef5ffd0eeb ./distros/raspbian/tmp/usr/share/zoneminder/lang/nl_nl.php +bc88aced50114c408e703089ed2c58a1 ./distros/raspbian/tmp/usr/share/zoneminder/lang/ru_ru.php +6ee18a4395de40fb7e74876ca8725768 ./distros/raspbian/tmp/usr/share/zoneminder/lang/ro_ro.php +2ce9bebd55d946cf4ea9d0776df0cc7d ./distros/raspbian/tmp/usr/share/zoneminder/lang/en_us.php +321a20460bb594abb17b3b925f6c98f2 ./distros/raspbian/tmp/usr/share/zoneminder/lang/cn_zh.php +c4555f9101c6d257b03cb409fae4529d ./distros/raspbian/tmp/usr/share/zoneminder/lang/big5_big5.php +cb3bc7a87a69793b4b7bf90f1737b6b4 ./distros/raspbian/tmp/usr/share/zoneminder/lang/et_ee.php +fc2bf1773c63c42f4da071ce417a7aec ./distros/raspbian/tmp/usr/share/zoneminder/lang/ja_jp.php +86ed6db147aeb77e12b76f47bf3364b5 ./distros/raspbian/tmp/usr/share/zoneminder/lang/cs_cz.php +42cd66b87061957f08489cb649fa8adf ./distros/raspbian/tmp/usr/share/zoneminder/lang/en_gb.php +c53b9bede29062c0e76271c91367a04a ./distros/raspbian/tmp/usr/share/zoneminder/lang/he_il.php +c777020c596cee7ceddc1646f19a3080 ./distros/raspbian/tmp/usr/share/zoneminder/lang/de_de.php +f3a96b4e82b5e7d722d860b0371e92e2 ./distros/raspbian/tmp/usr/share/zoneminder/css/reset.css +d3f02477779fa8a2cddd1c1605583b96 ./distros/raspbian/tmp/usr/share/zoneminder/css/overlay.css +a21186623f461fbdf94a1000fb081ee0 ./distros/raspbian/tmp/usr/share/zoneminder/css/spinner.css +5dae654caa50798391cecd6e67a49efc ./distros/raspbian/tmp/usr/share/zoneminder/includes/actions.php +ea76e136916631c564343e24df07de2b ./distros/raspbian/tmp/usr/share/zoneminder/includes/logger.php +8ae8d5b773c4cc9cda879f57aee04dfe ./distros/raspbian/tmp/usr/share/zoneminder/includes/control_functions.php +742ad5a8e5eef1b9ce20f1beb5905aed ./distros/raspbian/tmp/usr/share/zoneminder/includes/lang.php +ebad7dc7382183db4dd29537868bcae6 ./distros/raspbian/tmp/usr/share/zoneminder/includes/config.php +63bdb662ad9c56e1f39a856d67ae1432 ./distros/raspbian/tmp/usr/share/zoneminder/includes/database.php +ee1cea9e8373c99741824f8f7be3e4b9 ./distros/raspbian/tmp/usr/share/zoneminder/includes/functions.php +d9b8cc5ecc4a1f26e057df31675b55cd ./distros/raspbian/tmp/usr/share/zoneminder/views/file.php +90e3a0c17c6d5ac8b0b30e749c89a4ce ./distros/raspbian/tmp/usr/share/zoneminder/views/image.php +6dee62a0963ecdc4b7ccb353b7ae7424 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.27.0.sql +bd8b4735fee0bbb064a140819347df6d ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.0.1.sql +632200d5a6238e256e7cf80de95156dd ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.19.2.sql +821f1c1d6c52f99dd47ac14d61fa5640 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.22.2.sql +9045cba37b57d8956c428b1c137ffdff ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_create.sql +8b07b11c7cad1914c3ea833b8ed5817b ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.24.3.sql +3fca704937207aa222e77210aa0c25e0 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.19.5.sql +97edc0c5579da47e346d42df1e545eb0 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.20.0.sql +92d0e29600b0f23c3cabdc02ce6259e2 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.11.sql +08d098374092ba16eb3459a1aa2a8229 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.24.4.sql +54f6c2d009ad16095cad89d9855c91c2 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.27.99.0.sql +4c5855feeaaf945c29c43292e5c74197 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.26.3.sql +c1594ffeff663ea370dbbaeb272e10db ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.22.1.sql +e2dbebece1d49bea27f756895a663f86 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.16.sql +2b89f4c950e227e9313cf7418727f3de ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.26.0.sql +7c452e51249b26c7d6bc2651bd008680 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.21.2.sql +92d5871c239ea24a2bdd738e0776a750 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.28.0.sql +f96d352e85bbffb74ae0c6b354c76cac ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.24.2.sql +85c2f951462a9ca699af571910b2f5e7 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.21.0.sql +6f75164dc4ab8e6189ccc8a2f3a006e4 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.17.2.sql +8601c639ef779f73b37e00df75329bf0 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.13.sql +4466a07866e466e4a69a6986b2f1d0cb ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.23.1.sql +6314f20b3f02056792caf93944965fd8 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.23.0.sql +452cced335ec34b78b4d091b7901ffd5 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.21.1.sql +4ec7ea6a41ced9a48b5922f359a56b6b ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.19.4.sql +c75ceef3b6954b8a8047010bea8d6d4f ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.7.sql +5d46d42dd9f62cdaedd5190f05b0a618 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.24.0.sql +8388ea9b05577c775206dcfd5df72856 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.18.0.sql +bee064f205c14f5c20501e739ce80a1e ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.8.sql +990aade37fd26b6fa4ffdd3a13c48b24 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.19.1.sql +34d526653752e2ec9722b21a007d79e8 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.22.3.sql +e35625686e01f368b3f8f87359aaac7c ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.15.sql +9c82b2ea73453054f9a69c787ec3596b ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.22.0.sql +2f7281f19a02402c8a2b603143bc203d ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.12.sql +07f00f03f78eca783cfc115fcf1168aa ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.19.3.sql +83decad8946e51529e7f7bbc13c743cf ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.24.1.sql +795313d24e9c26b3557feb386df603c6 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.26.1.sql +be7fe21854b261df5b6b28d92ce0dad4 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.19.0.sql +2740f9a92352e7d91be18a67115be71d ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.20.1.sql +ee60615a820f97e43ebab88f173b9921 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.26.5.sql +5880f07d8c485d28a002e45a254c47a5 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.17.1.sql +b7468afae4c69e654a4c61feec101730 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.18.1.sql +9c0fc358cdc873030b0367d005f6b765 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.21.4.sql +fd4e7c581673c85f9734bfdf45337b99 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.23.2.sql +54464055410fdae4f296c00c963bdd4c ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.23.3.sql +dd2109c3b45b0243d92e21031b7a55e0 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.9.sql +6c09c69e9b66b83a0b8ef8f37f985ebc ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.21.3.sql +5983fcbe9f352433a8cdba6dadea4d5a ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.10.sql +e0651ab19ce94e12f2a05481d4847b52 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.26.2.sql +06031ab17a0397dcc824cf7e56610771 ./distros/raspbian/tmp/usr/share/zoneminder/ajax/status.php +c518c03f8783cfb822d3fab322c66bd7 ./distros/raspbian/tmp/usr/share/zoneminder/ajax/event.php +433c99927f1961f159562627f3c79800 ./distros/raspbian/tmp/usr/share/zoneminder/ajax/alarm.php +c65641a2edd9bac342684936c391d444 ./distros/raspbian/tmp/usr/share/zoneminder/ajax/control.php +bcf111c3a38a3a94d5600f33d89416eb ./distros/raspbian/tmp/usr/share/zoneminder/ajax/zone.php +74836750b8f89f54054ffb31cd67f135 ./distros/raspbian/tmp/usr/share/zoneminder/ajax/log.php +bf81f42111e73d054802f0aa72027c8e ./distros/raspbian/tmp/usr/share/zoneminder/ajax/stream.php +d108695d5815a3fd528df2403f3c50cd ./distros/raspbian/tmp/usr/share/zoneminder/index.php +6d1a5880671e67c0d6384a9d33143309 ./distros/raspbian/tmp/usr/share/zoneminder/js/logger.js +1eb33d67d6069ec8723920e59e602d31 ./distros/raspbian/tmp/usr/share/zoneminder/js/overlay.js +2f4357273ede74623cd7f3dbc210da7f ./distros/raspbian/tmp/usr/share/zoneminder/js/mootools.ext.js +861459718684608408e7427d85ad732d ./distros/raspbian/tmp/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-nc.js +d514b6d7bbe53cd04ec0558821146e1f ./distros/raspbian/tmp/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-yc.js +0c240ed4306c44e2cb6206b11919afa8 ./distros/raspbian/tmp/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-yc.js +0b90452e783f31a382c06155a8a3605a ./distros/raspbian/tmp/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-nc.js +567590c0a9aa08352375bc19ca34c449 ./distros/raspbian/tmp/usr/share/polkit-1/actions/com.zoneminder.systemctl.policy +176294d55f322804317befe0c8129348 ./distros/raspbian/tmp/usr/share/polkit-1/rules.d/com.zoneminder.systemctl.rules +a7a47418592df890d3846e479974d019 ./distros/raspbian/tmp/usr/lib/cgi-bin/zms +a7a47418592df890d3846e479974d019 ./distros/raspbian/tmp/usr/lib/cgi-bin/nph-zms +e73a0d5ac32d84894e6111a7d386989c ./distros/raspbian/tmp/usr/bin/zmaudit.pl +6dcdcf2fedd7141a9200f8c5f965a726 ./distros/raspbian/tmp/usr/bin/zmcamtool.pl +7d228dbdb071e161000473b32f796590 ./distros/raspbian/tmp/usr/bin/zmsystemctl.pl +a8a7ff2d987e9f694b4bd55bc8fd2868 ./distros/raspbian/tmp/usr/bin/zmvideo.pl +afde1ae4070bda8d48c4665e7e47343a ./distros/raspbian/tmp/usr/bin/zmf +6a3b69b9647a78e7c4f3256b45fa4b2b ./distros/raspbian/tmp/usr/bin/zmcontrol.pl +c56439aa4e9126c4b64bd3e9f3a4b00e ./distros/raspbian/tmp/usr/bin/zmwatch.pl +0a4c9ce5c058efe748f1776b6a83fa56 ./distros/raspbian/tmp/usr/bin/zmc +2d1f8febad357dd2bac9e9946e248c49 ./distros/raspbian/tmp/usr/bin/zmdc.pl +818dda5e2680bb3d7b3b9809b7a098a1 ./distros/raspbian/tmp/usr/bin/zmtrack.pl +64f6bd5d8e4f2c0a4d6248233bff266f ./distros/raspbian/tmp/usr/bin/zmstreamer +777fedf0edcdb13572149635a84b1e23 ./distros/raspbian/tmp/usr/bin/zmpkg.pl +527926beeaea4e9dfd0006d069b9684f ./distros/raspbian/tmp/usr/bin/zmupdate.pl +5f9130c14576356c48dc20c5aa3e917a ./distros/raspbian/tmp/usr/bin/zma +e1e265fb18764b8a0483e8f4372f08fb ./distros/raspbian/tmp/usr/bin/zmtrigger.pl +414f4912d096962faac65074125c29cd ./distros/raspbian/tmp/usr/bin/zmx10.pl +ed1f2d478be4ad7e423a63764f149413 ./distros/raspbian/tmp/usr/bin/zmu +2819a863d9385427caa75edb10fbbd5d ./distros/raspbian/tmp/usr/bin/zmfilter.pl +00537a51e40686957c8fa7b3e9b41d7b ./distros/raspbian/tmp/etc/zm/zm.conf +ca2948b662d2725d330e3218dafd7fa9 ./distros/raspbian/rules +327c45c200cd66e796ae059c709c0adb ./distros/raspbian/watch +69cc936a1777c53d3834d60d897526ce ./distros/raspbian/zoneminder.postrm.debhelper +a2fe5c93fab999b9e3ad065199b49fe1 ./distros/raspbian/autoreconf.after +afa0964211d98964d84ff8b938020e05 ./distros/raspbian/zoneminder.postinst.debhelper +c61ff5eb00ae97a633cde70f0dd86ef5 ./distros/raspbian/autoreconf.before +83f158b9cfd39180e8210a11849a5326 ./distros/raspbian/apache.conf +790dda95659d1be076f94ca8bae66654 ./distros/raspbian/zoneminder.substvars +e7266ba90319421311eae24c9009c9d2 ./distros/raspbian/preinst +4a04bb22fdc3f8feb204ac95d1626c79 ./distros/raspbian/zoneminder-dbg.debhelper.log +f7aae0b0a71c8ff213b12572eee88d38 ./distros/raspbian/zoneminder-dbg.substvars +ac036608c5c402f92926505d0f0ab0e4 ./distros/raspbian/docs +c97d936f197ff61af4cf1ff4411c1b87 ./distros/raspbian/postrm +145566735fa890c4ae69a40667530e1c ./distros/raspbian/postinst +0ec4bfedc78954e6c3c4d4423ce43805 ./distros/raspbian/changelog +a7389e0d1151b730d85b06c60840ab8b ./distros/raspbian/zoneminder.prerm.debhelper +45384403199eccd6476d1bf8d03f3b63 ./distros/debian8/zoneminder-core.config +112313e5183853584e6438f1e93b5d1c ./distros/debian8/zoneminder-ui-base.config +c4dc6c754dc0459e8fa55f936ac44fce ./distros/debian8/zoneminder-core.dirs +7c5aba41f53293b712fd86d08ed5b36e ./distros/debian8/compat +6b097e14fd6f6a41b162a326d47c3c0c ./distros/debian8/README.Debian +722ee23d6e76b10f1eae240ea1a49117 ./distros/debian8/copyright +74aaf1c7713607d0b7c61e57413bbed9 ./distros/debian8/zoneminder-core.links +108c6ab0bd6fb0b90e100b058c210bbb ./distros/debian8/zoneminder-database.templates +cf5c4ec672f574a27a00eb44352230ed ./distros/debian8/zoneminder-ui-base.postinst +621aa8fa874b7eff810ff1188d84f0e2 ./distros/debian8/control +501e3a58696c053794784b19d2a50f4d ./distros/debian8/rules +d261cd2b2faa4dac157335e1e4f46b9f ./distros/debian8/po/POTFILES.in +b58fa875bbbe10155ef03bbd2876cabc ./distros/debian8/po/templates.pot +64f325327eb820f669f1d2a712d72876 ./distros/debian8/po/fr.po +bb2acd3aac786d4c9acce222e1d57266 ./distros/debian8/zoneminder-core.zoneminder.tmpfile +15aeddec2ea55d4520a3dd0301352d44 ./distros/debian8/zoneminder-core.install +01230c86823e3435f6a3c3199aaf23d3 ./distros/debian8/zoneminder-ui-xml.install +4c4678a2118fbef1bd0a49850ef49f32 ./distros/debian8/zoneminder-ui-base.install +20eb5d0df8842df2df7e75d60330d3b9 ./distros/debian8/apache.conf +7d5984727b13f2413a808c0a49064666 ./distros/debian8/zoneminder-core.preinst +2ea8b5e539b9d3fef230d7a684fe4fd4 ./distros/debian8/zoneminder-ui-mobile.install +c22bccac94ac55e91dfd0cda85a501a0 ./distros/debian8/zoneminder-database.prerm +e1c77e20b631d23c141cf45206d1ba51 ./distros/debian8/zoneminder-core.templates +b00d28a06ea5bc8e71c7a7511d0f742e ./distros/debian8/zoneminder-core.postrm +abbc14575915f6d0482c2dc42c99d929 ./distros/debian8/zoneminder-core.postinst +9f2fa1326e1853f1667be70a7aa09018 ./distros/debian8/zoneminder-core.zoneminder.service +37ccc83bb75a9a07d3e6fdcfd3933761 ./distros/debian8/zoneminder-database.postrm +893c9cc302f18b3ea7748b4cce97b4b2 ./distros/debian8/libzoneminder-perl.install +38e25f9e02f0f724dad69c4e1a3dc1d5 ./distros/debian8/zoneminder-ui-base.templates +ac036608c5c402f92926505d0f0ab0e4 ./distros/debian8/docs +00d1f9796ead7022af0f475bad88a421 ./distros/debian8/zoneminder-database.install +c85387fb53ef02b1f00924e8b44201f6 ./distros/debian8/zoneminder-database.config +2ee1c3c6ce369d02b44e652fa22bde5c ./distros/debian8/zoneminder-ui-base.postrm +726518a41553bb4f6b3f9e7051d88f1b ./distros/debian8/zoneminder-ui-classic.install +1ab0f150b42784da2e07475029c7cde6 ./distros/debian8/zoneminder-database.postinst +d41d8cd98f00b204e9800998ecf8427e ./distros/debian8/patches/series +462b03b0667e79179d457a5e33f735d8 ./distros/debian8/zoneminder-ui-base.links +ac3e41e591a82f16e3929a4bade77669 ./distros/debian8/source/options +c5fc031a250b2d76fe051ac3621620ab ./distros/debian8/source/format +d41d8cd98f00b204e9800998ecf8427e ./distros/debian8/source/local-options +34a5614f084b1018b9934117e621e55d ./distros/debian8/zoneminder-database.dirs +4b0fe2db82df581575747360da1c692b ./distros/debian8/zoneminder-core.zoneminder.init +7d30a146264ca4002b6bc8259cb20329 ./distros/debian8/changelog +de4d710fb12cef9779e03aceb0500912 ./distros/opensuse/zoneminder.service +b3c301ed72694aa6b35f0710738ce1ac ./distros/opensuse/README.OpenSuse +fce681446608ce2604d79bdbe2720c9a ./distros/opensuse/zoneminder.tmpfiles +430610b251c76f3adc1adf9e9037c9e3 ./distros/opensuse/redalert.wav +2242b6d96b7046cb4ef0029c997fa6d5 ./distros/opensuse/zoneminder.conf +fcb5f383448605741bebb9c52c26f2a7 ./distros/opensuse/zoneminder.logrotate +a972653e3f63c7df60b78e6865102171 ./distros/opensuse/jscalendar.sh +11be72dd718dd2b235dc48d26eb15adb ./distros/opensuse/zoneminder.cmake.OS13.spec +95f2ef8c015487f2fde356b4a824b9ca ./distros/opensuse/zoneminder-1.26.5-opensuse.patch +c1aaede6aaeb157be24cd50328060f75 ./distros/opensuse/CMakeLists.txt +9072a65367b02191e3558347bbd8d68e ./distros/ubuntu1204/dirs +3962665e3c4cfeb59dff9bd195668eff ./distros/ubuntu1204/files +7c5aba41f53293b712fd86d08ed5b36e ./distros/ubuntu1204/compat +b5a54033efcc9ff3c29b8f56771b31e7 ./distros/ubuntu1204/init.d +480674678e8e3cbbf1bebb2dbbdb7e3c ./distros/ubuntu1204/zoneminder.debhelper.log +ebff2c7cf2c7bd2c7a85bd523f54bfbf ./distros/ubuntu1204/README.Debian +7a0613ca5cf517800a0d95fbed192202 ./distros/ubuntu1204/zoneminder-dbg/DEBIAN/md5sums +50b86aad87233a01e5223df01387e03d ./distros/ubuntu1204/zoneminder-dbg/DEBIAN/control +8caf64d984dc28203336dcdbf1b264f8 ./distros/ubuntu1204/zoneminder-dbg/usr/share/doc/zoneminder-dbg/changelog.Debian.gz +722ee23d6e76b10f1eae240ea1a49117 ./distros/ubuntu1204/zoneminder-dbg/usr/share/doc/zoneminder-dbg/copyright +9a148285e6c01e2c20da00b39586dba2 ./distros/ubuntu1204/zoneminder-dbg/usr/lib/debug/.build-id/3e/6f2b698616b23f39c52528e1ab0e1af5f0f9aa.debug +4a9659a705cf205444de0aa0c9c45c14 ./distros/ubuntu1204/zoneminder-dbg/usr/lib/debug/.build-id/2e/80abb922627fc7877fa286a6169bd21bdd809b.debug +0f991b9294c8e0eda99ddc5b7c728b68 ./distros/ubuntu1204/zoneminder-dbg/usr/lib/debug/.build-id/42/0d8bbbd7e1e9636a5dde9bfad5505f0a5657c3.debug +6fe6e70b646482cee0faede384b74bb7 ./distros/ubuntu1204/zoneminder-dbg/usr/lib/debug/.build-id/f2/aa85d98c2ba7952a11f9a0fbc16ee668553b5f.debug +743fb76b706d1e3cd9d30371d80e83a7 ./distros/ubuntu1204/zoneminder-dbg/usr/lib/debug/.build-id/f3/e403f6346eb195f65f0f3ffb67f95d10a6d2a0.debug +a5b3479277edf0ca93023631b03f1169 ./distros/ubuntu1204/zoneminder-dbg/usr/lib/debug/.build-id/59/f46300048ba00394c1822dd3ac906caa116f13.debug +95c60088357caeb21e0b9b6959e2d84a ./distros/ubuntu1204/zoneminder/DEBIAN/md5sums +9ba900c930d46738c5bcfe782736d02f ./distros/ubuntu1204/zoneminder/DEBIAN/control +2590c731ccf3fa2b872ca40a3d48e39f ./distros/ubuntu1204/zoneminder/DEBIAN/prerm +f8f4897acefb466933adb9629373f041 ./distros/ubuntu1204/zoneminder/DEBIAN/preinst +e129cb2e33074d1ee3f593a4ef55f779 ./distros/ubuntu1204/zoneminder/DEBIAN/conffiles +8b76e3f91fbe50be3b7d519845f8df13 ./distros/ubuntu1204/zoneminder/DEBIAN/postrm +30679cf22413b0e25d209652efacbee0 ./distros/ubuntu1204/zoneminder/DEBIAN/postinst +977a89f97201ad831a989740a1b77fec ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Logger.3pm.gz +214b514c252024d55a99f2cbd78db28e ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Database.3pm.gz +d42de6da6a816ce8e4b068db4e741e0e ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel::Serial.3pm.gz +6bcb87477afca04860f1847f23268b16 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::SkyIPCam7xx.3pm.gz +e33603e1ad00c476fc5613ecededad67 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Connection::Example.3pm.gz +bbadfcbc1ff205e9a66352b7e26423c7 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel::Inet.3pm.gz +83c339b6e44fc32250bbe59f67e97350 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::PelcoP.3pm.gz +979eb7c2795467cfcd5430affc6734d3 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel.3pm.gz +53a542a748c6dd42764d1baf611fc3a3 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::PelcoD.3pm.gz +deba69b1a35ea09a6d74a420a6a8e2d4 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::FI8908W.3pm.gz +dd8472223fc4d6333d61aafdfd64e4c7 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::TVIP862.3pm.gz +dd896145dea8a07b9cb555d1076bec56 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel::Spawning.3pm.gz +2a24e5bb888cbe1f8631f1a8f38ce45d ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::Wanscam.3pm.gz +fcd287e5a484ad7a9fb7154b2b56f911 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::General.3pm.gz +59e84c0789ea2888c79b935e53fa11a5 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder.3pm.gz +2e75e1852a1a0419ee2cffb30a0fee55 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel::Unix.3pm.gz +106cdd50e282b61bfec828fefa23ef34 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::FI8608W_Y2k.3pm.gz +7ea092e8d9d60178d0204218f6ce3510 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::FI9821W_Y2k.3pm.gz +e5ceb40bd6bd6ec34dc27f4e27b2b4a5 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::PanasonicIP.3pm.gz +2e5d73a9a580eabdb6b0df3bffd323ec ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Memory.3pm.gz +23ec68c5359273dd09374dd216ebff80 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel::Handle.3pm.gz +d0aa0457a3671dfe2e657e6b782a2e1a ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::Visca.3pm.gz +6980c2d2b0317e7f32be573c397b0003 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::mjpgStreamer.3pm.gz +fe172913180f2984db9ffb551ee3b251 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::ConfigAdmin.3pm.gz +284f443ed08ee3308ce266dc738909d7 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::M8640.3pm.gz +7610adb022963e1d672f18f5556558bd ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control.3pm.gz +6b7bbfd05abe1c19234eb87d50bd9398 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Config.3pm.gz +10608fb695435b6f7cf73e28d83d3b9e ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::ConfigData.3pm.gz +ae944c664da3cdf86647ea8d046f3dcb ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::Toshiba_IK_WB11A.3pm.gz +79e37a903fc2e1caecdb90ea6e199cf2 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel::File.3pm.gz +6be1d755606af08ece818bb381ac7cf0 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::3S.3pm.gz +abfad23352bf1c91fa0cb2b271bedf08 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Base.3pm.gz +c3f549c2220ecfe6a641cce341c38f73 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::FI8620_Y2k.3pm.gz +0cc9c74ede1812834714fb08bfa683c7 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Connection.3pm.gz +adfd73fbd46835a02d339ef13d13cd35 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::AxisV2.3pm.gz +f7081f3685f8de57ac615febe8d47437 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::Ncs370.3pm.gz +4b3afb84b2b71ef56df09997a350bd04 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/graphics/spinner.gif +e07c0775523271d629035dc8921dffc7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/graphics/favicon.ico +a840cd88b33f95a014cd654e0a615fd9 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/graphics/transparent.gif +718d8596a14d123d83afb0d5d6d6fd96 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/includes/init.php +cf2a637c699c32648c715d2faec7c4de ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/includes/config.php +9355288fed99c00c68f8623a3e73280e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/includes/functions.php +96a21cecd35ed5d1b732bfe74b1535ef ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/views/actions.php +83f5492302df18de8c7090a9fa8ac3e7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/views/notfound.png +f487b23a0841587841fd3dd34306d677 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/views/console.php +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/views/none.php +33d9276165e48e85f9b76d96ceb72c43 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/skin.php +67bdd7f59ebc311b9cd8954d57f68c2d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/css/skin.css +0814d7addb49c87b8cc29eaff5c8effc ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/includes/init.php +2e1176dc3923dd9a44b19754139a1555 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/includes/control_functions.php +3f1549ab15e953d0e1eb5ea978677e8d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/includes/config.php +5c15d51173b096e5597c329511ce7d74 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/includes/functions.php +d5b4372487f53fadf1da7397ae10c77b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/frame.php +224db60a7b9d89678e3ca4a5de5803fb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/filter.php +fcf239e684be46104251247cfc51265f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/login.php +63c88c56fe6c4104f811847f70fe7b6d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/watch.php +d52ac90fc23bfc97a3b9afe117c66642 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/event.php +5a61e2227587163542bebb4dfb77fe1f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/css/console.css +6d8509c58a57938eedadb498c9fd9961 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/error.php +e5c59543e4dce3d2719a2d9a8b52fa9c ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/state.php +c121ca1f9a8c4b693b3dcb4bd63d8e7e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/montage.php +1ad2154c2ab8d4e651087584ff533359 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/events.php +6ee5d2b987944284e0fd52e158d70c52 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/console.php +97f6771e6e530e0323c8a7455d4c087b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/devices.php +e9202a011a59bcb4f4e49a9811f56b03 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/eventdetails.php +4707ce2043a6964c6b0886f8404b37da ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/function.php +b42a65ca6f80ffe2ef69b1bf6d0dfd05 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/video.php +1ee43243aff2957f555b2025fe121ddb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/skin.php +b08bbad185d4f141f4e16a32961f7e10 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/point-o.gif +3aea4c08fe3d0882bbb50d6a880b9d3e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/center.gif +10481c373da9f2e33955f5f684701e35 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-ur.gif +4253a17d69f9c9f105864b57ef1da4ee ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-l-u.gif +2357c0f1dec549fb5866341acf2f8e64 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-dl.gif +b36b743446eb998574343b265fc2a327 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-dr.gif +de6d2a2b0bd54f72d5c8bde9fddfc56f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-ul.gif +93f79d7c400d1988e58791d692050380 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/point-g.gif +6a948184e447f61a38d54609194eb647 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-l-d.gif +e252c31fdb0b3a65a082069b37042a0f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/seq-u.gif +330f0709c7b846ed5b3e990a6b0b6839 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-u.gif +0c2b9346b65233183cca8dbaa6ee1db2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-s-d.gif +dad7467542959f7e571f12d0a4988c98 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-r.gif +2c0f5bb849832ea968cffc648d45381c ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-d.gif +2e743de572b45088c05f0471f63fb710 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/point-r.gif +98212c6b29fcd9a09e6d16607fe65909 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/seq-d.gif +269dca955356f221c9ea271f3e259763 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-l.gif +4b755122db75084dd39297fbc1822f27 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-s-u.gif +a65a3d23000bf34a8257cf56add8e9d4 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/control.css +10fb7830c2e3a07c7b090bbb224f89b7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/skin.css +b4659211b34992bc81bee822615181db ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/export.css +701f84f1ab430890e539cf373ed4292b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/frames.css +606388c643910afd47e6a53f591cc426 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/montage_freeform.css +3a91d2b400f3d27667a01a816f0f0a44 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/control.css +dc75d27b0aedaebc6364a226e1fac661 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/filter.css +25cb6e4f3459dbf8efb2307c3c8499f5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/timeline.css.php +668d0f83a81f352d9ab24202f66aaa28 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/controlcaps.css +b91fa88951c1033191f6a22bc485f907 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/event.css +e91fda984fe2ef3d8de2dbf57b5c7747 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/events.css +63c979e75fcdd523106982a6e5a2cb64 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/montage_3wide50enlarge.css +c627ab2a4a7567ca1b688a80343bcd1d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/groups.css +675d0499f9dc3fa5fdede504dfbb7ccc ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/console.css +27ceca5314be52f316ba52a0d94556c2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/video.css +7665779719b3f99ebaf1acfd42996ac0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/timeline.css +f972ae29776f4730b510502f44f03053 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/frame.css +352483a4610fdb2b44697b5a52c690c9 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/montage_4wide.css +902ce9db4ec62764557caaf4f44a0d74 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/devices.css +e95e93705b1af2c7005f54a8ebb23683 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/montage_2wide.css +4a039676d0d00483ed834ad1535209f6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/watch.css +a2154e46e8865c359caca5afcdf58a37 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/monitor.css +8d299e89fa8e9a088d1d9c747e8f7154 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/export.css +ef24eba3ca4d9e845858e47c3026e9c6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/stats.css +35d6f241d0377b3d6e69f3584d3cb091 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/montage_3wide.css +f6634ac163a6628078c5c54ef2d44011 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/zone.css +068f1341939d83560694256b4798f2fb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/options.css +54d0b4ce5f948e22fc05f8fbab171450 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/montage.css +6af44563df9975a6fb1e23d64421f486 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/log.css +a65a3d23000bf34a8257cf56add8e9d4 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/control.css +2c1af3dbfc506bda7654f694cab293f6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/skin.css +b4659211b34992bc81bee822615181db ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/export.css +701f84f1ab430890e539cf373ed4292b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/frames.css +606388c643910afd47e6a53f591cc426 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/montage_freeform.css +a9072a66ee838729986b57c23416c8c6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/control.css +dc75d27b0aedaebc6364a226e1fac661 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/filter.css +25cb6e4f3459dbf8efb2307c3c8499f5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/timeline.css.php +668d0f83a81f352d9ab24202f66aaa28 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/controlcaps.css +7467b045f5b4e3a8cf2b42a47c3ab17d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/event.css +e91fda984fe2ef3d8de2dbf57b5c7747 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/events.css +63c979e75fcdd523106982a6e5a2cb64 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/montage_3wide50enlarge.css +c627ab2a4a7567ca1b688a80343bcd1d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/groups.css +d30679be000fa1b224f90fa082b19525 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/console.css +27ceca5314be52f316ba52a0d94556c2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/video.css +7665779719b3f99ebaf1acfd42996ac0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/timeline.css +f972ae29776f4730b510502f44f03053 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/frame.css +352483a4610fdb2b44697b5a52c690c9 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/montage_4wide.css +902ce9db4ec62764557caaf4f44a0d74 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/devices.css +e95e93705b1af2c7005f54a8ebb23683 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/montage_2wide.css +07a4cc55064ca258bebca6291846e00d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/watch.css +a2154e46e8865c359caca5afcdf58a37 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/monitor.css +8d299e89fa8e9a088d1d9c747e8f7154 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/export.css +ef24eba3ca4d9e845858e47c3026e9c6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/stats.css +35d6f241d0377b3d6e69f3584d3cb091 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/montage_3wide.css +f6634ac163a6628078c5c54ef2d44011 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/zone.css +068f1341939d83560694256b4798f2fb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/options.css +54d0b4ce5f948e22fc05f8fbab171450 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/montage.css +6af44563df9975a6fb1e23d64421f486 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/log.css +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/includes/init.php +7c60f2ccaa5b4473b5f9a942c5fea373 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/includes/timeline_functions.php +b6787b20659ab4ae5b06cb9f9900330d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/includes/control_functions.php +5248a1135175c05b1860dac97cca5c0f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/includes/config.php +eff1e8ea2a5418ed47ce69386b4a3e61 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/includes/export_functions.php +1b3a274b77c824b4506765106205f598 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/includes/functions.php +4d1463e6bc5ed133ede23e6372bcbdbf ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/controlcaps.php +1b57a2fecd32647215f68998bffba25a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/controlpreset.php +d2032ed0e519c07e9d49b5c1cf9e247d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/monitor.php +c614ed7ac478bf5c9ef863900d89ea66 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/frame.php +21495b9af3361009cb8e77f0fec4a996 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/filter.php +1d675229155ceaa8982d2fc47d47d5f6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/options.php +8d0be05a8725ed889b056ab3d2acb505 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/frames.php +4ca1ad1cf9c24ab566ff570a8305306a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/status.php +b571e7b897a14ba6c0af756371fcd197 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/login.php +a15d4dcf6624f09cdfce31e48e2a0b42 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/Makefile.am +c942ee3fa4859956057ca8a17be36989 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/eventdetail.php +9dcd343147a4b8215917b8eaf9441ba8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/watch.php +35922ff1e4668805878c6343db3d2b18 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/optionhelp.php +3d10f253482dd12a0aaab55ce50f061e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/event.php +16d0a8a023a63797d1ea004e8ece32c6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/user.php +548571006c1c33eeaec9d288b7d21515 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/postlogin.php +fd250dfd1edcc92d496d00b6e2963c48 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/cycle.php +0a7f4b83bbca22a5061f3f8b3771b3d2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/donate.php +276b51cb4307b90a5cc3c1c44f86b005 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/version.php +ec4c3a85ce7b717945430d5379e5f5ff ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/device.php +379433cd368bd32608864eb304b02b64 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/groups.php +93a837f7db6bf5a045d3395e6c179718 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/error.php +d358cffe766ff93aafadc9f869c7a07e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/state.php +f675151b8785b307bf2c61efc3e2fa04 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/montage.php +f9c5481d113f67d002883034dddf385a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/blank.php +5139dfbe378e17b3178b4959b9bf20f7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/events.php +746ae2ce61073d614242cb3d6c082bce ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/settings.php +1d7491908b75a297519e740c5784e0f1 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/group.php +c3055c24489a3c952e31e105a711545e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/controlcap.php +abb35b5a54dda62386d3aa5abf9720f4 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/control.php +ff693078fbc15e321062d69c302c6aac ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/zones.php +3d9e4bcae9ec10838960e96cdc369fd7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/filtersave.php +9e4952365cf18248c57cc36ae304498b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/console.php +d95c44748df26ca2bec7d4afb079782d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/zone.php +b1e9b91a8618af638f3355002a126562 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/monitorprobe.php +189b2cb541386af6138ec96b96538026 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/devices.php +f85cbc69e7d95b4119311c726d9f672f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/monitorpreset.php +16064caa25b6c51360e10ee91210e8fe ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/state.js +c15861718da9974b057a4e6641759bad ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/group.js +de8db540180b86df8d0fc4724df3f12b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/user.js +59920201dfac5f9a4431f4f3a4e0364b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/version.js +017aafda61cee8bdf65f36eedcd91644 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/console.js +0dd3c64eb2002ffda9f7cb5a57d45457 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/donate.js +7a9e7f334a1c84d56850ac3b79cd5170 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/log.js +c32db9eb82496882262fbe62e228a396 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/Makefile.am +4628f8f6e13462b957e9ab7c267ded80 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/events.js.php +832e7495163a6ef5c842475f7d44962f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/video.js.php +3c5c231b378597e9696c2164dad2668b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/montage.js +63b5fb3cd5a7d7b5479804fac1a02ed8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/options.js.php +3a8b64c9424f1a9ce02973021f3f1014 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/login.js +437d1084299d1163d36bd83355178a5b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/events.js +f95f51f93a153403f28bec13da9f079e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitorpreset.js +c125327fce8e049519bb826cce5417f3 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/watch.js +56c208506cecd6a242e38d9c347558ba ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/state.js.php +59f48f29901bf0b1d2dcdbd0287a7243 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/video.js +6656671bba812476fb7964edab8ed7d5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/groups.js +8c5c9cc7e4961559e345220c9653aec8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/version.js.php +f9840e08f9ca3c9966315657cfdf47f5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitorprobe.js +03cd81247cc90a19db3cba077fd00b6e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/control.js +0f09e33012eee04a62ebdb2b05c7b03a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/cycle.js.php +8d99ac07dfdbf41cd357b0a3d2ee1f32 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/postlogin.js.php +925a1cf53b3191680541872b4c38b576 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/cycle.js +d80aeb3b09c3bb4db635aaab6a34dd69 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/timeline.js.php +2c9f71673c49866ef4dd2bae89658d72 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/filter.js.php +1ef503037a66111e5bde441ba8ce20cd ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/event.js +32ef30d8527086aa9ee63b73ac5df86d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/console.js.php +51f2f8a12c688c3c0e70f04929295c99 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/watch.js.php +cade1c87dd48210dcc61fbc2541e76a5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/filter.js +2da7d63e3e1a8b4a7ddc42506e714873 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/controlpreset.js.php +9dbbc338d288c7053ca08ade4be2a08e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/event.js.php +18f6033a5de91a16561626debedbd04f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/zone.js.php +f7ed288a9c1556499ff689b277091074 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/export.js +c66feb02c549f81b7910dd31c23964b1 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitor.js.php +0062d1966577b1a04e9b430adf20e441 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/controlpreset.js +99f2883fd66369e397c28730093e0039 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/montage.js.php +f95d23b81ff41694e0f61ba33f116eff ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitor.js +d446cdfa58d7a052b099e65e1417296e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/donate.js.php +9122fd4adc69210dd059f703878da027 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/timeline.js +2cdc936339c10744b45be5560eae9488 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/devices.js +98c7d638b7e90ddae6aabc103a3a197a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/zone.js +6a329d8f40a74659b1e1fc10763c6f6e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/export.js.php +f6db2543d3af0dd4f80a777a4dfc0c69 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/log.php +f142b8cf2d848d8277d605cc0bb5c7f0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/none.php +b5b778dd3c8bac8c57e4cefea824eebe ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/export.php +07233ba0c8343b441c0532979c56a411 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/function.php +e77abc6802a1da3e4fd62e646a023f46 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/stats.php +bcd5568ad30fbf43c37b1fb067f6fcba ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/video.php +1551da8d4beb70e03872bf2aadecafa8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/bandwidth.php +e4d9576ea7fc0d077e8f676ca3214510 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/logout.php +2bf800f3105556313be01bd3b4c42aca ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/timeline.php +1b5888dd1130c2624e3a89ec6914641e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/skin.php +1d4fc58a4fb06f37e330419e1de5ccc5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/js/skin.js.php +546dd00ad3f7f286d4d47e7ba1d3606f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/js/skin.js +8218a18edccf1204d7f6b5be75fd0d78 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/es_ar.php +589fbc097bf0eeaf0470127f7760ec1e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/pt_br.php +37850e5a2c5496828512b7e752d59ee8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/dk_dk.php +b194629ea544221b206616c18a0c148a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/hu_hu.php +b8015b85b9c032dcb061761731b084b8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/fr_fr.php +b5c7fe7fa19ab9532b4a30723e099881 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/pl_pl.php +5ddb50407c87162ef3bd88cc88a69de1 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/it_it.php +ff9185a540eda7598ce4607045cbfb95 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/se_se.php +0d46d10e46dbbfcdfa3be6ef5ffd0eeb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/nl_nl.php +bc88aced50114c408e703089ed2c58a1 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/ru_ru.php +6ee18a4395de40fb7e74876ca8725768 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/ro_ro.php +2ce9bebd55d946cf4ea9d0776df0cc7d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/en_us.php +321a20460bb594abb17b3b925f6c98f2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/cn_zh.php +c4555f9101c6d257b03cb409fae4529d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/big5_big5.php +cb3bc7a87a69793b4b7bf90f1737b6b4 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/et_ee.php +fc2bf1773c63c42f4da071ce417a7aec ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/ja_jp.php +86ed6db147aeb77e12b76f47bf3364b5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/cs_cz.php +b6e51396273585f0b1155ea66010796c ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/en_gb.php +c53b9bede29062c0e76271c91367a04a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/he_il.php +c777020c596cee7ceddc1646f19a3080 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/de_de.php +f3a96b4e82b5e7d722d860b0371e92e2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/css/reset.css +d3f02477779fa8a2cddd1c1605583b96 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/css/overlay.css +a21186623f461fbdf94a1000fb081ee0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/css/spinner.css +09653a48b2b311109f26d5859d2bb5d6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/actions.php +ea76e136916631c564343e24df07de2b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/logger.php +8ae8d5b773c4cc9cda879f57aee04dfe ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/control_functions.php +742ad5a8e5eef1b9ce20f1beb5905aed ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/lang.php +bc4b84a1025b7fa5a1f9aefb388ac925 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/config.php +63bdb662ad9c56e1f39a856d67ae1432 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/database.php +ee485a94a311463df75d570bf23dce02 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/functions.php +d9b8cc5ecc4a1f26e057df31675b55cd ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/views/file.php +90e3a0c17c6d5ac8b0b30e749c89a4ce ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/views/image.php +6dee62a0963ecdc4b7ccb353b7ae7424 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.27.0.sql +bd8b4735fee0bbb064a140819347df6d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.0.1.sql +632200d5a6238e256e7cf80de95156dd ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.19.2.sql +821f1c1d6c52f99dd47ac14d61fa5640 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.22.2.sql +1c9100b2e0c6da71bc3492d2d9ae3dfa ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_create.sql +8b07b11c7cad1914c3ea833b8ed5817b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.24.3.sql +3fca704937207aa222e77210aa0c25e0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.19.5.sql +97edc0c5579da47e346d42df1e545eb0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.20.0.sql +92d0e29600b0f23c3cabdc02ce6259e2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.11.sql +08d098374092ba16eb3459a1aa2a8229 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.24.4.sql +54f6c2d009ad16095cad89d9855c91c2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.27.99.0.sql +4c5855feeaaf945c29c43292e5c74197 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.26.3.sql +c1594ffeff663ea370dbbaeb272e10db ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.22.1.sql +e2dbebece1d49bea27f756895a663f86 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.16.sql +2b89f4c950e227e9313cf7418727f3de ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.26.0.sql +7c452e51249b26c7d6bc2651bd008680 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.21.2.sql +92d5871c239ea24a2bdd738e0776a750 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.28.0.sql +f96d352e85bbffb74ae0c6b354c76cac ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.24.2.sql +85c2f951462a9ca699af571910b2f5e7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.21.0.sql +6f75164dc4ab8e6189ccc8a2f3a006e4 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.17.2.sql +8601c639ef779f73b37e00df75329bf0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.13.sql +4466a07866e466e4a69a6986b2f1d0cb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.23.1.sql +6314f20b3f02056792caf93944965fd8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.23.0.sql +452cced335ec34b78b4d091b7901ffd5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.21.1.sql +313214000c45d7e66bc09560985913bc ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.29.0.sql +4ec7ea6a41ced9a48b5922f359a56b6b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.19.4.sql +c75ceef3b6954b8a8047010bea8d6d4f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.7.sql +5d46d42dd9f62cdaedd5190f05b0a618 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.24.0.sql +8388ea9b05577c775206dcfd5df72856 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.18.0.sql +bee064f205c14f5c20501e739ce80a1e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.8.sql +990aade37fd26b6fa4ffdd3a13c48b24 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.19.1.sql +34d526653752e2ec9722b21a007d79e8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.22.3.sql +e35625686e01f368b3f8f87359aaac7c ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.15.sql +9c82b2ea73453054f9a69c787ec3596b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.22.0.sql +2f7281f19a02402c8a2b603143bc203d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.12.sql +07f00f03f78eca783cfc115fcf1168aa ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.19.3.sql +83decad8946e51529e7f7bbc13c743cf ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.24.1.sql +795313d24e9c26b3557feb386df603c6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.26.1.sql +be7fe21854b261df5b6b28d92ce0dad4 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.19.0.sql +2740f9a92352e7d91be18a67115be71d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.20.1.sql +ee60615a820f97e43ebab88f173b9921 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.26.5.sql +5880f07d8c485d28a002e45a254c47a5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.17.1.sql +b7468afae4c69e654a4c61feec101730 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.18.1.sql +9b4716630546a41cdfcd08e56faf647b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.28.1.sql +9c0fc358cdc873030b0367d005f6b765 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.21.4.sql +fd4e7c581673c85f9734bfdf45337b99 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.23.2.sql +54464055410fdae4f296c00c963bdd4c ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.23.3.sql +dd2109c3b45b0243d92e21031b7a55e0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.9.sql +6c09c69e9b66b83a0b8ef8f37f985ebc ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.21.3.sql +5983fcbe9f352433a8cdba6dadea4d5a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.10.sql +e0651ab19ce94e12f2a05481d4847b52 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.26.2.sql +06031ab17a0397dcc824cf7e56610771 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/status.php +c518c03f8783cfb822d3fab322c66bd7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/event.php +433c99927f1961f159562627f3c79800 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/alarm.php +c65641a2edd9bac342684936c391d444 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/control.php +bcf111c3a38a3a94d5600f33d89416eb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/zone.php +74836750b8f89f54054ffb31cd67f135 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/log.php +bf81f42111e73d054802f0aa72027c8e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/stream.php +d108695d5815a3fd528df2403f3c50cd ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/index.php +6d1a5880671e67c0d6384a9d33143309 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/js/logger.js +1eb33d67d6069ec8723920e59e602d31 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/js/overlay.js +2f4357273ede74623cd7f3dbc210da7f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/js/mootools.ext.js +861459718684608408e7427d85ad732d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-nc.js +d514b6d7bbe53cd04ec0558821146e1f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-yc.js +0c240ed4306c44e2cb6206b11919afa8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-yc.js +0b90452e783f31a382c06155a8a3605a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-nc.js +567590c0a9aa08352375bc19ca34c449 ./distros/ubuntu1204/zoneminder/usr/share/polkit-1/actions/com.zoneminder.systemctl.policy +176294d55f322804317befe0c8129348 ./distros/ubuntu1204/zoneminder/usr/share/polkit-1/rules.d/com.zoneminder.systemctl.rules +9e5fe8a26925a0fa5412fcec401ee3c7 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Memory/Mapped.pm +a3b5d80f8e270b04341401a537d81e96 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Memory/Shared.pm +7271e9b3df2a956ea23868c972699c38 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Base.pm +855f56d67de3ad1fcdce0e629dc59686 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Logger.pm +6fb757ae2c544938c8a0dc8ba578fa9a ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/General.pm +5126afe929867a4d6490ebcb48a49052 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Memory.pm +1983b2a432d9b4c23d27bda668dfcf8d ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control.pm +39b83871c88d452d68cea948fe83b2e4 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Config.pm +4c5b2dd56f5fc8604d2bee7d9896b1d5 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/mjpgStreamer.pm +98bd34b8614625cb0fa0f14df0c4b122 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/M8640.pm +3b908c8286411c2ee2743329b516342d ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/PelcoP.pm +37b2053f17ecf97a398ae5b49dcb7e43 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/LoftekSentinel.pm +dbc009686162f84bd02879355910c1ee ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/Wanscam.pm +2f7bd90864a1a25c9229026f9bac3d41 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/FI8620_Y2k.pm +d66a2faf7390a6668e32a799658e8ae5 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/PanasonicIP.pm +803dc34fb23f239e2bb782b146db18fa ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/FI9821W_Y2k.pm +8fd0894552e6c8464be5bb34533cd4b6 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/FI8608W_Y2k.pm +f0c4a4c08f53620a30909c7816f6e3a7 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/Visca.pm +63a9924dc387192b53f54cbddbd53f60 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/3S.pm +5b33d25c49b10d08dc1e3ecde3c19337 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/AxisV2.pm +daf155e8390d082e1fbad7b3a4375bc9 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/TVIP862.pm +71c881b550c010cbdcbcea690f75584f ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/SkyIPCam7xx.pm +568b527e03f2ebcc99e93085d8d8eae5 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/Toshiba_IK_WB11A.pm +b28878a0cd796fad48c53b1643ed542a ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/PelcoD.pm +4b02c4c5a2b7593eedcddf5d5a8f2cac ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/Ncs370.pm +bc7d0ff4b13d61363d5dbdd7eb0a7a28 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/FI8908W.pm +543fde408bbddc4a584a358376105260 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/ConfigData.pm +bd0dbcf22d4ed15c64698d55d3f5948e ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/ConfigAdmin.pm +8333fef7d94f0fce5e82a671cb83c4ce ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Database.pm +e03d5a957ae0f04839cc8aed13c6e364 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Connection.pm +87445e5e683c1ad70f3db7195aa8913a ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Connection/Example.pm +10b9c55ecde4f59076c8ba20d9855300 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel.pm +19e7cbafa5171dcf849bd00b0d594354 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel/Serial.pm +eda3b7449611e8ebdcf30f97d87b2848 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel/File.pm +de33a8f665c7db9be8cc6f4cdf5ec962 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel/Inet.pm +47cc5f725d6fcc667e6363919e57658f ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel/Unix.pm +b33b640620e68290c44ec8fbf989a313 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel/Spawning.pm +63c6d6667ce2ce36f66bbdc235f73c76 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel/Handle.pm +c9edfd935fb6133f806a91a216f341a7 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder.pm +8caf64d984dc28203336dcdbf1b264f8 ./distros/ubuntu1204/zoneminder/usr/share/doc/zoneminder/changelog.Debian.gz +ebff2c7cf2c7bd2c7a85bd523f54bfbf ./distros/ubuntu1204/zoneminder/usr/share/doc/zoneminder/README.Debian +722ee23d6e76b10f1eae240ea1a49117 ./distros/ubuntu1204/zoneminder/usr/share/doc/zoneminder/copyright +bf234f8325eef492dfd31ccc1d044dbc ./distros/ubuntu1204/zoneminder/usr/share/doc/zoneminder/README.md.gz +1d752b838b3f90f6f5c07e70b34c44e8 ./distros/ubuntu1204/zoneminder/usr/lib/cgi-bin/zms +1d752b838b3f90f6f5c07e70b34c44e8 ./distros/ubuntu1204/zoneminder/usr/lib/cgi-bin/nph-zms +7855bc3fa3fc04a8724a971424c33a9b ./distros/ubuntu1204/zoneminder/usr/bin/zmaudit.pl +2066e1941df243cdc78b75d121d37298 ./distros/ubuntu1204/zoneminder/usr/bin/zmcamtool.pl +04f3955088b774686a78ce9c3ed6627d ./distros/ubuntu1204/zoneminder/usr/bin/zmsystemctl.pl +7cc423cfe906b4228e99569b5b92db5f ./distros/ubuntu1204/zoneminder/usr/bin/zmvideo.pl +1d2a8df9fb3373632ca40b3d3900ec11 ./distros/ubuntu1204/zoneminder/usr/bin/zmf +0f8bd6b5132047a4fdfa24eed51ad6c0 ./distros/ubuntu1204/zoneminder/usr/bin/zmcontrol.pl +e94fb224a65c3154db655bd0bc6e3978 ./distros/ubuntu1204/zoneminder/usr/bin/zmwatch.pl +335b0a8e5045bdeb60aae9924f76a4e3 ./distros/ubuntu1204/zoneminder/usr/bin/zmc +1ff341f2b46c3c3fd56abc77e2e31a50 ./distros/ubuntu1204/zoneminder/usr/bin/zmdc.pl +9c1f73f8208b4debf1935d1d8941160c ./distros/ubuntu1204/zoneminder/usr/bin/zmtrack.pl +c699489c2deb362e9e7ebf89574127c6 ./distros/ubuntu1204/zoneminder/usr/bin/zmstreamer +5fc21ef11e22a35732c93366f9c2cda8 ./distros/ubuntu1204/zoneminder/usr/bin/zmpkg.pl +67cd253eb83ea78e317641b884f558ee ./distros/ubuntu1204/zoneminder/usr/bin/zmupdate.pl +c3682b3ad090cb7a76bff9abb25c64a1 ./distros/ubuntu1204/zoneminder/usr/bin/zma +f45d18796848db83fe6c4a02e34bf8b5 ./distros/ubuntu1204/zoneminder/usr/bin/zmtrigger.pl +fea0e8713ff60829011f025c0a0e9a25 ./distros/ubuntu1204/zoneminder/usr/bin/zmx10.pl +3b7136d204d34acb916d9d5758726d7d ./distros/ubuntu1204/zoneminder/usr/bin/zmu +653ef81a4e89bc73eacddc45eeccdfa0 ./distros/ubuntu1204/zoneminder/usr/bin/zmfilter.pl +b5a54033efcc9ff3c29b8f56771b31e7 ./distros/ubuntu1204/zoneminder/etc/init.d/zoneminder +2d0b66c536ed365abc5986c6baa59f2d ./distros/ubuntu1204/zoneminder/etc/zm/zm.conf +20eb5d0df8842df2df7e75d60330d3b9 ./distros/ubuntu1204/zoneminder/etc/zm/apache.conf +722ee23d6e76b10f1eae240ea1a49117 ./distros/ubuntu1204/copyright +e10df8d26914c0a8aca15921248947f6 ./distros/ubuntu1204/control +c5b4f2e02924325d937177993b1b37f6 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Base.3pm +e8d797c5f09eba3ef38b10f6d3ec4807 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel::Serial.3pm +b2a9e020c3a3bd83d583a361defb522e ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::Visca.3pm +4715bc98d5245d82587f98c3a67a13cd ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Memory.3pm +c2e24062de108f90d0f38c6057d8feed ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::FI8908W.3pm +3ea71caa1df8e3491c56ff3ea0f429fb ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Logger.3pm +8583270411c15536de12bc3188099a5c ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::ConfigData.3pm +6e2fbe0511ea902b53a3efc09059c07a ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::General.3pm +575ea08af33874ee13d90e84bf6b0886 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel::File.3pm +bb1571a3dbcbd94e02460293eb7fbc9c ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::SkyIPCam7xx.3pm +3213eb011337aca2ccd4286714457132 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::ConfigAdmin.3pm +a2d49a762e2fd2efdcb34b7d37e2e34c ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::M8640.3pm +08cd134982e3c5d84068afd010d841dc ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::Wanscam.3pm +bae116e4928a2ab5268bba2e7a727d54 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Connection::Example.3pm +8418bcc2586c5a292c085fbed0422680 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::PelcoP.3pm +d1d9e774786ef5a83f84f02e92d7c70f ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::TVIP862.3pm +87109967ed8ab295bfe3c4f662742de7 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::FI8620_Y2k.3pm +1eb001f295c25ef219699fd09ab954a1 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Database.3pm +59949412bf54625d12e6a5283fcbc9a7 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control.3pm +52d15c4217e92ccc181a0b20e71793b5 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::3S.3pm +ecff76882bf145c5e2e0be0c81da72fe ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::Ncs370.3pm +c4108e6f14d8145c239489f33b36dd37 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::PelcoD.3pm +6acf2714f5556e311439260efae33cb1 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::FI9821W_Y2k.3pm +045ad985cd3b2b2bb5f01a8538a7f63f ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::Toshiba_IK_WB11A.3pm +adbc642989c1c0c103b91a7fa23f9919 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::mjpgStreamer.3pm +89faa73932fdd01f7198cfd92c4ad648 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel.3pm +d082127c64e7f4b30027ffd3dcbb97cb ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel::Inet.3pm +f0f88cbbb072ebf458d250f8a0b97af3 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder.3pm +a0bf0f459ee34817d9f9e53c4ef4650d ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::AxisV2.3pm +f4054d303a1bded762fe5711d79f8603 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::FI8608W_Y2k.3pm +919be3c156fd9a717d17d7d93cbb5e31 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel::Unix.3pm +691bfa214148229983f2c0d4b0199a0e ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::PanasonicIP.3pm +955f0fbf0a9d0669403fc46aa6c058c2 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Connection.3pm +c9304094e08d5d26e250d9467d43fdfc ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Config.3pm +143d07de53991de381c3987632d2a7e7 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel::Handle.3pm +2786c52c66a5ffeaa691841b22399496 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel::Spawning.3pm +4b3afb84b2b71ef56df09997a350bd04 ./distros/ubuntu1204/tmp/usr/share/zoneminder/graphics/spinner.gif +e07c0775523271d629035dc8921dffc7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/graphics/favicon.ico +a840cd88b33f95a014cd654e0a615fd9 ./distros/ubuntu1204/tmp/usr/share/zoneminder/graphics/transparent.gif +718d8596a14d123d83afb0d5d6d6fd96 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/includes/init.php +cf2a637c699c32648c715d2faec7c4de ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/includes/config.php +9355288fed99c00c68f8623a3e73280e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/includes/functions.php +96a21cecd35ed5d1b732bfe74b1535ef ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/views/actions.php +83f5492302df18de8c7090a9fa8ac3e7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/views/notfound.png +f487b23a0841587841fd3dd34306d677 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/views/console.php +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/views/none.php +33d9276165e48e85f9b76d96ceb72c43 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/skin.php +67bdd7f59ebc311b9cd8954d57f68c2d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/css/skin.css +0814d7addb49c87b8cc29eaff5c8effc ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/includes/init.php +2e1176dc3923dd9a44b19754139a1555 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/includes/control_functions.php +3f1549ab15e953d0e1eb5ea978677e8d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/includes/config.php +5c15d51173b096e5597c329511ce7d74 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/includes/functions.php +d5b4372487f53fadf1da7397ae10c77b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/frame.php +224db60a7b9d89678e3ca4a5de5803fb ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/filter.php +fcf239e684be46104251247cfc51265f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/login.php +63c88c56fe6c4104f811847f70fe7b6d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/watch.php +d52ac90fc23bfc97a3b9afe117c66642 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/event.php +5a61e2227587163542bebb4dfb77fe1f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/css/console.css +6d8509c58a57938eedadb498c9fd9961 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/error.php +e5c59543e4dce3d2719a2d9a8b52fa9c ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/state.php +c121ca1f9a8c4b693b3dcb4bd63d8e7e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/montage.php +1ad2154c2ab8d4e651087584ff533359 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/events.php +6ee5d2b987944284e0fd52e158d70c52 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/console.php +97f6771e6e530e0323c8a7455d4c087b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/devices.php +e9202a011a59bcb4f4e49a9811f56b03 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/eventdetails.php +4707ce2043a6964c6b0886f8404b37da ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/function.php +b42a65ca6f80ffe2ef69b1bf6d0dfd05 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/video.php +1ee43243aff2957f555b2025fe121ddb ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/skin.php +b08bbad185d4f141f4e16a32961f7e10 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/point-o.gif +3aea4c08fe3d0882bbb50d6a880b9d3e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/center.gif +10481c373da9f2e33955f5f684701e35 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-ur.gif +4253a17d69f9c9f105864b57ef1da4ee ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-l-u.gif +2357c0f1dec549fb5866341acf2f8e64 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-dl.gif +b36b743446eb998574343b265fc2a327 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-dr.gif +de6d2a2b0bd54f72d5c8bde9fddfc56f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-ul.gif +93f79d7c400d1988e58791d692050380 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/point-g.gif +6a948184e447f61a38d54609194eb647 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-l-d.gif +e252c31fdb0b3a65a082069b37042a0f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/seq-u.gif +330f0709c7b846ed5b3e990a6b0b6839 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-u.gif +0c2b9346b65233183cca8dbaa6ee1db2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-s-d.gif +dad7467542959f7e571f12d0a4988c98 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-r.gif +2c0f5bb849832ea968cffc648d45381c ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-d.gif +2e743de572b45088c05f0471f63fb710 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/point-r.gif +98212c6b29fcd9a09e6d16607fe65909 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/seq-d.gif +269dca955356f221c9ea271f3e259763 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-l.gif +4b755122db75084dd39297fbc1822f27 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-s-u.gif +a65a3d23000bf34a8257cf56add8e9d4 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/control.css +10fb7830c2e3a07c7b090bbb224f89b7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/skin.css +b4659211b34992bc81bee822615181db ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/export.css +701f84f1ab430890e539cf373ed4292b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/frames.css +606388c643910afd47e6a53f591cc426 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/montage_freeform.css +3a91d2b400f3d27667a01a816f0f0a44 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/control.css +dc75d27b0aedaebc6364a226e1fac661 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/filter.css +25cb6e4f3459dbf8efb2307c3c8499f5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/timeline.css.php +668d0f83a81f352d9ab24202f66aaa28 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/controlcaps.css +b91fa88951c1033191f6a22bc485f907 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/event.css +e91fda984fe2ef3d8de2dbf57b5c7747 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/events.css +63c979e75fcdd523106982a6e5a2cb64 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/montage_3wide50enlarge.css +c627ab2a4a7567ca1b688a80343bcd1d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/groups.css +675d0499f9dc3fa5fdede504dfbb7ccc ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/console.css +27ceca5314be52f316ba52a0d94556c2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/video.css +7665779719b3f99ebaf1acfd42996ac0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/timeline.css +f972ae29776f4730b510502f44f03053 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/frame.css +352483a4610fdb2b44697b5a52c690c9 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/montage_4wide.css +902ce9db4ec62764557caaf4f44a0d74 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/devices.css +e95e93705b1af2c7005f54a8ebb23683 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/montage_2wide.css +4a039676d0d00483ed834ad1535209f6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/watch.css +a2154e46e8865c359caca5afcdf58a37 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/monitor.css +8d299e89fa8e9a088d1d9c747e8f7154 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/export.css +ef24eba3ca4d9e845858e47c3026e9c6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/stats.css +35d6f241d0377b3d6e69f3584d3cb091 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/montage_3wide.css +f6634ac163a6628078c5c54ef2d44011 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/zone.css +068f1341939d83560694256b4798f2fb ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/options.css +54d0b4ce5f948e22fc05f8fbab171450 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/montage.css +6af44563df9975a6fb1e23d64421f486 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/log.css +a65a3d23000bf34a8257cf56add8e9d4 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/control.css +2c1af3dbfc506bda7654f694cab293f6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/skin.css +b4659211b34992bc81bee822615181db ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/export.css +701f84f1ab430890e539cf373ed4292b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/frames.css +606388c643910afd47e6a53f591cc426 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/montage_freeform.css +a9072a66ee838729986b57c23416c8c6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/control.css +dc75d27b0aedaebc6364a226e1fac661 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/filter.css +25cb6e4f3459dbf8efb2307c3c8499f5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/timeline.css.php +668d0f83a81f352d9ab24202f66aaa28 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/controlcaps.css +7467b045f5b4e3a8cf2b42a47c3ab17d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/event.css +e91fda984fe2ef3d8de2dbf57b5c7747 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/events.css +63c979e75fcdd523106982a6e5a2cb64 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/montage_3wide50enlarge.css +c627ab2a4a7567ca1b688a80343bcd1d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/groups.css +d30679be000fa1b224f90fa082b19525 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/console.css +27ceca5314be52f316ba52a0d94556c2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/video.css +7665779719b3f99ebaf1acfd42996ac0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/timeline.css +f972ae29776f4730b510502f44f03053 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/frame.css +352483a4610fdb2b44697b5a52c690c9 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/montage_4wide.css +902ce9db4ec62764557caaf4f44a0d74 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/devices.css +e95e93705b1af2c7005f54a8ebb23683 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/montage_2wide.css +07a4cc55064ca258bebca6291846e00d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/watch.css +a2154e46e8865c359caca5afcdf58a37 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/monitor.css +8d299e89fa8e9a088d1d9c747e8f7154 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/export.css +ef24eba3ca4d9e845858e47c3026e9c6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/stats.css +35d6f241d0377b3d6e69f3584d3cb091 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/montage_3wide.css +f6634ac163a6628078c5c54ef2d44011 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/zone.css +068f1341939d83560694256b4798f2fb ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/options.css +54d0b4ce5f948e22fc05f8fbab171450 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/montage.css +6af44563df9975a6fb1e23d64421f486 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/log.css +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/includes/init.php +7c60f2ccaa5b4473b5f9a942c5fea373 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/includes/timeline_functions.php +b6787b20659ab4ae5b06cb9f9900330d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/includes/control_functions.php +5248a1135175c05b1860dac97cca5c0f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/includes/config.php +eff1e8ea2a5418ed47ce69386b4a3e61 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/includes/export_functions.php +1b3a274b77c824b4506765106205f598 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/includes/functions.php +4d1463e6bc5ed133ede23e6372bcbdbf ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/controlcaps.php +1b57a2fecd32647215f68998bffba25a ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/controlpreset.php +d2032ed0e519c07e9d49b5c1cf9e247d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/monitor.php +c614ed7ac478bf5c9ef863900d89ea66 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/frame.php +21495b9af3361009cb8e77f0fec4a996 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/filter.php +1d675229155ceaa8982d2fc47d47d5f6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/options.php +8d0be05a8725ed889b056ab3d2acb505 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/frames.php +4ca1ad1cf9c24ab566ff570a8305306a ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/status.php +b571e7b897a14ba6c0af756371fcd197 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/login.php +a15d4dcf6624f09cdfce31e48e2a0b42 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/Makefile.am +c942ee3fa4859956057ca8a17be36989 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/eventdetail.php +9dcd343147a4b8215917b8eaf9441ba8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/watch.php +35922ff1e4668805878c6343db3d2b18 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/optionhelp.php +3d10f253482dd12a0aaab55ce50f061e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/event.php +16d0a8a023a63797d1ea004e8ece32c6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/user.php +548571006c1c33eeaec9d288b7d21515 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/postlogin.php +fd250dfd1edcc92d496d00b6e2963c48 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/cycle.php +0a7f4b83bbca22a5061f3f8b3771b3d2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/donate.php +276b51cb4307b90a5cc3c1c44f86b005 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/version.php +ec4c3a85ce7b717945430d5379e5f5ff ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/device.php +379433cd368bd32608864eb304b02b64 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/groups.php +93a837f7db6bf5a045d3395e6c179718 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/error.php +d358cffe766ff93aafadc9f869c7a07e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/state.php +f675151b8785b307bf2c61efc3e2fa04 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/montage.php +f9c5481d113f67d002883034dddf385a ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/blank.php +5139dfbe378e17b3178b4959b9bf20f7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/events.php +746ae2ce61073d614242cb3d6c082bce ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/settings.php +1d7491908b75a297519e740c5784e0f1 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/group.php +c3055c24489a3c952e31e105a711545e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/controlcap.php +abb35b5a54dda62386d3aa5abf9720f4 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/control.php +ff693078fbc15e321062d69c302c6aac ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/zones.php +3d9e4bcae9ec10838960e96cdc369fd7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/filtersave.php +9e4952365cf18248c57cc36ae304498b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/console.php +d95c44748df26ca2bec7d4afb079782d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/zone.php +b1e9b91a8618af638f3355002a126562 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/monitorprobe.php +189b2cb541386af6138ec96b96538026 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/devices.php +f85cbc69e7d95b4119311c726d9f672f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/monitorpreset.php +16064caa25b6c51360e10ee91210e8fe ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/state.js +c15861718da9974b057a4e6641759bad ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/group.js +de8db540180b86df8d0fc4724df3f12b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/user.js +59920201dfac5f9a4431f4f3a4e0364b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/version.js +017aafda61cee8bdf65f36eedcd91644 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/console.js +0dd3c64eb2002ffda9f7cb5a57d45457 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/donate.js +7a9e7f334a1c84d56850ac3b79cd5170 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/log.js +c32db9eb82496882262fbe62e228a396 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/Makefile.am +4628f8f6e13462b957e9ab7c267ded80 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/events.js.php +832e7495163a6ef5c842475f7d44962f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/video.js.php +3c5c231b378597e9696c2164dad2668b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/montage.js +63b5fb3cd5a7d7b5479804fac1a02ed8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/options.js.php +3a8b64c9424f1a9ce02973021f3f1014 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/login.js +437d1084299d1163d36bd83355178a5b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/events.js +f95f51f93a153403f28bec13da9f079e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/monitorpreset.js +c125327fce8e049519bb826cce5417f3 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/watch.js +56c208506cecd6a242e38d9c347558ba ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/state.js.php +59f48f29901bf0b1d2dcdbd0287a7243 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/video.js +6656671bba812476fb7964edab8ed7d5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/groups.js +8c5c9cc7e4961559e345220c9653aec8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/version.js.php +f9840e08f9ca3c9966315657cfdf47f5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/monitorprobe.js +03cd81247cc90a19db3cba077fd00b6e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/control.js +0f09e33012eee04a62ebdb2b05c7b03a ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/cycle.js.php +8d99ac07dfdbf41cd357b0a3d2ee1f32 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/postlogin.js.php +925a1cf53b3191680541872b4c38b576 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/cycle.js +d80aeb3b09c3bb4db635aaab6a34dd69 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/timeline.js.php +2c9f71673c49866ef4dd2bae89658d72 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/filter.js.php +1ef503037a66111e5bde441ba8ce20cd ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/event.js +32ef30d8527086aa9ee63b73ac5df86d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/console.js.php +51f2f8a12c688c3c0e70f04929295c99 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/watch.js.php +cade1c87dd48210dcc61fbc2541e76a5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/filter.js +2da7d63e3e1a8b4a7ddc42506e714873 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/controlpreset.js.php +9dbbc338d288c7053ca08ade4be2a08e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/event.js.php +18f6033a5de91a16561626debedbd04f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/zone.js.php +f7ed288a9c1556499ff689b277091074 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/export.js +c66feb02c549f81b7910dd31c23964b1 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/monitor.js.php +0062d1966577b1a04e9b430adf20e441 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/controlpreset.js +99f2883fd66369e397c28730093e0039 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/montage.js.php +f95d23b81ff41694e0f61ba33f116eff ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/monitor.js +d446cdfa58d7a052b099e65e1417296e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/donate.js.php +9122fd4adc69210dd059f703878da027 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/timeline.js +2cdc936339c10744b45be5560eae9488 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/devices.js +98c7d638b7e90ddae6aabc103a3a197a ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/zone.js +6a329d8f40a74659b1e1fc10763c6f6e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/export.js.php +f6db2543d3af0dd4f80a777a4dfc0c69 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/log.php +f142b8cf2d848d8277d605cc0bb5c7f0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/none.php +b5b778dd3c8bac8c57e4cefea824eebe ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/export.php +07233ba0c8343b441c0532979c56a411 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/function.php +e77abc6802a1da3e4fd62e646a023f46 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/stats.php +bcd5568ad30fbf43c37b1fb067f6fcba ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/video.php +1551da8d4beb70e03872bf2aadecafa8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/bandwidth.php +e4d9576ea7fc0d077e8f676ca3214510 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/logout.php +2bf800f3105556313be01bd3b4c42aca ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/timeline.php +1b5888dd1130c2624e3a89ec6914641e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/skin.php +1d4fc58a4fb06f37e330419e1de5ccc5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/js/skin.js.php +546dd00ad3f7f286d4d47e7ba1d3606f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/js/skin.js +8218a18edccf1204d7f6b5be75fd0d78 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/es_ar.php +589fbc097bf0eeaf0470127f7760ec1e ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/pt_br.php +37850e5a2c5496828512b7e752d59ee8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/dk_dk.php +b194629ea544221b206616c18a0c148a ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/hu_hu.php +b8015b85b9c032dcb061761731b084b8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/fr_fr.php +b5c7fe7fa19ab9532b4a30723e099881 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/pl_pl.php +5ddb50407c87162ef3bd88cc88a69de1 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/it_it.php +ff9185a540eda7598ce4607045cbfb95 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/se_se.php +0d46d10e46dbbfcdfa3be6ef5ffd0eeb ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/nl_nl.php +bc88aced50114c408e703089ed2c58a1 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/ru_ru.php +6ee18a4395de40fb7e74876ca8725768 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/ro_ro.php +2ce9bebd55d946cf4ea9d0776df0cc7d ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/en_us.php +321a20460bb594abb17b3b925f6c98f2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/cn_zh.php +c4555f9101c6d257b03cb409fae4529d ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/big5_big5.php +cb3bc7a87a69793b4b7bf90f1737b6b4 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/et_ee.php +fc2bf1773c63c42f4da071ce417a7aec ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/ja_jp.php +86ed6db147aeb77e12b76f47bf3364b5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/cs_cz.php +b6e51396273585f0b1155ea66010796c ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/en_gb.php +c53b9bede29062c0e76271c91367a04a ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/he_il.php +c777020c596cee7ceddc1646f19a3080 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/de_de.php +f3a96b4e82b5e7d722d860b0371e92e2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/css/reset.css +d3f02477779fa8a2cddd1c1605583b96 ./distros/ubuntu1204/tmp/usr/share/zoneminder/css/overlay.css +a21186623f461fbdf94a1000fb081ee0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/css/spinner.css +09653a48b2b311109f26d5859d2bb5d6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/actions.php +ea76e136916631c564343e24df07de2b ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/logger.php +8ae8d5b773c4cc9cda879f57aee04dfe ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/control_functions.php +742ad5a8e5eef1b9ce20f1beb5905aed ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/lang.php +bc4b84a1025b7fa5a1f9aefb388ac925 ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/config.php +63bdb662ad9c56e1f39a856d67ae1432 ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/database.php +ee485a94a311463df75d570bf23dce02 ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/functions.php +d9b8cc5ecc4a1f26e057df31675b55cd ./distros/ubuntu1204/tmp/usr/share/zoneminder/views/file.php +90e3a0c17c6d5ac8b0b30e749c89a4ce ./distros/ubuntu1204/tmp/usr/share/zoneminder/views/image.php +6dee62a0963ecdc4b7ccb353b7ae7424 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.27.0.sql +bd8b4735fee0bbb064a140819347df6d ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.0.1.sql +632200d5a6238e256e7cf80de95156dd ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.19.2.sql +821f1c1d6c52f99dd47ac14d61fa5640 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.22.2.sql +1c9100b2e0c6da71bc3492d2d9ae3dfa ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_create.sql +8b07b11c7cad1914c3ea833b8ed5817b ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.24.3.sql +3fca704937207aa222e77210aa0c25e0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.19.5.sql +97edc0c5579da47e346d42df1e545eb0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.20.0.sql +92d0e29600b0f23c3cabdc02ce6259e2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.11.sql +08d098374092ba16eb3459a1aa2a8229 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.24.4.sql +54f6c2d009ad16095cad89d9855c91c2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.27.99.0.sql +4c5855feeaaf945c29c43292e5c74197 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.26.3.sql +c1594ffeff663ea370dbbaeb272e10db ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.22.1.sql +e2dbebece1d49bea27f756895a663f86 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.16.sql +2b89f4c950e227e9313cf7418727f3de ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.26.0.sql +7c452e51249b26c7d6bc2651bd008680 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.21.2.sql +92d5871c239ea24a2bdd738e0776a750 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.28.0.sql +f96d352e85bbffb74ae0c6b354c76cac ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.24.2.sql +85c2f951462a9ca699af571910b2f5e7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.21.0.sql +6f75164dc4ab8e6189ccc8a2f3a006e4 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.17.2.sql +8601c639ef779f73b37e00df75329bf0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.13.sql +4466a07866e466e4a69a6986b2f1d0cb ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.23.1.sql +6314f20b3f02056792caf93944965fd8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.23.0.sql +452cced335ec34b78b4d091b7901ffd5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.21.1.sql +313214000c45d7e66bc09560985913bc ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.29.0.sql +4ec7ea6a41ced9a48b5922f359a56b6b ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.19.4.sql +c75ceef3b6954b8a8047010bea8d6d4f ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.7.sql +5d46d42dd9f62cdaedd5190f05b0a618 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.24.0.sql +8388ea9b05577c775206dcfd5df72856 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.18.0.sql +bee064f205c14f5c20501e739ce80a1e ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.8.sql +990aade37fd26b6fa4ffdd3a13c48b24 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.19.1.sql +34d526653752e2ec9722b21a007d79e8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.22.3.sql +e35625686e01f368b3f8f87359aaac7c ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.15.sql +9c82b2ea73453054f9a69c787ec3596b ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.22.0.sql +2f7281f19a02402c8a2b603143bc203d ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.12.sql +07f00f03f78eca783cfc115fcf1168aa ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.19.3.sql +83decad8946e51529e7f7bbc13c743cf ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.24.1.sql +795313d24e9c26b3557feb386df603c6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.26.1.sql +be7fe21854b261df5b6b28d92ce0dad4 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.19.0.sql +2740f9a92352e7d91be18a67115be71d ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.20.1.sql +ee60615a820f97e43ebab88f173b9921 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.26.5.sql +5880f07d8c485d28a002e45a254c47a5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.17.1.sql +b7468afae4c69e654a4c61feec101730 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.18.1.sql +9b4716630546a41cdfcd08e56faf647b ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.28.1.sql +9c0fc358cdc873030b0367d005f6b765 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.21.4.sql +fd4e7c581673c85f9734bfdf45337b99 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.23.2.sql +54464055410fdae4f296c00c963bdd4c ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.23.3.sql +dd2109c3b45b0243d92e21031b7a55e0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.9.sql +6c09c69e9b66b83a0b8ef8f37f985ebc ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.21.3.sql +5983fcbe9f352433a8cdba6dadea4d5a ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.10.sql +e0651ab19ce94e12f2a05481d4847b52 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.26.2.sql +06031ab17a0397dcc824cf7e56610771 ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/status.php +c518c03f8783cfb822d3fab322c66bd7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/event.php +433c99927f1961f159562627f3c79800 ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/alarm.php +c65641a2edd9bac342684936c391d444 ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/control.php +bcf111c3a38a3a94d5600f33d89416eb ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/zone.php +74836750b8f89f54054ffb31cd67f135 ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/log.php +bf81f42111e73d054802f0aa72027c8e ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/stream.php +d108695d5815a3fd528df2403f3c50cd ./distros/ubuntu1204/tmp/usr/share/zoneminder/index.php +6d1a5880671e67c0d6384a9d33143309 ./distros/ubuntu1204/tmp/usr/share/zoneminder/js/logger.js +1eb33d67d6069ec8723920e59e602d31 ./distros/ubuntu1204/tmp/usr/share/zoneminder/js/overlay.js +2f4357273ede74623cd7f3dbc210da7f ./distros/ubuntu1204/tmp/usr/share/zoneminder/js/mootools.ext.js +861459718684608408e7427d85ad732d ./distros/ubuntu1204/tmp/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-nc.js +d514b6d7bbe53cd04ec0558821146e1f ./distros/ubuntu1204/tmp/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-yc.js +0c240ed4306c44e2cb6206b11919afa8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-yc.js +0b90452e783f31a382c06155a8a3605a ./distros/ubuntu1204/tmp/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-nc.js +567590c0a9aa08352375bc19ca34c449 ./distros/ubuntu1204/tmp/usr/share/polkit-1/actions/com.zoneminder.systemctl.policy +176294d55f322804317befe0c8129348 ./distros/ubuntu1204/tmp/usr/share/polkit-1/rules.d/com.zoneminder.systemctl.rules +9e5fe8a26925a0fa5412fcec401ee3c7 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Memory/Mapped.pm +a3b5d80f8e270b04341401a537d81e96 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Memory/Shared.pm +7271e9b3df2a956ea23868c972699c38 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Base.pm +855f56d67de3ad1fcdce0e629dc59686 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Logger.pm +6fb757ae2c544938c8a0dc8ba578fa9a ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/General.pm +5126afe929867a4d6490ebcb48a49052 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Memory.pm +1983b2a432d9b4c23d27bda668dfcf8d ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control.pm +39b83871c88d452d68cea948fe83b2e4 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Config.pm +4c5b2dd56f5fc8604d2bee7d9896b1d5 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/mjpgStreamer.pm +98bd34b8614625cb0fa0f14df0c4b122 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/M8640.pm +3b908c8286411c2ee2743329b516342d ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/PelcoP.pm +37b2053f17ecf97a398ae5b49dcb7e43 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/LoftekSentinel.pm +dbc009686162f84bd02879355910c1ee ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/Wanscam.pm +2f7bd90864a1a25c9229026f9bac3d41 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/FI8620_Y2k.pm +d66a2faf7390a6668e32a799658e8ae5 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/PanasonicIP.pm +803dc34fb23f239e2bb782b146db18fa ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/FI9821W_Y2k.pm +8fd0894552e6c8464be5bb34533cd4b6 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/FI8608W_Y2k.pm +f0c4a4c08f53620a30909c7816f6e3a7 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/Visca.pm +63a9924dc387192b53f54cbddbd53f60 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/3S.pm +5b33d25c49b10d08dc1e3ecde3c19337 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/AxisV2.pm +daf155e8390d082e1fbad7b3a4375bc9 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/TVIP862.pm +71c881b550c010cbdcbcea690f75584f ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/SkyIPCam7xx.pm +568b527e03f2ebcc99e93085d8d8eae5 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/Toshiba_IK_WB11A.pm +b28878a0cd796fad48c53b1643ed542a ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/PelcoD.pm +4b02c4c5a2b7593eedcddf5d5a8f2cac ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/Ncs370.pm +bc7d0ff4b13d61363d5dbdd7eb0a7a28 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/FI8908W.pm +543fde408bbddc4a584a358376105260 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/ConfigData.pm +bd0dbcf22d4ed15c64698d55d3f5948e ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/ConfigAdmin.pm +8333fef7d94f0fce5e82a671cb83c4ce ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Database.pm +e03d5a957ae0f04839cc8aed13c6e364 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Connection.pm +87445e5e683c1ad70f3db7195aa8913a ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Connection/Example.pm +10b9c55ecde4f59076c8ba20d9855300 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel.pm +19e7cbafa5171dcf849bd00b0d594354 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel/Serial.pm +eda3b7449611e8ebdcf30f97d87b2848 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel/File.pm +de33a8f665c7db9be8cc6f4cdf5ec962 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel/Inet.pm +47cc5f725d6fcc667e6363919e57658f ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel/Unix.pm +b33b640620e68290c44ec8fbf989a313 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel/Spawning.pm +63c6d6667ce2ce36f66bbdc235f73c76 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel/Handle.pm +c9edfd935fb6133f806a91a216f341a7 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder.pm +59f5fab34b7803949cbe2a4e6c731f2d ./distros/ubuntu1204/tmp/usr/lib/cgi-bin/zms +59f5fab34b7803949cbe2a4e6c731f2d ./distros/ubuntu1204/tmp/usr/lib/cgi-bin/nph-zms +7855bc3fa3fc04a8724a971424c33a9b ./distros/ubuntu1204/tmp/usr/bin/zmaudit.pl +2066e1941df243cdc78b75d121d37298 ./distros/ubuntu1204/tmp/usr/bin/zmcamtool.pl +04f3955088b774686a78ce9c3ed6627d ./distros/ubuntu1204/tmp/usr/bin/zmsystemctl.pl +7cc423cfe906b4228e99569b5b92db5f ./distros/ubuntu1204/tmp/usr/bin/zmvideo.pl +d6aca7bf1f3749be87487c88d435fb11 ./distros/ubuntu1204/tmp/usr/bin/zmf +0f8bd6b5132047a4fdfa24eed51ad6c0 ./distros/ubuntu1204/tmp/usr/bin/zmcontrol.pl +e94fb224a65c3154db655bd0bc6e3978 ./distros/ubuntu1204/tmp/usr/bin/zmwatch.pl +9afe3968e31524fdf0e7dcc968612fa6 ./distros/ubuntu1204/tmp/usr/bin/zmc +1ff341f2b46c3c3fd56abc77e2e31a50 ./distros/ubuntu1204/tmp/usr/bin/zmdc.pl +9c1f73f8208b4debf1935d1d8941160c ./distros/ubuntu1204/tmp/usr/bin/zmtrack.pl +9b4a8596632157e138d0bd320663abb5 ./distros/ubuntu1204/tmp/usr/bin/zmstreamer +5fc21ef11e22a35732c93366f9c2cda8 ./distros/ubuntu1204/tmp/usr/bin/zmpkg.pl +67cd253eb83ea78e317641b884f558ee ./distros/ubuntu1204/tmp/usr/bin/zmupdate.pl +d47be574da2a9e578da54e69dd0ace9d ./distros/ubuntu1204/tmp/usr/bin/zma +f45d18796848db83fe6c4a02e34bf8b5 ./distros/ubuntu1204/tmp/usr/bin/zmtrigger.pl +fea0e8713ff60829011f025c0a0e9a25 ./distros/ubuntu1204/tmp/usr/bin/zmx10.pl +d91bacdd1a349b65bb90c30a81b974a8 ./distros/ubuntu1204/tmp/usr/bin/zmu +653ef81a4e89bc73eacddc45eeccdfa0 ./distros/ubuntu1204/tmp/usr/bin/zmfilter.pl +2d0b66c536ed365abc5986c6baa59f2d ./distros/ubuntu1204/tmp/etc/zm/zm.conf +1e144b99b784565606524038db44a583 ./distros/ubuntu1204/rules +327c45c200cd66e796ae059c709c0adb ./distros/ubuntu1204/watch +62bcc6a3d313ff213dc27c14326dd61e ./distros/ubuntu1204/links +e53d213d2368c924bbef374b47dc83e3 ./distros/ubuntu1204/zoneminder.postrm.debhelper +38ff8daab6eeb53c13d8ebdcec3e526c ./distros/ubuntu1204/autoreconf.after +38f30bec7001889b183ccdee141a46d1 ./distros/ubuntu1204/zoneminder.postinst.debhelper +81b4972b39355805b5cc19eec9af6150 ./distros/ubuntu1204/autoreconf.before +20eb5d0df8842df2df7e75d60330d3b9 ./distros/ubuntu1204/apache.conf +8cdf9309850bbbfdb6b8bf44089253a8 ./distros/ubuntu1204/zoneminder.substvars +e7266ba90319421311eae24c9009c9d2 ./distros/ubuntu1204/preinst +3295df67ccd495efd40c4070bc7db9fe ./distros/ubuntu1204/install +480674678e8e3cbbf1bebb2dbbdb7e3c ./distros/ubuntu1204/zoneminder-dbg.debhelper.log +f7aae0b0a71c8ff213b12572eee88d38 ./distros/ubuntu1204/zoneminder-dbg.substvars +ac036608c5c402f92926505d0f0ab0e4 ./distros/ubuntu1204/docs +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1204/patches/series +c97d936f197ff61af4cf1ff4411c1b87 ./distros/ubuntu1204/postrm +0a61e7c13cf765541dc9f971aaca3e9f ./distros/ubuntu1204/postinst +906c9d0f3643fe326f7cd8a7d7e05a96 ./distros/ubuntu1204/changelog +3be3712deda0e232f871d2441b67e3ec ./distros/ubuntu1204/zoneminder.prerm.debhelper +868d38d0ab2e6bf2bf91c75d94135fdb ./distros/redhat/zoneminder.el6.spec +0af0617a10e90f4b759594bec3818817 ./distros/redhat/zoneminder.el7.logrotate.in +afe9cd5e49a8b701ea247f45c3906cc0 ./distros/redhat/archive/zoneminder.el6.spec +41090db57553ecffce81645fc0c20faf ./distros/redhat/archive/zm-init +d758e9c7bc19cf3763159cfaf55e986a ./distros/redhat/archive/zoneminder-1.26.0-defaults.patch +dff3db013c22afeb7d6c9dc4eb105f43 ./distros/redhat/archive/zoneminder-1.28.0-defaults.patch +a21e15a67924471a631c004665711617 ./distros/redhat/archive/zoneminder-1.26.0-dbinstall.patch +9a739e4bfcbb66cdd7c7dec4c217470c ./distros/redhat/archive/zoneminder-runlevel.patch +0bdaf493efaadb4631c2f0fda6ddd120 ./distros/redhat/zoneminder.el7.conf.in +e33931b210cf292a6f1413ffc8d51a37 ./distros/redhat/local_zoneminder.te +ae35849ac3c5eb6203b2f00b646b4bab ./distros/redhat/zoneminder.el6.conf.in +80077b5c533b726aa14df2e99a478124 ./distros/redhat/zoneminder.sysvinit.in +53e73214dc9c49b47b3a338dfed941df ./distros/redhat/README.CentOS +843b68d3e61f38129922c838ae52259f ./distros/redhat/redalert.wav +a972653e3f63c7df60b78e6865102171 ./distros/redhat/jscalendar.sh +6c244e662fa9428ecba9fb463ac146a4 ./distros/redhat/zoneminder.tmpfiles.in +85b0013c94b408423210055c79f8b310 ./distros/redhat/zoneminder.service.in +541b54f11c12717b3263a14377195c61 ./distros/redhat/README.Centos7 +24287b30a09eb5d4413967a432d58e8f ./distros/redhat/zoneminder.el7.spec +2ba74ff367506a22e235d1b6c2f15899 ./distros/redhat/cambozola.sh +7b40e96098ee3df7182aa61c53fa23dd ./distros/redhat/zoneminder.el6.logrotate.in +bfe4c608d67b7df8e347e3453385edea ./distros/redhat/CMakeLists.txt +ef9718bf41e27cce7e0132a619693374 ./autom4te.cache/traces.0 +ebd0786c790488a378bb33b0eb003f32 ./autom4te.cache/requests +2aa23f7c13dc4a0f90ee427b916ea9d2 ./autom4te.cache/traces.1 +81938ae5b36e5e7e606bda89cb8ff466 ./autom4te.cache/output.0 +81938ae5b36e5e7e606bda89cb8ff466 ./autom4te.cache/output.1 +6e5fe73723cd40a28adc5b7b5650c8d1 ./install-sh +c3abfee6e349a06d0b14cd4b5a9de43e ./Dockerfile +77f4af03c9c1c094e567c099869dc159 ./BUGS +ad4e36de78531fcba1182e3c35cc1bef ./scripts/zmtrack.pl.in +e53f1fdad0ac6c5e181fca5c72ae8a01 ./scripts/zmwatch.pl.in +28854e2cee4b109ba2c7d46393d8584e ./scripts/zmupdate.pl.in +4b2bdbf93f4e33ab3ea039a6e6a4a671 ./scripts/Makefile.am +1a1be0fef8fde0fe0a2570d38c0ddf31 ./scripts/zmdbrestore.in +50edf3365462074be942ae7071665321 ./scripts/zmlogrotate.conf.in +f96141faf48ea2e92c001ada49c4d72c ./scripts/zmpkg.pl.in +13147590bfc6abc6b0db5cd0bd153185 ./scripts/zmdbbackup.in +9bec7be0102dffebc0797e74a8104ba0 ./scripts/ZoneMinder/t/ZoneMinder.t +2a8c4a4c924910d9f25b473846c1d376 ./scripts/ZoneMinder/lib/ZoneMinder/Memory/Mapped.pm +f1bc93190f0e0e101cc18c445c051625 ./scripts/ZoneMinder/lib/ZoneMinder/Memory/Shared.pm +cbdc04a1e76f8f53b6489fa7646a4432 ./scripts/ZoneMinder/lib/ZoneMinder/Logger.pm +c71d128ecfa2c2888bcedbd22bf7db6c ./scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +29129dcae091093a8f705b662de03b81 ./scripts/ZoneMinder/lib/ZoneMinder/General.pm +9a749f73fe6eab57983d064527dccf7a ./scripts/ZoneMinder/lib/ZoneMinder/Base.pm.in +e7fac2ef32d10538b559c5cfc2ab246f ./scripts/ZoneMinder/lib/ZoneMinder/Control.pm +ca2106f3fbcb6cd34c7e15d00b269eb7 ./scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in +b0baa717a7239653be568d1ca73a55e6 ./scripts/ZoneMinder/lib/ZoneMinder/Control/mjpgStreamer.pm +f6ef21aea163be37e3d72b5ec6dec17c ./scripts/ZoneMinder/lib/ZoneMinder/Control/M8640.pm +ee07b782ac2e790d82b9bc00540835bf ./scripts/ZoneMinder/lib/ZoneMinder/Control/PelcoP.pm +37b2053f17ecf97a398ae5b49dcb7e43 ./scripts/ZoneMinder/lib/ZoneMinder/Control/LoftekSentinel.pm +0a793251749dadf86b5ee68381cdd2c2 ./scripts/ZoneMinder/lib/ZoneMinder/Control/Wanscam.pm +19a1ab5b89f9e8989a176bbf08070c58 ./scripts/ZoneMinder/lib/ZoneMinder/Control/FI8620_Y2k.pm +d66a2faf7390a6668e32a799658e8ae5 ./scripts/ZoneMinder/lib/ZoneMinder/Control/PanasonicIP.pm +3c95537f3b24911244cd8c166f5bdfb1 ./scripts/ZoneMinder/lib/ZoneMinder/Control/FI9821W_Y2k.pm +20968374f9be0aecad08fe746a765863 ./scripts/ZoneMinder/lib/ZoneMinder/Control/FI8608W_Y2k.pm +f0c4a4c08f53620a30909c7816f6e3a7 ./scripts/ZoneMinder/lib/ZoneMinder/Control/Visca.pm +9cc2e3fa06f47cbdd4dc9728f42073d3 ./scripts/ZoneMinder/lib/ZoneMinder/Control/3S.pm +5b33d25c49b10d08dc1e3ecde3c19337 ./scripts/ZoneMinder/lib/ZoneMinder/Control/AxisV2.pm +1d0ae84d7bd9e71611bea845f79f02c7 ./scripts/ZoneMinder/lib/ZoneMinder/Control/TVIP862.pm +71c881b550c010cbdcbcea690f75584f ./scripts/ZoneMinder/lib/ZoneMinder/Control/SkyIPCam7xx.pm +ae94627d4dfb52f4ec93885555c0803f ./scripts/ZoneMinder/lib/ZoneMinder/Control/onvif.pm +568b527e03f2ebcc99e93085d8d8eae5 ./scripts/ZoneMinder/lib/ZoneMinder/Control/Toshiba_IK_WB11A.pm +b28878a0cd796fad48c53b1643ed542a ./scripts/ZoneMinder/lib/ZoneMinder/Control/PelcoD.pm +4b02c4c5a2b7593eedcddf5d5a8f2cac ./scripts/ZoneMinder/lib/ZoneMinder/Control/Ncs370.pm +469f80662f3f9397fc19c127b3429db4 ./scripts/ZoneMinder/lib/ZoneMinder/Control/FI8908W.pm +b1bf6c33d26863627fd956de45830413 ./scripts/ZoneMinder/lib/ZoneMinder/Memory.pm.in +d26840e36049a6b20a86116835766814 ./scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm +fad29ee7bab98373c9f837bba390134a ./scripts/ZoneMinder/lib/ZoneMinder/Database.pm +f71b1c4fb3aaadd94fc3a8679028a7e5 ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Connection.pm +9266185080bea9c7562977e93aadf73f ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Connection/Example.pm +8cd1b8057a2e3e45abb21b483800bfb4 ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel.pm +a6d796f873159d059c802cdfad7cfc07 ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Serial.pm +75794d19dae22b8e0d93a1004478838c ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/File.pm +b55c3cde5afe9438c4b3930e86ef380c ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Inet.pm +122129f9ee1444e7ce1f37ef20a5532c ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Unix.pm +3a4cf147dc5c25f03f417cbc9f4781ec ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Spawning.pm +8e2868f171a9dd76d5ed9aea1caed667 ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Handle.pm +e84d25345d7953c4ae06467f69dc2746 ./scripts/ZoneMinder/lib/ZoneMinder.pm +301bad1381987f4e3df8a123b0ac6b97 ./scripts/ZoneMinder/META.yml +5e414f9e2d04fd9e561f4b22f45be9bb ./scripts/ZoneMinder/README +14696f83caef8d03572ec1297174bceb ./scripts/ZoneMinder/MANIFEST.SKIP +ab79b6887d4259c304af63886d8ee5f8 ./scripts/ZoneMinder/Makefile.PL +c579d069e60fa17c7be4b4e29928b7b8 ./scripts/ZoneMinder/MANIFEST +0d6f709fb50d1676264dc4c59fd6cd47 ./scripts/ZoneMinder/Changes +14696f83caef8d03572ec1297174bceb ./scripts/ZoneMinder/INSTALL.SKIP +4645148f50e7a6a362fb46b1f30ce719 ./scripts/ZoneMinder/CMakeLists.txt +606a1010a8ee3a0a6ca30750e6d59794 ./scripts/zmeventdump.in +8b6a51399993c0bbd9c8275262477f7f ./scripts/zmtrigger.pl.in +52115e43e3f493748420325a6384e47f ./scripts/Makefile.in +51041db75d07319afabc4fcc2aa427cb ./scripts/zmcontrol.pl.in +9f3dfc648bccd6ef7199f231345449d0 ./scripts/zmdc.pl.in +ee86caeaaef76821049e568458e32bd8 ./scripts/zmaudit.pl.in +325b3ac2be6211ca90e5f910f530adee ./scripts/zm.in +93c82ba32bdd115e347e7f77a73a178f ./scripts/zmfilter.pl.in +2cab977e394b76a9b6d61332b1b29136 ./scripts/zmsystemctl.pl.in +ca4ad5b2b9481a747e413e4bca6a63c9 ./scripts/zmx10.pl.in +362f1f10511b260cda2d0de75896dea0 ./scripts/zmvideo.pl.in +a77bb90cfd60d41fc5d65eb43476d00b ./scripts/zmcamtool.pl.in +00e7a29ce2f0e69277800d003340a93b ./scripts/CMakeLists.txt +3cd0e665129e6c077b1e27eed251222b ./misc/logrotate.conf.in +647924e9e43b3625fefb81a8a7f40003 ./misc/Makefile.am +ec8277d9a64fad2f72b943c308f4b444 ./misc/apache.conf.in +9af6648e5833d4716b11dc3347477fcc ./misc/com.zoneminder.systemctl.rules.in +2d5fdf15a17c9a73e76b45e80cb69d15 ./misc/Makefile.in +27f74a16095e73b5d3b74f2e51f18f93 ./misc/zoneminder.service.in +8e1836db3c03bb425931083c04533bba ./misc/com.zoneminder.systemctl.policy.in +2b258626528c88f36b87941a2dbb7148 ./misc/syslog.conf.in +440ef71e03f2f23f6202b00f1ed3d8d3 ./misc/zoneminder-tmpfiles.conf.in +76a9a299d6b1651f8ab22583e32c8bd8 ./misc/CMakeLists.txt +6afe490bc9be80daa397584b6285076b ./doc-pak/BUGS +57c5a10f8c5cf3c4cb14a7d38c8dffd9 ./doc-pak/INSTALL +d8955699b1ce919d5e2bf4e17aece604 ./doc-pak/README +94d55d512a9ba36caa9b7df079bae19f ./doc-pak/COPYING +013b58c625d771db0aa2022ecca67248 ./doc-pak/TODO +6afe490bc9be80daa397584b6285076b ./doc-pak/ChangeLog +d7995c7953be1d6cae059965282ddd66 ./doc-pak/AUTHORS +6afe490bc9be80daa397584b6285076b ./doc-pak/NEWS +edc230d4920185e0e55261a7c9fc46b6 ./Makefile.am +9a742191002c86c9d98dbb9b57dc2102 ./cmakecacheimport.sh +403e221e89bb6e8c30d92d7c07834e22 ./aclocal.m4 +a01f47d3413cd9070ecd63f2a05f6143 ./config.h.in +6277d71b2125f2bd6390226a906f0b0c ./config.sub +18ec93e7356bf3aeda1a11573c0ab6c5 ./connect +e9df6bc73d723fd85234484a63347c63 ./INSTALL +96bdd8d083a7aef85a6118ebf9d31500 ./.travis.yml +1ad54e190e8322176a47a48621ad0887 ./missing +12fcbf6b4aa8bd2674b6b5a81c924a72 ./m4/ac_check_sendfile.m4 +5ed2e65b5af5b32da467acf2d4b64416 ./utils/travis.pl +0dead2f5ad7f18c7b9abb0a77675369b ./utils/zm-alarm.pl +49e4b2997d5eca16a5bd731316b73539 ./utils/docker/apache-vhost +ae01b4dbfb6ad338b7bb055ae74ac93f ./utils/docker/README.md +a047db93a815d2b580ebd22b5ba24e32 ./utils/docker/start.sh +6fdeb5eca9580a25e9b90c7a0e7c3a06 ./utils/bump-version.pl +73f229f8c2990a7b8df025756c396982 ./utils/travis/bootstrap-zm.sh +2d3a1b647478082f8fd48f5f4f3817df ./utils/travis/install-deps.sh +a7729239da9aaf4d7f9af6d3cdedc4dc ./utils/travis/run-tests.sh +171fc75aa4c3a00d3bcaaf85f7d21cd7 ./utils/travis/build-zm.sh +4316f86eb875c7304171b72ea4df95dc ./utils/travis/install-ffmpeg.sh +6d906dad8419f6277ae2b76749dabdb0 ./utils/zmeditconfigdata.sh +f675151b8785b307bf2c61efc3e2fa04 ./:wq +e514237c1809cb0819a8f549864a4e5a ./version +94d55d512a9ba36caa9b7df079bae19f ./COPYING +0fb81517303511f05a01b14f41cec2cf ./config.guess +3c842df6701d694518f05a4accce2f1c ./web/api/lib/Cake/bootstrap.php +21d9c6649f6586d2ff2a36f6e0404805 ./web/api/lib/Cake/LICENSE.txt +e89340d684b13283b59b05fee057a79e ./web/api/lib/Cake/Test/test_app/Lib/Cache/Engine/TestAppCacheEngine.php +47c6e8338a0c59b01e6202e7857df29d ./web/api/lib/Cake/Test/test_app/Lib/Log/Engine/TestAppLog.php +8ba4fc8412f6b556c02f5767a9463233 ./web/api/lib/Cake/Test/test_app/Lib/Utility/TestUtilityClass.php +f90bfa60462960ec50aaa07fe63b0cbb ./web/api/lib/Cake/Test/test_app/Lib/Library.php +29e90e9d0ab1a9b7d433ebcd5902b44a ./web/api/lib/Cake/Test/test_app/Vendor/sample/configure_test_vendor_sample.php +c56cc7e33359d57ce83b138aec492caf ./web/api/lib/Cake/Test/test_app/Vendor/Test/MyTest.php +03260e772ca3e938b828001abea811a6 ./web/api/lib/Cake/Test/test_app/Vendor/Test/hello.php +624b64d8facc8de34c4433376dad377b ./web/api/lib/Cake/Test/test_app/Vendor/welcome.php +f61236ec67ffdd793adb8739b4bdb8ae ./web/api/lib/Cake/Test/test_app/Vendor/img/test_2.JPG +f61236ec67ffdd793adb8739b4bdb8ae ./web/api/lib/Cake/Test/test_app/Vendor/img/test.jpg +fa26f7a3b3c18d46ed10ea234eaecdac ./web/api/lib/Cake/Test/test_app/Vendor/css/test_asset.css +fce05435ffaedf0b749f66e341f338d5 ./web/api/lib/Cake/Test/test_app/Vendor/somename/some.name.php +cc1578e4b2fb743d38fb62f48197892a ./web/api/lib/Cake/Test/test_app/Error/TestAppsExceptionRenderer.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/tmp/empty +a0a97dce0e1f8f79d56cec7bb3075d3c ./web/api/lib/Cake/Test/test_app/Model/Behavior/PersisterTwoBehaviorBehavior.php +8394e7de4c22cf504408ef2771f039a3 ./web/api/lib/Cake/Test/test_app/Model/Behavior/PersisterOneBehaviorBehavior.php +c7bf474929dde9b092d096bdd060da4c ./web/api/lib/Cake/Test/test_app/Model/PersisterOne.php +7b07ed28c32212df14b5ae844084480f ./web/api/lib/Cake/Test/test_app/Model/Extract.php +bb3170979ea70c222e74ff2e932420b5 ./web/api/lib/Cake/Test/test_app/Model/PersisterTwo.php +49ecbc5da4ec2b8b8f3f56eda4828e5a ./web/api/lib/Cake/Test/test_app/Model/Datasource/Database/TestLocalDriver.php +e585f3cadb2f7ee1a359abda70922be5 ./web/api/lib/Cake/Test/test_app/Model/Datasource/Test2OtherSource.php +4733f44a44e6de3a6ea55aeae8bb4504 ./web/api/lib/Cake/Test/test_app/Model/Datasource/Test2Source.php +a3368116f4081b433cac805a2dfb4b17 ./web/api/lib/Cake/Test/test_app/Model/Datasource/Session/TestAppLibSession.php +3bd04aac265b37dbed3499ffa51c0674 ./web/api/lib/Cake/Test/test_app/Model/Post.php +b6e7142b77437d3675df735fe742223a ./web/api/lib/Cake/Test/test_app/Model/Comment.php +785392a2eb6fe830093a2f39b247beab ./web/api/lib/Cake/Test/test_app/Model/AppModel.php +c51ccf5765b43cc5b8ad47146e47f0e0 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/TestPluginLibrary.php +fbb7db7e511708c02a0c35186b1b03f2 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Error/TestPluginExceptionRenderer.php +9c34f4fed9275051c7548fdff20af4fd ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Cache/Engine/TestPluginCacheEngine.php +cea01f5579ab7fc93b8adc3767ab7dd4 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/TestPluginOtherLibrary.php +9a6578b7c36ba5fe95e3478a3da0490b ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Log/Engine/TestPluginLog.php +1f9c2a20bfadb296aecd8b9d5d373787 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Custom/Package/CustomLibClass.php +187de632eed4d8dd961e32304f523915 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Routing/Route/TestRoute.php +41e89aa7bef400f1dda0d91dab88fc02 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Routing/Filter/TestDispatcherFilter.php +1da1ab6703cb711921145af63de8cdb9 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Routing/Filter/Test2DispatcherFilter.php +e6ad33fa50014530ff2de946ec646626 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Vendor/sample/sample_plugin.php +a761e47db96732c989cab76be0d0051b ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Vendor/welcome.php +0578c4b92736c763ff3034ee6242bdb6 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Vendor/Example/ExampleExample.php +fc0ee8b751b2643758955dd0753d1d3f ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Behavior/TestPluginPersisterTwoBehavior.php +7068d4329d30b701080db7016af2a23a ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Behavior/TestPluginPersisterOneBehavior.php +ca1afa97aded1d86970226ac07aee08a ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Datasource/TestSource.php +97a20334d6f79af8e574627245301a1c ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Datasource/Database/TestDriver.php +a53aa4ed29997e01af92ed0547557662 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Datasource/Database/DboDummy.php +06cb4922131227ca901edebd4f6c40e1 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Datasource/TestOtherSource.php +e9175c140ada96c982416a619a9ba260 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Datasource/Session/TestPluginSession.php +41b0c1d49ce50b7273a50c7946fb2bda ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/TestPluginAppModel.php +b2e17d80efd8b68f38d7890bd092ad1a ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/TestPluginComment.php +ddeba991ff31eb0bad5f46eb21a63685 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/TestPluginPost.php +f7f9f830e64032863df73543d1aaab0c ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/TestPluginAuthors.php +ee3740aaf206279226a4e9a7acd6fee9 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/TestPluginAuthUser.php +74c32bdabfe905583fe3070a49448e89 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/bootstrap.php +19050fb49909398004725f2a58bb0895 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/routes.php +6a0b8e42eb095446cf318cd894bd366a ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/more.load.php +ada7fabf2136dbc936d25e75cf9528c7 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/custom_config.php +f9a2f4ba7504aa4cd3219f14d576358f ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/load.php +18467d0d6fda8baeb711c514f9ca9ba5 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/acl.ini.php +4bb463b312b9cd1354b731f65c948b06 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/nested.ini +8bb247ad8a5845d1e19f88bfdd672104 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/Schema/schema.php +fbe668f7530cddbad40b00a9c483238c ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Console/Command/ExampleShell.php +46e63c845d67cb31ce6d7f07a1525b39 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Console/Command/Task/OtherTaskTask.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Console/Templates/empty +126fa012915e90db50e73b7c041472e4 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/img/cake.icon.gif +175228bccb2be98154ae3e8a9e786895 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/css/test_plugin_asset.css +66d62847ea7f4a6aad369c594897b018 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/css/theme_one.htc +5224fa3ad5c5085afb2995fd4caab97c ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/css/unknown.extension +da0f681816d9e35e022987f0d4c0018f ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/flash/plugin_test.swf +74af2250ff94bdfe8d49b3469e777007 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/pdfs/plugin_test.pdf +a40cbfb32ad23728d30d7122f93eb9ef ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/js/test_plugin/test.js +41141f1b57abe01cc8e1e6705f48054e ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/root.js +04c91b008d6ed6397e0a31495aab7efc ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Utility/TestPluginEngine.php +54ac59451fe1a8fce5df39ab4b2015aa ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Locale/po/LC_MESSAGES/test_plugin.po +27da8e4bee4a237847907a7711005673 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Locale/po/LC_MONETARY/test_plugin.po +6aff9abc540e8936a6177e14d542b612 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Elements/plugin_element.ctp +90a4af93804c8e79541a37b35ceb950f ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Elements/test_plugin_element.ctp +48d63fb68118c8081261a784200129b3 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Elements/translate.ctp +00d924fb9e0e98e167e6709817c25705 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Elements/sub_dir/sub_element.ctp +fcd9ffbcf1d9b290e177a34ab6f26ca8 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Layouts/Emails/text/plug_default.ctp +cf6e2a1c890bd3d4e80904f08390b3f8 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Layouts/default.ctp +76a72eda4843bdc27a7a0a889d63749f ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Emails/text/test_plugin_tpl.ctp +2837c0ea23f9052da2fed5696a109524 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Helper/PluggedHelperHelper.php +99ca835b9b936b4dd479000620d894e2 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Helper/TestPluginAppHelper.php +b8e14cc749e59e128d38027625d76cbe ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Helper/OtherHelperHelper.php +bf07675e57dee8cff4bc2e1219cadae5 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Tests/scaffold.form.ctp +836cdeaec179d895d954683368453005 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Tests/index.ctp +9732f7c2c06cc1bc10666c82d2ad2f9c ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/TestsController.php +bd328fa4ffc4bd487cc15587eaeb0075 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/Component/OtherComponent.php +076017644d95e10866e04123dce4b4ba ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/Component/TestPluginOtherComponent.php +680d51674af3d0ab20cbd0ebbe0416a7 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/Component/TestPluginComponent.php +783e830f54fd4907a11ce45e5657d3b2 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/Component/PluginsComponent.php +f3fdc11e192ab0fec75e8e4b46f3ffb2 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/TestPluginController.php +a7a3e83dde48a6546e66f7ffe3f5a6e1 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/TestPluginAppController.php +42a86a7baecb93a21e4d39eb593a7a15 ./web/api/lib/Cake/Test/test_app/Plugin/TestPluginTwo/Config/bootstrap.php +a156f9daf3fa1109d056f3655e882694 ./web/api/lib/Cake/Test/test_app/Plugin/TestPluginTwo/Console/Command/ExampleShell.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/Plugin/TestPluginTwo/Console/Command/Task/empty +d820b3f7f6fb5765711552fc91df3295 ./web/api/lib/Cake/Test/test_app/Plugin/TestPluginTwo/Console/Command/WelcomeShell.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/Plugin/TestPluginTwo/Console/Templates/empty +617c044f5f502df64dfe722590dea561 ./web/api/lib/Cake/Test/test_app/Plugin/TestPluginTwo/View/Layouts/Emails/text/default.ctp +b4acc78492a8bcb2505f3b0eef1ec8a3 ./web/api/lib/Cake/Test/test_app/Plugin/PluginJs/Config/bootstrap.php +daa3523ca33d79506846cf63dc7bfc14 ./web/api/lib/Cake/Test/test_app/Plugin/PluginJs/webroot/js/one/plugin_one.js +54a6b27fedd38a5513eb37da5afea5b1 ./web/api/lib/Cake/Test/test_app/Plugin/PluginJs/webroot/js/plugin_js.js +2313ee210abe3522925c1fe1b6755b32 ./web/api/lib/Cake/Test/test_app/Config/htmlhelper_tags.php +a932ddd6ccea470d55d59238eba77bb0 ./web/api/lib/Cake/Test/test_app/Config/var_test2.php +315ea0a65863393e54a368444bac0624 ./web/api/lib/Cake/Test/test_app/Config/acl.php +9eb1a3fdd5933c0904b7c1d179262793 ./web/api/lib/Cake/Test/test_app/Config/var_test.php +02945bddfe27ca58e70b00483f27a400 ./web/api/lib/Cake/Test/test_app/Config/empty.ini +a04fb405d9a0307631314689e96e0bbf ./web/api/lib/Cake/Test/test_app/Config/empty.php +39b02e6b017e271666714a9477e749c0 ./web/api/lib/Cake/Test/test_app/Config/routes.php +18467d0d6fda8baeb711c514f9ca9ba5 ./web/api/lib/Cake/Test/test_app/Config/acl.ini +d0c1722dcac74c5d4402cecce84114da ./web/api/lib/Cake/Test/test_app/Config/no_ini_extension +18467d0d6fda8baeb711c514f9ca9ba5 ./web/api/lib/Cake/Test/test_app/Config/acl.ini.php +11b9f8b609d755f28e6090b12b1b53f4 ./web/api/lib/Cake/Test/test_app/Config/htmlhelper_minimized.ini +3918705c13a59d53b4ddbe605606b3a7 ./web/api/lib/Cake/Test/test_app/Config/no_php_extension +ffd4e0a5e9b893491fbe8e7cd8b1f825 ./web/api/lib/Cake/Test/test_app/Config/no_section.ini +032eae36aa156ca201f07f35a51097eb ./web/api/lib/Cake/Test/test_app/Config/nested.ini +b44fd810deb59fe3aee54782cb081566 ./web/api/lib/Cake/Test/test_app/Console/Command/SampleShell.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/Console/Command/Task/empty +df4f7d990b3f380cc3cd48b016bd79ab ./web/api/lib/Cake/Test/test_app/Console/Templates/test/views/admin_edit.ctp +7c580b8455493fd6e726247e7c45e206 ./web/api/lib/Cake/Test/test_app/Console/Templates/test/classes/test_object.ctp +bb7e210a60f92e5458e347cf77177c5f ./web/api/lib/Cake/Test/test_app/webroot/img/cake.power.gif +bb7e210a60f92e5458e347cf77177c5f ./web/api/lib/Cake/Test/test_app/webroot/theme/test_theme/img/cake.power.gif +f61236ec67ffdd793adb8739b4bdb8ae ./web/api/lib/Cake/Test/test_app/webroot/theme/test_theme/img/test.jpg +9eda360be44eb192559520c90cc56d09 ./web/api/lib/Cake/Test/test_app/webroot/theme/test_theme/css/webroot_test.css +db961fa2871bc149703e2840e603d5ba ./web/api/lib/Cake/Test/test_app/webroot/theme/test_theme/css/theme_webroot.css +4045c74ce1810c81d0e5577849a51900 ./web/api/lib/Cake/Test/test_app/Utility/TestAppEngine.php +da402d69dc7a7f2a6d37ea2a0d46eb2d ./web/api/lib/Cake/Test/test_app/Locale/rule_9_mo/LC_MESSAGES/core.mo +5805d00a8f1b197b79cbf60843661c19 ./web/api/lib/Cake/Test/test_app/Locale/rule_9_mo/LC_MESSAGES/default.mo +f964fbd3c78fe0458164b079c614d731 ./web/api/lib/Cake/Test/test_app/Locale/rule_1_mo/LC_MESSAGES/core.mo +3a06ea1e56fb4e6dc031afd4f2c7f842 ./web/api/lib/Cake/Test/test_app/Locale/rule_1_mo/LC_MESSAGES/default.mo +2ffe8ee1d6850c85e8270f743a5ea3c8 ./web/api/lib/Cake/Test/test_app/Locale/rule_11_po/LC_MESSAGES/default.po +2caf5ed5fa6273282add9f6e4b462a45 ./web/api/lib/Cake/Test/test_app/Locale/rule_11_po/LC_MESSAGES/core.po +7a440d04278ced0f2797eda1ad225482 ./web/api/lib/Cake/Test/test_app/Locale/rule_9_po/LC_MESSAGES/default.po +996bdc4280d78159636949b6f46ae007 ./web/api/lib/Cake/Test/test_app/Locale/rule_9_po/LC_MESSAGES/core.po +136b54d0c992b60119276966380ac491 ./web/api/lib/Cake/Test/test_app/Locale/rule_13_mo/LC_MESSAGES/core.mo +bab887359f157785adc38ee4c015e0ef ./web/api/lib/Cake/Test/test_app/Locale/rule_13_mo/LC_MESSAGES/default.mo +8b2c395317a62e0b16051708ef60bef6 ./web/api/lib/Cake/Test/test_app/Locale/rule_7_po/LC_MESSAGES/default.po +8420328a38ccbd5c056dd8f16dfc823c ./web/api/lib/Cake/Test/test_app/Locale/rule_7_po/LC_MESSAGES/core.po +9add7ae20a4f3531f09de8ec5ea3a7ed ./web/api/lib/Cake/Test/test_app/Locale/rule_3_mo/LC_MESSAGES/core.mo +3066265513d2bece8e456a30c95453b1 ./web/api/lib/Cake/Test/test_app/Locale/rule_3_mo/LC_MESSAGES/default.mo +540cd463801903c03200ef2ad95bbc47 ./web/api/lib/Cake/Test/test_app/Locale/rule_4_po/LC_MESSAGES/default.po +8e3ecff80b7ada02af62886e88569f73 ./web/api/lib/Cake/Test/test_app/Locale/rule_4_po/LC_MESSAGES/core.po +51a2ad73868e4db488adb789d1560695 ./web/api/lib/Cake/Test/test_app/Locale/rule_3_po/LC_MESSAGES/default.po +cca38cbe76ad8bc027e28337e7e342e2 ./web/api/lib/Cake/Test/test_app/Locale/rule_3_po/LC_MESSAGES/core.po +1bfe3f96f2b1d76867358dbfd1b0056a ./web/api/lib/Cake/Test/test_app/Locale/nld/LC_TIME +c5223ea136d79ed2ce61eb5476dae474 ./web/api/lib/Cake/Test/test_app/Locale/rule_14_mo/LC_MESSAGES/core.mo +89b8c745fada1b29d7e1192fc19758fc ./web/api/lib/Cake/Test/test_app/Locale/rule_14_mo/LC_MESSAGES/default.mo +0ffbc87cb8a055b039888e84fcaa3527 ./web/api/lib/Cake/Test/test_app/Locale/rule_11_mo/LC_MESSAGES/core.mo +224a712052dbfde0fb5e8b6aab36244d ./web/api/lib/Cake/Test/test_app/Locale/rule_11_mo/LC_MESSAGES/default.mo +900a63e8dd5507caaed5108a29f12784 ./web/api/lib/Cake/Test/test_app/Locale/po/LC_MESSAGES/default.po +b39ee78cb6d6561c0cffb04984221d06 ./web/api/lib/Cake/Test/test_app/Locale/po/LC_TIME +0f038e9bc6a35895adc74f2535ce3a8f ./web/api/lib/Cake/Test/test_app/Locale/po/LC_MONETARY/default.po +ab2c9408009f922754f048fc4f1a9e0d ./web/api/lib/Cake/Test/test_app/Locale/rule_5_mo/LC_MESSAGES/core.mo +6be039e56e459cc595f4c18fc3910035 ./web/api/lib/Cake/Test/test_app/Locale/rule_5_mo/LC_MESSAGES/default.mo +91d7b8673026375f8e1c186fd219d72d ./web/api/lib/Cake/Test/test_app/Locale/rule_2_po/LC_MESSAGES/default.po +2d0698c684499541281bc134fe424ee8 ./web/api/lib/Cake/Test/test_app/Locale/rule_2_po/LC_MESSAGES/core.po +99309fd04aec751641cbb90e0bd1780e ./web/api/lib/Cake/Test/test_app/Locale/rule_6_po/LC_MESSAGES/default.po +9291931f0143a2b189abb88189555431 ./web/api/lib/Cake/Test/test_app/Locale/rule_6_po/LC_MESSAGES/core.po +5fb025a4536f442ec27e0ea331ad72e1 ./web/api/lib/Cake/Test/test_app/Locale/rule_0_po/LC_MESSAGES/default.po +628d7dc7ac5bd2e3b4edd616e63a83d6 ./web/api/lib/Cake/Test/test_app/Locale/rule_0_po/LC_MESSAGES/core.po +7549c3ca1e5aa2dfa560708ca0472d49 ./web/api/lib/Cake/Test/test_app/Locale/rule_12_po/LC_MESSAGES/default.po +d8e56525dc66a230180d8f938bd6da40 ./web/api/lib/Cake/Test/test_app/Locale/rule_12_po/LC_MESSAGES/core.po +ab0f43b461845c262f595ae3caa67e44 ./web/api/lib/Cake/Test/test_app/Locale/cache_test_po/LC_MESSAGES/default.po +e22cf600ab5cf562c1bb37abf24654c9 ./web/api/lib/Cake/Test/test_app/Locale/cache_test_po/LC_MESSAGES/dom2.po +69a2b46c8bba4ff50ae5547f2a2a3bad ./web/api/lib/Cake/Test/test_app/Locale/cache_test_po/LC_MESSAGES/dom1.po +9aa2e582e3a590a30e2dd9dcbacfb633 ./web/api/lib/Cake/Test/test_app/Locale/rule_1_po/LC_MESSAGES/default.po +fe5eee8290dde2a539431db39cb90d77 ./web/api/lib/Cake/Test/test_app/Locale/rule_1_po/LC_MESSAGES/core.po +bdbdae26db021dcdf0532334dccca80e ./web/api/lib/Cake/Test/test_app/Locale/rule_12_mo/LC_MESSAGES/core.mo +844f6afb9d331196fd13f72f6decf8ee ./web/api/lib/Cake/Test/test_app/Locale/rule_12_mo/LC_MESSAGES/default.mo +31614f46c6995be0ff115dac13ad62d8 ./web/api/lib/Cake/Test/test_app/Locale/rule_2_mo/LC_MESSAGES/core.mo +050ac570b1a1e296c5c8313a64d9dd46 ./web/api/lib/Cake/Test/test_app/Locale/rule_2_mo/LC_MESSAGES/default.mo +387f54438ea0958ce544313d97de526f ./web/api/lib/Cake/Test/test_app/Locale/eng/LC_MESSAGES/validation_messages.po +d6d1897815632fe51f65430263fc1a90 ./web/api/lib/Cake/Test/test_app/Locale/rule_14_po/LC_MESSAGES/default.po +2c8590db340684660d4fd0535f66b897 ./web/api/lib/Cake/Test/test_app/Locale/rule_14_po/LC_MESSAGES/core.po +3b7e881a60b5232a76379f3985b92754 ./web/api/lib/Cake/Test/test_app/Locale/rule_13_po/LC_MESSAGES/default.po +cf0b24859a92fd5755ee757b0363f53e ./web/api/lib/Cake/Test/test_app/Locale/rule_13_po/LC_MESSAGES/core.po +e1ea0ffb5b90098990692f7c59906951 ./web/api/lib/Cake/Test/test_app/Locale/rule_8_po/LC_MESSAGES/default.po +aa081c7a41a102f24353859ae5cd117e ./web/api/lib/Cake/Test/test_app/Locale/rule_8_po/LC_MESSAGES/core.po +9176355a072b069587b9f4bf00c077a1 ./web/api/lib/Cake/Test/test_app/Locale/time_test/LC_TIME +492fd41d9ce626ee100aa3bf01849ad0 ./web/api/lib/Cake/Test/test_app/Locale/rule_6_mo/LC_MESSAGES/core.mo +aa06af602fdd89cf6c4a92db53ac3e2f ./web/api/lib/Cake/Test/test_app/Locale/rule_6_mo/LC_MESSAGES/default.mo +cb27c995da384acdb19a86ac209c0e10 ./web/api/lib/Cake/Test/test_app/Locale/rule_5_po/LC_MESSAGES/default.po +50207b64dee9ebc4af6f1dfa91420475 ./web/api/lib/Cake/Test/test_app/Locale/rule_5_po/LC_MESSAGES/core.po +3d382ce185f9c7ed640eab765ea1f8fd ./web/api/lib/Cake/Test/test_app/Locale/ja_jp/LC_TIME +b4bb26b15a22eaaffe96bcc884cd1a6c ./web/api/lib/Cake/Test/test_app/Locale/rule_7_mo/LC_MESSAGES/core.mo +15fdc10427ae35fe6fdbd1547161b419 ./web/api/lib/Cake/Test/test_app/Locale/rule_7_mo/LC_MESSAGES/default.mo +a112cab9c0fbf47f87b270669eb6e5a3 ./web/api/lib/Cake/Test/test_app/Locale/rule_4_mo/LC_MESSAGES/core.mo +48df73613576dc7451362957e938499e ./web/api/lib/Cake/Test/test_app/Locale/rule_4_mo/LC_MESSAGES/default.mo +dd68c668526e667f69710a3138ec40dc ./web/api/lib/Cake/Test/test_app/Locale/rule_10_po/LC_MESSAGES/default.po +7bbfb9a27845e3045dae6b3c34ee70c2 ./web/api/lib/Cake/Test/test_app/Locale/rule_10_po/LC_MESSAGES/core.po +08b97b40730df4cf753bfbde9dcce57b ./web/api/lib/Cake/Test/test_app/Locale/rule_10_mo/LC_MESSAGES/core.mo +06d22b894b9dd82dd1ef34c7f1ff1022 ./web/api/lib/Cake/Test/test_app/Locale/rule_10_mo/LC_MESSAGES/default.mo +a36f13ceb47fdb2d6718d1740992062d ./web/api/lib/Cake/Test/test_app/Locale/rule_0_mo/LC_MESSAGES/core.mo +67074e9e64a70bbfb403e66edbdd57b2 ./web/api/lib/Cake/Test/test_app/Locale/rule_0_mo/LC_MESSAGES/default.mo +d770c48d7c7c324016e95d383655ab5d ./web/api/lib/Cake/Test/test_app/Locale/rule_8_mo/LC_MESSAGES/core.mo +982794001240c520b6ed5495b963edd9 ./web/api/lib/Cake/Test/test_app/Locale/rule_8_mo/LC_MESSAGES/default.mo +4ca1fbc35873d6fe2a14a0ad2c4829c8 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Elements/test_element.ctp +c269d96199ba690aa0722518f03557c3 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Layouts/default.ctp +9e2364d503c5408df15423227ba3868f ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Emails/text/themed.ctp +44b1fe8d638e10d9494cf85cd5f2c334 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Plugin/TestPlugin/Layouts/plugin_default.ctp +47bf09170b8ef0dce2d57af2079c084e ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Plugin/TestPlugin/Emails/text/test_plugin_tpl.ctp +24ed125d94d2afb7c87976a1573103f3 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Plugin/TestPlugin/Tests/index.ctp +bb7e210a60f92e5458e347cf77177c5f ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/img/cake.power.gif +f61236ec67ffdd793adb8739b4bdb8ae ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/img/test.jpg +fa26f7a3b3c18d46ed10ea234eaecdac ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/css/test_asset.css +6debc0fa891e49e8ffee039cb21fd385 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/css/theme_webroot.css +ff39cac4a90677d28a551fa2c16c6c0e ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/flash/theme_test.swf +fe9dd496502fe17d3e127e74e0aa5db3 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/pdfs/theme_test.pdf +204521033361d680b20e63e66ecbb55f ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/js/one/theme_one.js +079d4c3c9c26dd4284bd6d269bdd1831 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/js/theme.js +5e60f72428394dbe9c439eb594f879a5 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/space image.text +c8ea3581be0ea5da326a4e5094d892ea ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Posts/themed.ctp +865b8d890a355ce890e7c20afccc6915 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Posts/index.ctp +8bdfdc9e4c7031fd0b926273e7a0b761 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Posts/scaffold.index.ctp +88bafcdc1c2cdfed0429ba640d68900e ./web/api/lib/Cake/Test/test_app/View/Elements/type_check.ctp +347f70c433525a755fb816de1765314b ./web/api/lib/Cake/Test/test_app/View/Elements/extended_missing_element.ctp +b3449fc1c8b9384554d588eba5dd60d6 ./web/api/lib/Cake/Test/test_app/View/Elements/html_call.ctp +e72c13a3b5f1b10c3522fd61c814f9ba ./web/api/lib/Cake/Test/test_app/View/Elements/nocache/sub1.ctp +870382478b16efcda9a574b396ae3e83 ./web/api/lib/Cake/Test/test_app/View/Elements/nocache/plain.ctp +e8531c2b9c19ba4f159a411dfc2b607c ./web/api/lib/Cake/Test/test_app/View/Elements/nocache/contains_nocache.ctp +e216a7739009eb1f4d60ac9df9a82009 ./web/api/lib/Cake/Test/test_app/View/Elements/nocache/sub2.ctp +b3f196c1346b1006267d0858549d8993 ./web/api/lib/Cake/Test/test_app/View/Elements/extended_element.ctp +0f0438a8c1908ee1ce4a22b3e0fb2a7e ./web/api/lib/Cake/Test/test_app/View/Elements/parent_element.ctp +144b160f5ab0dc19685cd061ca4b5c15 ./web/api/lib/Cake/Test/test_app/View/Elements/test_element.ctp +b9e496bd23f83b404490412ece24fc00 ./web/api/lib/Cake/Test/test_app/View/Elements/test_element.xml +c536a01e55dff6a38f2812c8cec449ec ./web/api/lib/Cake/Test/test_app/View/Elements/session_helper.ctp +5d72ec67f9756fd918e23ec46b287bc4 ./web/api/lib/Cake/Test/test_app/View/Layouts/ajax.ctp +755e6a4dc17bdde4ad4a0c801ca3cf8d ./web/api/lib/Cake/Test/test_app/View/Layouts/xml/default.ctp +ef070d9f2513b81916633a7dfdc6041b ./web/api/lib/Cake/Test/test_app/View/Layouts/Emails/html/default.ctp +5f2338e7f3490d8840de203f9a5376c9 ./web/api/lib/Cake/Test/test_app/View/Layouts/Emails/html/thin.ctp +b7b7db2ed6b3bbab374c6b7d1c8619fc ./web/api/lib/Cake/Test/test_app/View/Layouts/Emails/html/japanese.ctp +db1cae9ac68813a5ded0b2a5cc0e3121 ./web/api/lib/Cake/Test/test_app/View/Layouts/Emails/text/default.ctp +ff92ac857ddde8acb1c8047079162b52 ./web/api/lib/Cake/Test/test_app/View/Layouts/Emails/text/japanese.ctp +5886310fc3fcf1b64b15a2d9cbcb235e ./web/api/lib/Cake/Test/test_app/View/Layouts/default.ctp +3c907bd81df3c45fde6fa10fc659c523 ./web/api/lib/Cake/Test/test_app/View/Layouts/banana.ctp +43155c01608bc23eb506b93929779eb7 ./web/api/lib/Cake/Test/test_app/View/Layouts/cache_empty_sections.ctp +5de8cc5c3dae86311d4689f3d20311a8 ./web/api/lib/Cake/Test/test_app/View/Layouts/rss/default.ctp +b89ead4a9300a78d9711ca3c0cdbb40d ./web/api/lib/Cake/Test/test_app/View/Layouts/flash.ctp +cc53b22419c410f607547bcd2fdeaf7b ./web/api/lib/Cake/Test/test_app/View/Layouts/cache_layout.ctp +5d72ec67f9756fd918e23ec46b287bc4 ./web/api/lib/Cake/Test/test_app/View/Layouts/json/default.ctp +83320360cc6a5039c6be38b86ddc7f75 ./web/api/lib/Cake/Test/test_app/View/Layouts/js/default.ctp +8c7e75d2f77bbfaa89cdcbab6a8cc05b ./web/api/lib/Cake/Test/test_app/View/Layouts/ajax2.ctp +3304c9c592a1ccf1d01fe7cd03bd4a19 ./web/api/lib/Cake/Test/test_app/View/Layouts/multi_cache.ctp +b792584dcdc84e3a96efb61eb237ab20 ./web/api/lib/Cake/Test/test_app/View/Emails/html/nested_element.ctp +d75b3a570535dfc75f3e3dc35054722d ./web/api/lib/Cake/Test/test_app/View/Emails/html/default.ctp +085f401c2772d8e36397cc9a95fda2c5 ./web/api/lib/Cake/Test/test_app/View/Emails/html/japanese.ctp +1361c0f5dd3bdb055d0ddd4c74910160 ./web/api/lib/Cake/Test/test_app/View/Emails/html/image.ctp +d8c845506027140c3207a441a12d91ee ./web/api/lib/Cake/Test/test_app/View/Emails/html/custom.ctp +cdd28ff95999a66fe7a5559913edf27e ./web/api/lib/Cake/Test/test_app/View/Emails/html/html.ctp +84d74ec97404b933399e979ea40ca3b8 ./web/api/lib/Cake/Test/test_app/View/Emails/text/custom_helper.ctp +12e174e8a6b88657c966f5e3bd08525f ./web/api/lib/Cake/Test/test_app/View/Emails/text/default.ctp +c4f608f58cb630065aff8fee6d1cd8ad ./web/api/lib/Cake/Test/test_app/View/Emails/text/wide.ctp +00a65caf883f589c9475bc115211d58f ./web/api/lib/Cake/Test/test_app/View/Emails/text/japanese.ctp +76740a986125ddf79a8f42c0d7912cc5 ./web/api/lib/Cake/Test/test_app/View/Emails/text/custom.ctp +d6d0356d88c300cc2f56896d8977232c ./web/api/lib/Cake/Test/test_app/View/TestsApps/index.ctp +fc4ee4ac8a2bc82bbfa91e6ab83e7541 ./web/api/lib/Cake/Test/test_app/View/TestsApps/json/index.ctp +cd7f0bd9b8d9059cb8df82f17738b75f ./web/api/lib/Cake/Test/test_app/View/Errors/error500.ctp +069eaa7d83b9f52e4ab64773309a97a3 ./web/api/lib/Cake/Test/test_app/View/Errors/error400.ctp +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/View/Scaffolds/empty +90f722e2bc091046de9cbacba7994d8b ./web/api/lib/Cake/Test/test_app/View/Helper/BananaHelper.php +23b015392dea469c3e0fa39a15c4b792 ./web/api/lib/Cake/Test/test_app/View/Pages/home.ctp +84cab57490f43013b72c03b5acf85c15 ./web/api/lib/Cake/Test/test_app/View/Pages/page.home.ctp +9870ef15721e98459257b5906093454b ./web/api/lib/Cake/Test/test_app/View/Pages/extract.ctp +8dc8b0cae8de41fbabafc8d2fcc517b1 ./web/api/lib/Cake/Test/test_app/View/Posts/nested_extends.ctp +92f5678860a3aa6fdcb48af9d45023c7 ./web/api/lib/Cake/Test/test_app/View/Posts/alt_ext.alt +9f9b8cd47a7c233cffbca54654b6ac55 ./web/api/lib/Cake/Test/test_app/View/Posts/multiple_nocache.ctp +7aa5e11ffbf605a9ec1c4aab84addd24 ./web/api/lib/Cake/Test/test_app/View/Posts/scaffold.form.ctp +b6c69c443cae1bc597744d4b56eeb75c ./web/api/lib/Cake/Test/test_app/View/Posts/sequencial_nocache.ctp +ee6a9722ea0d7d8c45a18abfbc485ef0 ./web/api/lib/Cake/Test/test_app/View/Posts/extend_loop.ctp +3052d58cbc86124042af43b69bc99c4b ./web/api/lib/Cake/Test/test_app/View/Posts/xml/index.ctp +33ec7730728787e9c40f2e54006c8a1e ./web/api/lib/Cake/Test/test_app/View/Posts/nocache_multiple_element.ctp +a68ee1d4271d12ade4ec956d5797684a ./web/api/lib/Cake/Test/test_app/View/Posts/test_nocache_tags.ctp +212d2976e033cb0567757ab8c5126562 ./web/api/lib/Cake/Test/test_app/View/Posts/index.ctp +cdfcc709a9aaf8d0ad068553141c8ccb ./web/api/lib/Cake/Test/test_app/View/Posts/extend_with_element.ctp +c0780567cb119692b4dabcbd9f830195 ./web/api/lib/Cake/Test/test_app/View/Posts/parent_1.ctp +fc50d2a2357899eb0512a55b85403060 ./web/api/lib/Cake/Test/test_app/View/Posts/parent_2.ctp +79622adce420ff3a5805e0563483ceaa ./web/api/lib/Cake/Test/test_app/View/Posts/extend_self.ctp +1dd7179ff3be78f4b059a925e2bbc919 ./web/api/lib/Cake/Test/test_app/View/Posts/helper_overwrite.ctp +590e8ca74d11dc00ab4e79769b23f2ed ./web/api/lib/Cake/Test/test_app/View/Posts/extend_loop_inner.ctp +24262865c98e7919bc1885861b5194a0 ./web/api/lib/Cake/Test/test_app/View/Posts/cache_empty_sections.ctp +ed3114fbc73c637aa278918039b6ee1e ./web/api/lib/Cake/Test/test_app/View/Posts/extend_missing_element.ctp +58a0ea403e003c97408a8de7510fb0f4 ./web/api/lib/Cake/Test/test_app/View/Posts/json/index.ctp +19acbcb4bc29e8c9581213f6dcb99d66 ./web/api/lib/Cake/Test/test_app/View/Posts/open_block.ctp +81db227ea592d04342c74795a3ef4657 ./web/api/lib/Cake/Test/test_app/View/Posts/extend_element.ctp +b4e4c483521ec164ec5d4930dfc26c08 ./web/api/lib/Cake/Test/test_app/View/Posts/parent_view.ctp +2ec5bf884dc978279535586826d08d88 ./web/api/lib/Cake/Test/test_app/View/Posts/cache_form.ctp +2ea2bce3a4d33ba5bb31049d34817732 ./web/api/lib/Cake/Test/test_app/Controller/PagesController.php +9a9db6d0886a5c5d3df113b0ec05989c ./web/api/lib/Cake/Test/test_app/Controller/TestsAppsController.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/Controller/Component/empty +85c25879d0b68f1240f015c72d3d0500 ./web/api/lib/Cake/Test/test_app/Controller/TestConfigsController.php +131b49822b71956d80cefafe025eef67 ./web/api/lib/Cake/Test/test_app/Controller/TestAppsErrorController.php +fb572af6ad6eeec531775456b6a231db ./web/api/lib/Cake/Test/test_app/Controller/AppController.php +63dddac8102bd6ec6ebfabd08046ffa4 ./web/api/lib/Cake/Test/test_app/Controller/TestsAppsPostsController.php +be1573636e0e0242bfc119bfb108f402 ./web/api/lib/Cake/Test/Case/AllComponentsTest.php +118c9a2643ee399aa8222db107174278 ./web/api/lib/Cake/Test/Case/AllDbRelatedTest.php +4c8319b2706c1ddeb8525fa9c636a6f8 ./web/api/lib/Cake/Test/Case/AllControllerTest.php +2f2e3e49ff982f66b32329bcfff18c44 ./web/api/lib/Cake/Test/Case/AllTestsTest.php +2737e90b73f3be14e5a001a0179d6ae6 ./web/api/lib/Cake/Test/Case/AllBehaviorsTest.php +6a9341d4cf4ab2640984bdab673a2795 ./web/api/lib/Cake/Test/Case/AllNetworkTest.php +3c7575dd3cd8eb6c18a9b56bcadad23f ./web/api/lib/Cake/Test/Case/Error/ErrorHandlerTest.php +e61819cf9d9aeb92a9ccb99b1637ed54 ./web/api/lib/Cake/Test/Case/Error/ExceptionRendererTest.php +b2fe65443141e410d654be72806035d9 ./web/api/lib/Cake/Test/Case/TestSuite/CakeTestCaseTest.php +975f3fd4955d06bc6d6fb13507cf95c9 ./web/api/lib/Cake/Test/Case/TestSuite/ControllerTestCaseTest.php +c8d740ba21d937d16267b5bea0a07c36 ./web/api/lib/Cake/Test/Case/TestSuite/HtmlCoverageReportTest.php +8ba26ebce0a4754d2443c6a73bdaa05a ./web/api/lib/Cake/Test/Case/TestSuite/CakeTestFixtureTest.php +ab7b47689652dd2147b610ba491981ff ./web/api/lib/Cake/Test/Case/TestSuite/Fixture/CakeFixtureManagerTest.php +54e8c49b5693537ebffb95682da66d89 ./web/api/lib/Cake/Test/Case/TestSuite/CakeTestSuiteTest.php +04366129a2c58b0bc20f0198477a7c91 ./web/api/lib/Cake/Test/Case/Network/CakeRequestTest.php +fdfba9d0e0663263e7172799ebf0f9de ./web/api/lib/Cake/Test/Case/Network/CakeResponseTest.php +893e73d5309473ec62e743df1e5962e0 ./web/api/lib/Cake/Test/Case/Network/Http/BasicAuthenticationTest.php +7a0304e0d2dd35bf8baf47264e7374a4 ./web/api/lib/Cake/Test/Case/Network/Http/HttpResponseTest.php +fdf69a3204793b3a91565172c9f875ff ./web/api/lib/Cake/Test/Case/Network/Http/DigestAuthenticationTest.php +ce6be42856ba3b948d5ff8a5c41f9fce ./web/api/lib/Cake/Test/Case/Network/Http/HttpSocketTest.php +907b3fa00957472f206a14c319ed4abe ./web/api/lib/Cake/Test/Case/Network/CakeSocketTest.php +ab383823a82ec67afb7f87cb3e2421e3 ./web/api/lib/Cake/Test/Case/Network/Email/SmtpTransportTest.php +a799e1dc9ef1973789083caf216feff2 ./web/api/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php +0a3eb20a988d338470fb4a6139a779a4 ./web/api/lib/Cake/Test/Case/Network/Email/MailTransportTest.php +23650fae068012f31983ee50754db69e ./web/api/lib/Cake/Test/Case/Network/Email/DebugTransportTest.php +2e58888aaffa41bd3ffb118a3d808902 ./web/api/lib/Cake/Test/Case/Cache/Engine/RedisEngineTest.php +99fb41088e0e4262349cc008353519b5 ./web/api/lib/Cake/Test/Case/Cache/Engine/XcacheEngineTest.php +eb895849083e7d4335329300abc9410b ./web/api/lib/Cake/Test/Case/Cache/Engine/WincacheEngineTest.php +bca00dc33de63cf3a41faffd69cc6f52 ./web/api/lib/Cake/Test/Case/Cache/Engine/ApcEngineTest.php +6ae020b7f248484a5346523d35472686 ./web/api/lib/Cake/Test/Case/Cache/Engine/FileEngineTest.php +a2ca33d0f35eb86cac5b792574cd5074 ./web/api/lib/Cake/Test/Case/Cache/Engine/MemcacheEngineTest.php +6358507932f151da0c0029519907ae4f ./web/api/lib/Cake/Test/Case/Cache/Engine/MemcachedEngineTest.php +d9c9de0cb72b336f8d8272561d5a9d8f ./web/api/lib/Cake/Test/Case/Cache/CacheTest.php +6b8cc56de39cf1c6d4b9fb5d8c0831e7 ./web/api/lib/Cake/Test/Case/AllRoutingTest.php +6422b913c51c48ef1cee7bf422c18336 ./web/api/lib/Cake/Test/Case/AllTestSuiteTest.php +1845f17b51ccadd3946f51a9d898fa4b ./web/api/lib/Cake/Test/Case/I18n/L10nTest.php +59d18aa447e9fb03197f3cfeb9732f1f ./web/api/lib/Cake/Test/Case/I18n/MultibyteTest.php +4853a45f9777e0e937a483e02cc823a7 ./web/api/lib/Cake/Test/Case/I18n/I18nTest.php +7151d595b51d6372ba97ad8d98df50b4 ./web/api/lib/Cake/Test/Case/AllCoreTest.php +77d3f81f53d8216a5390ca55dda71b3e ./web/api/lib/Cake/Test/Case/Model/Behavior/TreeBehaviorScopedTest.php +b778eebc214cc1be213b3837de71be11 ./web/api/lib/Cake/Test/Case/Model/Behavior/TreeBehaviorUuidTest.php +784ffe08543a812b1716fe51ded3e585 ./web/api/lib/Cake/Test/Case/Model/Behavior/ContainableBehaviorTest.php +df0e25c1f2488fd9be8d9b15d8007b59 ./web/api/lib/Cake/Test/Case/Model/Behavior/TreeBehaviorNumberTest.php +4395d470a0c75608a4831f99dceedb0c ./web/api/lib/Cake/Test/Case/Model/Behavior/AclBehaviorTest.php +09f61e2762aa422650226a1ac740f9b8 ./web/api/lib/Cake/Test/Case/Model/Behavior/TranslateBehaviorTest.php +d83a40fcd1a95017c9fb046539020676 ./web/api/lib/Cake/Test/Case/Model/Behavior/TreeBehaviorTest.php +b5cb2996df4ea9e784bcc17778861572 ./web/api/lib/Cake/Test/Case/Model/Behavior/TreeBehaviorAfterTest.php +1e104a84af840b38f31b364c87f0cd02 ./web/api/lib/Cake/Test/Case/Model/CakeSchemaTest.php +3619da1d72ae27bcb9e6c934aee41ba8 ./web/api/lib/Cake/Test/Case/Model/BehaviorCollectionTest.php +70615069aea29ec7b8e87081f7f48d8e ./web/api/lib/Cake/Test/Case/Model/ModelWriteTest.php +8083c2da79996af57511f32fd1a69fa3 ./web/api/lib/Cake/Test/Case/Model/Validator/CakeValidationSetTest.php +db11623f725052ca0b7eb6482f5995a1 ./web/api/lib/Cake/Test/Case/Model/Validator/CakeValidationRuleTest.php +a63b19740ca57b44a7d9efc8920f3759 ./web/api/lib/Cake/Test/Case/Model/Datasource/DataSourceTest.php +fb0b2a9685abe8c4e3f95d0e20d28faf ./web/api/lib/Cake/Test/Case/Model/Datasource/CakeSessionTest.php +d975c05e6c6b773dd291075b031557f2 ./web/api/lib/Cake/Test/Case/Model/Datasource/Database/SqliteTest.php +ac25ffb05c2e68b31abcb77d8c0c1f0e ./web/api/lib/Cake/Test/Case/Model/Datasource/Database/PostgresTest.php +1fcb69793cb3135928b434d7ff9c30ff ./web/api/lib/Cake/Test/Case/Model/Datasource/Database/SqlserverTest.php +4bea528eef8892a9e70b8a36a0c16338 ./web/api/lib/Cake/Test/Case/Model/Datasource/Database/MysqlTest.php +fbbecb94d54ccf60c3e21d2d1414853d ./web/api/lib/Cake/Test/Case/Model/Datasource/DboSourceTest.php +2004a15fcfe1bdb34a51cdea62ae8266 ./web/api/lib/Cake/Test/Case/Model/Datasource/Session/DatabaseSessionTest.php +5c8a031df19f434e1f662f0421343dfb ./web/api/lib/Cake/Test/Case/Model/Datasource/Session/CacheSessionTest.php +0dd88ac5952f5ccb1bb9c75690c72548 ./web/api/lib/Cake/Test/Case/Model/ModelTest.php +0c8c5016c5d4fb0d55ba13bcc8986686 ./web/api/lib/Cake/Test/Case/Model/ModelReadTest.php +34d4490b5f687f281137978096509ff3 ./web/api/lib/Cake/Test/Case/Model/ModelValidationTest.php +72b6fd0384a5ffe033b0901a285372f4 ./web/api/lib/Cake/Test/Case/Model/AclNodeTest.php +e0018e68f29971a37327a14d164141af ./web/api/lib/Cake/Test/Case/Model/ModelDeleteTest.php +877756cc6d86d97289036b3896190a9f ./web/api/lib/Cake/Test/Case/Model/ModelCrossSchemaHabtmTest.php +0c5daefdecac43fe091dee37d9a35d12 ./web/api/lib/Cake/Test/Case/Model/ModelIntegrationTest.php +50420df3009b437986443eb5e229ca70 ./web/api/lib/Cake/Test/Case/Model/ConnectionManagerTest.php +4724130672da2ff4936feceb735b7767 ./web/api/lib/Cake/Test/Case/Model/ModelTestBase.php +18dddbb112ec620b7a72d6be3e15e7b0 ./web/api/lib/Cake/Test/Case/Model/models.php +ae4efc1b80668dc80d5f094c1517f0ae ./web/api/lib/Cake/Test/Case/Event/CakeEventManagerTest.php +9f5eb69140bda3318a34bfcade559266 ./web/api/lib/Cake/Test/Case/Event/CakeEventTest.php +fd1b4603aa096b1c7417ee16e2ad0e4f ./web/api/lib/Cake/Test/Case/AllI18nTest.php +cb0c54b108ebc699e979f533332e7ec3 ./web/api/lib/Cake/Test/Case/Core/ObjectTest.php +b0ac72950f2d6037297f75e3e1cfa881 ./web/api/lib/Cake/Test/Case/Core/AppTest.php +e1d1166fa4f9746a0a723e4b6aa5361b ./web/api/lib/Cake/Test/Case/Core/CakePluginTest.php +af3f7954d189f438ba38e1bb8650464b ./web/api/lib/Cake/Test/Case/Core/ConfigureTest.php +99b1b29413fe321081f4e052f6d337ff ./web/api/lib/Cake/Test/Case/Console/AllShellsTest.php +6763d67ea4d420ae257bee07caa651ee ./web/api/lib/Cake/Test/Case/Console/ShellDispatcherTest.php +9036691bd3f8f7c76d3b4877dbfd9a46 ./web/api/lib/Cake/Test/Case/Console/TaskCollectionTest.php +5369f66c14f3e86d93e8381b110719a6 ./web/api/lib/Cake/Test/Case/Console/Command/Task/ModelTaskTest.php +480688c05bc3a58e8e351f035080cb7f ./web/api/lib/Cake/Test/Case/Console/Command/Task/TemplateTaskTest.php +0737e9efa17bad676cd5eedcfc0cef4f ./web/api/lib/Cake/Test/Case/Console/Command/Task/ExtractTaskTest.php +5b5370a46a1e6cae754f84b3acfb71ce ./web/api/lib/Cake/Test/Case/Console/Command/Task/DbConfigTaskTest.php +e3fb89115a3383f0ab2b806bd9b521a5 ./web/api/lib/Cake/Test/Case/Console/Command/Task/ProjectTaskTest.php +be4a97839a078e4933cd6a7aab6172dd ./web/api/lib/Cake/Test/Case/Console/Command/Task/CommandTaskTest.php +a576c31b5ba62c3d6ac152fdacf37d73 ./web/api/lib/Cake/Test/Case/Console/Command/Task/ViewTaskTest.php +805da7fd82648a23e03622249ab91855 ./web/api/lib/Cake/Test/Case/Console/Command/Task/ControllerTaskTest.php +bed854693337f4b6f3b9839eb84c643f ./web/api/lib/Cake/Test/Case/Console/Command/Task/PluginTaskTest.php +04d8b3e0a2bc29adbb12014fd2888e9b ./web/api/lib/Cake/Test/Case/Console/Command/Task/TestTaskTest.php +dfdac0b8eba01fccc855552acc7d78f9 ./web/api/lib/Cake/Test/Case/Console/Command/Task/FixtureTaskTest.php +3b727ca086d7d73b44a662b2bcfabc1c ./web/api/lib/Cake/Test/Case/Console/Command/CompletionShellTest.php +c8aa168ea69369dca5e5f6852ed3790a ./web/api/lib/Cake/Test/Case/Console/Command/AclShellTest.php +dcc2c7fb1964967d28a75eb1ce6f8854 ./web/api/lib/Cake/Test/Case/Console/Command/TestShellTest.php +c61adbba65a1f5d05e03e5393316eabd ./web/api/lib/Cake/Test/Case/Console/Command/ApiShellTest.php +e79e0dc5217d098e1ec344fe3ec3a829 ./web/api/lib/Cake/Test/Case/Console/Command/SchemaShellTest.php +086dd90c2420c2bdd246ea309a465a2d ./web/api/lib/Cake/Test/Case/Console/Command/BakeShellTest.php +edbc2d06b7b0588c486641ccefa6ae60 ./web/api/lib/Cake/Test/Case/Console/Command/CommandListShellTest.php +b23925778c9558cd9efe6a2f0bbd2e28 ./web/api/lib/Cake/Test/Case/Console/HelpFormatterTest.php +a0d6224686dfd1ce2cb31d4c585bfde8 ./web/api/lib/Cake/Test/Case/Console/ConsoleErrorHandlerTest.php +6b7cb3e458e8ea3d44626ec25a15452f ./web/api/lib/Cake/Test/Case/Console/AllConsoleTest.php +451d75024972c827283bc93bdcec4eb1 ./web/api/lib/Cake/Test/Case/Console/ShellTest.php +8702bd6801212b4d3d123c710ba10f7e ./web/api/lib/Cake/Test/Case/Console/ConsoleOptionParserTest.php +d9d17a1614c7637b9852c484a35d559a ./web/api/lib/Cake/Test/Case/Console/AllTasksTest.php +b5f58308eb5df751dfe9e15a1389fdcd ./web/api/lib/Cake/Test/Case/Console/ConsoleOutputTest.php +e50126d3e6308f213346bd2c98414aeb ./web/api/lib/Cake/Test/Case/Console/AllConsoleLibsTest.php +741437aee464a2dac560188226c78ba5 ./web/api/lib/Cake/Test/Case/AllLogTest.php +fa85ba3bffc4474cdc834ccafd1b5a73 ./web/api/lib/Cake/Test/Case/AllErrorTest.php +84b181c6f26c312e36e355606de5d209 ./web/api/lib/Cake/Test/Case/Log/Engine/ConsoleLogTest.php +16caa7e2dbcca5a83252cc987a20a9b5 ./web/api/lib/Cake/Test/Case/Log/Engine/SyslogLogTest.php +ded2dc6c887e47030d3d252f7b4575db ./web/api/lib/Cake/Test/Case/Log/Engine/FileLogTest.php +aef4c5c5911c96b44e700d5f26bc3b73 ./web/api/lib/Cake/Test/Case/Log/LogEngineCollectionTest.php +06026f95a1debb460e277a646e6ac43a ./web/api/lib/Cake/Test/Case/Log/CakeLogTest.php +0f00fdc571c93d612769062c4af70cbb ./web/api/lib/Cake/Test/Case/Utility/ValidationTest.php +59428ad65dbee5d4ab43f7f0131b3c96 ./web/api/lib/Cake/Test/Case/Utility/InflectorTest.php +d9b31a6bc69683a6964c009cd9e3e512 ./web/api/lib/Cake/Test/Case/Utility/ClassRegistryTest.php +1469fc1e22049f6cdc5caa386c2c22b8 ./web/api/lib/Cake/Test/Case/Utility/XmlTest.php +bf07727fc631fb417c6facf700bc8516 ./web/api/lib/Cake/Test/Case/Utility/CakeTimeTest.php +d46aed3d4420d5f6418381df533d0a5c ./web/api/lib/Cake/Test/Case/Utility/FolderTest.php +4dada229a77feac700a93e15ab28adf7 ./web/api/lib/Cake/Test/Case/Utility/HashTest.php +5713ed750827f0738f70c7457f41f3c5 ./web/api/lib/Cake/Test/Case/Utility/SetTest.php +e455a3952236dcb52b357236a84a584c ./web/api/lib/Cake/Test/Case/Utility/CakeNumberTest.php +748a78e801c7f9ba9956d9f73285f2e1 ./web/api/lib/Cake/Test/Case/Utility/ObjectCollectionTest.php +0f5438c0001b8a47e6b9b6350388ab03 ./web/api/lib/Cake/Test/Case/Utility/DebuggerTest.php +9a911c7aaa166d4906872e41ae16447b ./web/api/lib/Cake/Test/Case/Utility/StringTest.php +4ffbe291ac61634df88ef5bff48e0341 ./web/api/lib/Cake/Test/Case/Utility/SecurityTest.php +15c848b15f6e10e67764f0cc85c4648f ./web/api/lib/Cake/Test/Case/Utility/FileTest.php +2b94172aed32bdfa4b4798ee4e14cf85 ./web/api/lib/Cake/Test/Case/Utility/SanitizeTest.php +b32b712b6b86086c271c7e6d59ae5214 ./web/api/lib/Cake/Test/Case/AllConsoleTest.php +e056264fbb30c83042f6dade571096bb ./web/api/lib/Cake/Test/Case/BasicsTest.php +ba5784ecb7f6db474552216162c5c64c ./web/api/lib/Cake/Test/Case/AllHelpersTest.php +85621ce80da57b3c33f4e4f29c0b34f9 ./web/api/lib/Cake/Test/Case/Routing/RouterTest.php +8247c100a3ebc30b227e0c855e11ba4f ./web/api/lib/Cake/Test/Case/Routing/Route/CakeRouteTest.php +bf9110596787905b69616dcb97300283 ./web/api/lib/Cake/Test/Case/Routing/Route/RedirectRouteTest.php +d97e50ac96e09f798af1ec61e213aba3 ./web/api/lib/Cake/Test/Case/Routing/Route/PluginShortRouteTest.php +361aac035122f1f195c0f1edd76dcc11 ./web/api/lib/Cake/Test/Case/Routing/Filter/AssetDispatcherTest.php +bd234fc681ea8ecb49907939d86c85ca ./web/api/lib/Cake/Test/Case/Routing/DispatcherTest.php +c10f81e019bfa6a2fb827fbce10f2365 ./web/api/lib/Cake/Test/Case/Configure/IniReaderTest.php +bb5e333eeba2bb0bfa9dba7070524836 ./web/api/lib/Cake/Test/Case/Configure/PhpReaderTest.php +fcd2b55815712664e3e1bd0acbf732ed ./web/api/lib/Cake/Test/Case/AllUtilityTest.php +2fb28b1c37f97d08c0a235183eea60d2 ./web/api/lib/Cake/Test/Case/View/MediaViewTest.php +14a3f5df37c646f48bb52093677d545d ./web/api/lib/Cake/Test/Case/View/JsonViewTest.php +43ddc83f561182ce4fa0df29edb51bdd ./web/api/lib/Cake/Test/Case/View/XmlViewTest.php +9548acd7accd19abebabc6e94454348b ./web/api/lib/Cake/Test/Case/View/ViewTest.php +00544e1b6a5ae58de7d8759f0966778b ./web/api/lib/Cake/Test/Case/View/HelperTest.php +cab20749a645d5c7ef29205db7eeeb45 ./web/api/lib/Cake/Test/Case/View/ScaffoldViewTest.php +0f0e7f8ebb43458147a437e36f653657 ./web/api/lib/Cake/Test/Case/View/Helper/FormHelperTest.php +42fc2ae9e5eab5c81b9924c917352777 ./web/api/lib/Cake/Test/Case/View/Helper/RssHelperTest.php +d1dbc963f78f0fdcf1f64b4bc12c1a5c ./web/api/lib/Cake/Test/Case/View/Helper/TextHelperTest.php +909ba7efc0b1c5c0de3514eeab12f74f ./web/api/lib/Cake/Test/Case/View/Helper/PrototypeEngineHelperTest.php +1be2a643ce6a2c644864a1812b709256 ./web/api/lib/Cake/Test/Case/View/Helper/MootoolsEngineHelperTest.php +02f4cf47cae9f2e5209deb6ee410669c ./web/api/lib/Cake/Test/Case/View/Helper/PaginatorHelperTest.php +57c94d053bc289016a2ec2eb372fe451 ./web/api/lib/Cake/Test/Case/View/Helper/NumberHelperTest.php +6711a391a6a6967d39d5e282a6b1b3ba ./web/api/lib/Cake/Test/Case/View/Helper/JqueryEngineHelperTest.php +fb691f07021d5cc0b876a0379263a43a ./web/api/lib/Cake/Test/Case/View/Helper/HtmlHelperTest.php +77c868c09a275e66c2fa36f7dc3c7295 ./web/api/lib/Cake/Test/Case/View/Helper/TimeHelperTest.php +67c597a0f2c495490e8b22b9e5865a45 ./web/api/lib/Cake/Test/Case/View/Helper/JsHelperTest.php +4ef4f9191a7308e93641bbee4577e74c ./web/api/lib/Cake/Test/Case/View/Helper/SessionHelperTest.php +6a6a88f26df80152794c6f8c2c18b245 ./web/api/lib/Cake/Test/Case/View/Helper/CacheHelperTest.php +5e70417a2ec68dc2d81b8b74398c2c8b ./web/api/lib/Cake/Test/Case/View/HelperCollectionTest.php +4d047ad35fd4a94c1596f144d6c3540d ./web/api/lib/Cake/Test/Case/View/ThemeViewTest.php +e18ba68b37ff5a8884c5f45c6c6512dd ./web/api/lib/Cake/Test/Case/Controller/ControllerMergeVarsTest.php +f7ab7f77423dbaba944c45dcbbed7304 ./web/api/lib/Cake/Test/Case/Controller/ComponentCollectionTest.php +6cd71ead7609c35d239689508fbc90d6 ./web/api/lib/Cake/Test/Case/Controller/PagesControllerTest.php +3bd90230ac07728c7781cf957f49d762 ./web/api/lib/Cake/Test/Case/Controller/Component/SessionComponentTest.php +846a35959b07b8ce1112f2dc77f3315f ./web/api/lib/Cake/Test/Case/Controller/Component/AuthComponentTest.php +7b15e90d63d2dc071e4af85e284b74d3 ./web/api/lib/Cake/Test/Case/Controller/Component/Acl/IniAclTest.php +6c29a0495147d0d6e7be2527ad360937 ./web/api/lib/Cake/Test/Case/Controller/Component/Acl/DbAclTest.php +bcc3cbeee2a496b01da4c8c2b244d089 ./web/api/lib/Cake/Test/Case/Controller/Component/Acl/PhpAclTest.php +9e4020e1255839c74f47e2e8c6eabb3f ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/CrudAuthorizeTest.php +d86d20d2afdb108745581608cf96d467 ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/ActionsAuthorizeTest.php +4b62d63e7e20fab29d2e2777a0124a5c ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/ControllerAuthorizeTest.php +ed173a5521df995b730b7af8a1f4b8c0 ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/DigestAuthenticateTest.php +3864eeadaa484b8ac3212f93b595c61b ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/FormAuthenticateTest.php +5b8cc509e6854ad3cc2f791b2b74317d ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/BlowfishAuthenticateTest.php +54a15150727b20c275b91093ce07f155 ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/BasicAuthenticateTest.php +e3edb9511319439ab385e842a352f3e2 ./web/api/lib/Cake/Test/Case/Controller/Component/PaginatorComponentTest.php +616216eb97660a90d5e5bc72c0ce7ba3 ./web/api/lib/Cake/Test/Case/Controller/Component/CookieComponentTest.php +2648749cc3237f44307650f014df3dc8 ./web/api/lib/Cake/Test/Case/Controller/Component/RequestHandlerComponentTest.php +a0eae0001fce47cd79034cc1dfb17cd2 ./web/api/lib/Cake/Test/Case/Controller/Component/AclComponentTest.php +612d5e310b95bdc8032a44080d262713 ./web/api/lib/Cake/Test/Case/Controller/Component/SecurityComponentTest.php +380c1ea650d8d1e0923b955546752afa ./web/api/lib/Cake/Test/Case/Controller/Component/EmailComponentTest.php +1c7c93121ecc81be38261a6b87c05a70 ./web/api/lib/Cake/Test/Case/Controller/ScaffoldTest.php +89e46db9812dc94698ae8f97a3fbf67d ./web/api/lib/Cake/Test/Case/Controller/ControllerTest.php +8079ea43d189969a4dee9e0a3f9d4ff0 ./web/api/lib/Cake/Test/Case/Controller/ComponentTest.php +c254b3c609067be03e4563f49cf8a92a ./web/api/lib/Cake/Test/Case/AllDatabaseTest.php +4cd612bc9a088980567a75ff8a2faaa0 ./web/api/lib/Cake/Test/Case/AllEventTest.php +d976d5c3bd792de9e8db624c0e40f486 ./web/api/lib/Cake/Test/Case/AllViewTest.php +5ce256ec762cea942b0b977b15f64757 ./web/api/lib/Cake/Test/Case/AllConfigureTest.php +be65c8f9fe2969a5d6ea57be085dde97 ./web/api/lib/Cake/Test/Case/AllCacheTest.php +0ed38722a188f88f15649a6859a0c633 ./web/api/lib/Cake/Test/bake_compare/Controller/ActionsUsingSessions.ctp +86f57fc1d339deeb0d79350481423785 ./web/api/lib/Cake/Test/bake_compare/Controller/Scaffold.ctp +d2a5178a1a5f2df4f58be28c73984b4b ./web/api/lib/Cake/Test/bake_compare/Controller/NoActions.ctp +fe60ba93d3437177903b7556a644bffd ./web/api/lib/Cake/Test/bake_compare/Controller/NoHelpersOrComponents.ctp +7b505ca9d7ffcd55594dd9a694e856f7 ./web/api/lib/Cake/Test/bake_compare/Controller/ActionsWithNoSessions.ctp +dc6dc833b97fa0697ce73e4c094a4091 ./web/api/lib/Cake/Test/Fixture/ArosAcoFixture.php +278510fc13ea5d7676dc552397f06d80 ./web/api/lib/Cake/Test/Fixture/MessageFixture.php +4eeb7d23080b38d5497db6b664ea0c53 ./web/api/lib/Cake/Test/Fixture/AdFixture.php +8228e632371ed816c8b1f8f90619a98e ./web/api/lib/Cake/Test/Fixture/DeviceTypeFixture.php +6b68c1e6da9192d37c52610d369e9f12 ./web/api/lib/Cake/Test/Fixture/MyProductFixture.php +c7e91e7ef25c23eaac72e5dd0fb7e291 ./web/api/lib/Cake/Test/Fixture/GroupUpdateAllFixture.php +f2246dda3d7d77bbd2f773773a7638ee ./web/api/lib/Cake/Test/Fixture/SampleFixture.php +5145b7ca50acd72b8493ab0d5a7c23e3 ./web/api/lib/Cake/Test/Fixture/BasketFixture.php +b0a3a3abacc5711b19efbddd7cd5a16c ./web/api/lib/Cake/Test/Fixture/JoinAFixture.php +f042690b0eebc207660670c11ba95ca9 ./web/api/lib/Cake/Test/Fixture/CallbackFixture.php +adebe303cbb9872f5d2c04c33a75b702 ./web/api/lib/Cake/Test/Fixture/NumberTreeTwoFixture.php +472f8121baffb5df68249aba2134836f ./web/api/lib/Cake/Test/Fixture/FeaturedFixture.php +79f04aa75d8e080f323496f368be1d4e ./web/api/lib/Cake/Test/Fixture/UuidFixture.php +87acd16e03a30b5c2200bd93d0fc041c ./web/api/lib/Cake/Test/Fixture/PrimaryModelFixture.php +530ebf9b7f62bbb9a0249b5785ca15bb ./web/api/lib/Cake/Test/Fixture/PersonFixture.php +8a4b7e6ba180b65662444b930c521219 ./web/api/lib/Cake/Test/Fixture/ThePaperMonkiesFixture.php +9c4d0c1d6d2661f816174859ae9c7686 ./web/api/lib/Cake/Test/Fixture/AuthorFixture.php +62d1cf71c351460b3bb5896e4c29e29e ./web/api/lib/Cake/Test/Fixture/BiddingFixture.php +60e4e9169f063a27c5abee4d9e018944 ./web/api/lib/Cake/Test/Fixture/TranslateWithPrefixFixture.php +80ba4f8a7515a17d4cbf4d0d48599548 ./web/api/lib/Cake/Test/Fixture/UnsignedFixture.php +e2e7e772319b3bf8406b3026cb5e99c3 ./web/api/lib/Cake/Test/Fixture/BidFixture.php +1ec8e943814ef4fb2adad25811384724 ./web/api/lib/Cake/Test/Fixture/MyUserFixture.php +c20f5c608940ed9f7f016c7fce19a010 ./web/api/lib/Cake/Test/Fixture/ProjectFixture.php +c4b0117ec96bbfd46b2bcf9016332aa9 ./web/api/lib/Cake/Test/Fixture/AnotherArticleFixture.php +19c5be9845abe940b97a2932ea9724be ./web/api/lib/Cake/Test/Fixture/HomeFixture.php +715f4cd05334d3a339744826dbba7beb ./web/api/lib/Cake/Test/Fixture/ArmorFixture.php +87c99fac19773a78bfd23d50510bcc14 ./web/api/lib/Cake/Test/Fixture/CategoryThreadFixture.php +8a8a49582a7ba72c8dedaf9abaec2e44 ./web/api/lib/Cake/Test/Fixture/NumericArticleFixture.php +45b4d54ba6780d59a96b5691bd36db1c ./web/api/lib/Cake/Test/Fixture/ArticleFeaturedsTagsFixture.php +4ab74207e32110ba25136dee54f02711 ./web/api/lib/Cake/Test/Fixture/NumberTreeFixture.php +b8532c2706e7cf2806da496579106736 ./web/api/lib/Cake/Test/Fixture/CounterCachePostFixture.php +ee907bc2b1b2d6f43b2545ce2488424f ./web/api/lib/Cake/Test/Fixture/UuiditemFixture.php +f27787038e90918007394c263e860618 ./web/api/lib/Cake/Test/Fixture/AuthUserFixture.php +cf5c6992308a78fbe0a61cf4c6855547 ./web/api/lib/Cake/Test/Fixture/UuidportfolioFixture.php +8bddadd60c56ca7f08d68d4e1bb08382 ./web/api/lib/Cake/Test/Fixture/CounterCachePostNonstandardPrimaryKeyFixture.php +1f175a3cdc6e2dd91fd2ae15a68d1e9a ./web/api/lib/Cake/Test/Fixture/CounterCacheUserNonstandardPrimaryKeyFixture.php +df9a5ca957b19f95e297faf6ad3d9b47 ./web/api/lib/Cake/Test/Fixture/BakeArticlesBakeTagFixture.php +285b29113806a0c3b955d1372819a4f5 ./web/api/lib/Cake/Test/Fixture/FlagTreeFixture.php +5781daa16875c7cb6275ab35057cd94f ./web/api/lib/Cake/Test/Fixture/ExteriorTypeCategoryFixture.php +77a55bb2fc37c9f60bfb1f37bd395fb6 ./web/api/lib/Cake/Test/Fixture/ContentAccountFixture.php +39195264a0986de72dcd662d7e06a1ff ./web/api/lib/Cake/Test/Fixture/TranslatedItemFixture.php +ae47fac8f9452f62982d4b2dd1091e00 ./web/api/lib/Cake/Test/Fixture/UuiditemsUuidportfolioFixture.php +ccfce097dc886b7f3abeaaea4788bf88 ./web/api/lib/Cake/Test/Fixture/UuidTagFixture.php +cb4501a88de69939691a4f10c123c33f ./web/api/lib/Cake/Test/Fixture/NodeFixture.php +9a08d164c4cb732b28bfa234f68e1ae7 ./web/api/lib/Cake/Test/Fixture/AuthUserCustomFieldFixture.php +24e6f7f0ebc99253ad7eecc23c8b6d5b ./web/api/lib/Cake/Test/Fixture/DeviceFixture.php +eb0d42d2679507960af3367c35ef0e4b ./web/api/lib/Cake/Test/Fixture/BakeArticleFixture.php +77140a26960fe6c8fa0f589b58212128 ./web/api/lib/Cake/Test/Fixture/BinaryTestFixture.php +11b25671f33fb3a0c3c8520ad392359b ./web/api/lib/Cake/Test/Fixture/TranslateTableFixture.php +3f7d12cfc6fcab6068d73cdd5374499f ./web/api/lib/Cake/Test/Fixture/TestPluginArticleFixture.php +590dce9c302ec8c87cb3847b39f891b0 ./web/api/lib/Cake/Test/Fixture/JoinACFixture.php +7a5a03dfaa122607ab52a8983ffd5cb8 ./web/api/lib/Cake/Test/Fixture/JoinCFixture.php +eb54f262646b09b9978335baf14ed380 ./web/api/lib/Cake/Test/Fixture/ArticleFeaturedFixture.php +ba8f89e2ab1f8fef607af09bb29fb7eb ./web/api/lib/Cake/Test/Fixture/GuildFixture.php +9e4450911bc70a83a382441a055ca997 ./web/api/lib/Cake/Test/Fixture/soap_response.xml +906e7df1f22969b819bc663c87d1c403 ./web/api/lib/Cake/Test/Fixture/JoinThingFixture.php +83209fad591c7ea8f29e9ec57be89fd8 ./web/api/lib/Cake/Test/Fixture/FruitFixture.php +2b4cc83baa787184ab8d1cd6b2b69817 ./web/api/lib/Cake/Test/Fixture/AroTwoFixture.php +70f20280785aaddedf3efa07b26b5917 ./web/api/lib/Cake/Test/Fixture/PostsTagFixture.php +3d3362d4aaa756c29db11c485f5d5e69 ./web/api/lib/Cake/Test/Fixture/FeatureSetFixture.php +6c73653b3bd3d9bc5297429cb559a5ee ./web/api/lib/Cake/Test/Fixture/ArosAcoTwoFixture.php +f57b9bb9df0f861adf86ac251eb0a79e ./web/api/lib/Cake/Test/Fixture/CategoryFixture.php +9a3efa03c8ae189effb8cca447c8362d ./web/api/lib/Cake/Test/Fixture/MyCategoriesMyProductsFixture.php +540bd81233cee5f2d08b888a3ecd2901 ./web/api/lib/Cake/Test/Fixture/DomainFixture.php +262fa46233ae6314bff6c5e27f75f875 ./web/api/lib/Cake/Test/Fixture/AdvertisementFixture.php +995f02ea1b9713c51c37c958adfd279d ./web/api/lib/Cake/Test/Fixture/ArmorsPlayerFixture.php +9f9442a0aeb721e5efd5c42b7c877749 ./web/api/lib/Cake/Test/Fixture/BiddingMessageFixture.php +076d343c29223f6f40be09b7cc9fe7a6 ./web/api/lib/Cake/Test/Fixture/PlayerFixture.php +f67f46b3794e6cd11a023cb8854fa5e3 ./web/api/lib/Cake/Test/Fixture/CakeSessionFixture.php +963ae52c2817bfce02dcb979ace44e7f ./web/api/lib/Cake/Test/Fixture/sample.xml +d4112bb617a9775effeea78481b546ac ./web/api/lib/Cake/Test/Fixture/AcoTwoFixture.php +3703a4c067a775d42c43c35e13e33d4e ./web/api/lib/Cake/Test/Fixture/UnderscoreFieldFixture.php +7927557c29837e187478640fece20d0e ./web/api/lib/Cake/Test/Fixture/MyCategoriesMyUsersFixture.php +90088c75b3493da077bb9d5d24f1c5a5 ./web/api/lib/Cake/Test/Fixture/PortfolioFixture.php +1979b836b31c09d3480d3cce09ad2752 ./web/api/lib/Cake/Test/Fixture/DeviceTypeCategoryFixture.php +004212ca4e69011b167b8fbdae475fe8 ./web/api/lib/Cake/Test/Fixture/UnconventionalTreeFixture.php +9a438055c6fdca4be89a8c416d82ccbe ./web/api/lib/Cake/Test/Fixture/UuidTreeFixture.php +aa75db7886ba4ac660f5c4ab81d4d86b ./web/api/lib/Cake/Test/Fixture/SomethingFixture.php +8863db37a8ecc2a955de86806b7881c8 ./web/api/lib/Cake/Test/Fixture/AssertTagsTestCase.php +b83465ef3a9cf185a72097380d3a57ce ./web/api/lib/Cake/Test/Fixture/JoinBFixture.php +731df31bcadcef69b4e561d478bbc9f5 ./web/api/lib/Cake/Test/Fixture/PrefixTestFixture.php +07b450df4578b566274d61c4480f96ff ./web/api/lib/Cake/Test/Fixture/DataTestFixture.php +8168b02aaf33dbd988b901d00ad09343 ./web/api/lib/Cake/Test/Fixture/TagFixture.php +4067293dd16c8f9452a0a5a745c6a962 ./web/api/lib/Cake/Test/Fixture/CounterCacheUserFixture.php +e6d92bb09defb35ce5276284d3596177 ./web/api/lib/Cake/Test/Fixture/ContentFixture.php +b65d5c71b10bb3f4f1b93e057b85ee97 ./web/api/lib/Cake/Test/Fixture/TranslateArticleFixture.php +8e5c0d35fdbb9ccf75574ae581f8d52f ./web/api/lib/Cake/Test/Fixture/AroFixture.php +f875ecbf0d89723bc009b9a19ef21516 ./web/api/lib/Cake/Test/Fixture/AccountFixture.php +e313f03752eb1189251853c82279c773 ./web/api/lib/Cake/Test/Fixture/SiteFixture.php +19951e2ebb90169fc4d4d6daaf82f7a1 ./web/api/lib/Cake/Test/Fixture/CacheTestModelFixture.php +a15ec2e3e7f5252107dff114089118c6 ./web/api/lib/Cake/Test/Fixture/UuiditemsUuidportfolioNumericidFixture.php +bb89e1729bfb1600b13d568494888913 ./web/api/lib/Cake/Test/Fixture/InnoFixture.php +6d2a933c69525e176a475b6320b9cf34 ./web/api/lib/Cake/Test/Fixture/FruitsUuidTagFixture.php +1acc6df94909ebabdcc2c2882a0d967c ./web/api/lib/Cake/Test/Fixture/ArticlesTagFixture.php +e8b3b841d6a2b21477f5353b5d36bc24 ./web/api/lib/Cake/Test/Fixture/BakeCommentFixture.php +6c3f280f50af9ea068b1a2298c694d45 ./web/api/lib/Cake/Test/Fixture/DocumentFixture.php +015a13bfabdca2c822255eb2cdb98c38 ./web/api/lib/Cake/Test/Fixture/MyCategoryFixture.php +4e78db291d8f42c81a35abbab14bbfbe ./web/api/lib/Cake/Test/Fixture/ProductFixture.php +49bee7b38b4c0b5663f77b7826a03d7e ./web/api/lib/Cake/Test/Fixture/DocumentDirectoryFixture.php +1797df1600ea0e1d0a9d4ecb46edcef3 ./web/api/lib/Cake/Test/Fixture/TestPluginCommentFixture.php +f0edcdc32f3eb2b41e1ea3e07dcd252e ./web/api/lib/Cake/Test/Fixture/SessionFixture.php +3fd558c1de79d6dea43757f2d69e3d22 ./web/api/lib/Cake/Test/Fixture/DomainsSiteFixture.php +6dd858396a015a3333faa7e6fab7ccb4 ./web/api/lib/Cake/Test/Fixture/CommentFixture.php +f739fae95d3abb3f425ee2c0bf70ba3b ./web/api/lib/Cake/Test/Fixture/BakeTagFixture.php +f42ac7827b377fa39b489a9e479e5f7c ./web/api/lib/Cake/Test/Fixture/AfterTreeFixture.php +d8328883d12d89912454750053b6940d ./web/api/lib/Cake/Test/Fixture/JoinABFixture.php +593f2f89910cf16974f6bbba35f09054 ./web/api/lib/Cake/Test/Fixture/TranslatedArticleFixture.php +b69fb89c548ca407b6fb4947fe423710 ./web/api/lib/Cake/Test/Fixture/PostFixture.php +bee241743d7e98ef841aac0918198a9b ./web/api/lib/Cake/Test/Fixture/StoriesTagFixture.php +d17347fe9a46447d329e36133d7006ef ./web/api/lib/Cake/Test/Fixture/CdFixture.php +d83461d561ea4cf96a5d034355424014 ./web/api/lib/Cake/Test/Fixture/AcoActionFixture.php +3f99ebe61ccc2998ee1a339c7dde8224 ./web/api/lib/Cake/Test/Fixture/AppleFixture.php +362a00e5b3766ec29b468de16c5489ad ./web/api/lib/Cake/Test/Fixture/DependencyFixture.php +16e91175cccdc2cfcaee1aa412d1343f ./web/api/lib/Cake/Test/Fixture/GuildsPlayerFixture.php +5b9d0be67c142cb2d814a7277c314b2a ./web/api/lib/Cake/Test/Fixture/StoryFixture.php +0273321b83f9e2f70c2e3452618b16e6 ./web/api/lib/Cake/Test/Fixture/UserFixture.php +e4ef0fd14fb2d7c806847710760ade36 ./web/api/lib/Cake/Test/Fixture/ItemsPortfolioFixture.php +d5c240a659c1f3928c0c13dea2c6e86c ./web/api/lib/Cake/Test/Fixture/ItemFixture.php +506ede950ce34abf0d3cf9d6af26b1d6 ./web/api/lib/Cake/Test/Fixture/ImageFixture.php +7982fecee52afd8f8e3c102c90e03ce3 ./web/api/lib/Cake/Test/Fixture/soap_request.xml +2154eb1e6fbdb1b67ab20077ee2aabc9 ./web/api/lib/Cake/Test/Fixture/SyfileFixture.php +74a327150ed33fc4d4483de68c30f30a ./web/api/lib/Cake/Test/Fixture/FilmFileFixture.php +dd008d649c11ed1cc6e1d19da4c4768b ./web/api/lib/Cake/Test/Fixture/ThreadFixture.php +18b2a33eb182d8c4e06e817b33852aca ./web/api/lib/Cake/Test/Fixture/OverallFavoriteFixture.php +4012cac8fe4eabfeb07953e74d6cba19 ./web/api/lib/Cake/Test/Fixture/BookFixture.php +a6baaa6bb53ca2be5269793609c9053e ./web/api/lib/Cake/Test/Fixture/AttachmentFixture.php +eca43d88bc97da58bd625013cda426e1 ./web/api/lib/Cake/Test/Fixture/TranslateFixture.php +9cd4473c5b1013c8b67179ef8b62b30a ./web/api/lib/Cake/Test/Fixture/ProductUpdateAllFixture.php +c458b058f7f3fa50347ff9c13578f47e ./web/api/lib/Cake/Test/Fixture/SecondaryModelFixture.php +369eb44f46af527bf980a33fa37048ee ./web/api/lib/Cake/Test/Fixture/AcoFixture.php +5e37cfe208a53428a3bd094bd87c36b2 ./web/api/lib/Cake/Test/Fixture/DatatypeFixture.php +1d3c77a57cdaab1661457bc1f4c96848 ./web/api/lib/Cake/Test/Fixture/rss.xml +547a81bc866b1882c48c39aa9975716e ./web/api/lib/Cake/Test/Fixture/CampaignFixture.php +440880a03e16c4eb86cc7bbe9f6a0573 ./web/api/lib/Cake/Test/Fixture/ArticleFixture.php +c9d3093e8718d1839837da87f4b2babc ./web/api/lib/Cake/Test/Fixture/FixturizedTestCase.php +4ad8d40e541e32ffc9e2dc35d85314c7 ./web/api/lib/Cake/Test/Fixture/SomethingElseFixture.php +4a38feb6a73a8a0155463ec5e6a85f6e ./web/api/lib/Cake/Error/exceptions.php +bd71ed49232d13f4be44b17ab0b2fa2e ./web/api/lib/Cake/Error/ExceptionRenderer.php +b82eb5bfc3668f82d30f1c083e9b244e ./web/api/lib/Cake/Error/ErrorHandler.php +88c632ad47f0c56fd86e61891ee6bab4 ./web/api/lib/Cake/TestSuite/Reporter/CakeBaseReporter.php +c41906d8fee45a4064b98512dc5e976f ./web/api/lib/Cake/TestSuite/Reporter/CakeTextReporter.php +868b078ba1b29af0dd299b0d9ef07f9a ./web/api/lib/Cake/TestSuite/Reporter/CakeHtmlReporter.php +55563451eb434be1e14b02a8e6aab94e ./web/api/lib/Cake/TestSuite/CakeTestRunner.php +4ae38de5c977a2f3f441d502e7ac9d52 ./web/api/lib/Cake/TestSuite/Coverage/HtmlCoverageReport.php +0fc8dc2aa6dc3bf381b442ee921d429f ./web/api/lib/Cake/TestSuite/Coverage/BaseCoverageReport.php +a20584fa04005f483f8d0f025599848f ./web/api/lib/Cake/TestSuite/Coverage/TextCoverageReport.php +2b061837dcdf03e63540a079da9115ea ./web/api/lib/Cake/TestSuite/ControllerTestCase.php +2b8ebcdc3c5fa8d049efbe5ebf1a64f6 ./web/api/lib/Cake/TestSuite/CakeTestLoader.php +1ccfe06071c94352a44db7133e69eb62 ./web/api/lib/Cake/TestSuite/CakeTestSuiteCommand.php +edb7053ef383388aa2114789a070f3a9 ./web/api/lib/Cake/TestSuite/CakeTestSuite.php +1982ef5ca129f1b024a0dd86d5c82401 ./web/api/lib/Cake/TestSuite/templates/missing_connection.php +d41f54ac975ae1345ef326ab31167939 ./web/api/lib/Cake/TestSuite/templates/xdebug.php +23ac136174030244e2b58b55635dbee7 ./web/api/lib/Cake/TestSuite/templates/phpunit.php +fc6b576548c9b026191a206dd559bd70 ./web/api/lib/Cake/TestSuite/templates/menu.php +30dc1267e894f4d5e8e13e3e3919552b ./web/api/lib/Cake/TestSuite/templates/header.php +602dafd8c9e26196031b5be3a28246e8 ./web/api/lib/Cake/TestSuite/templates/footer.php +65a18b914cac702b192dc52e427ad58f ./web/api/lib/Cake/TestSuite/CakeTestCase.php +6b7783fd17c7d5976201e86d64d2a5b6 ./web/api/lib/Cake/TestSuite/Fixture/CakeFixtureManager.php +d7395674ff2f6bde799de8779b967b3c ./web/api/lib/Cake/TestSuite/Fixture/CakeTestModel.php +e0bef14cf71f0c2a92578ada6afffabc ./web/api/lib/Cake/TestSuite/Fixture/CakeTestFixture.php +243f6398392e6fa2d7fee25989e634c4 ./web/api/lib/Cake/TestSuite/CakeTestSuiteDispatcher.php +7edc4c5ae2c90d6aca5bc8807f751a23 ./web/api/lib/Cake/Network/CakeRequest.php +ebb62ca45fb02b7a9abbe7f47d648fe6 ./web/api/lib/Cake/Network/CakeResponse.php +5eae9f2961fc222f60629c04ea5e25d1 ./web/api/lib/Cake/Network/Http/HttpResponse.php +8b1bad3320564f66ec6b5aca18a45c64 ./web/api/lib/Cake/Network/Http/BasicAuthentication.php +004736448eee71c796c32409d01ad38c ./web/api/lib/Cake/Network/Http/DigestAuthentication.php +09573174b73854f2ceb04bcbdd78311e ./web/api/lib/Cake/Network/Http/HttpSocketResponse.php +eda72b4aa86788e6dcc079d986184cf8 ./web/api/lib/Cake/Network/Http/HttpSocket.php +2427a07c96d22c96673c6ebeb02e2af4 ./web/api/lib/Cake/Network/Email/SmtpTransport.php +807417af9934e292788e4d85f5d29530 ./web/api/lib/Cake/Network/Email/DebugTransport.php +b1e60e0d2c583579e69f69cec8ab45ab ./web/api/lib/Cake/Network/Email/MailTransport.php +cb9f387a1e5984b4baff1da30bc67940 ./web/api/lib/Cake/Network/Email/AbstractTransport.php +fd54c2e07ddfa3b645bdbd16ce182533 ./web/api/lib/Cake/Network/Email/CakeEmail.php +794fb5b072e3f550cf3f2270bc045836 ./web/api/lib/Cake/Network/CakeSocket.php +e8ca2012fe9a5144431e6552cff381ba ./web/api/lib/Cake/Cache/Engine/MemcachedEngine.php +ec0cce858e3c28c809ab7b976169decf ./web/api/lib/Cake/Cache/Engine/WincacheEngine.php +63bceb1b3931d8331d0ede6773616ab7 ./web/api/lib/Cake/Cache/Engine/ApcEngine.php +71eb5a53d52455f43bcb65c0696077f9 ./web/api/lib/Cake/Cache/Engine/XcacheEngine.php +598abf48b1df8012f87d69b1dfe527e8 ./web/api/lib/Cake/Cache/Engine/FileEngine.php +6b839434f69a2d348c76cfd6ebcfb10b ./web/api/lib/Cake/Cache/Engine/MemcacheEngine.php +9e65ceac3036f05ea0607ec960a4ca86 ./web/api/lib/Cake/Cache/Engine/RedisEngine.php +4d2bf6cbad0743b64505196526998ffa ./web/api/lib/Cake/Cache/CacheEngine.php +6bb49835c9dd7b7fa45a9190df6c936e ./web/api/lib/Cake/Cache/Cache.php +ed092dd8cc080c1bb56189dac68f03ba ./web/api/lib/Cake/I18n/I18n.php +1b53dffb1d26e3123ccdd2c40ed274bb ./web/api/lib/Cake/I18n/L10n.php +3b2259d44ca571a7f85c9b773f6394ba ./web/api/lib/Cake/I18n/Multibyte.php +4c3ee35ff9ab5590c825a7e42c699185 ./web/api/lib/Cake/Model/Behavior/AclBehavior.php +f7a4193169cb1ba629352f1eb045308c ./web/api/lib/Cake/Model/Behavior/TreeBehavior.php +ff8e9512b56f43df2e0390a03d8011d5 ./web/api/lib/Cake/Model/Behavior/ContainableBehavior.php +5e5d65238ed9fcd34e5ee48cfb286b9f ./web/api/lib/Cake/Model/Behavior/TranslateBehavior.php +e3634e05e156154240e6a16c412d28e5 ./web/api/lib/Cake/Model/ModelValidator.php +c3d11c95ed8d548363b29150a5f61e60 ./web/api/lib/Cake/Model/ModelBehavior.php +ccd9c05b2d2769e85821d22644ff31e3 ./web/api/lib/Cake/Model/Validator/CakeValidationSet.php +b6bc87da6c2725b1b812427c6750fbf4 ./web/api/lib/Cake/Model/Validator/CakeValidationRule.php +ddda299af1f25c0d3401133a86719a23 ./web/api/lib/Cake/Model/ConnectionManager.php +36a15beafd3fc9b97bffdaa24f87c453 ./web/api/lib/Cake/Model/AcoAction.php +72ce1277383a5b3488a7856afea19e42 ./web/api/lib/Cake/Model/CakeSchema.php +430405827277c7ebaabb0b3d1198229a ./web/api/lib/Cake/Model/Datasource/Database/Postgres.php +9074dfd93621993ffe9fdea3e060791c ./web/api/lib/Cake/Model/Datasource/Database/Mysql.php +a9c232b819fc593f6213171ba8a22ac3 ./web/api/lib/Cake/Model/Datasource/Database/Sqlite.php +3ffb6fe6a6cd01beac83e98cf638c70a ./web/api/lib/Cake/Model/Datasource/Database/Sqlserver.php +95b7e8abe600bd371c14b713181e7196 ./web/api/lib/Cake/Model/Datasource/DataSource.php +f69749b609d36ee1d68f86433db422fe ./web/api/lib/Cake/Model/Datasource/CakeSession.php +65fe7920720ab7f338cec3ffa46212d1 ./web/api/lib/Cake/Model/Datasource/Session/CakeSessionHandlerInterface.php +98fd70694897f1637b9735ea56ae9620 ./web/api/lib/Cake/Model/Datasource/Session/DatabaseSession.php +4da30eb7a22db205de5c90689d2d57d7 ./web/api/lib/Cake/Model/Datasource/Session/CacheSession.php +f00b6053077554321772de44305a869c ./web/api/lib/Cake/Model/Datasource/DboSource.php +387e5990e0436415ab9f327c807b0a14 ./web/api/lib/Cake/Model/AclNode.php +91a48674d1d12ca504e32aaf39a2883e ./web/api/lib/Cake/Model/Aco.php +422ee03d05d16e00130d369eb4915ad7 ./web/api/lib/Cake/Model/Model.php +474ed127207b9608ca876702fc78da95 ./web/api/lib/Cake/Model/Permission.php +8f7f491d2b61ea533a4ecb0c3f571de0 ./web/api/lib/Cake/Model/I18nModel.php +7fa44c3e247f8cbe196f4ac41604e1f3 ./web/api/lib/Cake/Model/BehaviorCollection.php +70e803158136819c68abbc2dc8c33c5c ./web/api/lib/Cake/Model/Aro.php +499effa78232a90c3afd53ca30ba7e57 ./web/api/lib/Cake/Event/CakeEvent.php +939c440fa26a82fc5c1f6adf79803437 ./web/api/lib/Cake/Event/CakeEventListener.php +cf16742c2fc5aea2d4cdaaaed44f93c1 ./web/api/lib/Cake/Event/CakeEventManager.php +0fca7632e5453f5368f22327e7e37bc7 ./web/api/lib/Cake/Core/App.php +9628019de5a34f8c0e547c689414a7c3 ./web/api/lib/Cake/Core/Configure.php +d59383b46db9cb396e8aafb438538b9f ./web/api/lib/Cake/Core/CakePlugin.php +77bcc72bc6f6db70fbc30e1cefb6313c ./web/api/lib/Cake/Core/Object.php +0cbddf8b035f5f0c8314bba6381b2b39 ./web/api/lib/Cake/Config/cacert.pem +2097c4017a4f8956b2eccb1930269666 ./web/api/lib/Cake/Config/unicode/casefolding/0250_02af.php +4303f18902ee53bd3eb8c1fc2d942f29 ./web/api/lib/Cake/Config/unicode/casefolding/2c00_2c5f.php +6b2dcb8420fac67c2b2a81e01bfe3cf0 ./web/api/lib/Cake/Config/unicode/casefolding/ff00_ffef.php +1533c2421b14885abb49db63101e55c1 ./web/api/lib/Cake/Config/unicode/casefolding/0180_024F.php +1ece962ed1862f440edab69b6e043440 ./web/api/lib/Cake/Config/unicode/casefolding/2c60_2c7f.php +b4ac1644d9cb48efd7cab0039042cfe3 ./web/api/lib/Cake/Config/unicode/casefolding/0400_04ff.php +256c0f2ac7d213b078dbc9f067dba93a ./web/api/lib/Cake/Config/unicode/casefolding/2100_214f.php +d0e0dd24c25ef5fb088488296b55f571 ./web/api/lib/Cake/Config/unicode/casefolding/1e00_1eff.php +fa3a9210f22fb7851a58d80f3df43db1 ./web/api/lib/Cake/Config/unicode/casefolding/0100_017f.php +7254b3afe7363bd4dfe7a193f22f24a6 ./web/api/lib/Cake/Config/unicode/casefolding/0080_00ff.php +53e1d459db32b45a0f096643f085224e ./web/api/lib/Cake/Config/unicode/casefolding/0370_03ff.php +687035ab1d78ca77eca33b4e432e10da ./web/api/lib/Cake/Config/unicode/casefolding/0530_058f.php +221793028fdea8bc6518c818241258e6 ./web/api/lib/Cake/Config/unicode/casefolding/2460_24ff.php +5f249fe7785156d6919a8df50d39b6ce ./web/api/lib/Cake/Config/unicode/casefolding/2c80_2cff.php +a2fc552ce8362911614c0509e0b59e9a ./web/api/lib/Cake/Config/unicode/casefolding/1f00_1fff.php +5d4fcce28f00d8c8bfad719299cd8f70 ./web/api/lib/Cake/Config/unicode/casefolding/2150_218f.php +b2f97fabcf60ed7eb3de6f83f56ac1cc ./web/api/lib/Cake/Config/unicode/casefolding/0500_052f.php +fd0d10a4bc338f9b1a67f34862f23ae2 ./web/api/lib/Cake/Config/routes.php +9b4126954f567edf3701fb5d7db428b9 ./web/api/lib/Cake/Config/config.php +57433c55d465ea646dfcd4d36478467b ./web/api/lib/Cake/Console/ConsoleInputSubcommand.php +481ab826e6882e92ba7006dff2c296b2 ./web/api/lib/Cake/Console/TaskCollection.php +ef0e3f45c92a2bd85bcbb746fa0a4f21 ./web/api/lib/Cake/Console/ConsoleOutput.php +c43171402459d583cb356f45e950296d ./web/api/lib/Cake/Console/HelpFormatter.php +4d28017fdaf4c252e865a8925f202528 ./web/api/lib/Cake/Console/Command/AclShell.php +8f32e55c1217e0272aa49392b973e4c1 ./web/api/lib/Cake/Console/Command/ApiShell.php +7d987db285e926beccffcdebf1101e96 ./web/api/lib/Cake/Console/Command/TestsuiteShell.php +d0dd552d4f7123709d2cd73701eb8c3a ./web/api/lib/Cake/Console/Command/TestShell.php +1e91a799a208369b62a9f573d6bea9b9 ./web/api/lib/Cake/Console/Command/ServerShell.php +1b9c94a8b0f9902391d3cff5c775f88f ./web/api/lib/Cake/Console/Command/Task/DbConfigTask.php +c036e81a2a863234d9506e1ea1613827 ./web/api/lib/Cake/Console/Command/Task/ViewTask.php +e5682567f06c1e0bc7a9fe065aaad0ce ./web/api/lib/Cake/Console/Command/Task/PluginTask.php +a587c9aae29901803362974d3b1b75c9 ./web/api/lib/Cake/Console/Command/Task/FixtureTask.php +1fe50ded38809a46711523e74eb44a8f ./web/api/lib/Cake/Console/Command/Task/ProjectTask.php +be30c3129d3332710427d11e6e36ad28 ./web/api/lib/Cake/Console/Command/Task/CommandTask.php +50fb568afaca7c725842ec5b31433a6c ./web/api/lib/Cake/Console/Command/Task/TestTask.php +7e242ec6cfb6db9519323e0ccc4ba63d ./web/api/lib/Cake/Console/Command/Task/BakeTask.php +a4d27825bbd14bd204d4fb103550c130 ./web/api/lib/Cake/Console/Command/Task/TemplateTask.php +555b0952b6059794830e38e8cc0d2537 ./web/api/lib/Cake/Console/Command/Task/ControllerTask.php +635d5607b7735ea1f0d4971823d53726 ./web/api/lib/Cake/Console/Command/Task/ExtractTask.php +c58f695a6fb6590a5243782a8b81655b ./web/api/lib/Cake/Console/Command/Task/ModelTask.php +6fba33aaadf14bee189dbf1da6265606 ./web/api/lib/Cake/Console/Command/BakeShell.php +24bb86c949af73ba550d134c77c0124d ./web/api/lib/Cake/Console/Command/ConsoleShell.php +a07218b76c8184aa8c35cf5f35187aa3 ./web/api/lib/Cake/Console/Command/I18nShell.php +839e4eb6134881d8c4a146e91a602cb5 ./web/api/lib/Cake/Console/Command/CommandListShell.php +7a88eab2dc636bd9783b21b7400bf32b ./web/api/lib/Cake/Console/Command/SchemaShell.php +48f823759ab2dbf7d27900f6c0fe38c5 ./web/api/lib/Cake/Console/Command/UpgradeShell.php +36b29ca4ed8331df525f55bf33536758 ./web/api/lib/Cake/Console/Command/AppShell.php +6d1dcc289b5a2d0ba0dba30b4330e497 ./web/api/lib/Cake/Console/Command/CompletionShell.php +2efa0bf9527d62e501545521ea84d5b0 ./web/api/lib/Cake/Console/ConsoleOptionParser.php +b0a7f1f95560974ab767e44b5549df47 ./web/api/lib/Cake/Console/cake +6ac5a3d5d8ab7b6932c32cd8c6ec8b3f ./web/api/lib/Cake/Console/cake.bat +d232a935b84302ae1387073990869d19 ./web/api/lib/Cake/Console/cake.php +0aae4cec4c9cf43a012bd95a9d73820e ./web/api/lib/Cake/Console/Shell.php +f84f43f3d254ea2de8d268ae6e4472d6 ./web/api/lib/Cake/Console/ShellDispatcher.php +b5fc37604a04144318e3d51e0f9956e9 ./web/api/lib/Cake/Console/Templates/skel/Test/Case/AllTestsTest.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Test/Case/Model/Behavior/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Test/Case/View/Helper/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Test/Case/Controller/Component/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Test/Fixture/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Lib/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Vendor/empty +a2a9efe935decfd5f498bf0d83075574 ./web/api/lib/Cake/Console/Templates/skel/.htaccess +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Model/Behavior/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Model/Datasource/empty +f61e0f11e289494e01a9135974948fbc ./web/api/lib/Cake/Console/Templates/skel/Model/AppModel.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Plugin/empty +175d6594507b93fb84f40346fbe361b8 ./web/api/lib/Cake/Console/Templates/skel/Config/core.php +c8e4baf42d61d087b9b33c081d138a96 ./web/api/lib/Cake/Console/Templates/skel/Config/bootstrap.php +1966f76b86e822660914dfb2f81f2a3f ./web/api/lib/Cake/Console/Templates/skel/Config/acl.php +833a6bf57f730a33e3d78a45410e0b78 ./web/api/lib/Cake/Console/Templates/skel/Config/email.php.default +da8e5db6d3d8579bd465dd9546cdc51e ./web/api/lib/Cake/Console/Templates/skel/Config/routes.php +9a4bffc13eef7dfdf918b29ae35b3542 ./web/api/lib/Cake/Console/Templates/skel/Config/database.php.default +e77ea10804e4b268007d9941611f137e ./web/api/lib/Cake/Console/Templates/skel/Config/acl.ini.php +77a4ab064c8d796f32ee3d8b5193cc86 ./web/api/lib/Cake/Console/Templates/skel/Config/Schema/i18n.php +7b06760a9b74dc1cde66cdf413e3ae88 ./web/api/lib/Cake/Console/Templates/skel/Config/Schema/sessions.sql +40324da8d8ee60e5c205cff512ca448f ./web/api/lib/Cake/Console/Templates/skel/Config/Schema/sessions.php +fd69565dc23c3f3ccc981cc29a2abe5b ./web/api/lib/Cake/Console/Templates/skel/Config/Schema/i18n.sql +be1ae0bceba3274acc4a19a8022a8a6e ./web/api/lib/Cake/Console/Templates/skel/Config/Schema/db_acl.sql +6e1fed022cc3838e922d6f6c693e08e6 ./web/api/lib/Cake/Console/Templates/skel/Config/Schema/db_acl.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Console/Command/Task/empty +f88b951fde6a53787b0039cc6fa3ba24 ./web/api/lib/Cake/Console/Templates/skel/Console/Command/AppShell.php +5883c212c26f2573914c7fcfde18b871 ./web/api/lib/Cake/Console/Templates/skel/Console/cake +db414367df94544f6fc7f3edc25232b0 ./web/api/lib/Cake/Console/Templates/skel/Console/cake.bat +ce8005750e8bdf7ee1862d3128c60fa8 ./web/api/lib/Cake/Console/Templates/skel/Console/cake.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Console/Templates/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/webroot/files/empty +66b3119d379aee26ba668fef49188dd3 ./web/api/lib/Cake/Console/Templates/skel/webroot/favicon.ico +69e2dbff5ecae970e423450e93402f0e ./web/api/lib/Cake/Console/Templates/skel/webroot/.htaccess +7307ecf28dccc0e436a13caa5a38b38f ./web/api/lib/Cake/Console/Templates/skel/webroot/img/test-skip-icon.png +19190f09beb6039fa4153ee05079fb00 ./web/api/lib/Cake/Console/Templates/skel/webroot/img/test-fail-icon.png +bb7e210a60f92e5458e347cf77177c5f ./web/api/lib/Cake/Console/Templates/skel/webroot/img/cake.power.gif +f60716ed419e69f9974a49d8310933d0 ./web/api/lib/Cake/Console/Templates/skel/webroot/img/test-pass-icon.png +4a5504d3f7228af75f3fecbd3d449cf3 ./web/api/lib/Cake/Console/Templates/skel/webroot/img/test-error-icon.png +fc804821ffc3d23daa82885d6b6b0ce6 ./web/api/lib/Cake/Console/Templates/skel/webroot/img/cake.icon.png +f428350d2f7f639dd1f54c690621e5bb ./web/api/lib/Cake/Console/Templates/skel/webroot/css/cake.generic.css +1095745b8918b0f4223fb20145c8b942 ./web/api/lib/Cake/Console/Templates/skel/webroot/test.php +2e4362765b48e3adcf999143f1afc5ad ./web/api/lib/Cake/Console/Templates/skel/webroot/index.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/webroot/js/empty +de91beade885e04bcea74a4afcc0a91d ./web/api/lib/Cake/Console/Templates/skel/index.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Locale/eng/LC_MESSAGES/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/View/Elements/empty +dbee2ff0bea77dd60d3e4e37e1bd3440 ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/ajax.ctp +efdc0e2ffd35832bb57880f198b0c7db ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/xml/default.ctp +01bab2ee81d370ce0c512f2698eb49b4 ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/Emails/html/default.ctp +c8c03a34f7a28af5d4a6346e2145c068 ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/Emails/text/default.ctp +7a4c604e5fc6640a727ffccdbe1cdae4 ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/default.ctp +7a4c604e5fc6640a727ffccdbe1cdae4 ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/error.ctp +4e6a3470e5d073adbf9783c5db649abc ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/rss/default.ctp +a613d14ca6e5222dd6a85c187075e76f ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/flash.ctp +60253b23516039070b2d521bd9542622 ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/js/default.ctp +9decb1a94a835d970191ae8abbd25bb9 ./web/api/lib/Cake/Console/Templates/skel/View/Emails/html/default.ctp +b79215b81e3901d3fa3cf452f296b196 ./web/api/lib/Cake/Console/Templates/skel/View/Emails/text/default.ctp +dbe7628a74af2bb331329a6770c408d7 ./web/api/lib/Cake/Console/Templates/skel/View/Errors/error500.ctp +28aaaf3c653b1ff92b824441794c5a53 ./web/api/lib/Cake/Console/Templates/skel/View/Errors/error400.ctp +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/View/Scaffolds/empty +10179919e12326a75d8d50f0faa87ecd ./web/api/lib/Cake/Console/Templates/skel/View/Helper/AppHelper.php +b3df7b179f1306e970bcf054b81f2703 ./web/api/lib/Cake/Console/Templates/skel/View/Pages/home.ctp +c22b42be1386899a3fecf3eb8dbcdaa0 ./web/api/lib/Cake/Console/Templates/skel/Controller/PagesController.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Controller/Component/empty +feb6faad5f8072dee80a3bd079b2755a ./web/api/lib/Cake/Console/Templates/skel/Controller/AppController.php +7cb7478e92234db38ee6d6e788ad09d9 ./web/api/lib/Cake/Console/Templates/default/actions/controller_actions.ctp +d42924a8e1256335426bd316af8463a1 ./web/api/lib/Cake/Console/Templates/default/views/form.ctp +60499430788341bdfabebc2c4b46b5b7 ./web/api/lib/Cake/Console/Templates/default/views/index.ctp +a771064211bed37adc84b8a4ac127e6c ./web/api/lib/Cake/Console/Templates/default/views/view.ctp +8b4a28247f7487987ab6e95266c5f7fb ./web/api/lib/Cake/Console/Templates/default/classes/test.ctp +6af3de5ad049512ef8c28bd7ccf1c0b2 ./web/api/lib/Cake/Console/Templates/default/classes/controller.ctp +2d4f2ad59d816067274308105d3a6066 ./web/api/lib/Cake/Console/Templates/default/classes/fixture.ctp +1ca0422b5036b4d745a4e18aecd54081 ./web/api/lib/Cake/Console/Templates/default/classes/model.ctp +b31577638faa1ddadd19a3f861814af2 ./web/api/lib/Cake/Console/ConsoleErrorHandler.php +755dfa3f634058042f127a3d26c8c24b ./web/api/lib/Cake/Console/ConsoleInputOption.php +e72d2616ab85ef9b3a21835fe97eac05 ./web/api/lib/Cake/Console/ConsoleInputArgument.php +57f049e3ced69a296f75753bdef6ce9b ./web/api/lib/Cake/Console/ConsoleInput.php +986c087ce60a23b5d2d6478c77653743 ./web/api/lib/Cake/basics.php +7cb23316256a9169727c5903f3a6fdbb ./web/api/lib/Cake/Log/Engine/ConsoleLog.php +b53d74aab2bcc858bae15b03a29a8f79 ./web/api/lib/Cake/Log/Engine/FileLog.php +b4cd3eecf9b85678d61d5e90274ce378 ./web/api/lib/Cake/Log/Engine/SyslogLog.php +9e14011cda1e6fe35cfab29187a04210 ./web/api/lib/Cake/Log/Engine/BaseLog.php +8dcb8ea5e5ce9ee6d48307fa34651632 ./web/api/lib/Cake/Log/CakeLogInterface.php +f28928e75c82cca50c08ae1283cd4b8e ./web/api/lib/Cake/Log/LogEngineCollection.php +c1fa5e766797a96fe381722b5c5ac2f6 ./web/api/lib/Cake/Log/CakeLog.php +8137c566d795f706668d05ef5c991db0 ./web/api/lib/Cake/Utility/CakeNumber.php +1c7b1114f44bec93dafaed0dffa62449 ./web/api/lib/Cake/Utility/ClassRegistry.php +a232afa92f4498879b0f6ca645d9f839 ./web/api/lib/Cake/Utility/Debugger.php +de9b060f76546fa9f5a9fb780dd7225e ./web/api/lib/Cake/Utility/Hash.php +36c06590910d31f23b992f38f218babc ./web/api/lib/Cake/Utility/Validation.php +f2525cb9f25559ec7bd96883d034cade ./web/api/lib/Cake/Utility/String.php +e1175cd6cca85959895251dbe50e020b ./web/api/lib/Cake/Utility/Security.php +0640b5083545da62ab5e2e5436d8f0a3 ./web/api/lib/Cake/Utility/Folder.php +b2a734061d2a447838ada645c47c9073 ./web/api/lib/Cake/Utility/Xml.php +a01fa7f035be0abbac0aa42af2cd046b ./web/api/lib/Cake/Utility/ObjectCollection.php +7f8a28d0b43ae8ff91248fec3b2ce21b ./web/api/lib/Cake/Utility/Set.php +7d60253c77df591c95ee2f554929c635 ./web/api/lib/Cake/Utility/File.php +240b48f7f94a0f8b18efd0fc70b2e508 ./web/api/lib/Cake/Utility/Inflector.php +ce9a9f53dfb52515d74714d8cb3ea867 ./web/api/lib/Cake/Utility/Sanitize.php +843fd12b333f818ded3d0ac986217cde ./web/api/lib/Cake/Utility/CakeTime.php +53195ed64d758ecdc08af14e0623980f ./web/api/lib/Cake/Routing/Route/CakeRoute.php +21a7d6c3b6fe58281f9f0e2152ca6e2b ./web/api/lib/Cake/Routing/Route/RedirectRoute.php +644b42f97503e108747334592151b330 ./web/api/lib/Cake/Routing/Route/PluginShortRoute.php +7062f236e3dc248bab2edd8d2ccf2b67 ./web/api/lib/Cake/Routing/Router.php +fe6c34aed51192f742056c43f44037fb ./web/api/lib/Cake/Routing/Filter/CacheDispatcher.php +d15388f8fbfc77cded931a4cb45d97e1 ./web/api/lib/Cake/Routing/Filter/AssetDispatcher.php +9ea2cd3fc0f8d34c3c457788d31e9618 ./web/api/lib/Cake/Routing/Dispatcher.php +7a8d1fdda5b9c45325395319311b1c53 ./web/api/lib/Cake/Routing/DispatcherFilter.php +f509b4633439c86abe596ef0830cca0c ./web/api/lib/Cake/Configure/PhpReader.php +3e56db31521024e844a0de4f6d818df0 ./web/api/lib/Cake/Configure/ConfigReaderInterface.php +bc62cc9eae431f3dbd9f3710c806d9d6 ./web/api/lib/Cake/Configure/IniReader.php +299a364842d38f8c12ea6037963b7fbb ./web/api/lib/Cake/View/ViewBlock.php +6123741d5edec070c01a9549f52ba76d ./web/api/lib/Cake/View/View.php +d5c1ea5457f76405d720d86b6df6da47 ./web/api/lib/Cake/View/MediaView.php +0a44a7e599961f02ec5e287e2610058a ./web/api/lib/Cake/View/Elements/sql_dump.ctp +4f80da79c92f402a5958a985088f0c11 ./web/api/lib/Cake/View/Elements/exception_stack_trace.ctp +b9dbd329c5307f9f6c25632513b8bb17 ./web/api/lib/Cake/View/XmlView.php +a7ba90f960629b48b467d71ac2048cab ./web/api/lib/Cake/View/ScaffoldView.php +a0dd0031f7d2533c254612b37ab949e8 ./web/api/lib/Cake/View/Errors/fatal_error.ctp +bfb2adbdd81b605402ec451245bb220a ./web/api/lib/Cake/View/Errors/missing_datasource_config.ctp +ecc6b31a399ba5b0db35616de3acc6f8 ./web/api/lib/Cake/View/Errors/missing_plugin.ctp +f658d67f21912b74ef33384b15a2cf05 ./web/api/lib/Cake/View/Errors/missing_controller.ctp +5f0b4f21682005a2f7b346d2042287a2 ./web/api/lib/Cake/View/Errors/missing_helper.ctp +7c302a950061d7ecc11ee9a782d9b523 ./web/api/lib/Cake/View/Errors/missing_connection.ctp +9f2489f97c95ce3fc6ea9cc31e80baf0 ./web/api/lib/Cake/View/Errors/missing_layout.ctp +ab3020055640a9a019cf9d750d3988e2 ./web/api/lib/Cake/View/Errors/missing_action.ctp +fd42a53cdafaaab45dafe467fe753266 ./web/api/lib/Cake/View/Errors/missing_view.ctp +b5b065a89a4436dd45ffd6196f6782ae ./web/api/lib/Cake/View/Errors/missing_table.ctp +c5b4810e33cd80dbfbabe2b55b292af5 ./web/api/lib/Cake/View/Errors/private_action.ctp +2b86a612e11dc80de1ec9fad2930b866 ./web/api/lib/Cake/View/Errors/pdo_error.ctp +bad3a6215b8ab912fdf8fe54f07bf3d6 ./web/api/lib/Cake/View/Errors/missing_behavior.ctp +2d7df36185a81815969e2b118629aeb3 ./web/api/lib/Cake/View/Errors/missing_datasource.ctp +fc95356b63a9938c874d778c6e540dcd ./web/api/lib/Cake/View/Errors/missing_component.ctp +44b8d02beb11ea5ff950066bfcb161fc ./web/api/lib/Cake/View/Errors/missing_database.ctp +6d14357c1fc303f128b7f3f86be67986 ./web/api/lib/Cake/View/Errors/scaffold_error.ctp +1877b403b3f5434eeeb9e3ffe89fd4e2 ./web/api/lib/Cake/View/Scaffolds/form.ctp +a3416bc82983b121e489f2b0591e51a4 ./web/api/lib/Cake/View/Scaffolds/index.ctp +178e1d482e9681636ce525943ec8ee40 ./web/api/lib/Cake/View/Scaffolds/view.ctp +f34956361673d044a7032df1ce185953 ./web/api/lib/Cake/View/HelperCollection.php +f12d01cbd2d411c1d2565e9ff4c56fc0 ./web/api/lib/Cake/View/Helper/JsHelper.php +c1adc2d9d1ace1aa549df8f244475d30 ./web/api/lib/Cake/View/Helper/TimeHelper.php +68aef6f414b92c5947f20b46a18a887f ./web/api/lib/Cake/View/Helper/CacheHelper.php +b7172335d34ea0338240fad00cf2ba0a ./web/api/lib/Cake/View/Helper/JqueryEngineHelper.php +e654eab21ea1d186cef90c4f75473df2 ./web/api/lib/Cake/View/Helper/NumberHelper.php +9e568c1d3505c33f8fa46c0f6a7f151f ./web/api/lib/Cake/View/Helper/RssHelper.php +578584482fb2af0f6ee954310ecbd231 ./web/api/lib/Cake/View/Helper/PrototypeEngineHelper.php +d2c96e9191577bfe76c01897c7179fbf ./web/api/lib/Cake/View/Helper/JsBaseEngineHelper.php +9cf812167d44cc5839d64952702ab2e8 ./web/api/lib/Cake/View/Helper/PaginatorHelper.php +0a701d28f2da12ce7c9f72654ff0157f ./web/api/lib/Cake/View/Helper/FormHelper.php +dbda6bed533c57ce4019d7c38525db73 ./web/api/lib/Cake/View/Helper/HtmlHelper.php +b94930e797b585f424ebc2150b06553f ./web/api/lib/Cake/View/Helper/SessionHelper.php +4aacaa7c6df280a0f2807a87405ae684 ./web/api/lib/Cake/View/Helper/TextHelper.php +fc1c44f23ac9a49821d3ea1e8130e775 ./web/api/lib/Cake/View/Helper/MootoolsEngineHelper.php +df24b51cf0d48f8aecb74762dca1b034 ./web/api/lib/Cake/View/JsonView.php +12e25abf73466b91198f6ad116b906b2 ./web/api/lib/Cake/View/ThemeView.php +9a83838dfa7e29a115255ddac3440408 ./web/api/lib/Cake/View/Helper.php +706e266d9800beb79c8e8ada62ff08a3 ./web/api/lib/Cake/Controller/Scaffold.php +751575e0e908407f4e27acf4b105907c ./web/api/lib/Cake/Controller/ComponentCollection.php +7842c667d0ef2ead888e8b558718ebd8 ./web/api/lib/Cake/Controller/CakeErrorController.php +d995d6e85da0e4d812c73ee04b37f1c4 ./web/api/lib/Cake/Controller/Component/AclComponent.php +65317b1b574dbbfe08f5c868099db323 ./web/api/lib/Cake/Controller/Component/SecurityComponent.php +60bb07907bce1db2eecdae1c57276eff ./web/api/lib/Cake/Controller/Component/AuthComponent.php +65e5698cb0a7f57b0694d46be01d4810 ./web/api/lib/Cake/Controller/Component/EmailComponent.php +80730d5678c43361f51c2fc117bb349c ./web/api/lib/Cake/Controller/Component/SessionComponent.php +a8226c3c10f8c4dc7ede5866a45bca1b ./web/api/lib/Cake/Controller/Component/Acl/AclInterface.php +9ec2de177f28bb56cd8a348884b49dbc ./web/api/lib/Cake/Controller/Component/Acl/IniAcl.php +0f7bcc4a0bb72a4b3bc278e204552790 ./web/api/lib/Cake/Controller/Component/Acl/PhpAcl.php +7e60042fb8c13ae17320391f59e6d6eb ./web/api/lib/Cake/Controller/Component/Acl/DbAcl.php +ee4c0102e75bc14b9d87509678e69987 ./web/api/lib/Cake/Controller/Component/RequestHandlerComponent.php +d37c7b314a939c2f8ed10b1aa07baf95 ./web/api/lib/Cake/Controller/Component/Auth/AbstractPasswordHasher.php +8708c45bec3ef35430c8f2019e6d5d7e ./web/api/lib/Cake/Controller/Component/Auth/ActionsAuthorize.php +e4338dbbff1a0033ba9eeb8087374079 ./web/api/lib/Cake/Controller/Component/Auth/FormAuthenticate.php +8273007498c659e2c81b9e5676e95d5f ./web/api/lib/Cake/Controller/Component/Auth/SimplePasswordHasher.php +237ad702af86881216b64034219d2c13 ./web/api/lib/Cake/Controller/Component/Auth/BlowfishAuthenticate.php +0ffeb602aa1b0b90b75936d03a7b0a0f ./web/api/lib/Cake/Controller/Component/Auth/BaseAuthorize.php +caf2e032b3e8a7f3c53b207237f62b25 ./web/api/lib/Cake/Controller/Component/Auth/BaseAuthenticate.php +da72b502fd7ed70c75a0ada78b596d75 ./web/api/lib/Cake/Controller/Component/Auth/DigestAuthenticate.php +c4fa9df3aea0258f06295b51db032943 ./web/api/lib/Cake/Controller/Component/Auth/CrudAuthorize.php +91a585aefd8a0463f7d6c121a1de78c2 ./web/api/lib/Cake/Controller/Component/Auth/ControllerAuthorize.php +d48fb9ace14978eb09ea9887397f90cf ./web/api/lib/Cake/Controller/Component/Auth/BlowfishPasswordHasher.php +1f91cbaf9bca8a96757bb1d7f321dfc6 ./web/api/lib/Cake/Controller/Component/Auth/BasicAuthenticate.php +0169ce46b0068863551ba37a46706a61 ./web/api/lib/Cake/Controller/Component/CookieComponent.php +d214f5382dae1e781787c34d9cd3a1fe ./web/api/lib/Cake/Controller/Component/PaginatorComponent.php +5bec6a78243b42524b8486067a6841c1 ./web/api/lib/Cake/Controller/Component.php +9eae962752c2c6de8f6556f451ea1472 ./web/api/lib/Cake/Controller/Controller.php +cf534fc38920d3a34855ee631f71f925 ./web/api/lib/Cake/VERSION.txt +a1fb48cc1eb9816312eb22b9afc6c5a0 ./web/api/.htaccess +dc3b625f2bc45960040458659f3c3e46 ./web/api/build.properties +879d31ddac6c358aad6a6f1d10204986 ./web/api/README.md +36769423770016b983891573a6524a9d ./web/api/.gitignore +52440fcefe6f4a3f7e565496f036641e ./web/api/index.php +b7c403fb4c5a883250c3b97d5ac7b80c ./web/api/composer.json +5b7cfe44d18b28983e29b2d838e6a414 ./web/api/build.xml +14f618fd1c8d08a9fc1b2b900ccaed93 ./web/api/.gitattributes +d87e4b50aa600f3a6b36b2e54cfb15b1 ./web/api/CONTRIBUTING.md +fb02cef58318a74bbbbda3e63e7d97e1 ./web/api/.editorconfig +a2be02342dea3466dbc7dad5f5490b41 ./web/api/CMakeLists.txt +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Test/Case/Model/Behavior/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Test/Case/View/Helper/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Test/Case/Controller/Component/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Test/Fixture/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Lib/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Vendor/empty +a2a9efe935decfd5f498bf0d83075574 ./web/api/app/.htaccess +abcc77ec4f808a149429557d9aaccf6d ./web/api/app/Model/Monitor.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Model/Behavior/empty +0047164bb6dfa21ae17121b991dc5aa9 ./web/api/app/Model/Zone.php +b9fe07fbd59be62e4eb2e5f3dbb322e6 ./web/api/app/Model/ZonePreset.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Model/Datasource/empty +5c36f91a812cb4a34abdbf6043066bd2 ./web/api/app/Model/Event.php +f4335cce9745db787e4d4a18ff5fc927 ./web/api/app/Model/AppModel.php +f0f04798d1b60a2664ab76b04ecf45c7 ./web/api/app/Model/Log.php +2289a30f3f0239366076b3ad31eabb0c ./web/api/app/Model/Config.php +a4be1003c8b18d55b95293199fba34c0 ./web/api/app/Model/State.php +bf91a4c7888f00adf3526e2711ff853b ./web/api/app/Model/Frame.php +404b1552fc8e90ecf5bc49b96cbe5814 ./web/api/app/Model/Host.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Plugin/empty +a08c07141e4c36516fecb74f73f537c3 ./web/api/app/Config/bootstrap.php +68671846a8b9348ea072a5071063fe36 ./web/api/app/Config/acl.php +49a3e546eff41b03e213f8f7133bb8d8 ./web/api/app/Config/email.php.default +a3ea909114f9e4ebbb7d5d359a61ecb3 ./web/api/app/Config/routes.php +d7e696d6244cebc9bb6086532510fc93 ./web/api/app/Config/database.php.default +3185ea5b0d576842e1898912071eb29e ./web/api/app/Config/core.php.default +ec8d4e18d23cb06cf5c863de2f07f0d5 ./web/api/app/Config/acl.ini.php +a5d9bbc6c52390aad154bc9197a86f87 ./web/api/app/Config/Schema/i18n.php +7b06760a9b74dc1cde66cdf413e3ae88 ./web/api/app/Config/Schema/sessions.sql +4986c84c1e5eb9ad81faae98edcb9504 ./web/api/app/Config/Schema/sessions.php +fd69565dc23c3f3ccc981cc29a2abe5b ./web/api/app/Config/Schema/i18n.sql +be1ae0bceba3274acc4a19a8022a8a6e ./web/api/app/Config/Schema/db_acl.sql +ca6ed35255d94b3d836935d030515633 ./web/api/app/Config/Schema/db_acl.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Console/Command/Task/empty +36b29ca4ed8331df525f55bf33536758 ./web/api/app/Console/Command/AppShell.php +5883c212c26f2573914c7fcfde18b871 ./web/api/app/Console/cake +7a1dd61c57a6dccb5649cc0c92b23ad3 ./web/api/app/Console/cake.bat +66e5a115a52a914b6280555d4488ab97 ./web/api/app/Console/cake.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Console/Templates/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/webroot/files/empty +66b3119d379aee26ba668fef49188dd3 ./web/api/app/webroot/favicon.ico +69e2dbff5ecae970e423450e93402f0e ./web/api/app/webroot/.htaccess +7307ecf28dccc0e436a13caa5a38b38f ./web/api/app/webroot/img/test-skip-icon.png +19190f09beb6039fa4153ee05079fb00 ./web/api/app/webroot/img/test-fail-icon.png +bb7e210a60f92e5458e347cf77177c5f ./web/api/app/webroot/img/cake.power.gif +f60716ed419e69f9974a49d8310933d0 ./web/api/app/webroot/img/test-pass-icon.png +4a5504d3f7228af75f3fecbd3d449cf3 ./web/api/app/webroot/img/test-error-icon.png +fc804821ffc3d23daa82885d6b6b0ce6 ./web/api/app/webroot/img/cake.icon.png +332f7cc25a41d0022e19ca45c2868dc8 ./web/api/app/webroot/css/cake.generic.css +6a8aa27502bab380c6b4d58486675671 ./web/api/app/webroot/test.php +b27e846b96551d4e72c44040667671b2 ./web/api/app/webroot/index.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/webroot/js/empty +32f7ef8d62a60725e277af92b1fc836e ./web/api/app/index.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Locale/eng/LC_MESSAGES/empty +ae9efcdfba944864d05bd25cc4c2fcf3 ./web/api/app/View/Logs/json/index.ctp +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/View/Elements/empty +e4e541cad879f8f1a3e3c83394af7e89 ./web/api/app/View/Layouts/ajax.ctp +efdc0e2ffd35832bb57880f198b0c7db ./web/api/app/View/Layouts/xml/default.ctp +6240086124e4df9ed9c1c51cf9cf715c ./web/api/app/View/Layouts/Emails/html/default.ctp +c8c03a34f7a28af5d4a6346e2145c068 ./web/api/app/View/Layouts/Emails/text/default.ctp +87196d4cf0167870cf85d7f178a2f3b6 ./web/api/app/View/Layouts/default.ctp +168b2de50862a0ed2dca931b3e7b35f7 ./web/api/app/View/Layouts/error.ctp +9e941e2b71ddf84b84a8f61e87cd6fc4 ./web/api/app/View/Layouts/rss/default.ctp +95d5749d34c9561555bb8a02e737b756 ./web/api/app/View/Layouts/flash.ctp +60253b23516039070b2d521bd9542622 ./web/api/app/View/Layouts/js/default.ctp +9decb1a94a835d970191ae8abbd25bb9 ./web/api/app/View/Emails/html/default.ctp +b79215b81e3901d3fa3cf452f296b196 ./web/api/app/View/Emails/text/default.ctp +62b95a58ca86c6becaa673fba272d22c ./web/api/app/View/Events/xml/index.ctp +1885123c50a612cf5d5afd38844b204d ./web/api/app/View/Events/xml/view.ctp +1cbf201c46d3664f9ac49c11f8b7811d ./web/api/app/View/Events/json/index.ctp +aa0ddf5298aeb40355608bc06d8627b8 ./web/api/app/View/Events/json/view.ctp +51c4ec3708eb4f0bdbc754c67bccaa61 ./web/api/app/View/Errors/error500.ctp +5a77845c39a0841997f212267f2e3826 ./web/api/app/View/Errors/error400.ctp +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/View/Scaffolds/empty +ea95455171ab4065b42534bd15fb7aef ./web/api/app/View/Helper/AppHelper.php +95aea1cca8bf9d21ce9635420ab933e1 ./web/api/app/View/Configs/xml/index.ctp +873c849e394789bcbdf2c5e54c1dc6ee ./web/api/app/View/Configs/xml/view.ctp +e28615a667b68c75c14eec60ff325c0e ./web/api/app/View/Configs/json/index.ctp +ee93ce25a02026e2e7f83a95da92b5f7 ./web/api/app/View/Configs/json/edit.ctp +ee93ce25a02026e2e7f83a95da92b5f7 ./web/api/app/View/Configs/json/view.ctp +9448baed95f3c917e1c81ce09e943568 ./web/api/app/View/Monitors/xml/index.ctp +e1c9b7a56de31ba5f9c47ab60be7f08c ./web/api/app/View/Monitors/xml/edit.ctp +a5d712e7dcf0f023dff13e88ab01cc04 ./web/api/app/View/Monitors/xml/view.ctp +82d1806fbb9e4e194ffccf0fd7abfac9 ./web/api/app/View/Monitors/json/index.ctp +f4f2a7867614242fcbcc60ede4bdc58f ./web/api/app/View/Monitors/json/edit.ctp +2f47685bec690f0efda0a91f56c33a16 ./web/api/app/View/Monitors/json/view.ctp +b3df7b179f1306e970bcf054b81f2703 ./web/api/app/View/Pages/home.ctp +b87ed1acb6b83144b355c07784757e22 ./web/api/app/Controller/PagesController.php +6456a68e3e0f51e8e083c6b9fa6b9846 ./web/api/app/Controller/MonitorsController.php +6e1b9667fedda9974fafd7b00c912b98 ./web/api/app/Controller/HostController.php +0acd67c90d279a1473c265fdbf7cf8cc ./web/api/app/Controller/Component/FilterComponent.php +0b71452d2b43ac6597a33e6345f88574 ./web/api/app/Controller/Component/ConfigParserComponent.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Controller/Component/empty +debf11e03d3d1fea2c0fb8b0ae713f88 ./web/api/app/Controller/Component/ImageComponent.php +4a961b2841dcff990ef059c03cb5888d ./web/api/app/Controller/Component/ScalerComponent.php +02a80011deb909b32e3e5bfa623c9f59 ./web/api/app/Controller/FramesController.php +7a1483dd473b9bd8f4b80060b98ba3e7 ./web/api/app/Controller/StatesController.php +d53f96e5e2a8375d7e32e88d9f03ab4b ./web/api/app/Controller/ConfigsController.php +ceccce2d0737ea5c08304a2f294a80a0 ./web/api/app/Controller/ZonesController.php +c58ae9218be820a17de1a7954cc65469 ./web/api/app/Controller/LogsController.php +95fe23a3e2127f966c276539da9b8582 ./web/api/app/Controller/AppController.php +a566f2dc92c60dc293deee12a1399238 ./web/api/app/Controller/ZonePresetsController.php +36f3b63e908a633f702e0b69a890c672 ./web/api/app/Controller/EventsController.php +4f4dfe411ccd1fb2827362e70367bb35 ./web/scripts/retag.sh +fe9fadd115a7b707a3cf9b8e404a088d ./web/scripts/swap.pl +4b3afb84b2b71ef56df09997a350bd04 ./web/graphics/spinner.gif +e07c0775523271d629035dc8921dffc7 ./web/graphics/favicon.ico +ea13c7f599b803a67d8ab260ef35184e ./web/graphics/Makefile.am +a2954fd3594e026484c65c324db58744 ./web/graphics/Makefile.in +a840cd88b33f95a014cd654e0a615fd9 ./web/graphics/transparent.gif +7fa0c702fd5d8c954f6523e4ca5bc327 ./web/Makefile.am +133b39a5ae708eb554ac0e170be2434f ./web/skins/Makefile.am +b15a4bb8695a0ab5c22defdcf4629494 ./web/skins/xml/Makefile.am +718d8596a14d123d83afb0d5d6d6fd96 ./web/skins/xml/includes/init.php +8b2b943583b2246c89ef65ae42bd4ff4 ./web/skins/xml/includes/Makefile.am +2c99c6d79bdfa2bd2b0798532dda637c ./web/skins/xml/includes/Makefile.in +93ae79dd0774a44eb9002556d47de1bd ./web/skins/xml/includes/config.php +9355288fed99c00c68f8623a3e73280e ./web/skins/xml/includes/functions.php +b4d73f56e49c3c8c550d87785dc35f1e ./web/skins/xml/Makefile.in +044458ee1051e746b2da95482b2ea5b9 ./web/skins/xml/views/Makefile.am +96a21cecd35ed5d1b732bfe74b1535ef ./web/skins/xml/views/actions.php +a4ea66c50d40daeb417bb0870096fc1f ./web/skins/xml/views/Makefile.in +83f5492302df18de8c7090a9fa8ac3e7 ./web/skins/xml/views/notfound.png +98b7bfd5ae1dd98c66770b2e0759fb04 ./web/skins/xml/views/console.php +d41d8cd98f00b204e9800998ecf8427e ./web/skins/xml/views/none.php +33d9276165e48e85f9b76d96ceb72c43 ./web/skins/xml/skin.php +676b97cfc2f2f52ab7015aba99c80461 ./web/skins/mobile/graphics/Makefile.am +47f96083cf2206360fe7b9123388b78e ./web/skins/mobile/graphics/Makefile.in +8d106f245c197a3c9c0aadd7f55eff48 ./web/skins/mobile/Makefile.am +4ec6947778d22cd166d2dc02a0bea134 ./web/skins/mobile/lang/Makefile.am +9e38b7e03d53565f1f3d3f17c0921d02 ./web/skins/mobile/lang/Makefile.in +53d5d9e290d4f60cc7dcf9052619cbd2 ./web/skins/mobile/css/Makefile.am +97e008b07c163aa7735f525afe434b6e ./web/skins/mobile/css/Makefile.in +67bdd7f59ebc311b9cd8954d57f68c2d ./web/skins/mobile/css/skin.css +0814d7addb49c87b8cc29eaff5c8effc ./web/skins/mobile/includes/init.php +d81f5664253d9d1dfa2c0de193d2d8cf ./web/skins/mobile/includes/Makefile.am +1a1bfa354bc9738db22f241983e719e5 ./web/skins/mobile/includes/control_functions.php +03ee95225be319783ea5398d2b923717 ./web/skins/mobile/includes/Makefile.in +cbe8eeac1a8e40f45f9b1c876f3412c8 ./web/skins/mobile/includes/config.php +5c15d51173b096e5597c329511ce7d74 ./web/skins/mobile/includes/functions.php +6e463d44f79c484b7a5fbe721585f1db ./web/skins/mobile/Makefile.in +82a065fe144b7be4d9ba9d9c34a402a8 ./web/skins/mobile/views/frame.php +79e37c6a2c5e570005d2a73868a04cd8 ./web/skins/mobile/views/filter.php +e674fef9d3431fe19c72ad257377eda9 ./web/skins/mobile/views/login.php +97f92e8421bb5143f4bd5c812aaed3b3 ./web/skins/mobile/views/Makefile.am +635e3defdaee0d2c338db1dd0adf64d4 ./web/skins/mobile/views/watch.php +e98bf08b3a2d992a67f804a54e5f687f ./web/skins/mobile/views/event.php +cdccdbfd83e385b6d85c9a3bafcb66d3 ./web/skins/mobile/views/css/Makefile.am +5a61e2227587163542bebb4dfb77fe1f ./web/skins/mobile/views/css/console.css +c43d3815e4f998dd4ef784c6999a2336 ./web/skins/mobile/views/css/Makefile.in +148559cc9c8d6c653f59390ed38451b6 ./web/skins/mobile/views/error.php +ffcf2b1eb8b01c7465d24fdfcdc96f79 ./web/skins/mobile/views/state.php +caa91a4d945746bf22cb0d7aabcabe6d ./web/skins/mobile/views/montage.php +d6509e5d0b1458c1b3ef85222d1af2c1 ./web/skins/mobile/views/events.php +538f21dc8765e6b302241df193a8a676 ./web/skins/mobile/views/Makefile.in +572e23c6d748ac9946c94d68ebbb499f ./web/skins/mobile/views/console.php +608ea6b2db525311c296678a52900f60 ./web/skins/mobile/views/devices.php +37010990d98a4a087fcbdd4af5697542 ./web/skins/mobile/views/eventdetails.php +a80ffe8b92314db2b251bddefb53d604 ./web/skins/mobile/views/function.php +084569b4ac87deb3cedb8762badfdd80 ./web/skins/mobile/views/video.php +6c2c9c3fd56fd8cc97605657a86adc93 ./web/skins/mobile/ajax/Makefile.am +5d274e0d660371904abd488078d2d4e1 ./web/skins/mobile/ajax/Makefile.in +1ee43243aff2957f555b2025fe121ddb ./web/skins/mobile/skin.php +b08bbad185d4f141f4e16a32961f7e10 ./web/skins/classic/graphics/point-o.gif +3aea4c08fe3d0882bbb50d6a880b9d3e ./web/skins/classic/graphics/center.gif +10481c373da9f2e33955f5f684701e35 ./web/skins/classic/graphics/arrow-ur.gif +4253a17d69f9c9f105864b57ef1da4ee ./web/skins/classic/graphics/arrow-l-u.gif +2357c0f1dec549fb5866341acf2f8e64 ./web/skins/classic/graphics/arrow-dl.gif +b36b743446eb998574343b265fc2a327 ./web/skins/classic/graphics/arrow-dr.gif +bf33071fa7b7ef64ad586ff90003fb9a ./web/skins/classic/graphics/Makefile.am +de6d2a2b0bd54f72d5c8bde9fddfc56f ./web/skins/classic/graphics/arrow-ul.gif +93f79d7c400d1988e58791d692050380 ./web/skins/classic/graphics/point-g.gif +6a948184e447f61a38d54609194eb647 ./web/skins/classic/graphics/arrow-l-d.gif +e252c31fdb0b3a65a082069b37042a0f ./web/skins/classic/graphics/seq-u.gif +330f0709c7b846ed5b3e990a6b0b6839 ./web/skins/classic/graphics/arrow-u.gif +0c2b9346b65233183cca8dbaa6ee1db2 ./web/skins/classic/graphics/arrow-s-d.gif +dad7467542959f7e571f12d0a4988c98 ./web/skins/classic/graphics/arrow-r.gif +0af76efb90bd5261938a2180bc75c0b7 ./web/skins/classic/graphics/Makefile.in +2c0f5bb849832ea968cffc648d45381c ./web/skins/classic/graphics/arrow-d.gif +2e743de572b45088c05f0471f63fb710 ./web/skins/classic/graphics/point-r.gif +98212c6b29fcd9a09e6d16607fe65909 ./web/skins/classic/graphics/seq-d.gif +269dca955356f221c9ea271f3e259763 ./web/skins/classic/graphics/arrow-l.gif +4b755122db75084dd39297fbc1822f27 ./web/skins/classic/graphics/arrow-s-u.gif +73574931d96de1bb4e40fe28c75bc6d8 ./web/skins/classic/Makefile.am +5c315d65c081405e300d30176d5483f9 ./web/skins/classic/lang/Makefile.am +7f0d772e54e49c2a6fef4513a0d4b42c ./web/skins/classic/lang/Makefile.in +88f828f9f626a1d1690c2498d02b5b83 ./web/skins/classic/css/Makefile.am +6a2808353ef61abb2a1bec4647054b5d ./web/skins/classic/css/classic/control.css +a63c51b72f04acf19299b36c18960204 ./web/skins/classic/css/classic/Makefile.am +801ee218b04645610967712df0ba9159 ./web/skins/classic/css/classic/Makefile.in +10fb7830c2e3a07c7b090bbb224f89b7 ./web/skins/classic/css/classic/skin.css +b4659211b34992bc81bee822615181db ./web/skins/classic/css/classic/export.css +701f84f1ab430890e539cf373ed4292b ./web/skins/classic/css/classic/views/frames.css +606388c643910afd47e6a53f591cc426 ./web/skins/classic/css/classic/views/montage_freeform.css +3a91d2b400f3d27667a01a816f0f0a44 ./web/skins/classic/css/classic/views/control.css +dc75d27b0aedaebc6364a226e1fac661 ./web/skins/classic/css/classic/views/filter.css +25cb6e4f3459dbf8efb2307c3c8499f5 ./web/skins/classic/css/classic/views/timeline.css.php +668d0f83a81f352d9ab24202f66aaa28 ./web/skins/classic/css/classic/views/controlcaps.css +8a44eac074df2a5b3ac8376e6445db52 ./web/skins/classic/css/classic/views/Makefile.am +b91fa88951c1033191f6a22bc485f907 ./web/skins/classic/css/classic/views/event.css +e91fda984fe2ef3d8de2dbf57b5c7747 ./web/skins/classic/css/classic/views/events.css +63c979e75fcdd523106982a6e5a2cb64 ./web/skins/classic/css/classic/views/montage_3wide50enlarge.css +edcbe038a83cffcc3c725c570ca7d1aa ./web/skins/classic/css/classic/views/plugin.css +c627ab2a4a7567ca1b688a80343bcd1d ./web/skins/classic/css/classic/views/groups.css +675d0499f9dc3fa5fdede504dfbb7ccc ./web/skins/classic/css/classic/views/console.css +27ceca5314be52f316ba52a0d94556c2 ./web/skins/classic/css/classic/views/video.css +7665779719b3f99ebaf1acfd42996ac0 ./web/skins/classic/css/classic/views/timeline.css +f972ae29776f4730b510502f44f03053 ./web/skins/classic/css/classic/views/frame.css +352483a4610fdb2b44697b5a52c690c9 ./web/skins/classic/css/classic/views/montage_4wide.css +902ce9db4ec62764557caaf4f44a0d74 ./web/skins/classic/css/classic/views/devices.css +e95e93705b1af2c7005f54a8ebb23683 ./web/skins/classic/css/classic/views/montage_2wide.css +a9cea9e5cdbbb095baa23b55c19014c4 ./web/skins/classic/css/classic/views/Makefile.in +4a039676d0d00483ed834ad1535209f6 ./web/skins/classic/css/classic/views/watch.css +a2154e46e8865c359caca5afcdf58a37 ./web/skins/classic/css/classic/views/monitor.css +8d299e89fa8e9a088d1d9c747e8f7154 ./web/skins/classic/css/classic/views/export.css +ef24eba3ca4d9e845858e47c3026e9c6 ./web/skins/classic/css/classic/views/stats.css +35d6f241d0377b3d6e69f3584d3cb091 ./web/skins/classic/css/classic/views/montage_3wide.css +f21f80b954ead611f2aa073d0f87df6a ./web/skins/classic/css/classic/views/zone.css +068f1341939d83560694256b4798f2fb ./web/skins/classic/css/classic/views/options.css +54d0b4ce5f948e22fc05f8fbab171450 ./web/skins/classic/css/classic/views/montage.css +6af44563df9975a6fb1e23d64421f486 ./web/skins/classic/css/classic/views/log.css +14f75bb04338fc11d2e98e4efbbd626f ./web/skins/classic/css/Makefile.in +6a2808353ef61abb2a1bec4647054b5d ./web/skins/classic/css/flat/control.css +01d374edd94bfd3414847036fb02f084 ./web/skins/classic/css/flat/Makefile.am +828aa97a2d75de2a0431bd45c9131fc0 ./web/skins/classic/css/flat/Makefile.in +3eacba38a91948d4fee36527c3397e30 ./web/skins/classic/css/flat/skin.css +b4659211b34992bc81bee822615181db ./web/skins/classic/css/flat/export.css +701f84f1ab430890e539cf373ed4292b ./web/skins/classic/css/flat/views/frames.css +606388c643910afd47e6a53f591cc426 ./web/skins/classic/css/flat/views/montage_freeform.css +3a91d2b400f3d27667a01a816f0f0a44 ./web/skins/classic/css/flat/views/control.css +dc75d27b0aedaebc6364a226e1fac661 ./web/skins/classic/css/flat/views/filter.css +25cb6e4f3459dbf8efb2307c3c8499f5 ./web/skins/classic/css/flat/views/timeline.css.php +668d0f83a81f352d9ab24202f66aaa28 ./web/skins/classic/css/flat/views/controlcaps.css +0a6f44e198bc3d2ca20ad0fcffbad58e ./web/skins/classic/css/flat/views/Makefile.am +86cb6b9aef7d237288eef65baaced2dd ./web/skins/classic/css/flat/views/event.css +e91fda984fe2ef3d8de2dbf57b5c7747 ./web/skins/classic/css/flat/views/events.css +63c979e75fcdd523106982a6e5a2cb64 ./web/skins/classic/css/flat/views/montage_3wide50enlarge.css +edcbe038a83cffcc3c725c570ca7d1aa ./web/skins/classic/css/flat/views/plugin.css +c627ab2a4a7567ca1b688a80343bcd1d ./web/skins/classic/css/flat/views/groups.css +d30679be000fa1b224f90fa082b19525 ./web/skins/classic/css/flat/views/console.css +27ceca5314be52f316ba52a0d94556c2 ./web/skins/classic/css/flat/views/video.css +7665779719b3f99ebaf1acfd42996ac0 ./web/skins/classic/css/flat/views/timeline.css +f972ae29776f4730b510502f44f03053 ./web/skins/classic/css/flat/views/frame.css +352483a4610fdb2b44697b5a52c690c9 ./web/skins/classic/css/flat/views/montage_4wide.css +902ce9db4ec62764557caaf4f44a0d74 ./web/skins/classic/css/flat/views/devices.css +e95e93705b1af2c7005f54a8ebb23683 ./web/skins/classic/css/flat/views/montage_2wide.css +5c4db35291a6f24359bb690dd731f170 ./web/skins/classic/css/flat/views/Makefile.in +4564289485853aa21049d59c7a5fa1fd ./web/skins/classic/css/flat/views/watch.css +a2154e46e8865c359caca5afcdf58a37 ./web/skins/classic/css/flat/views/monitor.css +8d299e89fa8e9a088d1d9c747e8f7154 ./web/skins/classic/css/flat/views/export.css +ef24eba3ca4d9e845858e47c3026e9c6 ./web/skins/classic/css/flat/views/stats.css +35d6f241d0377b3d6e69f3584d3cb091 ./web/skins/classic/css/flat/views/montage_3wide.css +f21f80b954ead611f2aa073d0f87df6a ./web/skins/classic/css/flat/views/zone.css +068f1341939d83560694256b4798f2fb ./web/skins/classic/css/flat/views/options.css +54d0b4ce5f948e22fc05f8fbab171450 ./web/skins/classic/css/flat/views/montage.css +6af44563df9975a6fb1e23d64421f486 ./web/skins/classic/css/flat/views/log.css +d41d8cd98f00b204e9800998ecf8427e ./web/skins/classic/includes/init.php +d84bfeacde7fb2855fcacb0371fcac86 ./web/skins/classic/includes/Makefile.am +7c60f2ccaa5b4473b5f9a942c5fea373 ./web/skins/classic/includes/timeline_functions.php +365cb40eb95d28c8429e2377f4636a41 ./web/skins/classic/includes/control_functions.php +57baf09316bf1459b979c79c4ad9a63f ./web/skins/classic/includes/Makefile.in +9799bfa4da3e18ad38d3fc95a5534220 ./web/skins/classic/includes/config.php +367385e878fc60c3157a111f3b1da10e ./web/skins/classic/includes/export_functions.php +57d1e6011e48974b87b1f8a724e98a47 ./web/skins/classic/includes/functions.php +428a1c39e0c8a1f862c5c8746c3a266d ./web/skins/classic/Makefile.in +a2450e779db31e605e1380d05c8e141b ./web/skins/classic/views/controlcaps.php +02657131271319e0dddba4ce7086f790 ./web/skins/classic/views/controlpreset.php +fa3f03ae35f62093d5945ccde3e98c48 ./web/skins/classic/views/monitor.php +9bafbc31051b95fb9bf570ddf5a38c1a ./web/skins/classic/views/frame.php +8bbcf712737b1e36855f200d2385fd5b ./web/skins/classic/views/filter.php +01f5be0d074906c65741c27fa2cca20b ./web/skins/classic/views/options.php +9820236a20ed50a1cdd2d15f3f8d92d1 ./web/skins/classic/views/frames.php +44ca223900b9177e11ab4e48ba0e7044 ./web/skins/classic/views/status.php +219bf517199545f69252a0af7b5768ff ./web/skins/classic/views/login.php +cc6a31182fde7213ccd9f4d7a2dbe109 ./web/skins/classic/views/Makefile.am +c5104b258f47540755a020d75206beee ./web/skins/classic/views/eventdetail.php +deda87ed9bddf8f7f9d44849190cd1d6 ./web/skins/classic/views/watch.php +f2c680642fc74574fc3eafd3e618be01 ./web/skins/classic/views/optionhelp.php +5ea34c066ca78051598f5370ba42e154 ./web/skins/classic/views/event.php +8c8a7610522a5d854cced9493756e5c3 ./web/skins/classic/views/user.php +1c4f2fb837f1b3b5e5b14c3800122d13 ./web/skins/classic/views/postlogin.php +9d6448c2922d043c9bddd127fcfcfee9 ./web/skins/classic/views/cycle.php +d34482b6326c45313f0f55097113799c ./web/skins/classic/views/donate.php +20704d69d5523b155703c0ead3c1c11d ./web/skins/classic/views/version.php +110bf52261101da20c79d09b6d54d683 ./web/skins/classic/views/device.php +c88aa8dfb96cc3007b472908fec36bab ./web/skins/classic/views/groups.php +50f196a0b596c0f35bc09bce38ac0481 ./web/skins/classic/views/css/Makefile.in +5e4cb2c3a9b665e572e51d209c342d56 ./web/skins/classic/views/error.php +b25ce723f9cc7a5256ef5f6326c5cc68 ./web/skins/classic/views/api.php +32774e515f3e4631d74c8fe889b6c08b ./web/skins/classic/views/state.php +6dfca5d5a59da996cfd196471bcdf3e2 ./web/skins/classic/views/montage.php +f9c5481d113f67d002883034dddf385a ./web/skins/classic/views/blank.php +f85a926a12857d2daf6ebbff3e3d2345 ./web/skins/classic/views/events.php +0486239528f623afdd5427a28b6ccdee ./web/skins/classic/views/settings.php +9bb8ccefa0a11f77a1824923b538dcd8 ./web/skins/classic/views/group.php +72e0a819d2f897634722221ea53ab12e ./web/skins/classic/views/Makefile.in +a1f75cc5773eabdfd71d88be0fdf5606 ./web/skins/classic/views/onvifprobe.php +e4581c0bc26038a8ddd502cc2412a86b ./web/skins/classic/views/plugin.php +8b6012456fb4aae0729edc4ee9ac7bdc ./web/skins/classic/views/controlcap.php +caaf69ad7ea4dd007271078f107d6b20 ./web/skins/classic/views/control.php +227d5e8e39d82f618e41477eb60ff60c ./web/skins/classic/views/zones.php +b6624c853f1313db2dc12d996b9e06bb ./web/skins/classic/views/filtersave.php +62e03ba2219b4f0f14573eb173e00048 ./web/skins/classic/views/console.php +48c5643ab5f6664fa3335b959e53d9cb ./web/skins/classic/views/zone.php +5e50b838b9e99ee33705980d90d172e3 ./web/skins/classic/views/monitorprobe.php +8942090f8e270435be16af8bff6683e4 ./web/skins/classic/views/devices.php +4d0cb5ee8a1ba82a2c456110a1302799 ./web/skins/classic/views/monitorpreset.php +16064caa25b6c51360e10ee91210e8fe ./web/skins/classic/views/js/state.js +c15861718da9974b057a4e6641759bad ./web/skins/classic/views/js/group.js +de8db540180b86df8d0fc4724df3f12b ./web/skins/classic/views/js/user.js +59920201dfac5f9a4431f4f3a4e0364b ./web/skins/classic/views/js/version.js +017aafda61cee8bdf65f36eedcd91644 ./web/skins/classic/views/js/console.js +0dd3c64eb2002ffda9f7cb5a57d45457 ./web/skins/classic/views/js/donate.js +7a9e7f334a1c84d56850ac3b79cd5170 ./web/skins/classic/views/js/log.js +acd524f854058f342f34d0afafbb6075 ./web/skins/classic/views/js/Makefile.am +7e9cfda600b1bb488936894c9eff5cb9 ./web/skins/classic/views/js/events.js.php +699f68aeaed1c6a4c04befd46bf43ebf ./web/skins/classic/views/js/video.js.php +5cc3fc883beec9e3d1b2a9134a09a72e ./web/skins/classic/views/js/montage.js +1cdb9cdae3f827b5cc3fc67ce02b59ec ./web/skins/classic/views/js/options.js.php +7456a616bf361566b88f90d78ecbea23 ./web/skins/classic/views/js/plugin.js +3a8b64c9424f1a9ce02973021f3f1014 ./web/skins/classic/views/js/login.js +437d1084299d1163d36bd83355178a5b ./web/skins/classic/views/js/events.js +d41d8cd98f00b204e9800998ecf8427e ./web/skins/classic/views/js/plugin.js.php +f95f51f93a153403f28bec13da9f079e ./web/skins/classic/views/js/monitorpreset.js +c125327fce8e049519bb826cce5417f3 ./web/skins/classic/views/js/watch.js +56c208506cecd6a242e38d9c347558ba ./web/skins/classic/views/js/state.js.php +59f48f29901bf0b1d2dcdbd0287a7243 ./web/skins/classic/views/js/video.js +6656671bba812476fb7964edab8ed7d5 ./web/skins/classic/views/js/groups.js +8c5c9cc7e4961559e345220c9653aec8 ./web/skins/classic/views/js/version.js.php +f9840e08f9ca3c9966315657cfdf47f5 ./web/skins/classic/views/js/monitorprobe.js +03cd81247cc90a19db3cba077fd00b6e ./web/skins/classic/views/js/control.js +0f09e33012eee04a62ebdb2b05c7b03a ./web/skins/classic/views/js/cycle.js.php +8d99ac07dfdbf41cd357b0a3d2ee1f32 ./web/skins/classic/views/js/postlogin.js.php +d30138ebaed9a515c0139ec32ea9736b ./web/skins/classic/views/js/Makefile.in +925a1cf53b3191680541872b4c38b576 ./web/skins/classic/views/js/cycle.js +59d56ffa472788c766e64cac4b9e7c7c ./web/skins/classic/views/js/timeline.js.php +5a712d579121c24102fbb26f3c782c8c ./web/skins/classic/views/js/filter.js.php +1dbe98cc5c03f1234e14d1fb059fafe7 ./web/skins/classic/views/js/event.js +32ef30d8527086aa9ee63b73ac5df86d ./web/skins/classic/views/js/console.js.php +70292effe84d3885af9327270eb41d83 ./web/skins/classic/views/js/watch.js.php +cade1c87dd48210dcc61fbc2541e76a5 ./web/skins/classic/views/js/filter.js +2da7d63e3e1a8b4a7ddc42506e714873 ./web/skins/classic/views/js/controlpreset.js.php +fa19dd2b4162ac24b8dcdd5e4d61ad8d ./web/skins/classic/views/js/event.js.php +a33f83eff36ab8a9eb498a4ad88e3e55 ./web/skins/classic/views/js/zone.js.php +f7ed288a9c1556499ff689b277091074 ./web/skins/classic/views/js/export.js +8978326666696ec75c928e0220df27f6 ./web/skins/classic/views/js/monitor.js.php +0062d1966577b1a04e9b430adf20e441 ./web/skins/classic/views/js/controlpreset.js +eb5887badd6d2a2a7604977935d6aa11 ./web/skins/classic/views/js/montage.js.php +f95d23b81ff41694e0f61ba33f116eff ./web/skins/classic/views/js/monitor.js +d446cdfa58d7a052b099e65e1417296e ./web/skins/classic/views/js/donate.js.php +f60b3455365eefbab38be495608e216f ./web/skins/classic/views/js/timeline.js +2cdc936339c10744b45be5560eae9488 ./web/skins/classic/views/js/devices.js +31f13ff731711df12ec5d01ff8dee18a ./web/skins/classic/views/js/onvifprobe.js +98c7d638b7e90ddae6aabc103a3a197a ./web/skins/classic/views/js/zone.js +68121c732935ad0c53d9d58af2e7f2a7 ./web/skins/classic/views/js/export.js.php +2cf108bd3b04ede46bee2429f071262d ./web/skins/classic/views/log.php +f142b8cf2d848d8277d605cc0bb5c7f0 ./web/skins/classic/views/none.php +49ea5b8face2a2028be5cb3bdbf1bb7a ./web/skins/classic/views/export.php +0c6c51a1b114ffbb16d58fba7c89524c ./web/skins/classic/views/function.php +d710ca3b522166d665e369809e8a2d25 ./web/skins/classic/views/stats.php +39a039889adf0e47c76c901c33ce5049 ./web/skins/classic/views/video.php +5409f465a588c95cdba44eec090d810c ./web/skins/classic/views/bandwidth.php +3c5176cac1f73c0a88384ce444766280 ./web/skins/classic/views/logout.php +2dcafab9b2be01606fcb51e4dbfc20f6 ./web/skins/classic/views/timeline.php +b76780ad252d2ce849d39e3caa047c58 ./web/skins/classic/ajax/Makefile.am +f37fcd35a0f3b84718bce3fc737be86f ./web/skins/classic/ajax/Makefile.in +1b5888dd1130c2624e3a89ec6914641e ./web/skins/classic/skin.php +1d4fc58a4fb06f37e330419e1de5ccc5 ./web/skins/classic/js/skin.js.php +805aef41bad373c6ee01d4ad53e8ff1a ./web/skins/classic/js/Makefile.am +bef654370e444df42810de7da6c4a70e ./web/skins/classic/js/jquery.url +dcf3df92839033174d261fff21dc51b8 ./web/skins/classic/js/Makefile.in +6e955eb64f82afa9096420be1618a29b ./web/skins/classic/js/classic.js +af693f9aea7dae36fb3bef4c9b6e56fb ./web/skins/classic/js/jquery-1.7.2.js +71f061bed29e28271c08cd854e199c74 ./web/skins/classic/js/skin.js +7ab39f8deb773cb790a61ec84e88ee9c ./web/skins/classic/js/flat.js +d076feed95b1fbaf3d8619ce3464b8f7 ./web/skins/Makefile.in +df99ab07213af7e34d3be30577164872 ./web/skins/flat/graphics/Makefile.in +7879d860176b29029fa4c7f28b727025 ./web/skins/flat/lang/Makefile.in +480557e820c7b6e6038e4176a2af2ea2 ./web/skins/flat/css/Makefile.in +5aa28a91ca72e57dd75b2d4a8f5fc6d7 ./web/skins/flat/includes/Makefile.in +cdc64496eb48632cbd2bc7bafef9d64a ./web/skins/flat/Makefile.in +c98e1b668dd757aaa2746005d4b4a938 ./web/skins/flat/views/css/Makefile.in +c4e176e6e965b87f69a63420cab4af53 ./web/skins/flat/views/Makefile.in +d8d1c4f17f5d939ecf46f57c16ac3e2a ./web/skins/flat/views/js/Makefile.in +b5627a8169f685a642289fcbe4b639d0 ./web/skins/flat/ajax/Makefile.in +7cb6bf5845900a87dfed6d84e5ac96bd ./web/skins/flat/js/Makefile.in +99931ad9ae489e68acad0c95103456e5 ./web/lang/Makefile.am +fe3ba6910955f7e59c533edde6e76a2d ./web/lang/es_ar.php +4743f791f12d81b443ab0ca1b85ec6af ./web/lang/pt_br.php +7c9070b7b65fabfb72306738baff537e ./web/lang/dk_dk.php +17c2b6e5decc55731b31a51991d91f3b ./web/lang/hu_hu.php +78997dd632c038d732fbf8bc3374a4cb ./web/lang/fr_fr.php +c9793bdd2bfeb5a6856bb6a0afc91218 ./web/lang/pl_pl.php +2ef22ef8d1c7513497fdf5c846054604 ./web/lang/it_it.php +5fffc8958d950c22e8f357b0bda62685 ./web/lang/se_se.php +0138607989f815c640317c2e47f1c7e9 ./web/lang/nl_nl.php +a3a33207a6ad4c8ff5d27683bad3b743 ./web/lang/ru_ru.php +dde8f3570d03669b78ef6691f06e5221 ./web/lang/ro_ro.php +2ce9bebd55d946cf4ea9d0776df0cc7d ./web/lang/en_us.php +a746eb3e3c3ace9524bbd0171505ed90 ./web/lang/Makefile.in +0e8eb309725d33a89c14f0d49c83af61 ./web/lang/cn_zh.php +654428cc802856a13a2405566215a1dc ./web/lang/big5_big5.php +5626605831d76d6538f3785e7f671e26 ./web/lang/et_ee.php +cef9b67a57871a6aa310a492b89f9346 ./web/lang/ja_jp.php +53f8d546d131f453190b5587dc9b29a0 ./web/lang/es_es.php +3f77da221e921f1b6faee44f136b7719 ./web/lang/cs_cz.php +09c01075773025ea56737e21faa1b452 ./web/lang/en_gb.php +b9e39e59e0acc3f159650fdb3caa4c67 ./web/lang/updateLangs.php +0cca7400eed1e884b95bd7e62e751763 ./web/lang/he_il.php +6d6dd4ea05509030405271f717337016 ./web/lang/de_de.php +ddb682a54052f1df8bc3a1bf16e723ef ./web/.htaccess +8ccf4da96000c488cc79b5a20a381d48 ./web/.travis.yml +07d8a9af2283aa45437519a2266c0cd4 ./web/css/control.css +560a8a8a1cdb268d9d267ed05b03d557 ./web/css/Makefile.am +f3a96b4e82b5e7d722d860b0371e92e2 ./web/css/reset.css +d3f02477779fa8a2cddd1c1605583b96 ./web/css/overlay.css +9a6de3128e9d12e1e18967f4087d8b10 ./web/css/bootstrap.css +a21186623f461fbdf94a1000fb081ee0 ./web/css/spinner.css +0b77aee5e477d9823c3460ad6548efd9 ./web/css/Makefile.in +fb2c0e57d4b268d07ea1d8594735cdc2 ./web/css/skin.css +b4659211b34992bc81bee822615181db ./web/css/export.css +9aab9ae739c7003ba1ee35e4f515c282 ./web/css/datetimepicker.css +cdf4928cfc8373086f75dac1d6688feb ./web/includes/Makefile.am +5dae654caa50798391cecd6e67a49efc ./web/includes/actions.php +ea76e136916631c564343e24df07de2b ./web/includes/logger.php +8ae8d5b773c4cc9cda879f57aee04dfe ./web/includes/control_functions.php +a6cebf42a247bc0cd8eaa88d1c15c74c ./web/includes/config.php.in +70d1860686bd3df558fd58981372d9ea ./web/includes/Makefile.in +6ae297c50ade8fb1e40c3bdd2ea7e8f7 ./web/includes/lang.php +63bdb662ad9c56e1f39a856d67ae1432 ./web/includes/database.php +eb49b82b5dd26d03c79b7ae8985e61ae ./web/includes/functions.php +e49d52e74b7689a0727def99da31f3eb ./web/fonts/glyphicons-halflings-regular.ttf +ff423a4251cf2986555523dfe315c42b ./web/fonts/glyphicons-halflings-regular.svg +7ad17c6085dee9a33787bac28fb23d46 ./web/fonts/glyphicons-halflings-regular.eot +68ed1dac06bf0409c18ae7bc62889170 ./web/fonts/glyphicons-halflings-regular.woff +2f078db609b84e60128a8f6d3ab083e0 ./web/Makefile.in +9c6f2be756539dee534a8791687ec288 ./web/README.md +5c28504ecaa3418232e8c802739d2095 ./web/views/controlcaps.php +32ca6aedaee9eacdc26a28de7b1a5871 ./web/views/controlpreset.php +eed41b2d802cbd25c03249a000925b33 ./web/views/frame.php +045dff5f5a8e0c5eb064a488f6834298 ./web/views/filter.php +2915790cec005e0d6ac6325e33181766 ./web/views/monitor.detail.timestamps.html +5d4bd0616707b6836d7339182fa61d4d ./web/views/options/options.mail.html +fbd7564d3c6eb93500291e67c246508f ./web/views/options/options.highband.html +011104e40061f0cbc295ddc31ac32f52 ./web/views/options/options.x10.html +11437296a09d3d3500919731507b7612 ./web/views/options/options.phoneband.html +1df8b9ac443a7769b49b2ecac303f09f ./web/views/options/options.html +4dcb39d17c2b7f7bdbb9684aa07c1fc6 ./web/views/options/options.system.html +fbda31d8d3800bfd8e11d5383156a482 ./web/views/options/options.paths.html +4b0b36400c93029bfdc2ef260b0aaa25 ./web/views/options/options.upload.html +a020fa284c7614f0a663bb9098e3e163 ./web/views/options/options.medband.html +aaf3246613f5fea19de3a551b83dda3a ./web/views/options/options.eyezm.html +a3c783b4293bfbb1739b8590ca985e9a ./web/views/options/options.network.html +bb3f4f7a8f8c14edf99ff7231383fd3e ./web/views/options/options.dynamic.html +22f5e21a84951d346ee9ce741ab6f4bc ./web/views/options/options.config.html +fc11981d217be6c0294a6960341a2e60 ./web/views/options/options.lowband.html +02306e4fb1dd900d1cc84d53f5367221 ./web/views/options/options.images.html +a2ef6e3253a7045c34563065479fef29 ./web/views/options/options.web.html +24c1b7d4c94da4b1acde1793704bb437 ./web/views/options/options.logging.html +102b87276f7c3261ad3563de318541bf ./web/views/frames.php +602186f3b05e2c3c3e6c028ea644f5c1 ./web/views/monitor.html +b6fe00d9376db3c510c189076c65dec3 ./web/views/status.php +7decf004224bc90b967cfe77467ef2e6 ./web/views/login.php +637a1f2dab3a1b6dc6dfa53793c9e620 ./web/views/events_search.html +f9e77a631bd57cd8a2c02f29481cc11d ./web/views/Makefile.am +492711327bcbae3fdb6906ad491e2bdf ./web/views/eventdetail.php +4bd9283191d330bedf1d5ffbc01927ca ./web/views/optionhelp.php +221f952bf26c49436349d834a8d2bf0b ./web/views/state.html +62fc64e470ef60bd639d77fd216c47e9 ./web/views/event.html +a55961bd579dfa76bfb46ee73cbf5b7c ./web/views/zones.html +a83fea5d315d6d1abfdc495ef3e2a840 ./web/views/event-frames-stills.html +36be43b9b753bb30828ea1f10f24ed16 ./web/views/monitor.detail.general.html +8a5034fd7ce8e54016523c4710237bce ./web/views/tab-monitor-file.html +a877333a7bcdd240e2eb8a8cb222ab82 ./web/views/user.php +399cc3c6e2db43ab6fc6eba4a745f9e8 ./web/views/log.html +ecb2a87b8f8c27bff59fb8b95c6334c9 ./web/views/events.html +cf251eedd2a5492f2cbdd2f5032d00ee ./web/views/postlogin.php +4af5785f39864642b064916bc1269091 ./web/views/zones.edit.html +54c011fe978879ac50fa60763d1d9b0d ./web/views/cycle.php +d98aa588ffbb3da94218cd6c80e9a437 ./web/views/donate.php +202bbee66dc131e51069128717cc35fb ./web/views/version.php +d9b8cc5ecc4a1f26e057df31675b55cd ./web/views/file.php +89635fa6da493dd28076352b746ee694 ./web/views/device.php +d1b9a111d15c6a59ab23e612ad73ba54 ./web/views/groups.php +40c485df068b84eda28d463c529bec63 ./web/views/error.php +60ebaac1dfda3f134e6bad12acdf2592 ./web/views/monitor.detail.misc.html +43e6f16bbb4a979587529aefe874a83e ./web/views/montage.php +ea18641fe75bed8bfd77610d71b0efef ./web/views/watch.html +f9c5481d113f67d002883034dddf385a ./web/views/blank.php +90e3a0c17c6d5ac8b0b30e749c89a4ce ./web/views/image.php +163a1994462eb77b3080c12f1210df62 ./web/views/monitor.list.html +fa1e08a1ad72597dae3a53cf0a802cc2 ./web/views/tab-monitor-x10.html +c192c4a3f5d1d754ff497bef573f211b ./web/views/settings.php +886ea3e85e567b3447e1b54a3d012037 ./web/views/group.php +dfc67f4d269ea3cf852521ca517df604 ./web/views/monitor.detail.control.html +85843d6255c06e672ab9d2cfafdee16c ./web/views/Makefile.in +0005f14f8e6d64a7500c673db57ff683 ./web/views/plugin.php +01f5b5efd628e3fae542affcfda8c245 ./web/views/controlcap.php +947f67e7d557f07c72349887a9f6de77 ./web/views/tab-monitor-local.html +8d2315eded56f1f4986c55185eb47b51 ./web/views/control.php +71be3b8d1b7a4bde88ae29755c41ebaa ./web/views/monitor.detail.buffers.html +70d2f61fca97b452223068b7b616ba8c ./web/views/zones.php +987bbbd3240d2510421a026f3d7f9420 ./web/views/filtersave.php +759eb533f4b497a185686ba89aa32728 ./web/views/tab-monitor-remote.html +587db92490e72fc6863efeb438e26d84 ./web/views/tab-monitor-curl.html +88a14ce26f06e74bb1837c36457f94cd ./web/views/zone.php +6629bceea4a1bb6bb7e2091fa91e3153 ./web/views/console.html +5b22d14c21f96c1cb48e165aa9246085 ./web/views/monitorprobe.php +ecbb5724335df714a29b2b18a308a9c7 ./web/views/tab-monitor-ffmpeg-vlc.html +1f1682b6f8308d6fce80909c3f39069d ./web/views/devices.php +3c9f10db9aeaa3970228a501d42f32f3 ./web/views/monitor.detail.html +d0f88e70ed51cd720b850a4b982460f3 ./web/views/monitorpreset.php +8ce2fdbb3aa4397d4a11af871a719924 ./web/views/none.php +2b0bc6055f377109b2a0d9bda475931e ./web/views/host.html +b267bda2c730cad238548a8b9de914a2 ./web/views/export.php +9d59c889002f95097c3e17be1e2e551d ./web/views/function.php +474014d053d6f4a7d279340aba8ae0e9 ./web/views/stats.php +6a6f9b185db980953e0fe248de3165e7 ./web/views/video.php +dedd3647a0e774ce56f87bde4067c8f6 ./web/views/header.html +b27a82fa4bb243490085182a53107861 ./web/views/footer.php +995619cd3f75bf6b1c6fa36e01a52283 ./web/views/monitor.detail.source.html +227b7033ec137e4033ca856ba18955c0 ./web/views/bandwidth.php +aa2e969762e6c6aa74b0428fa84741c0 ./web/views/logout.php +db51f0c21c975f495a3fcee330f6c7fe ./web/views/timeline.php +4cd077d289b92cd13ad3a8d898254d42 ./web/.gitignore +40056b993e0781a7a0d88e6612d98f6d ./web/index.html +b14cc5d7abdf0ab50ae275f1672cbd7b ./web/ajax/status.php +44ba564f3694f7602087039b7f09b920 ./web/ajax/Makefile.am +cfe1544bd92a9ce449a68253ce9059b5 ./web/ajax/event.php +433c99927f1961f159562627f3c79800 ./web/ajax/alarm.php +9d22d07ce1dc6293f403bbb85f222983 ./web/ajax/Makefile.in +c65641a2edd9bac342684936c391d444 ./web/ajax/control.php +bcf111c3a38a3a94d5600f33d89416eb ./web/ajax/zone.php +a0f631c46373897a0f29b0519cea9180 ./web/ajax/log.php +bf81f42111e73d054802f0aa72027c8e ./web/ajax/stream.php +83e6f36baf560c80368e9286c08039e4 ./web/index.php +23d17767dd2ae7102b59a66aecc30fe6 ./web/js/skin.js.php +29d4011ab1647beeeabfb47b80338f5b ./web/js/Chart.min.js +08bc160f68803fd089b6f449a4541b81 ./web/js/dirPagination.tpl.html +fb96f29b406f3992ef14e02195a8642d ./web/js/Makefile.am +85e5d41eb9c451c16d4e784aec13d948 ./web/js/moment.min.js +6d1a5880671e67c0d6384a9d33143309 ./web/js/logger.js +e40ec2161fe7993196f23c8a07346306 ./web/js/jquery-2.1.1.min.js +10092eee563dec2dca82b77d2cf5a1ae ./web/js/jquery-1.4.2.min.js +281cd50dd9f58c5550620fc148a7bc39 ./web/js/bootstrap.min.js +1eb33d67d6069ec8723920e59e602d31 ./web/js/overlay.js +663e3e26cee7112795a4594625548b8c ./web/js/Makefile.in +2f4357273ede74623cd7f3dbc210da7f ./web/js/mootools.ext.js +ccb7f3909e30b1eb8f65a24393c6e12b ./web/js/npm.js +546dd00ad3f7f286d4d47e7ba1d3606f ./web/js/skin.js +1193a7ab041f6faeecec05368b433faf ./web/js/tc-angular-chartjs.min.js +aba3cb16b1d9006ac2e3aa297b80b070 ./web/js/datetimepicker.js +15c42fe2132ec1e21db611ff7f322c28 ./web/js/ui-bootstrap-tpls-0.12.0.min.js +5f05d08fd0c10320a3ba7fbc4601b420 ./web/js/app.js +83f32131b638a8686a43510fbd645b1b ./web/js/angular-ui-router.min.js +2250783fc1bf3f4646afd1f41ea6fdc4 ./web/js/dirPagination.js +b855b5b835ed6dacccdf6d1e63a892dd ./web/js/controllers.js +90ffbe9673e75574043744713d433408 ./web/tools/Makefile.am +7a5e35461ad1590c9456cb4e1e4f500b ./web/tools/mootools/Makefile.am +cc6d0a32fb1a4eb7327eca35e563a986 ./web/tools/mootools/mootools-core-1.4.5-compat.js +09c6e0da93b0f2832d37b089b4052006 ./web/tools/mootools/Makefile.in +cc6aa0bbc633f3f16b409a8246ef7fe6 ./web/tools/mootools/mootools-more-1.5.1.js +18df3add56b5a4a0ac65d0477b489955 ./web/tools/mootools/CMakeLists.txt +318a15e1f38fd32ad8d8b4a77ed2d572 ./web/tools/Makefile.in +fb02cef58318a74bbbbda3e63e7d97e1 ./web/.editorconfig +3b03f53ce0e574d257729618fb260692 ./web/CMakeLists.txt +f4aafb270c2f983f35b365aad5fe8870 ./depcomp +97f9be362a853bc8db63c12edc5bfd76 ./Makefile.in +895e5504621928102995cd7173795fcf ./cmake/cmake_uninstall.cmake.in +fd9602db874aa96abcb81fa752f052e5 ./cmake/Modules/GNUInstallDirs.cmake +7e3b14603191ee6db1b1cb4856183995 ./cmake/Modules/CheckPrototypeDefinition.cmake +1cbf66db90ebd39028d5a915d9963be3 ./cmake/Modules/FindPolkit.cmake +a4b8c794fca18dd0586a94f1019c3938 ./cmake/Modules/CheckSendfile.cmake +03de44e31bf404cb1a793f4a3669e4c5 ./cmake/Modules/CheckPrototypeDefinition_fixed.cmake +9c11ab6b4ebefa57ed7251371ae2d1e3 ./cmake/Modules/FindGLIB2.cmake +8ebcd5a892b09bcb888f976f8123874b ./cmake/Modules/CheckPrototypeDefinition.c.in +6b664380d86bf813637735378c718f5a ./cmake/Modules/FindPerlModules.cmake +6744acb8bd2f057d679e46d31545e933 ./zoneminder-config.cmake +186f16116659448d29b389ebe8c86726 ./README.md +c213a3abcef1bb69378cf40a9fdad0a7 ./configure.ac +ddff1d125d68ddcad8b122cfb66078a2 ./TODO +9569c533d6f801eee60e44986c602c98 ./.gitignore +afcdc0f70291d81543c17a3705129dc2 ./description-pak +94d55d512a9ba36caa9b7df079bae19f ./LICENSE +a34da615af2780e339e41fbf7f7cfdc8 ./ChangeLog +6dee62a0963ecdc4b7ccb353b7ae7424 ./db/zm_update-1.27.0.sql +bd8b4735fee0bbb064a140819347df6d ./db/zm_update-0.0.1.sql +632200d5a6238e256e7cf80de95156dd ./db/zm_update-1.19.2.sql +821f1c1d6c52f99dd47ac14d61fa5640 ./db/zm_update-1.22.2.sql +8b07b11c7cad1914c3ea833b8ed5817b ./db/zm_update-1.24.3.sql +3fca704937207aa222e77210aa0c25e0 ./db/zm_update-1.19.5.sql +97edc0c5579da47e346d42df1e545eb0 ./db/zm_update-1.20.0.sql +5135114cbe3852fbbb7e84eacb110b5a ./db/Makefile.am +92d0e29600b0f23c3cabdc02ce6259e2 ./db/zm_update-0.9.11.sql +91bd3c0279e5ea0eaf387404d0ae2439 ./db/zm_create.sql.in +08d098374092ba16eb3459a1aa2a8229 ./db/zm_update-1.24.4.sql +54f6c2d009ad16095cad89d9855c91c2 ./db/zm_update-1.27.99.0.sql +4c5855feeaaf945c29c43292e5c74197 ./db/zm_update-1.26.3.sql +c1594ffeff663ea370dbbaeb272e10db ./db/zm_update-1.22.1.sql +e2dbebece1d49bea27f756895a663f86 ./db/zm_update-0.9.16.sql +2b89f4c950e227e9313cf7418727f3de ./db/zm_update-1.26.0.sql +d6a52309d5b656f0ea799bdaf723f123 ./db/zm_update-1.28.99.sql +3cbc94a85b32ab891b98ce675b8ec8a5 ./db/test.monitor.sql +7c452e51249b26c7d6bc2651bd008680 ./db/zm_update-1.21.2.sql +92d5871c239ea24a2bdd738e0776a750 ./db/zm_update-1.28.0.sql +f96d352e85bbffb74ae0c6b354c76cac ./db/zm_update-1.24.2.sql +85c2f951462a9ca699af571910b2f5e7 ./db/zm_update-1.21.0.sql +6f75164dc4ab8e6189ccc8a2f3a006e4 ./db/zm_update-1.17.2.sql +8601c639ef779f73b37e00df75329bf0 ./db/zm_update-0.9.13.sql +4466a07866e466e4a69a6986b2f1d0cb ./db/zm_update-1.23.1.sql +6314f20b3f02056792caf93944965fd8 ./db/zm_update-1.23.0.sql +452cced335ec34b78b4d091b7901ffd5 ./db/zm_update-1.21.1.sql +313214000c45d7e66bc09560985913bc ./db/zm_update-1.29.0.sql +4ec7ea6a41ced9a48b5922f359a56b6b ./db/zm_update-1.19.4.sql +c75ceef3b6954b8a8047010bea8d6d4f ./db/zm_update-0.9.7.sql +5d46d42dd9f62cdaedd5190f05b0a618 ./db/zm_update-1.24.0.sql +8388ea9b05577c775206dcfd5df72856 ./db/zm_update-1.18.0.sql +0e11ac5f69cc837da7e6c3b48cc8c276 ./db/Makefile.in +bee064f205c14f5c20501e739ce80a1e ./db/zm_update-0.9.8.sql +990aade37fd26b6fa4ffdd3a13c48b24 ./db/zm_update-1.19.1.sql +34d526653752e2ec9722b21a007d79e8 ./db/zm_update-1.22.3.sql +e35625686e01f368b3f8f87359aaac7c ./db/zm_update-0.9.15.sql +9c82b2ea73453054f9a69c787ec3596b ./db/zm_update-1.22.0.sql +2f7281f19a02402c8a2b603143bc203d ./db/zm_update-0.9.12.sql +07f00f03f78eca783cfc115fcf1168aa ./db/zm_update-1.19.3.sql +83decad8946e51529e7f7bbc13c743cf ./db/zm_update-1.24.1.sql +795313d24e9c26b3557feb386df603c6 ./db/zm_update-1.26.1.sql +be7fe21854b261df5b6b28d92ce0dad4 ./db/zm_update-1.19.0.sql +2740f9a92352e7d91be18a67115be71d ./db/zm_update-1.20.1.sql +ee60615a820f97e43ebab88f173b9921 ./db/zm_update-1.26.5.sql +5880f07d8c485d28a002e45a254c47a5 ./db/zm_update-1.17.1.sql +b7468afae4c69e654a4c61feec101730 ./db/zm_update-1.18.1.sql +9b4716630546a41cdfcd08e56faf647b ./db/zm_update-1.28.1.sql +9c0fc358cdc873030b0367d005f6b765 ./db/zm_update-1.21.4.sql +fd4e7c581673c85f9734bfdf45337b99 ./db/zm_update-1.23.2.sql +54464055410fdae4f296c00c963bdd4c ./db/zm_update-1.23.3.sql +dd2109c3b45b0243d92e21031b7a55e0 ./db/zm_update-0.9.9.sql +6c09c69e9b66b83a0b8ef8f37f985ebc ./db/zm_update-1.21.3.sql +5983fcbe9f352433a8cdba6dadea4d5a ./db/zm_update-0.9.10.sql +e0651ab19ce94e12f2a05481d4847b52 ./db/zm_update-1.26.2.sql +9be46cd2ccadfeb576c9fce5fd2e9ca7 ./db/CMakeLists.txt +06c60404f44a05db99d3a0dc9bd251cc ./zmlinkcontent.sh.in +0c8b042f99995c11aeb81bccc23c4c05 ./compile +48623631d09efa1923eae6e302c2549a ./onvif/scripts/Makefile.am +e8434bdc169a925d475db1ca00e6ef89 ./onvif/scripts/Makefile.in +ec8c2a6c5a332e4c90b582df84b5c4b5 ./onvif/scripts/zmonvif-probe.pl +59538680ee1be0e5303ac91dec06c126 ./onvif/scripts/CMakeLists.txt +df443523e9109cf628048134eef2dbaa ./onvif/Makefile.am +53caa4e1ce32e10d2e8c311b1c6489d0 ./onvif/wsdl/wsdl.xsd +4f6db00a741593b2de979fcd48d2bdf8 ./onvif/wsdl/media.wsdl +2c2aa8b4930319f0e0db8f29e4c61ff1 ./onvif/wsdl/b-2.xsd +91e8db6455bc44f6d8bd273dd4d612c9 ./onvif/wsdl/wsdd-discovery-1.1-schema-os.xsd +193da3940e7d18e82f211137320199be ./onvif/wsdl/wsdl11soap12.xsd +a2368b556ef9a2a261e0a2fbc11d41dc ./onvif/wsdl/xmlmime.xsd +bbbd64652db5e56659fc09265ce2b674 ./onvif/wsdl/onvif-local.xsd +dffb0c405f3d91c5c1deeac626d1b0b8 ./onvif/wsdl/devicemgmt.wsdl +5a89a3cd58cfbf09b372b9c790dbb022 ./onvif/wsdl/wsdiscovery-udp.wsdl +894d9caf0376d371ade68d26a62b8f7f ./onvif/wsdl/bf-2.xsd +035feb254f9224ca3987d38d2e6768bb ./onvif/wsdl/xop-include.xsd +fab4aa3bc10fe3020538e90252e9b8f3 ./onvif/wsdl/soap-envelop.xsd +8df4dac1fddca23d309bdac0907d8dc6 ./onvif/wsdl/wsdd-discovery-1.1-wsdl-os.wsdl +465f9fbd2c51bf21bae6bf5ac3303367 ./onvif/wsdl/t-1.xsd +770230040d83f556fc80f3296652b10c ./onvif/wsdl/ptz.wsdl +362eb12f8bdc1808ac887402928bb410 ./onvif/wsdl/onvif.xsd +387e638d836010297f28605826f0f295 ./onvif/proxy/lib/ONVIF/Media/Elements/GetStreamUri.pm +b7e7dbf60d5323a5b6cc74aaf06e4f54 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveVideoAnalyticsConfiguration.pm +8313945c5b11a77f5e74d10a18427ca3 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoAnalyticsConfigurationResponse.pm +63779f27852b53f778abd26486efcf96 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioSourceConfigurations.pm +e0c212c6219189679d02c8c11bb9602f ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveMetadataConfigurationResponse.pm +8419ab2878b6557a64182778d834c80b ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceConfigurationOptionsResponse.pm +d53f9fed74c7f0000d49a078beb9bc6e ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoEncoderConfiguration.pm +77266fe9bc98cd78db2741af46078337 ./onvif/proxy/lib/ONVIF/Media/Elements/GetServiceCapabilitiesResponse.pm +f344a31007fad2f788b4ef1217d928b9 ./onvif/proxy/lib/ONVIF/Media/Elements/Polygon.pm +e962cbc89ca4dde5ec22775eb0683170 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveMetadataConfiguration.pm +5cfc990f5f39cb5b5d5cf28cfad6e61a ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioOutputConfigurationResponse.pm +f39a236ea6f340f553a5a368841b3927 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveVideoSourceConfiguration.pm +dff6fb95ff0d6b6f47de924f0ede9189 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioEncoderConfiguration.pm +e69217719613c72c769ee6fea62514fe ./onvif/proxy/lib/ONVIF/Media/Elements/GetGuaranteedNumberOfVideoEncoderInstancesResponse.pm +044717fa7c7b77b5d30e46f7f1aa64d5 ./onvif/proxy/lib/ONVIF/Media/Elements/MetadataConfiguration.pm +93845c26f6cdfab23415b54277611e4f ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoEncoderConfigurationOptions.pm +f9f8f0d4f77d73ce2cf0b1b649c2ce7b ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourceConfigurations.pm +4329467dcb83bcc7d08d8d882fdf82f3 ./onvif/proxy/lib/ONVIF/Media/Elements/RemovePTZConfiguration.pm +fa11179744e28794765eeec9712c64cf ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourceConfigurationResponse.pm +00ce1d25e94758e4bb5fe7c44b9f1f18 ./onvif/proxy/lib/ONVIF/Media/Elements/GetProfile.pm +85953c4f73fafe546257bc910e9957a5 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioEncoderConfigurations.pm +a69c7ceb183269d6714f1c05d278292b ./onvif/proxy/lib/ONVIF/Media/Elements/VideoSourceConfiguration.pm +1fa2fa7a837b743d9954d1197d163832 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputsResponse.pm +457461465210f9abfa0632a0c2dcf2d5 ./onvif/proxy/lib/ONVIF/Media/Elements/DeleteProfile.pm +0603f2d3f112e7669c02a7f36d740bf1 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveVideoEncoderConfigurationResponse.pm +cf7def0af9b8fd8a0f738a728efcf58a ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourcesResponse.pm +0013bf7a9e069d44d4f97c83e2d1d15c ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioEncoderConfiguration.pm +4019a2068a4cb414a6c327b08cf8a1ff ./onvif/proxy/lib/ONVIF/Media/Elements/SetOSDResponse.pm +b46fc5b5a0f3441861913353a2ef6eb4 ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoSourceMode.pm +243a5ac9f88e6f5647eadff506c1d6e7 ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioSourceConfigurationResponse.pm +afbdc87fa66a54eb3074ca6327ea4350 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioOutputConfigurationResponse.pm +91cb1f35896bd826af7f3d5cfe22123d ./onvif/proxy/lib/ONVIF/Media/Elements/StartMulticastStreamingResponse.pm +f91593e45d31c484bc6322c9ddf463dc ./onvif/proxy/lib/ONVIF/Media/Elements/SetOSD.pm +14451377f8168a2cb661e4b963320e59 ./onvif/proxy/lib/ONVIF/Media/Elements/GetMetadataConfigurationOptionsResponse.pm +e3d1bb87a3e71bf1f0c48cde20595047 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioOutputConfigurationsResponse.pm +d1ce504818a2d5201b9184e5b82a6211 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoEncoderConfigurationResponse.pm +2351ce46b414f12bcbbf19625cb43a88 ./onvif/proxy/lib/ONVIF/Media/Elements/GetMetadataConfigurationResponse.pm +f5f2a4880617079ce7ce6408af69e960 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioEncoderConfiguration.pm +5c9879a616251afa4e35ee54c8b5f82a ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleVideoSourceConfigurationsResponse.pm +4f4f6a4a2e70c769a9e6e2809d129f17 ./onvif/proxy/lib/ONVIF/Media/Elements/GetOSDs.pm +177ea25af6bd1b55e12292cb78e5f651 ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoAnalyticsConfiguration.pm +b6e03eb13cf00a8cbde1c77f9540236b ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputConfigurationOptions.pm +83f1f486d753bf23317963b413241672 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioEncoderConfigurationOptionsResponse.pm +5ae9c7af46bef8947aa38b4a11a05eb6 ./onvif/proxy/lib/ONVIF/Media/Elements/StartMulticastStreaming.pm +f793e539a230d7e8644a10f48a9070c3 ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoAnalyticsConfigurationResponse.pm +1eeb71c8bb90df2b045fa473a65d7af7 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioOutputConfigurationResponse.pm +e48fae47a8ae6abd12112f2c4374c756 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveVideoSourceConfigurationResponse.pm +9095019a727aa89a7ff64e84b6f39423 ./onvif/proxy/lib/ONVIF/Media/Elements/AddVideoSourceConfigurationResponse.pm +c9eb4e884054fc32f412c1ec4adcc8bf ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputConfiguration.pm +e90a21734b405d50a60544eb1462c800 ./onvif/proxy/lib/ONVIF/Media/Elements/AudioOutputConfiguration.pm +1949ed741095fb6ef46bb6a73b7fee52 ./onvif/proxy/lib/ONVIF/Media/Elements/SetSynchronizationPointResponse.pm +e50ed4874b0fe8986c935b991aa976c7 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleVideoEncoderConfigurationsResponse.pm +43433a8bcfc1cbd856287f243a4b5a34 ./onvif/proxy/lib/ONVIF/Media/Elements/AudioDecoderConfiguration.pm +0a7420755af026cc9dc23991a0b50e00 ./onvif/proxy/lib/ONVIF/Media/Elements/DeleteOSD.pm +faa68bc2d3b6437718b05c68f60e6a57 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceConfigurations.pm +df734961653e69d9c4c0a02603d9fb95 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioEncoderConfigurationOptions.pm +f4b3f92c5ea2c60c0f50dbba961297bb ./onvif/proxy/lib/ONVIF/Media/Elements/AddMetadataConfigurationResponse.pm +faa3e0a5e2355e92d9f53b8cee23d9b3 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioDecoderConfiguration.pm +7b4ab26a222d06d77329b39c3378fb04 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioEncoderConfigurations.pm +9f9b5ca6efd97e3e680638b3dcbd2c58 ./onvif/proxy/lib/ONVIF/Media/Elements/VideoEncoderConfiguration.pm +083d6a9fda4aeec044a785792da78055 ./onvif/proxy/lib/ONVIF/Media/Elements/Message.pm +e20cb8dca27edd8696376d798ecbf1d7 ./onvif/proxy/lib/ONVIF/Media/Elements/AddPTZConfiguration.pm +01f0317621ee0a5038593863f5e680d9 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoAnalyticsConfigurationsResponse.pm +6f4ebe846c9dd55fa5e275dbac0bad02 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioSourceConfigurationResponse.pm +00fe01922b2a918a5fcf41fc6fe8b28b ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceModes.pm +92f022bdc8eadc723edaa082a07aaf5e ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourceConfigurationOptionsResponse.pm +81f5a6a9281fbc239b248c0434cb5c42 ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioDecoderConfigurationResponse.pm +0817c5c45cce00e86af65c99a0d53058 ./onvif/proxy/lib/ONVIF/Media/Elements/SetMetadataConfigurationResponse.pm +efeb091669356641fde1fb00bffb7ae7 ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoSourceConfigurationResponse.pm +3bea014be1e47eb9fe06d420037531b3 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioDecoderConfiguration.pm +786e43a423574dc02530838e3ff5db65 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioEncoderConfigurationResponse.pm +41dba16dd1df15395fa4ddbf8d798860 ./onvif/proxy/lib/ONVIF/Media/Elements/GetProfiles.pm +871aa22e40ea4180e188830c4153f903 ./onvif/proxy/lib/ONVIF/Media/Elements/AudioEncoderConfiguration.pm +bb753804d1f1e273cb93e51c08cbecfb ./onvif/proxy/lib/ONVIF/Media/Elements/GetMetadataConfigurationOptions.pm +08f0c776ae06ec01af7bf6667bdaf218 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioDecoderConfigurationOptionsResponse.pm +6dc05385cff389d54cedfdc131d04b5b ./onvif/proxy/lib/ONVIF/Media/Elements/GetMetadataConfigurationsResponse.pm +8dd13bb70681861783cf380bd8944458 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputConfigurationOptionsResponse.pm +74fdc5e823618b6e6451d63919146552 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleMetadataConfigurations.pm +9bbc945aeaab52755f4f2334272a9bc8 ./onvif/proxy/lib/ONVIF/Media/Elements/RemovePTZConfigurationResponse.pm +00f2f2bef50715c584f2ed14504987e7 ./onvif/proxy/lib/ONVIF/Media/Elements/AddVideoAnalyticsConfigurationResponse.pm +75e6ec543ee88ebab6ec1d2ecf481c41 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioEncoderConfigurationResponse.pm +9d0b0a0b567aa26a27cb65c14a73213f ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourceConfigurationsResponse.pm +a8ad70e2d0879de1509b42f2701e14e1 ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoSourceModeResponse.pm +c8d6d649c78856ab35ee7ab9290ccd26 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputs.pm +7a2852477f1598447c5b847f8adfcbdc ./onvif/proxy/lib/ONVIF/Media/Elements/GetOSD.pm +ee3c4ddbec74003681c5ac6eec548088 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioEncoderConfigurationsResponse.pm +80a2d8619e0d2abf1d19e57104e0b25c ./onvif/proxy/lib/ONVIF/Media/Elements/AddPTZConfigurationResponse.pm +461d170075781b876e7ba38c1473db82 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioEncoderConfigurationsResponse.pm +465bcd3a096422c939378d95d9a509e3 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSources.pm +4c1b3abedaba7f27a33500d462b471e6 ./onvif/proxy/lib/ONVIF/Media/Elements/Fault.pm +0c71ff96e6f64697a360977521696f60 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourceConfigurationOptions.pm +66fd28fcdccebb213b9c66ecf4209a69 ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioOutputConfiguration.pm +5db4826d70061d026cffa04eb47fa8c4 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioOutputConfiguration.pm +eecfcfac19c1dc109ab9154166537259 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioDecoderConfiguration.pm +068c72a1884e47cb85a95f2d18fc69aa ./onvif/proxy/lib/ONVIF/Media/Elements/SetMetadataConfiguration.pm +72fe8a7a181ee0deb28d242835622f06 ./onvif/proxy/lib/ONVIF/Media/Elements/DeleteOSDResponse.pm +482d7879d46b9b5a2cea4b2969852c10 ./onvif/proxy/lib/ONVIF/Media/Elements/GetSnapshotUriResponse.pm +f9b50837bca51a9a77d1a9effff16ab4 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioDecoderConfigurationsResponse.pm +e3d6dea9e4211553c6efe2fc53697faf ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoSourceConfiguration.pm +035737b18cb6d332cacd2ab8ac6ebb8f ./onvif/proxy/lib/ONVIF/Media/Elements/GetOSDsResponse.pm +c84f58eb5ff8c6c20177f25b7f187bb7 ./onvif/proxy/lib/ONVIF/Media/Elements/SetSynchronizationPoint.pm +09f2c3e02c8c27796cdc77c03cfc4324 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveVideoEncoderConfiguration.pm +9ee89d084955bd5c42bca1b9e7a58818 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputConfigurationResponse.pm +26930516e29685f662a0fc856908b116 ./onvif/proxy/lib/ONVIF/Media/Elements/GetOSDOptionsResponse.pm +5b9ebbeb93eb2f8900bb322304fc1dfe ./onvif/proxy/lib/ONVIF/Media/Elements/GetServiceCapabilities.pm +21d7c78c5475f8fba7037e698a74efe0 ./onvif/proxy/lib/ONVIF/Media/Elements/GetMetadataConfigurations.pm +822aee43f2cbea4ca5013354dd06a4e0 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveVideoAnalyticsConfigurationResponse.pm +b31849fb21b511619c76631aaa6aeb99 ./onvif/proxy/lib/ONVIF/Media/Elements/AddVideoEncoderConfiguration.pm +e7061acbb618ecc978e33f01e649ecc8 ./onvif/proxy/lib/ONVIF/Media/Elements/CreateOSDResponse.pm +653a05f5096b4b0b33c55aed87d8d7ac ./onvif/proxy/lib/ONVIF/Media/Elements/AddVideoEncoderConfigurationResponse.pm +991867f3498c481b8cdaabb22f375e60 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceConfigurationsResponse.pm +9e7db7764f421455718c84df06fb03c1 ./onvif/proxy/lib/ONVIF/Media/Elements/AddVideoSourceConfiguration.pm +fab80c5bcdbe222615d376b4a885d630 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoAnalyticsConfiguration.pm +56fbf78695eff277e45e6396e932b179 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleVideoEncoderConfigurations.pm +9f2a8feb8b2766c3567ddef2537c55e6 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoEncoderConfiguration.pm +3d5ab3c87afbe3b90e737bf08365e5df ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioSourceConfigurationsResponse.pm +e660374b09e80883119ce7e0bc1eabd1 ./onvif/proxy/lib/ONVIF/Media/Elements/DeleteProfileResponse.pm +6f8c4854f92448b0887f3395d7e36bfd ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioEncoderConfiguration.pm +5f7f1243e1695c931df90c382d210dd4 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioDecoderConfigurationResponse.pm +5bc22297fb1a0142fbe46f0945ca29cf ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioDecoderConfigurationOptions.pm +ad24a0e7a35c72ce28903c6c4fd0b5ca ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioSourceConfiguration.pm +12f0be61d515de41ec1ba11ff14d32f4 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourcesResponse.pm +fa435db49e0ea761b16844814feadd94 ./onvif/proxy/lib/ONVIF/Media/Elements/MetadataStream.pm +5154c698133763f656b750bf9bb8813d ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioEncoderConfigurationResponse.pm +4fc0417e9e2f88da0f7fd13adc831ada ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioEncoderConfigurationResponse.pm +0965b641bdb2941cb7c2604377d96d0a ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourceConfiguration.pm +b74d18f4a98e25cd9eae1ff2de43a0fe ./onvif/proxy/lib/ONVIF/Media/Elements/CreateProfile.pm +fff7afe0a52b69fb9a8d6a7ae20589b6 ./onvif/proxy/lib/ONVIF/Media/Elements/GetOSDOptions.pm +1a1ea57188cd4bf522aeca4579edd02a ./onvif/proxy/lib/ONVIF/Media/Elements/Polyline.pm +8db2e6c1506dcb4d19f100ba13cfe35a ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioOutputConfigurations.pm +5abe47e1987e5939b5f817a8b7efe91a ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioDecoderConfigurations.pm +1f48d7b96faa9f637af4939c00202577 ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoEncoderConfigurationResponse.pm +5aba278b818251fab38983fa20fe46cb ./onvif/proxy/lib/ONVIF/Media/Elements/GetMetadataConfiguration.pm +591957807f549822383f80b83332296e ./onvif/proxy/lib/ONVIF/Media/Elements/AudioSourceConfiguration.pm +30f2a48f9a56ee110c7d25916f39d314 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleVideoAnalyticsConfigurations.pm +bb90b83072b4721e8bf7155938056628 ./onvif/proxy/lib/ONVIF/Media/Elements/Header.pm +a0e6c1208e8e3ae105db78d2662b8467 ./onvif/proxy/lib/ONVIF/Media/Elements/StopMulticastStreamingResponse.pm +7458eec96281b3f27092c1e23db287ee ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioDecoderConfigurationsResponse.pm +75ade1b0e5ea5966580ec19549c50bfd ./onvif/proxy/lib/ONVIF/Media/Elements/Include.pm +a69ca2c15d8b7347bc04cb9900eb09b1 ./onvif/proxy/lib/ONVIF/Media/Elements/Capabilities.pm +f0a795f19e7378c0e1bef8405c212873 ./onvif/proxy/lib/ONVIF/Media/Elements/PTZConfiguration.pm +47d7e0c54df985e97b63f5eb23f32d58 ./onvif/proxy/lib/ONVIF/Media/Elements/GetProfilesResponse.pm +c3d773cfdb8f1ca9d0d065c606c61374 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputConfigurationsResponse.pm +4b98abdcc2127016ab90f03cc7e43407 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioDecoderConfigurationResponse.pm +183a84379b2a6847127af6877197eafb ./onvif/proxy/lib/ONVIF/Media/Elements/GetGuaranteedNumberOfVideoEncoderInstances.pm +ab122283605ef7a305c276294dc60513 ./onvif/proxy/lib/ONVIF/Media/Elements/CreateProfileResponse.pm +2fa7a1d349b14dc0af4bf6a561b284f8 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioOutputConfiguration.pm +bc6f48aa4bbd11613356fdaf0a07180a ./onvif/proxy/lib/ONVIF/Media/Elements/GetOSDResponse.pm +be4be26a47d9e475cebaf257c0e737f2 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleVideoSourceConfigurations.pm +0de7fad634a5ed2e4e23a317c18bf5e1 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoEncoderConfigurations.pm +0315a8cc7b92fa0e13d09e7316002eb9 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceConfigurationOptions.pm +93ef9632da5930f00ea47d553dd7a897 ./onvif/proxy/lib/ONVIF/Media/Elements/GetProfileResponse.pm +771d0d02904ef8f0c1e022d84b8ffb23 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoEncoderConfigurationOptionsResponse.pm +f95abcf3883e924c7f33f3d75794d3bd ./onvif/proxy/lib/ONVIF/Media/Elements/GetSnapshotUri.pm +e329f4aec2e4d95dc4c9d51bf4f3ea64 ./onvif/proxy/lib/ONVIF/Media/Elements/AddVideoAnalyticsConfiguration.pm +2c02a07d5424f0d304caeb62ae14622e ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioDecoderConfiguration.pm +edd21d90af7509a2afe67dc5572e1f3c ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioSourceConfiguration.pm +663c0c62eab278b4da35e2189abba4ea ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputConfigurations.pm +cbdf58bd3f3cc1b9f1ea9cb138f30856 ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioSourceConfiguration.pm +90f7fafb69bb40215eeff90e64ef2402 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioDecoderConfigurations.pm +e533af910241ecb28ffb68afe55300d7 ./onvif/proxy/lib/ONVIF/Media/Elements/VideoAnalyticsConfiguration.pm +5c3399f60f3881b01fd3f954c4eb37b1 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSources.pm +2d2c2e02f8664db5d01b988c0d0940d1 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleMetadataConfigurationsResponse.pm +bf67478977754bf3e42ccdc6f2cb8439 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceModesResponse.pm +e756b3ee2aa6b3b82dd97d18d6ade9bd ./onvif/proxy/lib/ONVIF/Media/Elements/CreateOSD.pm +e20c30697d9b6c779bf8317dd24407c9 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleVideoAnalyticsConfigurationsResponse.pm +7f4ee475a53d47845beeb0b5214194d9 ./onvif/proxy/lib/ONVIF/Media/Elements/Body.pm +c0f1d23b778cdacc886089b03ce295e1 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceConfigurationResponse.pm +129df682ffa7e8f0397f3ae565f08545 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioDecoderConfigurationResponse.pm +88d5022aec9b5497bc0d7b7fc1974252 ./onvif/proxy/lib/ONVIF/Media/Elements/AddMetadataConfiguration.pm +85d01161d0ec080deab97b2c13ef03cb ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceConfiguration.pm +141c25c527a132c7bd57bbd297060d83 ./onvif/proxy/lib/ONVIF/Media/Elements/GetStreamUriResponse.pm +a100d8e483613a3df25646e2047c1dc8 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoAnalyticsConfigurations.pm +0cb28b08876b1f284c910477b654eff3 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioSourceConfigurationResponse.pm +2a8cd0b817450c7d9e8c83bb6bf5c77b ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoEncoderConfigurationsResponse.pm +e4e71f9294dd31c3cecb5d44a9a31993 ./onvif/proxy/lib/ONVIF/Media/Elements/StopMulticastStreaming.pm +7d894c75478079649f177cac20eff48d ./onvif/proxy/lib/ONVIF/Media/Elements/Envelope.pm +f70f5830ae37632191d8bcc5012fe022 ./onvif/proxy/lib/ONVIF/Media/Attributes/contentType.pm +f132cd09d07be143adcb32c3d3e9684b ./onvif/proxy/lib/ONVIF/Media/Attributes/actor.pm +48e3026cbdae44a9c954b9f2ae9aa06d ./onvif/proxy/lib/ONVIF/Media/Attributes/encodingStyle.pm +8ae309028b605f803963cf73d3b0d203 ./onvif/proxy/lib/ONVIF/Media/Attributes/expectedContentTypes.pm +2e13bc9d9625949f8fb53e61c868085a ./onvif/proxy/lib/ONVIF/Media/Attributes/mustUnderstand.pm +bf4b4cf8b1724d516a6533c9c0375a1a ./onvif/proxy/lib/ONVIF/Media/Interfaces/Media/MediaPort.pm +53b0935765797c21916ff8f130d81a1b ./onvif/proxy/lib/ONVIF/Media/Typemaps/Media.pm +568365df5fd89b36c829af447d667ecc ./onvif/proxy/lib/ONVIF/Media/Types/VideoRateControl.pm +171cc6115cadef0f716eff939e376e19 ./onvif/proxy/lib/ONVIF/Media/Types/PTZStatusFilterOptionsExtension.pm +845096ad91c8c88d7c5f30c022ad5ca6 ./onvif/proxy/lib/ONVIF/Media/Types/MessageDescription.pm +3ddded3c9ee5e7050d37ce5110382194 ./onvif/proxy/lib/ONVIF/Media/Types/DisplayCapabilities.pm +fb4984118d96bf91b76b84791595ff52 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingSourceInformation.pm +ed82562f0a55f3c3ac846632cac7a6eb ./onvif/proxy/lib/ONVIF/Media/Types/detail.pm +c3725442bdd23572df169def0addff28 ./onvif/proxy/lib/ONVIF/Media/Types/NTPInformation.pm +f05ad4119b2de64726051b1ff355da0c ./onvif/proxy/lib/ONVIF/Media/Types/ScopeDefinition.pm +8ce926156f9338e72c90003f86343220 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkHostExtension.pm +15507ed9896648ad15067ec1b94475f4 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkCapabilities.pm +e47a96505f159c7c23d23ac3a4be82ae ./onvif/proxy/lib/ONVIF/Media/Types/ImagingSettings.pm +5c65f007a18c7a1ff6c1632415d3fd87 ./onvif/proxy/lib/ONVIF/Media/Types/AudioClassDescriptorExtension.pm +78df65b0aa565cd4a5342720e7bbc9ee ./onvif/proxy/lib/ONVIF/Media/Types/ExposureOptions20.pm +26e551516d3dfcaf98a3e3313167a95d ./onvif/proxy/lib/ONVIF/Media/Types/SetDateTimeType.pm +d7f8469eb74ba20d1ffd4de26d91e59a ./onvif/proxy/lib/ONVIF/Media/Types/EFlip.pm +37f03e77a0ca0427f44b3547eef1cd7c ./onvif/proxy/lib/ONVIF/Media/Types/RelativeFocusOptions.pm +bc16b54099845289548ac87287e29d7b ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalanceMode.pm +04bffaba7722ea519bf9ae453d6bf54e ./onvif/proxy/lib/ONVIF/Media/Types/SupportedRulesExtension.pm +f812f79e817e532070e4ffc133a47579 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingOptions20Extension.pm +f5c7e09e55836a7848c8e7ee94fc495b ./onvif/proxy/lib/ONVIF/Media/Types/FrameExtension2.pm +483b864b2fb8515f8840bfe765bb3c66 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11Capabilities.pm +7d8f5aa161670b79435ccb0e5a0b7f96 ./onvif/proxy/lib/ONVIF/Media/Types/VideoDecoderConfigurationOptions.pm +1c1c9bda1067700b44f2368e8ffd8de5 ./onvif/proxy/lib/ONVIF/Media/Types/GetTracksResponseItem.pm +ea7d02d32b027be7cc286cef55d74e1b ./onvif/proxy/lib/ONVIF/Media/Types/WideDynamicRangeOptions20.pm +adbf3bad936cd7fc0cc2fbed6190c99c ./onvif/proxy/lib/ONVIF/Media/Types/ImagingCapabilities.pm +10521f624556f99b3d92c2e46d98cab3 ./onvif/proxy/lib/ONVIF/Media/Types/Name.pm +c2bd079ef0fe2aa53a523e50c6935c8a ./onvif/proxy/lib/ONVIF/Media/Types/NetworkHost.pm +f9e0da33e8eaf9658819411652f945d7 ./onvif/proxy/lib/ONVIF/Media/Types/ObjectTree.pm +d59fb75e787a2b38d3c6cd614c4d5115 ./onvif/proxy/lib/ONVIF/Media/Types/RelayIdleState.pm +f63166acb3051201eca5b25aed76940b ./onvif/proxy/lib/ONVIF/Media/Types/MetadataStreamExtension2.pm +40812609ba0b2f2a0d1deacf8c9ae3cd ./onvif/proxy/lib/ONVIF/Media/Types/Polygon.pm +a94e6f5ce78a5594ea5ce78e7876c92b ./onvif/proxy/lib/ONVIF/Media/Types/OSDImgOptions.pm +14a28f5796e232a455bbf19608d4e9ee ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSpotExtension.pm +50da3de0e9a8ad7a8126b093e772b7b6 ./onvif/proxy/lib/ONVIF/Media/Types/ZoomLimits.pm +e8d76062d93feff513069cdaed27a065 ./onvif/proxy/lib/ONVIF/Media/Types/Mpeg4Options2.pm +6a70041c9e18327807d789936ff814e0 ./onvif/proxy/lib/ONVIF/Media/Types/PTZSpaces.pm +8fad4c20b935104a91d19523df3de511 ./onvif/proxy/lib/ONVIF/Media/Types/PTControlDirectionOptionsExtension.pm +5bfd3241860138a92c4e7c826ba1493b ./onvif/proxy/lib/ONVIF/Media/Types/FloatList.pm +5d15da0783eeb8e3c3bbb2600a4eecb1 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceExtension.pm +be16285c3391330206285b2eb2679bd4 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11SecurityMode.pm +ff2f0e2075f6273c254c8a71ffb03464 ./onvif/proxy/lib/ONVIF/Media/Types/TopicNamespaceType.pm +99f8e39df380bf7850447d63df9b4440 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11PSKPassphrase.pm +9a72dec45d955ad7fdfee27a48dfae2d ./onvif/proxy/lib/ONVIF/Media/Types/Dot11SecurityConfigurationExtension.pm +177d6fb5ff9a74cd9dc39de91a6a7214 ./onvif/proxy/lib/ONVIF/Media/Types/AbsoluteFocusOptions.pm +5b0be5cf895ec420a68be9b0f7a0bf79 ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalance20.pm +f9ca59cbd20a2a4c8b5158752234eb3b ./onvif/proxy/lib/ONVIF/Media/Types/ImageStabilizationOptions.pm +3d97e176fa38f9aadcb9f5d9989a858f ./onvif/proxy/lib/ONVIF/Media/Types/AudioSourceOptionsExtension.pm +34c26bc6b5ca8496ae865335128fbd0f ./onvif/proxy/lib/ONVIF/Media/Types/MetadataConfiguration.pm +378f56976cbcc7a03472b1e397096771 ./onvif/proxy/lib/ONVIF/Media/Types/BacklightCompensation20.pm +bd159334385a6770e94f6aa1f97b350a ./onvif/proxy/lib/ONVIF/Media/Types/IPv4NetworkInterfaceSetConfiguration.pm +b7c481a0d197c7e580580ac97c193450 ./onvif/proxy/lib/ONVIF/Media/Types/RelayLogicalState.pm +ab14d52fc5c9dc8ec1ff0f4ecbd15513 ./onvif/proxy/lib/ONVIF/Media/Types/PresetTour.pm +b0ffb7b7ac665bc876c7f3245d6fd19b ./onvif/proxy/lib/ONVIF/Media/Types/QueryExpressionType.pm +5424e117cfad6141f5cbf55e28c58ad7 ./onvif/proxy/lib/ONVIF/Media/Types/OSDConfigurationOptionsExtension.pm +1552335da7e8f58179daf68529325993 ./onvif/proxy/lib/ONVIF/Media/Types/PanTiltLimits.pm +e47cf969318a869546b5a833937a6946 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingReference.pm +aca92480ef8b830af3360ac99fa6bdfd ./onvif/proxy/lib/ONVIF/Media/Types/MoveStatus.pm +e0c7453d6d0f120114a98ce22c72123b ./onvif/proxy/lib/ONVIF/Media/Types/GetTracksResponseList.pm +32188cdf274c02a437424bd196837014 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceExtension.pm +b9879149c2ee764fcbd6d1d554a8e594 ./onvif/proxy/lib/ONVIF/Media/Types/EventStreamExtension.pm +a4ecbb88506f81b6b4673ba31a3e1eb3 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobSource.pm +345194d78357a42e530a819232253baf ./onvif/proxy/lib/ONVIF/Media/Types/SystemLogUri.pm +e7d23c8c0044706574c88ec12aae7355 ./onvif/proxy/lib/ONVIF/Media/Types/CodingCapabilities.pm +aad9d2cd6c005bb818067872e96ca655 ./onvif/proxy/lib/ONVIF/Media/Types/Transport.pm +35ed6b2080d015947aa23a39f6a67e7a ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobReference.pm +0b1880669c9ea8dfcbf0a3b5acfac8de ./onvif/proxy/lib/ONVIF/Media/Types/AACDecOptions.pm +951414ff22bef1c2392df356955ff8eb ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceConfiguration.pm +b06a858b02fb4bf64f57ebdf14de209b ./onvif/proxy/lib/ONVIF/Media/Types/IPAddressFilterType.pm +945020e3c37b08f44f5fefc344122596 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStartingConditionExtension.pm +f1a2e651e304d6db24ddee65d34c9e91 ./onvif/proxy/lib/ONVIF/Media/Types/ImageStabilization.pm +8d4279f52ed81d384c93eef5ace30fc3 ./onvif/proxy/lib/ONVIF/Media/Types/DeviceCapabilities.pm +01e785a581d88d82f958727c42e3703a ./onvif/proxy/lib/ONVIF/Media/Types/NetworkProtocol.pm +e650e829ec647f4738dc48730fa252ac ./onvif/proxy/lib/ONVIF/Media/Types/Layout.pm +eafbbae32cf7a6f697f16d65b97b1c37 ./onvif/proxy/lib/ONVIF/Media/Types/Split.pm +7a9dcc7d306404b76035b7b9259c7fd4 ./onvif/proxy/lib/ONVIF/Media/Types/CapabilitiesExtension2.pm +aad7b74960bd647b6e1e14324d219c51 ./onvif/proxy/lib/ONVIF/Media/Types/MediaAttributes.pm +2a126cb37f6ecf4202aa8082ef4443d0 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceConfigurationExtension2.pm +466da4a5cda3398a77ad13001175f147 ./onvif/proxy/lib/ONVIF/Media/Types/TrackConfiguration.pm +ab8901b5eca431eea0430f707aa70aaa ./onvif/proxy/lib/ONVIF/Media/Types/ImagingSettingsExtension.pm +a7be05482b023006743622e5cb3c5d86 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11SecurityConfiguration.pm +4f3f5ed6e48d4775eced582aac7e3158 ./onvif/proxy/lib/ONVIF/Media/Types/SearchState.pm +6b2236887f108544e60eee8e7ed68fca ./onvif/proxy/lib/ONVIF/Media/Types/Frame.pm +87d40ff77fd82cea4951b61ddc64c413 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngineInputInfoExtension.pm +e5e60e268ccaafb74c84e7970c48a37a ./onvif/proxy/lib/ONVIF/Media/Types/DateTimeRange.pm +1b99bf495b9f5b04d382e786055cc3ec ./onvif/proxy/lib/ONVIF/Media/Types/CapabilityCategory.pm +6dd946506ba7df9448c0739bbc75e47c ./onvif/proxy/lib/ONVIF/Media/Types/SupportedAnalyticsModulesExtension.pm +244d86a764b7c513cf1669d55b7110cd ./onvif/proxy/lib/ONVIF/Media/Types/Dot11SSIDType.pm +c054436fdfacafb7bfb043005e340e0e ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalance.pm +27ee28b4286aebd49c34ef70726d3352 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceConnectionSetting.pm +29b5f4da2a303fc8da455170485f88bb ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourPresetDetailOptions.pm +f3fc90d83297a128ce812f574d468607 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngineConfigurationExtension.pm +1f7fd40ca8ab73652f81807f03bcdd82 ./onvif/proxy/lib/ONVIF/Media/Types/EFlipOptionsExtension.pm +91ecd0ed7dbe8cd0a2a9070ec889a25c ./onvif/proxy/lib/ONVIF/Media/Types/AudioOutputConfigurationOptions.pm +f1ac87446754a00ab60c005aba6def3c ./onvif/proxy/lib/ONVIF/Media/Types/SupportedRules.pm +cc048af6315d535d02d1de1d2fbf7014 ./onvif/proxy/lib/ONVIF/Media/Types/GenericEapPwdConfigurationExtension.pm +404cd79848f4b4e44e904882d33e5eb8 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11PSK.pm +2ad0b7940f18f33319e780a6590380ea ./onvif/proxy/lib/ONVIF/Media/Types/MetadataInput.pm +8e1e701cbb0ca5c20ac1c1dbbd99988d ./onvif/proxy/lib/ONVIF/Media/Types/OnvifVersion.pm +fbb1748aed53e2dcb27642bf78e9acfe ./onvif/proxy/lib/ONVIF/Media/Types/VideoOutputConfiguration.pm +710f928dc51e9e75580d1329b09f09c2 ./onvif/proxy/lib/ONVIF/Media/Types/RelativeFocusOptions20.pm +f7364aa9e8a0241dd82b41e7823fef05 ./onvif/proxy/lib/ONVIF/Media/Types/MaximumNumberOfOSDs.pm +2cf16a7d1bba0a208435a13815c25140 ./onvif/proxy/lib/ONVIF/Media/Types/VideoEncoderOptionsExtension.pm +e3b3e1dd86a742c86594d8d784f22274 ./onvif/proxy/lib/ONVIF/Media/Types/Time.pm +548df315622d344e755b7cd6dd53a592 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceConfigurationOptionsExtension2.pm +2376cd4e0ecc0cb1354ff0a1f8f4c21c ./onvif/proxy/lib/ONVIF/Media/Types/IntAttrList.pm +b96917efeefa76f819da1bd8efbe6142 ./onvif/proxy/lib/ONVIF/Media/Types/EventSubscription.pm +7d3f30694b5c9e6caa5015ee0181c30c ./onvif/proxy/lib/ONVIF/Media/Types/Dot11PSKSetExtension.pm +c967d9b51d7c83f05c647129ad0fa3c3 ./onvif/proxy/lib/ONVIF/Media/Types/EventCapabilities.pm +29c6383bec395c1c94e148e3d6082a62 ./onvif/proxy/lib/ONVIF/Media/Types/TrackReference.pm +b2cffa8662c3753efc48683f348859a9 ./onvif/proxy/lib/ONVIF/Media/Types/ShapeDescriptorExtension.pm +58cf54db85917fe92875939892db2553 ./onvif/proxy/lib/ONVIF/Media/Types/FindMetadataResultList.pm +e6d79ce6cbf0874c92d5f01b6878508f ./onvif/proxy/lib/ONVIF/Media/Types/IPv6DHCPConfiguration.pm +6b1b33bbd29fc5bbe9f3b4c75a3c9d76 ./onvif/proxy/lib/ONVIF/Media/Types/Rename.pm +8a7a9f6ca1609cd4bfd18c1ddfa42fa1 ./onvif/proxy/lib/ONVIF/Media/Types/MetadataFilter.pm +97e8ec896271f6e4d014943a4168f384 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourTypeExtension.pm +0b1cabd97bb4ed0c0f30026065d82fea ./onvif/proxy/lib/ONVIF/Media/Types/AudioEncoderConfigurationOptions.pm +31304eaec203616dac7d6f00a6f7bb84 ./onvif/proxy/lib/ONVIF/Media/Types/WideDynamicMode.pm +cd52f32a0f8deb72e869db2f83ec82c9 ./onvif/proxy/lib/ONVIF/Media/Types/Transformation.pm +3126c19f13c86639d47cb5726fc53dd6 ./onvif/proxy/lib/ONVIF/Media/Types/IrCutFilterMode.pm +2fb50cbe734b6449a353ff6c1c0a8e2e ./onvif/proxy/lib/ONVIF/Media/Types/Dot11SignalStrength.pm +669ce4064ae988f94716ad19feac32bb ./onvif/proxy/lib/ONVIF/Media/Types/ExtensibleDocumented.pm +435b6504087e8e5a8db55562e35ac5d4 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourPresetDetailOptionsExtension.pm +b7245ecddd7673194324fbeafb79a337 ./onvif/proxy/lib/ONVIF/Media/Types/RotateOptionsExtension.pm +5f8555ca55deee18f06f6fe4ece55afc ./onvif/proxy/lib/ONVIF/Media/Types/ImagingStatus20Extension.pm +1758af42d51f9ae778df6f4506d24e76 ./onvif/proxy/lib/ONVIF/Media/Types/FocusConfiguration.pm +5e166cd0c882b7c203328fc4c2159682 ./onvif/proxy/lib/ONVIF/Media/Types/VideoEncoding.pm +0df156ff87ba8422d89d4f3c8e53cf0a ./onvif/proxy/lib/ONVIF/Media/Types/Mpeg4DecOptions.pm +79410b51be192ab8069964dbf940e447 ./onvif/proxy/lib/ONVIF/Media/Types/ReceiverReference.pm +9ecd6a05ef781c480855611ec64c1b07 ./onvif/proxy/lib/ONVIF/Media/Types/IPv6Address.pm +2d53b432cc5395007726466d2e10c647 ./onvif/proxy/lib/ONVIF/Media/Types/OSDPosConfigurationExtension.pm +6cb1b3360b82969c4b5cefd91c4050b3 ./onvif/proxy/lib/ONVIF/Media/Types/DeviceIOCapabilities.pm +8c6e22d2000533421fc921cd69c4940f ./onvif/proxy/lib/ONVIF/Media/Types/ReceiverStateInformation.pm +c669a8fd587c6e473a13da4efc2b3466 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceConfigurationExtension.pm +888ee9911cfb79a5be01587e74156728 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceSetConfigurationExtension2.pm +f6849bb91e79a2fd60b7d79a77b2a817 ./onvif/proxy/lib/ONVIF/Media/Types/TransportProtocol.pm +9adb62f436de0b4d38b936b3adeb2dc3 ./onvif/proxy/lib/ONVIF/Media/Types/Direction.pm +b0ecbc0308bc8f695cf63b7c6b75124b ./onvif/proxy/lib/ONVIF/Media/Types/IrCutFilterAutoAdjustmentOptions.pm +81b73020ee8901964c32fa7b0109e84b ./onvif/proxy/lib/ONVIF/Media/Types/IrCutFilterAutoAdjustmentExtension.pm +5349d51ce2fa3aa716073566f3bada17 ./onvif/proxy/lib/ONVIF/Media/Types/ConfigDescription.pm +343d2877f1a1f407fe883c6c1e259c79 ./onvif/proxy/lib/ONVIF/Media/Types/AttributedUnsignedLongType.pm +30c4326d6f1dc6a23b0aab92e3c1e826 ./onvif/proxy/lib/ONVIF/Media/Types/PTZStream.pm +698937c39876c92b007b5cc253e2c0fb ./onvif/proxy/lib/ONVIF/Media/Types/BehaviourExtension.pm +28f192cafd6aeec7fabb5c1114c92829 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11AvailableNetworksExtension.pm +3c2fd0ccf039b407b62eacb091fd64b9 ./onvif/proxy/lib/ONVIF/Media/Types/Enabled.pm +69f0417dcce33ecacddcb022fa235420 ./onvif/proxy/lib/ONVIF/Media/Types/DurationRange.pm +4bcfbd001fa752baa2e566cc3af2d34d ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterface.pm +f3185eb55c977b4465f988039a822246 ./onvif/proxy/lib/ONVIF/Media/Types/XPathExpression.pm +9ecf76bc097ad0beb7e5c6ca98f89ae6 ./onvif/proxy/lib/ONVIF/Media/Types/IPType.pm +30f9385cc37d5d001e1d5aa9fe880dc0 ./onvif/proxy/lib/ONVIF/Media/Types/ConfigurationEntity.pm +1066f22ad088f408adffebdb457116c4 ./onvif/proxy/lib/ONVIF/Media/Types/SystemLogType.pm +bfce72d146ad11a782b6c97d1f8925b9 ./onvif/proxy/lib/ONVIF/Media/Types/ReverseOptionsExtension.pm +293eb2cb419c725d2ebcc2cc233f6df5 ./onvif/proxy/lib/ONVIF/Media/Types/ReverseMode.pm +2872374748bfa043d32b8c00c4c1cba8 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceSetConfigurationExtension.pm +003294a81f3bab1a1e92352973d19e3e ./onvif/proxy/lib/ONVIF/Media/Types/TrackType.pm +d519244cf72e97ef818d28577eab6fdb ./onvif/proxy/lib/ONVIF/Media/Types/PTZSpeed.pm +ff63e5f9c1a6065b2b2c25b8e738208e ./onvif/proxy/lib/ONVIF/Media/Types/ReferenceParametersType.pm +f5f95afeacf9b887c8b463cb349014df ./onvif/proxy/lib/ONVIF/Media/Types/SearchCapabilities.pm +3385bdebdd5d2e7609b20d0b41366297 ./onvif/proxy/lib/ONVIF/Media/Types/StreamSetup.pm +5e8f31b41ec5575c262d8ce957f7b778 ./onvif/proxy/lib/ONVIF/Media/Types/DateTime.pm +a1d59d716d5b633b31238af4369d24ee ./onvif/proxy/lib/ONVIF/Media/Types/AuxiliaryData.pm +28d8e0c981861ac60ec80cecf38c05f2 ./onvif/proxy/lib/ONVIF/Media/Types/OSDImgConfiguration.pm +a220837ac19c7650ab2417e13ecd94f2 ./onvif/proxy/lib/ONVIF/Media/Types/encodingStyle.pm +5225ba4eef81976f17e0489f2bfc4c12 ./onvif/proxy/lib/ONVIF/Media/Types/RotateOptions.pm +1431e5fe89ccceed05ae25d6a267367f ./onvif/proxy/lib/ONVIF/Media/Types/Date.pm +5f612d9903372991423ed5f5577d3385 ./onvif/proxy/lib/ONVIF/Media/Types/StreamingCapabilities.pm +d8d4469c6ee0c2056f608b391fc83994 ./onvif/proxy/lib/ONVIF/Media/Types/MessageDescriptionExtension.pm +39ba59802bc9da525fe6a02eac24174b ./onvif/proxy/lib/ONVIF/Media/Types/CertificateInformation.pm +7fc3cefa7b20484221c4531d581b7280 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSpotOptions.pm +2b4668b35a57edb6fdb5fa3eb4600096 ./onvif/proxy/lib/ONVIF/Media/Types/ActionEngineEventPayload.pm +37406bed9565f95cc879a77162c57f3f ./onvif/proxy/lib/ONVIF/Media/Types/MoveOptions.pm +4724db6e7aea945d176bdf338942805a ./onvif/proxy/lib/ONVIF/Media/Types/SystemDateTime.pm +4d5f35afec35754937b5333ab90d26d5 ./onvif/proxy/lib/ONVIF/Media/Types/RelationshipType.pm +ab2c4eb706aab15407e8148c934245e5 ./onvif/proxy/lib/ONVIF/Media/Types/H264Options.pm +046eb65f4da50c8d7dc75cc2e178b75a ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalanceOptions.pm +7cbc2dc4f3df68ab48136131333e971a ./onvif/proxy/lib/ONVIF/Media/Types/FocusOptions20Extension.pm +6f9ddc65111ee67fdd367955247076f8 ./onvif/proxy/lib/ONVIF/Media/Types/ClassDescriptorExtension.pm +c04442e1fbe561c7797e9f6fd9a45398 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobConfigurationExtension.pm +7e953b1586d6d866099e40447efc0e84 ./onvif/proxy/lib/ONVIF/Media/Types/MotionExpression.pm +51a841a7be381bbb1feaf3f3931a423f ./onvif/proxy/lib/ONVIF/Media/Types/H264Profile.pm +6f3934d30b69dd35d5de319dd0b5c5c0 ./onvif/proxy/lib/ONVIF/Media/Types/CertificateGenerationParametersExtension.pm +46cffc065d43fb4ebf406b94fdeaa75e ./onvif/proxy/lib/ONVIF/Media/Types/AudioClassType.pm +a8643434e50ac2a67995746dd6909678 ./onvif/proxy/lib/ONVIF/Media/Types/OSDConfigurationOptions.pm +8a7c965687bc8ffcd0ada0b303c12711 ./onvif/proxy/lib/ONVIF/Media/Types/OSDTextConfiguration.pm +3ccb5876bc217915ed9d23a60ab5dce4 ./onvif/proxy/lib/ONVIF/Media/Types/AbsoluteFocus.pm +d4bec6705b265bb51abf1b07e0bc4701 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingInformation.pm +e2c5f45d9a9629bb940329ac1ab8923d ./onvif/proxy/lib/ONVIF/Media/Types/AudioOutputConfiguration.pm +6004d377d4c8428034c30a52df382caa ./onvif/proxy/lib/ONVIF/Media/Types/AttributedURIType.pm +98b108214ed53a89fae3f51e546181c2 ./onvif/proxy/lib/ONVIF/Media/Types/PaneLayout.pm +2b33c08a9afa133818817aba51d4b1fc ./onvif/proxy/lib/ONVIF/Media/Types/AudioDecoderConfiguration.pm +9cb54f48691b029df7b9c851217680b1 ./onvif/proxy/lib/ONVIF/Media/Types/AudioDecoderConfigurationOptionsExtension.pm +937c46eaf4f66d8832b2b1a243d811e0 ./onvif/proxy/lib/ONVIF/Media/Types/AudioSourceConfigurationOptions.pm +c698985d5c02f48dd2ecd7e90eb7c274 ./onvif/proxy/lib/ONVIF/Media/Types/OSDTextConfigurationExtension.pm +a4cfcb1dd326532604a2df5af2359c6f ./onvif/proxy/lib/ONVIF/Media/Types/ProfileExtension2.pm +d7c5be9685776ddf5620982ff086b74f ./onvif/proxy/lib/ONVIF/Media/Types/AudioClassCandidate.pm +fcb3401a78ee519623a4d9461904b1fe ./onvif/proxy/lib/ONVIF/Media/Types/FocusStatus.pm +9a392574b956813ddb8ae8ab9421e5f1 ./onvif/proxy/lib/ONVIF/Media/Types/DNSInformationExtension.pm +4a9ccdb6fc4dfbf64cacc8b125178bba ./onvif/proxy/lib/ONVIF/Media/Types/SecurityCapabilities.pm +ca9b8346fe11202e9b78b8a5229f4965 ./onvif/proxy/lib/ONVIF/Media/Types/VideoEncoderConfiguration.pm +c7aaa1a79362125f10a9c194fa80b919 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11StationMode.pm +0592daf5f9dcf509ed82cf5cc7f917fb ./onvif/proxy/lib/ONVIF/Media/Types/DynamicDNSInformation.pm +86dca0febbe7b8d432beacbf518bd0aa ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobSourceExtension.pm +af39d9905bda616c0c8030ab7eb8b741 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobStateInformationExtension.pm +abc7362f83c130106464f9be0012bb6e ./onvif/proxy/lib/ONVIF/Media/Types/ReplayCapabilities.pm +89c6b43d4cbaf775660f0a0bfa201809 ./onvif/proxy/lib/ONVIF/Media/Types/OSDColorOptions.pm +79f7e0eec2163599421c17300348b8dc ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceSetConfiguration.pm +078813980ac9206067b36165ebd6a631 ./onvif/proxy/lib/ONVIF/Media/Types/IrCutFilterAutoAdjustment.pm +29d077d381c0e204eaa1f9cd073e8b7b ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngineConfiguration.pm +66d1c51ddbd4934d3311f0f8c803142d ./onvif/proxy/lib/ONVIF/Media/Types/Vector1D.pm +65b924a439302c7a5d8fde8f1b7bb919 ./onvif/proxy/lib/ONVIF/Media/Types/GetRecordingJobsResponseItem.pm +bac7f313522cdda42f7bcabf1771ef0f ./onvif/proxy/lib/ONVIF/Media/Types/FaultCodesType.pm +abcf2c569d947763947bd94fa3b701ee ./onvif/proxy/lib/ONVIF/Media/Types/OSDReference.pm +0f87cf4255f8c6d45f2e159b4e1b35fc ./onvif/proxy/lib/ONVIF/Media/Types/VideoOutput.pm +0276852dd13bfc740bd8d36d2e929696 ./onvif/proxy/lib/ONVIF/Media/Types/BacklightCompensationOptions20.pm +d76360deb0bd0ae0840d29042ed2ef46 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSpot.pm +f46daceee9cad1fb30e5419c307c53fe ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsDeviceEngineConfigurationExtension.pm +ffd90e846b7bf34a24573440f027907a ./onvif/proxy/lib/ONVIF/Media/Types/SearchScope.pm +c3a0e883ec74f5b14fc3e0799908760d ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalanceOptions20Extension.pm +e53c71ff36fbafc5e6061717b9dee872 ./onvif/proxy/lib/ONVIF/Media/Types/Duplex.pm +34404d20e7c64f33e78ebb3badc18fdb ./onvif/proxy/lib/ONVIF/Media/Types/HwAddress.pm +a975ac908eb555fbeaacb7bd6488286e ./onvif/proxy/lib/ONVIF/Media/Types/FindRecordingResultList.pm +66fa6758f189ed800e56a112091f8e44 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingConfiguration.pm +787fdee63a730c613b6b52546ce6e984 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobStateTracks.pm +a16a7cc7ef78a3e5048d859365ccd5b9 ./onvif/proxy/lib/ONVIF/Media/Types/AudioEncoderConfiguration.pm +9a050d0ce396fe717ca9618e804d1210 ./onvif/proxy/lib/ONVIF/Media/Types/IPv4Address.pm +3daafdb54c6acf53f7be30f19990f432 ./onvif/proxy/lib/ONVIF/Media/Types/AutoFocusMode.pm +e2e1932752f7079267a8c02cb7bd4be4 ./onvif/proxy/lib/ONVIF/Media/Types/H264Configuration.pm +e642a6d00396ed7525750391335cbb47 ./onvif/proxy/lib/ONVIF/Media/Types/IrCutFilterAutoBoundaryType.pm +8843c3d99959c5112e959cc92cc12208 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceInfo.pm +14ec634101719adb034b44d18d0b23b6 ./onvif/proxy/lib/ONVIF/Media/Types/PTZCapabilities.pm +be96b997f90ab7c4763a73229172bcbb ./onvif/proxy/lib/ONVIF/Media/Types/Space1DDescription.pm +0000f0a8401e05f1228471ed0c879c1c ./onvif/proxy/lib/ONVIF/Media/Types/JpegOptions2.pm +c107505adb75155b0f4a6e569ee511e1 ./onvif/proxy/lib/ONVIF/Media/Types/UserLevel.pm +a88855a953aa66d77f5b5b17a6c563ff ./onvif/proxy/lib/ONVIF/Media/Types/PTControlDirectionOptions.pm +b3d6ef46df495b91da68be26b517894f ./onvif/proxy/lib/ONVIF/Media/Types/AttributedQNameType.pm +806a062b6824285ade38add5a5f4f671 ./onvif/proxy/lib/ONVIF/Media/Types/BacklightCompensation.pm +a6544a043c560be83aca90f915b81b8a ./onvif/proxy/lib/ONVIF/Media/Types/Rectangle.pm +05ae0ab5ea7dee329e6f39f21aa665f9 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingOptions20.pm +edfadae3889fae92b91ff21e2b22beea ./onvif/proxy/lib/ONVIF/Media/Types/ReceiverCapabilities.pm +6fd872e50264145e84864f67df6632fb ./onvif/proxy/lib/ONVIF/Media/Types/BacklightCompensationMode.pm +9761341a7cf6258f38df8c6995a97684 ./onvif/proxy/lib/ONVIF/Media/Types/PTZMoveStatus.pm +c148d344ff0d02a928cbd861cddb402b ./onvif/proxy/lib/ONVIF/Media/Types/ImagingOptions20Extension3.pm +9cdfc535071d5454333e88e8147a20a4 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourPresetDetail.pm +c7e99da91ea087f3b226a93bf1c874ed ./onvif/proxy/lib/ONVIF/Media/Types/VideoOutputConfigurationOptions.pm +2cacda4381308b1aacc49e5690c55b99 ./onvif/proxy/lib/ONVIF/Media/Types/ColorspaceRange.pm +7ec217a0df19561eea289f7f2cc681b5 ./onvif/proxy/lib/ONVIF/Media/Types/Domain.pm +c7651bda08acd36960b9071bb3f40d4d ./onvif/proxy/lib/ONVIF/Media/Types/OSDConfiguration.pm +578eb9a2c2390bbd83c54e8f20222ae2 ./onvif/proxy/lib/ONVIF/Media/Types/FocusConfiguration20Extension.pm +381bc42b1a03bc05c957d26c13468361 ./onvif/proxy/lib/ONVIF/Media/Types/FloatAttrList.pm +c27e85f61e7104020df25df604e981f2 ./onvif/proxy/lib/ONVIF/Media/Types/TimeZone.pm +a36e5dc4972889cdace4f5fdf8031b57 ./onvif/proxy/lib/ONVIF/Media/Types/IPv6NetworkInterface.pm +0dd236d0bb85ed46823b949ea4236f30 ./onvif/proxy/lib/ONVIF/Media/Types/DeviceCapabilitiesExtension.pm +af19e28a7578b3590ab5a29f9318dba3 ./onvif/proxy/lib/ONVIF/Media/Types/TrackAttributesExtension.pm +b43afc5438cfd9b6dd632158699bc736 ./onvif/proxy/lib/ONVIF/Media/Types/AttributedAnyType.pm +ea3faa4a1f93cf89ad10e2a97cd8159c ./onvif/proxy/lib/ONVIF/Media/Types/FocusOptions20.pm +3efa100992d10d5b0391b602bbcb880d ./onvif/proxy/lib/ONVIF/Media/Types/Config.pm +c2eb1c96650df9f4387ca62aaf449908 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourExtension.pm +4de0c3862ab501ebfad0771ce7249494 ./onvif/proxy/lib/ONVIF/Media/Types/AudioDecoderConfigurationOptions.pm +fa0f23b323cd375c3714716af1e22c40 ./onvif/proxy/lib/ONVIF/Media/Types/ImageStabilizationExtension.pm +e334e00d51e95f88d14d00c6536fe7fe ./onvif/proxy/lib/ONVIF/Media/Types/IntRange.pm +970676ec93dd38ce8e24508fcb822d22 ./onvif/proxy/lib/ONVIF/Media/Types/IntRectangleRange.pm +07da8fd123ce4ebe4436c1c1c04cfe95 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingOptions20Extension2.pm +115d4e69fba82c872279a7b4e0c07541 ./onvif/proxy/lib/ONVIF/Media/Types/PrefixedIPv6Address.pm +88a87db0c21a00c53cb0e08a35f968b1 ./onvif/proxy/lib/ONVIF/Media/Types/PTZStatusFilterOptions.pm +af549d1e1372ef37978dcda5bc46537a ./onvif/proxy/lib/ONVIF/Media/Types/IPv6ConfigurationExtension.pm +d120e2af17a3693e1f293775786a6dfb ./onvif/proxy/lib/ONVIF/Media/Types/PTZStreamExtension.pm +dde2c863faa60930f7aa28377d754d82 ./onvif/proxy/lib/ONVIF/Media/Types/VideoResolution.pm +73567d216deb0c754f1ad0f206fd4695 ./onvif/proxy/lib/ONVIF/Media/Types/Behaviour.pm +5c89326af5fc363c4f7e4fccfc6d6daf ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSupported.pm +c121dec455ea623823f7e7ce5e0a853b ./onvif/proxy/lib/ONVIF/Media/Types/RotateExtension.pm +3d1c86d9cc17bc42023e20fd03ac724c ./onvif/proxy/lib/ONVIF/Media/Types/SourceReference.pm +2ef97e6aaf8e53612dbdd77effa25f7d ./onvif/proxy/lib/ONVIF/Media/Types/RotateMode.pm +7e1fc757eae489fdc281827dcb3dc658 ./onvif/proxy/lib/ONVIF/Media/Types/AudioAnalyticsStreamExtension.pm +726bb970b4c198e99f085796177051dc ./onvif/proxy/lib/ONVIF/Media/Types/Fault.pm +034ae8a107305c6e934d795ff01199a4 ./onvif/proxy/lib/ONVIF/Media/Types/VideoAnalyticsStream.pm +a47544bf5317fd13d6c417e7066f11bb ./onvif/proxy/lib/ONVIF/Media/Types/PaneOptionExtension.pm +a96060243109bac6dc04824efbdba5ff ./onvif/proxy/lib/ONVIF/Media/Types/User.pm +021d9437135f37ddd0986f227f0ba77b ./onvif/proxy/lib/ONVIF/Media/Types/Mpeg4Options.pm +d189cc907e65a805fabadf8a78ba84f2 ./onvif/proxy/lib/ONVIF/Media/Types/Merge.pm +47a12f899b6886e553b951c1fe2b5548 ./onvif/proxy/lib/ONVIF/Media/Types/WideDynamicRangeOptions.pm +876c6d4f67152751ca0f23b3e336b1de ./onvif/proxy/lib/ONVIF/Media/Types/FocusMove.pm +5da16f664bd0bec11f32f1ec18dfa967 ./onvif/proxy/lib/ONVIF/Media/Types/MetadataConfigurationOptions.pm +11900f3870c0d6c98fa4473c3be3d4f0 ./onvif/proxy/lib/ONVIF/Media/Types/ColorDescriptor.pm +8f625a9ddd7282f12075ed529d25f241 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkProtocolExtension.pm +bb70c9f29a7cb3547320c3e7e6a22349 ./onvif/proxy/lib/ONVIF/Media/Types/MessageExtension.pm +baa1287f514e09f51c56cef6b7fe90c0 ./onvif/proxy/lib/ONVIF/Media/Types/EFlipMode.pm +944e4248bd992fcb6a91fd0a97d867ed ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourState.pm +405ab6d3e66b52df719ae9bd161a2f75 ./onvif/proxy/lib/ONVIF/Media/Types/PTZFilter.pm +9403c8ad54b4ff6b7cb49de90d4433b6 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobStateInformation.pm +fced31cee3ed258c6783599614d697cd ./onvif/proxy/lib/ONVIF/Media/Types/IPv4NetworkInterface.pm +580fbf08b7c21996f0ef129b343b2fd0 ./onvif/proxy/lib/ONVIF/Media/Types/HostnameInformation.pm +d76f8b6ee08faf876059911e54585ca7 ./onvif/proxy/lib/ONVIF/Media/Types/RuleEngineConfigurationExtension.pm +319647a6c88009b8230e82a3ab32a4c8 ./onvif/proxy/lib/ONVIF/Media/Types/TopicNamespaceLocation.pm +b241532ce6c74d30efb5e2243b49cce9 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11AuthAndMangementSuite.pm +98902f35aa1155a4473a186615350931 ./onvif/proxy/lib/ONVIF/Media/Types/SystemLogUriList.pm +23466fc71778cff1a0486f04bb3b5e1b ./onvif/proxy/lib/ONVIF/Media/Types/VideoEncoderOptionsExtension2.pm +7b9105f7635dd21c74aa964c309a4804 ./onvif/proxy/lib/ONVIF/Media/Types/BackupFile.pm +b2836e09a605e8f27aacb42d8baa1eeb ./onvif/proxy/lib/ONVIF/Media/Types/NetworkZeroConfiguration.pm +a580946226633f8cedad9535d2aca22d ./onvif/proxy/lib/ONVIF/Media/Types/PolylineArray.pm +dd2db04a61e463726195e11c50406094 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11PSKSet.pm +9d983194f5e1944bade0cac51f6caa39 ./onvif/proxy/lib/ONVIF/Media/Types/LayoutOptionsExtension.pm +89dcc24e641a38a7448b3201bc74eb63 ./onvif/proxy/lib/ONVIF/Media/Types/Receiver.pm +b3c9bba6ffc14c0e56056399dfec0c45 ./onvif/proxy/lib/ONVIF/Media/Types/SecurityCapabilitiesExtension.pm +484fa05d45aadf3a417815a685747d2f ./onvif/proxy/lib/ONVIF/Media/Types/ImagingSettingsExtension202.pm +26cda653b185b0f53774ea92c5ba0c44 ./onvif/proxy/lib/ONVIF/Media/Types/MetadataType.pm +ac1b38e4afafe3caa75ec92bb1550e51 ./onvif/proxy/lib/ONVIF/Media/Types/EngineConfiguration.pm +55e8a7ec2de7bdfd50bfe97a566554da ./onvif/proxy/lib/ONVIF/Media/Types/SystemCapabilities.pm +1fb7b546e2b90b752af443af5d4cb82c ./onvif/proxy/lib/ONVIF/Media/Types/IntRectangle.pm +e92297a24a446b83ad504f47b45d710a ./onvif/proxy/lib/ONVIF/Media/Types/ClassType.pm +a40218abb4a9b91ed9eab9ebab37109b ./onvif/proxy/lib/ONVIF/Media/Types/NetworkZeroConfigurationExtension2.pm +addff69e644752e5b1f2783837e1d730 ./onvif/proxy/lib/ONVIF/Media/Types/FocusConfiguration20.pm +f088447142343cbe639b5087e5ba5720 ./onvif/proxy/lib/ONVIF/Media/Types/PTZConfigurationOptions2.pm +043762082ce5b30aaaeb61cd14a7737f ./onvif/proxy/lib/ONVIF/Media/Types/MetadataInputExtension.pm +3c4b6af7d0508e744654028be8e5ccd8 ./onvif/proxy/lib/ONVIF/Media/Types/CertificateUsage.pm +493c430f5e1ccc79631ceb31da67f798 ./onvif/proxy/lib/ONVIF/Media/Types/AudioEncoding.pm +913da20720c806b29e27e238b491b7f5 ./onvif/proxy/lib/ONVIF/Media/Types/PTZConfigurationOptions.pm +c03f9567e5207a18421a8c5191c40b45 ./onvif/proxy/lib/ONVIF/Media/Types/AudioOutput.pm +4e978cfeae2bf7c780eaa75b52ab06d2 ./onvif/proxy/lib/ONVIF/Media/Types/AppearanceExtension.pm +44720cd769b995b2a4f73182060e7bf0 ./onvif/proxy/lib/ONVIF/Media/Types/ColorOptions.pm +e5284674f29637b7dc72b33a3020f67c ./onvif/proxy/lib/ONVIF/Media/Types/PTZNodeExtension2.pm +848573350a3def42cfabc272624e66fb ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalanceOptions20.pm +9702712898cd4ea32154ae28773cf54d ./onvif/proxy/lib/ONVIF/Media/Types/CertificateWithPrivateKey.pm +0db20b757afecd35024e01f0e26dc0e6 ./onvif/proxy/lib/ONVIF/Media/Types/VideoOutputExtension.pm +428f70e39edf83254922cfb00a5cd024 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingSettings20.pm +a00dd4fda6a0bd1f6bf4c297b4af4914 ./onvif/proxy/lib/ONVIF/Media/Types/RealTimeStreamingCapabilities.pm +fa8bf200485dba2e7a7e35be656856b3 ./onvif/proxy/lib/ONVIF/Media/Types/ClassDescriptor.pm +86ec9121c36cc82edb44a792d199fc33 ./onvif/proxy/lib/ONVIF/Media/Types/PTZConfigurationExtension2.pm +bc9fcdcb799a33c94db90a10944a8ad6 ./onvif/proxy/lib/ONVIF/Media/Types/TLSConfiguration.pm +296483ce8efbf2835c7657e06219620d ./onvif/proxy/lib/ONVIF/Media/Types/Dot1XConfiguration.pm +ce6cd75309859cc76cd4731e815d8656 ./onvif/proxy/lib/ONVIF/Media/Types/PTZNode.pm +f4e3f8248ecf21049d1ebd6bbbbe7837 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSource.pm +52896e098be980dde4f1b8e7ba010951 ./onvif/proxy/lib/ONVIF/Media/Types/SystemDateTimeExtension.pm +1ab3d77f13aeaef11cc88a3acd377844 ./onvif/proxy/lib/ONVIF/Media/Types/RealTimeStreamingCapabilitiesExtension.pm +8911f44903f34c2efdaffb8cd7f025b4 ./onvif/proxy/lib/ONVIF/Media/Types/ExposureOptions.pm +29df64bd800a4a4fb8ce94038a2ea45f ./onvif/proxy/lib/ONVIF/Media/Types/FindEventResultList.pm +b70388a12b0b0b0f105c618f5b9a984a ./onvif/proxy/lib/ONVIF/Media/Types/VideoAttributes.pm +140bf83860db30f6d4fc16c7cef17975 ./onvif/proxy/lib/ONVIF/Media/Types/ImageStabilizationOptionsExtension.pm +83b3e6254fd52d1caf1f2e2aaa22127d ./onvif/proxy/lib/ONVIF/Media/Types/SystemCapabilitiesExtension.pm +73d2e2ff8e1404b86c9a606629ee0052 ./onvif/proxy/lib/ONVIF/Media/Types/OSDConfigurationExtension.pm +fc25867cc51bada2e162790a6de6e611 ./onvif/proxy/lib/ONVIF/Media/Types/Vector2D.pm +8ef1c8ea0288c7ed7364f06fc28db00f ./onvif/proxy/lib/ONVIF/Media/Types/VideoEncoderConfigurationOptions.pm +d0a5dc8264433a2c067a0d3caa031fd6 ./onvif/proxy/lib/ONVIF/Media/Types/IrCutFilterAutoAdjustmentOptionsExtension.pm +1331aa67e253406e0b1281a642938ece ./onvif/proxy/lib/ONVIF/Media/Types/CertificateInformationExtension.pm +64b81d59ac95592607829ab8f54823ac ./onvif/proxy/lib/ONVIF/Media/Types/ConfigDescriptionExtension.pm +afbb354e7c210715a972b7b2abd6140a ./onvif/proxy/lib/ONVIF/Media/Types/DigitalInput.pm +c271303f7aa2cd7ab117a5b22d6cfd20 ./onvif/proxy/lib/ONVIF/Media/Types/SourceIdentification.pm +418e077db6634d40f6346dd65963386f ./onvif/proxy/lib/ONVIF/Media/Types/IANA_IfTypes.pm +d63369232fcbc3119823fdd26856a88c ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceLink.pm +4966881bd2b08cd908625dd183025c3f ./onvif/proxy/lib/ONVIF/Media/Types/PaneConfiguration.pm +855b5d359d624fef9dcb918c8b629f94 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11AvailableNetworks.pm +96bbe2507d0c656e5309929a2a8b5ae3 ./onvif/proxy/lib/ONVIF/Media/Types/IPAddressFilter.pm +0e333c458335cbef0bfe7fa510d89916 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobState.pm +0575e1299d967e80746f9bed94062cbc ./onvif/proxy/lib/ONVIF/Media/Types/Profile.pm +70d9a4fc7d7711e997c00b703a74f283 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPositionFilter.pm +96a3c77226068c66655ff0d44bbb057b ./onvif/proxy/lib/ONVIF/Media/Types/RuleEngineConfiguration.pm +617e7cd596a70b8e3d0b64a6a10f1032 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceConfigPriority.pm +9db1165e560496eb5282c96d60cc856a ./onvif/proxy/lib/ONVIF/Media/Types/SourceIdentificationExtension.pm +0a4a071cbfa9afa709e9545af783aa50 ./onvif/proxy/lib/ONVIF/Media/Types/Documentation.pm +dfa154b538ff8ad9c899b33814fb1b3e ./onvif/proxy/lib/ONVIF/Media/Types/OSDTextOptions.pm +b1c8534b9250656f69ba1fee9defc777 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceModeExtension.pm +6f106c24ffea01b2507ab4fc6927dccf ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceConfigurationOptionsExtension.pm +b2d1fdefd31284006ea7d767cc6702e9 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsStateInformation.pm +2231c18e368e8e318d5b4dbe8914b526 ./onvif/proxy/lib/ONVIF/Media/Types/ClassDescriptorExtension2.pm +b871e336cf55c121da28fae1c94717e0 ./onvif/proxy/lib/ONVIF/Media/Types/ExposureMode.pm +0b521352a081146b6670db062b2d3df3 ./onvif/proxy/lib/ONVIF/Media/Types/ReceiverMode.pm +dcf5d3c2765649a93208e50356fd9284 ./onvif/proxy/lib/ONVIF/Media/Types/ReplayConfiguration.pm +31e9af0cbf4b472b3322c5d798d4cb6a ./onvif/proxy/lib/ONVIF/Media/Types/ContinuousFocus.pm +03417f6533b31758ae0d8418fb8f5095 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStartingCondition.pm +b4ab0844b221f7ffec25e17a91f91346 ./onvif/proxy/lib/ONVIF/Media/Types/ShapeDescriptor.pm +75f882996e833113c48b754b7a715082 ./onvif/proxy/lib/ONVIF/Media/Types/OSDImgConfigurationExtension.pm +6393c5d802de00e0b2812b333298b641 ./onvif/proxy/lib/ONVIF/Media/Types/OSDPosConfiguration.pm +7cf341037c8dfe50f2b4e690a7ca6f0d ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStartingConditionOptionsExtension.pm +66b6b9f7a7fe945d043f80fd020c7881 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingSummary.pm +e27bffafa1093f8e2118c39d438d599c ./onvif/proxy/lib/ONVIF/Media/Types/ModeOfOperation.pm +de46cf78735d43d6ad05ba157431512f ./onvif/proxy/lib/ONVIF/Media/Types/BacklightCompensationOptions.pm +4d0e80778ba52fc0955e72ab64daa75a ./onvif/proxy/lib/ONVIF/Media/Types/Appearance.pm +00944b67ea5d4054d6da584ce6c2b4a3 ./onvif/proxy/lib/ONVIF/Media/Types/ItemList.pm +d5b1724985c69e69e2c6225bc4787739 ./onvif/proxy/lib/ONVIF/Media/Types/DNSName.pm +103069a59c5dc97d84e70202b7ac16ed ./onvif/proxy/lib/ONVIF/Media/Types/H264DecOptions.pm +f1e5d2bbaa6422308007664d8dfe2154 ./onvif/proxy/lib/ONVIF/Media/Types/EncodingTypes.pm +5844f1d93e9125e5aa6fc40778aa38aa ./onvif/proxy/lib/ONVIF/Media/Types/FrameExtension.pm +67d768d7382be84b2ef08d46b034a9c8 ./onvif/proxy/lib/ONVIF/Media/Types/WideDynamicRange.pm +f03998bb3618baeb911e771f40b9b8d1 ./onvif/proxy/lib/ONVIF/Media/Types/IPv6Configuration.pm +e98aab07be1a288fb41def71cde105fd ./onvif/proxy/lib/ONVIF/Media/Types/ColorCovariance.pm +bd8a84a7cb7c7dfa19c0ef140810538f ./onvif/proxy/lib/ONVIF/Media/Types/OSDColorOptionsExtension.pm +db24a3778940bc6739233040f0638ce0 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStartingConditionOptions.pm +8deee4e5a786ae22343bcb5ed056cd36 ./onvif/proxy/lib/ONVIF/Media/Types/NTPInformationExtension.pm +cf2bb4e41b2af895cf4e350b9af43871 ./onvif/proxy/lib/ONVIF/Media/Types/AudioSource.pm +c97b7db339f6bec9c838c70f6cf5f257 ./onvif/proxy/lib/ONVIF/Media/Types/PolygonConfiguration.pm +3d39909fa464b58587b5b603b012a5fa ./onvif/proxy/lib/ONVIF/Media/Types/G711DecOptions.pm +6fff0db9d0fa71fcbacf158820de94f2 ./onvif/proxy/lib/ONVIF/Media/Types/IPv6NetworkInterfaceSetConfiguration.pm +5edae7776579c890312293ec6f3ef700 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11Status.pm +68c2d308281b1d1cc7608a39bccf04cb ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourDirection.pm +c31f385893be61a35411fc280d76ae4e ./onvif/proxy/lib/ONVIF/Media/Types/Dot1XConfigurationExtension.pm +cd79586e2bb5fdbdb46246ee193bcfae ./onvif/proxy/lib/ONVIF/Media/Types/DNSInformation.pm +68f5e84fb1b378b5689163a7b88f34b2 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStatus.pm +05a1d329e07788b9f009dfbb80ef049f ./onvif/proxy/lib/ONVIF/Media/Types/ReverseOptions.pm +69adea2362e042ab1b08d150121a1745 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingCapabilities.pm +0f098b2c2ed0dbdd9a9071fca2a43da2 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngineInputInfo.pm +f6cfb85ac2094279926f711eeaf74048 ./onvif/proxy/lib/ONVIF/Media/Types/SystemLog.pm +3abe1dc89dcfa003f91d74c8f5c27d14 ./onvif/proxy/lib/ONVIF/Media/Types/HostnameInformationExtension.pm +4706f7d11ef19aea8969c72e791d7350 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobTrack.pm +f2c2c3a7e312488288b7431fba836f0c ./onvif/proxy/lib/ONVIF/Media/Types/FindMetadataResult.pm +8827f85743a98865aabb07d6ba57e68f ./onvif/proxy/lib/ONVIF/Media/Types/FloatRange.pm +8e77f106bf4c5994cdd9b58aa181d7d2 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingOptions.pm +da6b5538daa137e04cb7de3081ef5c5c ./onvif/proxy/lib/ONVIF/Media/Types/Mpeg4Profile.pm +cb89a21daf9334d7f6f546026c1c37a8 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingSettingsExtension203.pm +f3fe71d3944eb9f73a2bf30a93fbd3b4 ./onvif/proxy/lib/ONVIF/Media/Types/ImageStabilizationMode.pm +57a620a803be358a1f7d1f0d62b6cb5b ./onvif/proxy/lib/ONVIF/Media/Types/FaultCodesOpenEnumType.pm +695e84a5d7ae2d623692a013fa6aee56 ./onvif/proxy/lib/ONVIF/Media/Types/RelayOutputSettings.pm +54f72711388487a28fc2b1129d8ba78d ./onvif/proxy/lib/ONVIF/Media/Types/FocusOptions.pm +5117e4b3a1333934b5e3779d5040c64b ./onvif/proxy/lib/ONVIF/Media/Types/FindPTZPositionResultList.pm +2e3b63804658c761dcd83a388e1a542f ./onvif/proxy/lib/ONVIF/Media/Types/DynamicDNSType.pm +3cca7ddce18064c16323cf8fa3306927 ./onvif/proxy/lib/ONVIF/Media/Types/PropertyOperation.pm +d9173c5b21b592d644d41c05e0750ff1 ./onvif/proxy/lib/ONVIF/Media/Types/MetadataStream.pm +3d4a7aca63dcb77fa51f98bbb5c696d5 ./onvif/proxy/lib/ONVIF/Media/Types/MetadataStreamExtension.pm +b5d3b0706da3ed670e4f142805819133 ./onvif/proxy/lib/ONVIF/Media/Types/Dot3Configuration.pm +d4f5595f51dfa2a4c42732e3eda7cc2e ./onvif/proxy/lib/ONVIF/Media/Types/ImagingStatus.pm +23110d8479cb75ff700c825b9725e532 ./onvif/proxy/lib/ONVIF/Media/Types/RelationshipTypeOpenEnum.pm +35005393f6fc0f35e5dfb78488533b7a ./onvif/proxy/lib/ONVIF/Media/Types/ObjectExtension.pm +7cc3443283d7ae1d590a7c6afd0bacc8 ./onvif/proxy/lib/ONVIF/Media/Types/Polyline.pm +68c320d13fb3b6c2c08ffb770062acc1 ./onvif/proxy/lib/ONVIF/Media/Types/GetRecordingsResponseItem.pm +2a1099526ef2a1c1195126908ce7800a ./onvif/proxy/lib/ONVIF/Media/Types/StreamType.pm +e444f0491d4719bd22f1ab079d0d70a9 ./onvif/proxy/lib/ONVIF/Media/Types/FindEventResult.pm +de82e86f18426b7b9212c5c0d3d97f45 ./onvif/proxy/lib/ONVIF/Media/Types/LayoutExtension.pm +409fe2b9536bbdb074621d63ff774aa4 ./onvif/proxy/lib/ONVIF/Media/Types/PaneLayoutOptions.pm +9df82234671e90122461a311e58765a2 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsState.pm +632729599db68170c085ca137602c4e6 ./onvif/proxy/lib/ONVIF/Media/Types/EAPMethodConfiguration.pm +0236f0f5732ba92727c8472bfcbdef93 ./onvif/proxy/lib/ONVIF/Media/Types/TrackAttributes.pm +eb80d02fb1aacb140010c6a69fcc1359 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsDeviceEngineConfiguration.pm +521dd34a9dd690cd03c126380b18e87a ./onvif/proxy/lib/ONVIF/Media/Types/MediaCapabilities.pm +ca11533a4fe69c34abd1f387950e02a3 ./onvif/proxy/lib/ONVIF/Media/Types/Object.pm +e9ab8cb8d03f840fd44da58489b8c331 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkCapabilitiesExtension.pm +3539a5e0228c802ea241513cc56708ec ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStatusExtension.pm +11bfaa9f6e50bc02b62b05e5666f6ef4 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourOptions.pm +edd38f9a18537274b95e5db36be760ca ./onvif/proxy/lib/ONVIF/Media/Types/ProfileCapabilities.pm +1c884103f3325a83b9307ee7b80dcb6a ./onvif/proxy/lib/ONVIF/Media/Types/AudioSourceConfiguration.pm +c4127b589346cf44b1448f916470e0b8 ./onvif/proxy/lib/ONVIF/Media/Types/FactoryDefaultType.pm +10d5e1efa80ce74652d1b62025e5fd98 ./onvif/proxy/lib/ONVIF/Media/Types/PTControlDirectionExtension.pm +e3735a7d1b21960a81421084eb4a7999 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSupportedExtension.pm +d54981e960aa0ef9d3a90d12f9b509d7 ./onvif/proxy/lib/ONVIF/Media/Types/OSDType.pm +2e934526436025d04a27fad18b4aefcd ./onvif/proxy/lib/ONVIF/Media/Types/CertificateStatus.pm +5f9d40d87a5516bfe10bfab1282cd48f ./onvif/proxy/lib/ONVIF/Media/Types/Header.pm +9fca56ea0602379100a39c274e2f34f0 ./onvif/proxy/lib/ONVIF/Media/Types/PrefixedIPv4Address.pm +96cd153495459894f654f86d1eca0ad4 ./onvif/proxy/lib/ONVIF/Media/Types/BaseFaultType.pm +0da55ec0937bc1b5682f9ec821ba93ae ./onvif/proxy/lib/ONVIF/Media/Types/IOCapabilitiesExtension2.pm +31296f70f15500add0ce2f4dd07b09d9 ./onvif/proxy/lib/ONVIF/Media/Types/DiscoveryMode.pm +7f8c04f2a9550a615c8c4055009370d0 ./onvif/proxy/lib/ONVIF/Media/Types/SearchScopeExtension.pm +7f73d692663817d2c21633ff731d8aeb ./onvif/proxy/lib/ONVIF/Media/Types/OSDTextOptionsExtension.pm +602259913163fead3cd7813aab2bd6bd ./onvif/proxy/lib/ONVIF/Media/Types/ProblemActionType.pm +7913619ecab060075f165919c0ce5204 ./onvif/proxy/lib/ONVIF/Media/Types/Color.pm +c66c6164226df9646ca2bd8c66fad86c ./onvif/proxy/lib/ONVIF/Media/Types/OtherType.pm +ceffb772f89559de45cf800ffd2eba30 ./onvif/proxy/lib/ONVIF/Media/Types/AudioDescriptor.pm +8ae494cba304b235a53a01fd53f48c96 ./onvif/proxy/lib/ONVIF/Media/Types/base64Binary.pm +d324f341fcee83f2877fdabb9c3a8ce9 ./onvif/proxy/lib/ONVIF/Media/Types/IOCapabilitiesExtension.pm +91cf67e97241bb16082a08e2761f4695 ./onvif/proxy/lib/ONVIF/Media/Types/H264Options2.pm +0fd6de2428cbf91d31468a3f692962ba ./onvif/proxy/lib/ONVIF/Media/Types/PolylineArrayConfiguration.pm +f41dae89c254c42e257d302b6a886abb ./onvif/proxy/lib/ONVIF/Media/Types/ContinuousFocusOptions.pm +cd3bdb3734cda2632111342d50bd01f3 ./onvif/proxy/lib/ONVIF/Media/Types/G726DecOptions.pm +130f9fc915b670d515b16985251d858f ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalance20Extension.pm +79b015c91c0cd9bf3f3eb17e4d81da77 ./onvif/proxy/lib/ONVIF/Media/Types/FocusStatus20.pm +cd76fe5dfe6e044215aa202e1b7023c5 ./onvif/proxy/lib/ONVIF/Media/Types/IOCapabilities.pm +7c4ff7f54b2492767061cb63c587a1c0 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkProtocolType.pm +4f5a7c03be9daeff3bba10c58c1f8145 ./onvif/proxy/lib/ONVIF/Media/Types/Include.pm +4fbe03efb0cf2e199d896b56c5bb12a7 ./onvif/proxy/lib/ONVIF/Media/Types/ItemListDescription.pm +2bd4e1040b53fe757a7e7043d4827cb0 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingStatus20.pm +250f01d31f1d47990ed41e46fdb8b190 ./onvif/proxy/lib/ONVIF/Media/Types/MulticastConfiguration.pm +c2e5a9e96acc1813b9b989a58cc8d71a ./onvif/proxy/lib/ONVIF/Media/Types/MetadataConfigurationExtension.pm +55618a07a2ad59c31142b519cf87a485 ./onvif/proxy/lib/ONVIF/Media/Types/ActionEngineEventPayloadExtension.pm +872310fedb8a95475e739382326727de ./onvif/proxy/lib/ONVIF/Media/Types/MediaUri.pm +8344e6b716dc0031a5524879e141e703 ./onvif/proxy/lib/ONVIF/Media/Types/PTZVector.pm +6554286391f67966ca551dc93ec24ecc ./onvif/proxy/lib/ONVIF/Media/Types/MoveOptions20.pm +3a584e52c7a35587d77c22d73c0df8cc ./onvif/proxy/lib/ONVIF/Media/Types/RelatesToType.pm +1a1004c23c8d271876fcfedd1ee39eb0 ./onvif/proxy/lib/ONVIF/Media/Types/PolylineArrayExtension.pm +5a16d9af66a0cf7d88f85c65922db927 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingStatus.pm +fc0c5792e710bac5d122fe11c62e634c ./onvif/proxy/lib/ONVIF/Media/Types/IntList.pm +58d0a561fe755dfcab8d99edc87f0436 ./onvif/proxy/lib/ONVIF/Media/Types/Capabilities.pm +09099e34acc3d41000e5b140f6013201 ./onvif/proxy/lib/ONVIF/Media/Types/PTZConfiguration.pm +c4c662f1cb227b142c34dedd7ce10245 ./onvif/proxy/lib/ONVIF/Media/Types/Certificate.pm +058bac05abaab99bb771f4109f4dd7c6 ./onvif/proxy/lib/ONVIF/Media/Types/AttachmentData.pm +74b9587d80c9f10f502d45592990e401 ./onvif/proxy/lib/ONVIF/Media/Types/ReferenceToken.pm +16494eae25a36e07053df33eec8cd163 ./onvif/proxy/lib/ONVIF/Media/Types/AnyHolder.pm +305c00151032568f10942ccae8bbe567 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobConfiguration.pm +d70b46b2fd2af6d3a00453e7eefd7789 ./onvif/proxy/lib/ONVIF/Media/Types/RelayMode.pm +4dc960edcf10204aac32d1d42cd5aced ./onvif/proxy/lib/ONVIF/Media/Types/ImagingSettingsExtension20.pm +a03335dfd662ee40ab79c21df7828ca3 ./onvif/proxy/lib/ONVIF/Media/Types/UserExtension.pm +566124b49402bb9e2b5653cc7b0ea9d0 ./onvif/proxy/lib/ONVIF/Media/Types/IPv4Configuration.pm +c97a6447df7728722fda866c7cc0cb84 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsDeviceExtension.pm +822cc4389a139c980444ea5c9f6b5ff3 ./onvif/proxy/lib/ONVIF/Media/Types/SystemCapabilitiesExtension2.pm +93a11487cfd33db264e68a74a27df3f2 ./onvif/proxy/lib/ONVIF/Media/Types/IPAddress.pm +8da6c4f84a9db327fde4b686e1f4fb83 ./onvif/proxy/lib/ONVIF/Media/Types/CapabilitiesExtension.pm +724541f9f75b022503c1687f903ec99f ./onvif/proxy/lib/ONVIF/Media/Types/TrackInformation.pm +a33cd3cec373d04addd394f9f9ae7f44 ./onvif/proxy/lib/ONVIF/Media/Types/SecurityCapabilitiesExtension2.pm +4ea9197374924b535813496916e88771 ./onvif/proxy/lib/ONVIF/Media/Types/CellLayout.pm +8aa8a21fb0d5597c9c6e2dbe351b8b48 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceMode.pm +260e6d66690c7904e538409f697f979b ./onvif/proxy/lib/ONVIF/Media/Types/PTZStatus.pm +c0468bbadeeb24a2bffb718aa00d65b2 ./onvif/proxy/lib/ONVIF/Media/Types/FocusStatus20Extension.pm +3dc5236b16749709b0137b1a1066854e ./onvif/proxy/lib/ONVIF/Media/Types/VideoDecoderConfigurationOptionsExtension.pm +08b95a5f23769e9be86a0e028ed8e86e ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsCapabilities.pm +88314e2e70af6cb51572b14e29150ed6 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkGateway.pm +54a48ed99d8dda5588320d525d81e213 ./onvif/proxy/lib/ONVIF/Media/Types/ProfileExtension.pm +f5fe1f4dc3455bec637e01fb1185f6f1 ./onvif/proxy/lib/ONVIF/Media/Types/BinaryData.pm +8a0b3f96014a6e55f895eabd036a3e0e ./onvif/proxy/lib/ONVIF/Media/Types/AudioAttributes.pm +0d56406a27a986bb0aa3089b5b7ddca1 ./onvif/proxy/lib/ONVIF/Media/Types/EndpointReferenceType.pm +0df24e037f9152ffe497d46d5f148abf ./onvif/proxy/lib/ONVIF/Media/Types/ReceiverState.pm +f142ee5a1540aadf8895e1374e1b6db5 ./onvif/proxy/lib/ONVIF/Media/Types/TransformationExtension.pm +81f2b49cf7322bc628b07bbd3424eb22 ./onvif/proxy/lib/ONVIF/Media/Types/hexBinary.pm +2043fed8543a78267f86e708eb66558d ./onvif/proxy/lib/ONVIF/Media/Types/Exposure.pm +52240b43020aa9c5bcfcaa21c705b5ba ./onvif/proxy/lib/ONVIF/Media/Types/ExposurePriority.pm +83c3041730b830c358837491029f5440 ./onvif/proxy/lib/ONVIF/Media/Types/EFlipOptions.pm +6b70303b8ddfcb04d5aea9ec54e0b2eb ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsDeviceCapabilities.pm +1fac08fdb8dbd472d36c4b1704545b6e ./onvif/proxy/lib/ONVIF/Media/Types/FindPTZPositionResult.pm +92fea2038e98caf87740fe9f1c2c708e ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngineControl.pm +3ec2fb59d64d39d9929f743865ca2bdc ./onvif/proxy/lib/ONVIF/Media/Types/LayoutOptions.pm +d9c67fa7919e1fec6f2571b8187dd654 ./onvif/proxy/lib/ONVIF/Media/Types/ColorDescriptorExtension.pm +b223a4e5de6856a472dbaebbf6eb2231 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkCapabilitiesExtension2.pm +490385883d46c311577e93b0bef7a9ee ./onvif/proxy/lib/ONVIF/Media/Types/RelayOutput.pm +8641518ded1521d5998de378449d1f4f ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourOperation.pm +9c5bb93e98e6562bce23d02181dbd16b ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceExtension2.pm +5fff5d4826f757157ab02ce130e4cb43 ./onvif/proxy/lib/ONVIF/Media/Types/PTZNodeExtension.pm +dd72ff2227e4b70ff4ae1daef8d1e5f1 ./onvif/proxy/lib/ONVIF/Media/Types/JpegOptions.pm +bac5ae708583e5df69ab9efb057b251a ./onvif/proxy/lib/ONVIF/Media/Types/NetworkHostType.pm +38d6cd4a449c6965f231b6dfcf65d0a5 ./onvif/proxy/lib/ONVIF/Media/Types/DynamicDNSInformationExtension.pm +bf63b129d24ced009055ea6cbbef4bb5 ./onvif/proxy/lib/ONVIF/Media/Types/CertificateGenerationParameters.pm +413a1ee8378cf2738f88fe74c66e3b3f ./onvif/proxy/lib/ONVIF/Media/Types/ObjectTreeExtension.pm +954392315177092def3e5decb7c0374a ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngine.pm +f92acdc6294360a15d50e11ea31f44ee ./onvif/proxy/lib/ONVIF/Media/Types/MotionInCells.pm +8fdbb84cd39f4f13477f4e020021777b ./onvif/proxy/lib/ONVIF/Media/Types/Rotate.pm +d982af823a179893c75d245168e5bc19 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobMode.pm +a3aedc9ac922f8b19ce7066edd36bddd ./onvif/proxy/lib/ONVIF/Media/Types/RemoteUser.pm +21d6653e1cdf9fd68b65605e4f365f9f ./onvif/proxy/lib/ONVIF/Media/Types/PTControlDirection.pm +899c54519619de9e3d644f3a1dd0ffab ./onvif/proxy/lib/ONVIF/Media/Types/Reverse.pm +51a9f095c23a0bc111bca8ef2deb4892 ./onvif/proxy/lib/ONVIF/Media/Types/PTZConfigurationExtension.pm +9a2b051e51aaf9db828281a958574ec4 ./onvif/proxy/lib/ONVIF/Media/Types/AudioEncoderConfigurationOption.pm +aa22d644cf7a19370188ad35224bdb4c ./onvif/proxy/lib/ONVIF/Media/Types/VideoAnalyticsStreamExtension.pm +957406f55483dd2b85c50b14c097fa97 ./onvif/proxy/lib/ONVIF/Media/Types/RelativeFocus.pm +75ecd4ab8b860755dfb8644e4116a79e ./onvif/proxy/lib/ONVIF/Media/Types/Mpeg4Configuration.pm +17d31ab1562764f915a38eaedfc63341 ./onvif/proxy/lib/ONVIF/Media/Types/ObjectId.pm +0606defe1599dc490330d72e987603f2 ./onvif/proxy/lib/ONVIF/Media/Types/DeviceEntity.pm +815f35328311a46757d428056ebf68cd ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobStateSource.pm +f40ce480fa02de7b07ea1dc40a9ff725 ./onvif/proxy/lib/ONVIF/Media/Types/VideoAnalyticsConfiguration.pm +b5e453524fef746237b24b02e3cada7c ./onvif/proxy/lib/ONVIF/Media/Types/IPAddressFilterExtension.pm +8fbc67ad9d3f8e33493578d189e60afd ./onvif/proxy/lib/ONVIF/Media/Types/JobToken.pm +688570e8e40abc65d51922892cd7371b ./onvif/proxy/lib/ONVIF/Media/Types/MetadataAttributes.pm +ac774c24a9eef042aa48555ce90062f1 ./onvif/proxy/lib/ONVIF/Media/Types/Body.pm +306177cf43cf383d99016166344f9488 ./onvif/proxy/lib/ONVIF/Media/Types/AudioAnalyticsStream.pm +cbbd89dd08cc67d7893a6d35c8f0d94e ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngineInput.pm +7a346853fbe5249eb1783c97c43f297f ./onvif/proxy/lib/ONVIF/Media/Types/MotionExpressionConfiguration.pm +15a1768d0a1db4931b6d208a407794cd ./onvif/proxy/lib/ONVIF/Media/Types/JpegDecOptions.pm +cd2f686c611f8869b3aabb5f6abb6ce0 ./onvif/proxy/lib/ONVIF/Media/Types/ItemListDescriptionExtension.pm +3775c8d2f93ee21c90829196688c5253 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceExtension2.pm +d61ae316feb2303290a23b4e518c9e26 ./onvif/proxy/lib/ONVIF/Media/Types/PTZSpacesExtension.pm +5855d33852af0db59dbdcea673a24284 ./onvif/proxy/lib/ONVIF/Media/Types/Exposure20.pm +68bd323bf722a66cf118ba24e83ed499 ./onvif/proxy/lib/ONVIF/Media/Types/Description.pm +95ecce350b511d4cab6aaab7ea4bccd8 ./onvif/proxy/lib/ONVIF/Media/Types/Vector.pm +821226fb8c9debe6b521a6f2e4e71acc ./onvif/proxy/lib/ONVIF/Media/Types/EapMethodExtension.pm +ecc06d9b8bd153697876ab48fa06d10d ./onvif/proxy/lib/ONVIF/Media/Types/WideDynamicRange20.pm +018f3bf2e40dda728610863130c65565 ./onvif/proxy/lib/ONVIF/Media/Types/OSDImgOptionsExtension.pm +d9cad54eb6e3f99e895d69d9c8b065ce ./onvif/proxy/lib/ONVIF/Media/Types/ItemListExtension.pm +77f0f28745495494cfdcd1a33aa8ec58 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobStateTrack.pm +e6f572461fc87bbd9378e77815337041 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11Cipher.pm +2570d6a2fbcf84681582921437bb1f73 ./onvif/proxy/lib/ONVIF/Media/Types/MediaCapabilitiesExtension.pm +70593458016301e2eb79bd7d297347ed ./onvif/proxy/lib/ONVIF/Media/Types/Envelope.pm +ac6f12f0876d3195fafaefa6522db2d7 ./onvif/proxy/lib/ONVIF/Media/Types/SupportInformation.pm +de6a9a2fb23c45f7510b5ed2d9a952eb ./onvif/proxy/lib/ONVIF/Media/Types/ReceiverConfiguration.pm +6a6407d096b63b29ec259673df0cc807 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceConfigurationOptions.pm +8d7cc79e482f1bea7436a1a7a6425062 ./onvif/proxy/lib/ONVIF/Media/Types/Scope.pm +d3aeebf350f368f8b1a624cda46fe8af ./onvif/proxy/lib/ONVIF/Media/Types/PTZPreset.pm +387e56f582117503941da40dbebcce3f ./onvif/proxy/lib/ONVIF/Media/Types/AudioClassDescriptor.pm +2bbbcfabb555ec8cf167a93e3890a16e ./onvif/proxy/lib/ONVIF/Media/Types/Space2DDescription.pm +3109fb439402a5158ea93c1c8542e743 ./onvif/proxy/lib/ONVIF/Media/Types/StringAttrList.pm +a28c3de50c03c83c40c71ad548bf854e ./onvif/proxy/lib/ONVIF/Media/Types/Dot11Configuration.pm +bb46025404097af4be61c385a6494982 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkZeroConfigurationExtension.pm +9a2817940ebf6b0b9d8f3d6d1850ab25 ./onvif/proxy/lib/ONVIF/Media/Types/OSDColor.pm +06097eb720277e95c9198c626ba26ef8 ./onvif/proxy/lib/ONVIF/Media/Types/SupportedAnalyticsModules.pm +514d610f60385e00b47e997a3b8e4994 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTours.pm +5b9691ab231bc11f392eaa5b46768c4b ./onvif/proxy/lib/ONVIF/PTZ/Elements/AbsoluteMove.pm +3260d832824d042fff124c4eee1dcf78 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetServiceCapabilitiesResponse.pm +3dc68e3e2f3df91e9d0048793e529c8a ./onvif/proxy/lib/ONVIF/PTZ/Elements/Polygon.pm +d7e1b1ff67492512e9f5d600d5e91396 ./onvif/proxy/lib/ONVIF/PTZ/Elements/SetConfigurationResponse.pm +36084a4a67afb6730271bea5bb573f00 ./onvif/proxy/lib/ONVIF/PTZ/Elements/RelativeMoveResponse.pm +1b4388342f4b8ea8dd1bdaf8948b6c46 ./onvif/proxy/lib/ONVIF/PTZ/Elements/MetadataConfiguration.pm +e9ba03b519257de932d3f26bbc46f90a ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetNodesResponse.pm +cb290a6a7fef4b994b53d616de060e27 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GotoHomePosition.pm +7754e3cf6bdf9219907f3b21d66f8218 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetCompatibleConfigurationsResponse.pm +f1ccb0bc0805070bb007ac06834a6f46 ./onvif/proxy/lib/ONVIF/PTZ/Elements/VideoSourceConfiguration.pm +207e64a01e993ee6a73f88515fc9658c ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetToursResponse.pm +308cdaeefffb079ee4a4aca456f8e401 ./onvif/proxy/lib/ONVIF/PTZ/Elements/OperatePresetTourResponse.pm +ded8455ade6ade110bcd86f64aa4d1da ./onvif/proxy/lib/ONVIF/PTZ/Elements/RemovePresetResponse.pm +5319471e1c440ab353c3909adec935fd ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetConfigurationOptions.pm +fe7cbe5ae6eebce1ea979047b3bade23 ./onvif/proxy/lib/ONVIF/PTZ/Elements/CreatePresetTour.pm +2db1edb06dad3abb69c5923186fd7543 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetNodes.pm +eca59b8d32f8eb22d1e577cb6b60557c ./onvif/proxy/lib/ONVIF/PTZ/Elements/SetHomePositionResponse.pm +b000608c32f58903f15b50b782e74a6d ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetConfigurationOptionsResponse.pm +b6c6dc7e31c6b68b62c7bd1310d476c9 ./onvif/proxy/lib/ONVIF/PTZ/Elements/ContinuousMoveResponse.pm +081d99d4c9a3540a04149ab606f8fe6e ./onvif/proxy/lib/ONVIF/PTZ/Elements/AudioOutputConfiguration.pm +9ae4e486dbe0335eacd1a9cfb8156537 ./onvif/proxy/lib/ONVIF/PTZ/Elements/AudioDecoderConfiguration.pm +6e979126151c43d5cb0cc1f7f7ded500 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTourOptions.pm +6221cf8d88e2d126aebb8bd72b3a3cee ./onvif/proxy/lib/ONVIF/PTZ/Elements/CreatePresetTourResponse.pm +9b4f1db250909c60399f3e7cea05a6b3 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GotoPresetResponse.pm +b6674983dd64abf9a47a7a96b85fa2ed ./onvif/proxy/lib/ONVIF/PTZ/Elements/VideoEncoderConfiguration.pm +13225981448843e294b734afe73255c0 ./onvif/proxy/lib/ONVIF/PTZ/Elements/Message.pm +bde71565c9686133540b40eb67f5967e ./onvif/proxy/lib/ONVIF/PTZ/Elements/RelativeMove.pm +20b9b2360c4347e17a54d0ad00be2920 ./onvif/proxy/lib/ONVIF/PTZ/Elements/RemovePresetTourResponse.pm +cd9da445af4837dbfb6e771a7bfb2d0b ./onvif/proxy/lib/ONVIF/PTZ/Elements/AbsoluteMoveResponse.pm +6783301b7867c39014e0963be433f840 ./onvif/proxy/lib/ONVIF/PTZ/Elements/AudioEncoderConfiguration.pm +ddeaa0ca8fccb57389fbe13ddfed2f27 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetNode.pm +b90f793765e161ea3ccd3959e5457347 ./onvif/proxy/lib/ONVIF/PTZ/Elements/SetPresetResponse.pm +863ede9ea57d371771142f924a8d1770 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetConfigurations.pm +4104335bf568e03cf6d01519b271a54b ./onvif/proxy/lib/ONVIF/PTZ/Elements/SetHomePosition.pm +3ee1eefaea7454a6ab7fb14b1ef048b8 ./onvif/proxy/lib/ONVIF/PTZ/Elements/Fault.pm +17488494353348ab6e60a4d505594c25 ./onvif/proxy/lib/ONVIF/PTZ/Elements/ModifyPresetTourResponse.pm +435110ac5c6761465921552627a15172 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTour.pm +ebde95b0a3820f4ed27ca0b91b85b4ca ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetCompatibleConfigurations.pm +ac0f89195f37fe11cc4d1c39290d7203 ./onvif/proxy/lib/ONVIF/PTZ/Elements/RemovePreset.pm +dc07a2a4409f36c0c4968ecfd3f201c3 ./onvif/proxy/lib/ONVIF/PTZ/Elements/SetPreset.pm +846af87f4d9fbdc3f053e5fc4440f563 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetServiceCapabilities.pm +21d2f39e51ee6698cb7aaa5b0a814e68 ./onvif/proxy/lib/ONVIF/PTZ/Elements/SendAuxiliaryCommand.pm +ca7b3607fba700ffbff61f6552ed0bb5 ./onvif/proxy/lib/ONVIF/PTZ/Elements/SetConfiguration.pm +ea088206692bfbe11cef86bebad059c2 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GotoPreset.pm +2b0f41d38733d650e6ae53d915930e3b ./onvif/proxy/lib/ONVIF/PTZ/Elements/MetadataStream.pm +86b78c263a3f2c73d8f704b7da117220 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetNodeResponse.pm +65a825c5b5ebdb76d839ba22e8f4ab9a ./onvif/proxy/lib/ONVIF/PTZ/Elements/Polyline.pm +5a6669cf7b66685c5407484ff8cc59f9 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetConfigurationsResponse.pm +deeedc3d2f63ca3d557df5fa1fa71d2b ./onvif/proxy/lib/ONVIF/PTZ/Elements/AudioSourceConfiguration.pm +0b1c2afe1970705620badd2080796216 ./onvif/proxy/lib/ONVIF/PTZ/Elements/Header.pm +bfe4c2115ac7a195cad8945367bb8325 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetConfiguration.pm +50fff84196f6f13e2c6a7dbaea360bcc ./onvif/proxy/lib/ONVIF/PTZ/Elements/StopResponse.pm +71527852ddbbf921c8f33535c5931795 ./onvif/proxy/lib/ONVIF/PTZ/Elements/OperatePresetTour.pm +2f0afca28d52385580d742bf09d25483 ./onvif/proxy/lib/ONVIF/PTZ/Elements/Include.pm +4535de594aa45cec71a7be1abae45d84 ./onvif/proxy/lib/ONVIF/PTZ/Elements/Stop.pm +1a34431497220983aa726933da930d8c ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetStatusResponse.pm +c571fe17d1943b6db86df78b58b59211 ./onvif/proxy/lib/ONVIF/PTZ/Elements/Capabilities.pm +8e3d3feacaf6ace407ad96b5fc4b50ba ./onvif/proxy/lib/ONVIF/PTZ/Elements/GotoHomePositionResponse.pm +76a0e1f8b0f998737b30ac7eb5a979dd ./onvif/proxy/lib/ONVIF/PTZ/Elements/PTZConfiguration.pm +41276740a27301a3365b6243b5fa692f ./onvif/proxy/lib/ONVIF/PTZ/Elements/RemovePresetTour.pm +6994c74d08fd41ae1763470e89c25405 ./onvif/proxy/lib/ONVIF/PTZ/Elements/ModifyPresetTour.pm +832bfa460b630bb4db721af1a0e63f2e ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetConfigurationResponse.pm +6d4a732bfe22335c58ef35258729c072 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTourOptionsResponse.pm +84474f79d501fe38116d3552550001a6 ./onvif/proxy/lib/ONVIF/PTZ/Elements/SendAuxiliaryCommandResponse.pm +314c40335910e408d8965eb038211be0 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetsResponse.pm +531276ab467c2ba2723a1ac3f73fb004 ./onvif/proxy/lib/ONVIF/PTZ/Elements/ContinuousMove.pm +151f859d73ae3ac1b11ec9d17cdcbf60 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresets.pm +147cbdee334523d0c5ab540d823aa90c ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTourResponse.pm +e1c5200fe84a6a555b0807056446eb22 ./onvif/proxy/lib/ONVIF/PTZ/Elements/VideoAnalyticsConfiguration.pm +1529bc348d2f494f9e6d28ee6855eaed ./onvif/proxy/lib/ONVIF/PTZ/Elements/Body.pm +506744cca794adcd1270d08fbb342556 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetStatus.pm +015a17172aabc906e033224ecfab57dd ./onvif/proxy/lib/ONVIF/PTZ/Elements/Envelope.pm +5fa47f03dbd1ed9bae71e7a13b9fa077 ./onvif/proxy/lib/ONVIF/PTZ/Attributes/contentType.pm +e096647a6a57c7e33b05dbe2f29e9e51 ./onvif/proxy/lib/ONVIF/PTZ/Attributes/actor.pm +13e861f4a653a2565d461ab2afdb9ec6 ./onvif/proxy/lib/ONVIF/PTZ/Attributes/encodingStyle.pm +f415d62564dd0d3576021cab7de9e2e0 ./onvif/proxy/lib/ONVIF/PTZ/Attributes/expectedContentTypes.pm +e268ceda0aa55fed48cce9824caaf221 ./onvif/proxy/lib/ONVIF/PTZ/Attributes/mustUnderstand.pm +04e3b13a9c3dc9fbbfc9d9e39ac5ab7f ./onvif/proxy/lib/ONVIF/PTZ/Interfaces/PTZ/PTZPort.pm +99214e2f01f8bacc0873c27b6fb33aa2 ./onvif/proxy/lib/ONVIF/PTZ/Typemaps/PTZ.pm +da70ab3c7b5992e2cdfc6f4063fbca38 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoRateControl.pm +0a96330bda35fa99da716d1f7e4021f9 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZStatusFilterOptionsExtension.pm +4492ec354f92e9f2f76f050f1445d090 ./onvif/proxy/lib/ONVIF/PTZ/Types/MessageDescription.pm +b20d2b97999357eef0519bf76a8b99a6 ./onvif/proxy/lib/ONVIF/PTZ/Types/DisplayCapabilities.pm +2f048e4dea13a52de2d1e66309402400 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingSourceInformation.pm +258dd7c0c9905400c4661f441db81097 ./onvif/proxy/lib/ONVIF/PTZ/Types/detail.pm +408b7902e189b9f55ddb506c833153fd ./onvif/proxy/lib/ONVIF/PTZ/Types/NTPInformation.pm +88e129192c4625ee21ae68f3893fa7b5 ./onvif/proxy/lib/ONVIF/PTZ/Types/ScopeDefinition.pm +c410abf4f80f67bf124c5af093be9790 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkHostExtension.pm +71d2d65deb4d6a8563944fe450cf041c ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkCapabilities.pm +57e9bf6e061e3b7448d2b49615aa0996 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingSettings.pm +b8e6418fe707dacbf0ca99d6e3fc9c3b ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioClassDescriptorExtension.pm +77bfc4da7f8711920b38c78503aa5786 ./onvif/proxy/lib/ONVIF/PTZ/Types/ExposureOptions20.pm +1e37a544e964142be3f2a2ea4af61f50 ./onvif/proxy/lib/ONVIF/PTZ/Types/SetDateTimeType.pm +b2558cbcf39f66d2853530488f54fc90 ./onvif/proxy/lib/ONVIF/PTZ/Types/EFlip.pm +c27933241fad5f86224a868cb8939e76 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelativeFocusOptions.pm +557d576acd52d08e3df553eda8bafe9b ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalanceMode.pm +5ef868eaefd77028b2dffd4e846e35b8 ./onvif/proxy/lib/ONVIF/PTZ/Types/SupportedRulesExtension.pm +ab9fb38a8497078143b4a3a5ba665a3b ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingOptions20Extension.pm +8fc3b452a0247ca85ea0e9fb3007cd10 ./onvif/proxy/lib/ONVIF/PTZ/Types/FrameExtension2.pm +50f6d5c1095d7db99f0708df3597978c ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11Capabilities.pm +0b776decbc1e8d5ea177cbbd3a4a0c21 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoDecoderConfigurationOptions.pm +657fef039485d1360b5807e0ecd27372 ./onvif/proxy/lib/ONVIF/PTZ/Types/GetTracksResponseItem.pm +87962d3d5943ccc08e2f5ed085e1ee8c ./onvif/proxy/lib/ONVIF/PTZ/Types/WideDynamicRangeOptions20.pm +146d5094e70fc6dc15423313ac2e2ad6 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingCapabilities.pm +ac662594bdc12efeb95c5117501579ce ./onvif/proxy/lib/ONVIF/PTZ/Types/Name.pm +bd4dd8a8bc6aa7a4ee83dae905fe1ef8 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkHost.pm +4a805a029e05874cb7d60ee35cdc5935 ./onvif/proxy/lib/ONVIF/PTZ/Types/ObjectTree.pm +1d7d03132a4b46b668cda756a850403f ./onvif/proxy/lib/ONVIF/PTZ/Types/RelayIdleState.pm +502dbbac70e996943520fe6b02dd04ff ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataStreamExtension2.pm +0d2d8339c50fa9620eade9ef8cb2af50 ./onvif/proxy/lib/ONVIF/PTZ/Types/Polygon.pm +8e8da1040501408b8c7d05b4612c78f3 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDImgOptions.pm +4ad6d97fe00af1cc600cc4eadfb5a091 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSpotExtension.pm +6fc8f4a49cf203dc7e05fad46de551b5 ./onvif/proxy/lib/ONVIF/PTZ/Types/ZoomLimits.pm +e31b57e6a9c91759043aea3ea7fd2be1 ./onvif/proxy/lib/ONVIF/PTZ/Types/Mpeg4Options2.pm +6a6c727cd986b77560692c5fe2f9260d ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZSpaces.pm +d900950adf074289197942708d38c521 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTControlDirectionOptionsExtension.pm +ca1f6faeee23571439c58eeb57ff4a6e ./onvif/proxy/lib/ONVIF/PTZ/Types/FloatList.pm +65c10d771220c0a102d7247bc8fba969 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceExtension.pm +17e8beb23c584d47b06be0752c5fbcef ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11SecurityMode.pm +4cfbac18ff92032585c1c375cd6a0884 ./onvif/proxy/lib/ONVIF/PTZ/Types/TopicNamespaceType.pm +6247122d0e60f8174ecfb6e77fbe79a7 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11PSKPassphrase.pm +f83aacaaec9b513880003403d1c2acd2 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11SecurityConfigurationExtension.pm +7b2bd77b210c0741c8ff5182b146aca3 ./onvif/proxy/lib/ONVIF/PTZ/Types/AbsoluteFocusOptions.pm +72418592bfa3d7b82b6993bd33f79e06 ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalance20.pm +aeb7a3d208b75f64ea54898b708d1ecd ./onvif/proxy/lib/ONVIF/PTZ/Types/ImageStabilizationOptions.pm +f355df09a9f3b71fcbf3069f9b7cc28b ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioSourceOptionsExtension.pm +b540351945006581e7bfa62a51db32e2 ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataConfiguration.pm +3b22949d35c86cb9f5e780e62c124ea6 ./onvif/proxy/lib/ONVIF/PTZ/Types/BacklightCompensation20.pm +d8acea398fcc1c0f1f3e7ee02cfffde4 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv4NetworkInterfaceSetConfiguration.pm +cefab5c8865f04bd3e74442f611c2e5d ./onvif/proxy/lib/ONVIF/PTZ/Types/RelayLogicalState.pm +4f14c0203982ea3bc71901bac9b52e8b ./onvif/proxy/lib/ONVIF/PTZ/Types/PresetTour.pm +b2d2f6569b481488ca7c750acc67cb7e ./onvif/proxy/lib/ONVIF/PTZ/Types/QueryExpressionType.pm +12441188a58bf4b8c7f9ce87ad715221 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfigurationOptionsExtension.pm +47045a2cc9df64c183b232dda6f658fb ./onvif/proxy/lib/ONVIF/PTZ/Types/PanTiltLimits.pm +3ed8bc7b9bb2d433eaf777ef93cea976 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingReference.pm +68b3b636c83e7b893c44090c2a147853 ./onvif/proxy/lib/ONVIF/PTZ/Types/MoveStatus.pm +cae139f5d8f4aa0ba301a2101e37a0fb ./onvif/proxy/lib/ONVIF/PTZ/Types/GetTracksResponseList.pm +aba4c68127bc4d84a5959ed1ccdffe70 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceExtension.pm +9e12cd20e997fbda67ed785c1e9088cf ./onvif/proxy/lib/ONVIF/PTZ/Types/EventStreamExtension.pm +70e6bccba5e7b635e140a997a7b6207c ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobSource.pm +e5c0c5ee645672930a5d0c375859fbc4 ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemLogUri.pm +471e78b7c41c67c040b3003b605d081d ./onvif/proxy/lib/ONVIF/PTZ/Types/CodingCapabilities.pm +7a3d5171b514685db701ec2882015d11 ./onvif/proxy/lib/ONVIF/PTZ/Types/Transport.pm +98f3548a24d8edc270bf1cb596837b68 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobReference.pm +e1c7b66a260e81336f281d82626dc75d ./onvif/proxy/lib/ONVIF/PTZ/Types/AACDecOptions.pm +0c3b294233d38e82eff7e0a7bb765547 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceConfiguration.pm +20345daf4b62b8e455945844291d622b ./onvif/proxy/lib/ONVIF/PTZ/Types/IPAddressFilterType.pm +6d39295eb2eefb53343c50ff924534d1 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStartingConditionExtension.pm +e8fa4c6808ded7f820cdab826003a481 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImageStabilization.pm +3c3f86ac579ef8a7e781fa2d9e9d3886 ./onvif/proxy/lib/ONVIF/PTZ/Types/DeviceCapabilities.pm +aec2456bfd18b67a567fc43ea51c20e0 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkProtocol.pm +b4096d9f7ea3460577a68065bc6466cc ./onvif/proxy/lib/ONVIF/PTZ/Types/Layout.pm +728b7bbb57a670b5a5b93b2b40b878e0 ./onvif/proxy/lib/ONVIF/PTZ/Types/Split.pm +a981e183e8fc2a81da0ae475afbf9fa4 ./onvif/proxy/lib/ONVIF/PTZ/Types/CapabilitiesExtension2.pm +6a587b02056f7beac4a1a7f852384410 ./onvif/proxy/lib/ONVIF/PTZ/Types/MediaAttributes.pm +cb45c43a76490d07e9c5166c20d1997e ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceConfigurationExtension2.pm +009976b9a6125e644791a31a51fe84ab ./onvif/proxy/lib/ONVIF/PTZ/Types/TrackConfiguration.pm +39c57e79f14b65eac9141111ea2dfde0 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingSettingsExtension.pm +da62bc34e7e1b8c5e1ccc9673fa8e9f5 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11SecurityConfiguration.pm +b5b5026569dd23f0176a392941020e36 ./onvif/proxy/lib/ONVIF/PTZ/Types/SearchState.pm +172bfeeace1e4d9ebf3bae4986766a3b ./onvif/proxy/lib/ONVIF/PTZ/Types/Frame.pm +5d84c271a6d4b65db10126cb0d12ed79 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngineInputInfoExtension.pm +2076414109e59882ad572dadac5fcb82 ./onvif/proxy/lib/ONVIF/PTZ/Types/DateTimeRange.pm +5052debc36ec7c85fe24038f264a5fb3 ./onvif/proxy/lib/ONVIF/PTZ/Types/CapabilityCategory.pm +da85de6f1645dda5c448abe34d467f59 ./onvif/proxy/lib/ONVIF/PTZ/Types/SupportedAnalyticsModulesExtension.pm +70e96a4279de27e0317eef0ed0e806c3 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11SSIDType.pm +127fec43602574c764c53b39ff5906fb ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalance.pm +194edd41fb3c30de083e9e2b23d080f7 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceConnectionSetting.pm +382c8f4a5a2b4fe518484b289d863d17 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourPresetDetailOptions.pm +2cda07ef30812f75d4a0fcb63d6fe71a ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngineConfigurationExtension.pm +e1c25503d54447b4519ac7960bffd21d ./onvif/proxy/lib/ONVIF/PTZ/Types/EFlipOptionsExtension.pm +69e7b4c1ba6cdb15ae7bfcc85488a87c ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioOutputConfigurationOptions.pm +f75a70aa5539ec13003541c1fdec739c ./onvif/proxy/lib/ONVIF/PTZ/Types/SupportedRules.pm +529c5d66a5b842fd4a533fbdfb7c4728 ./onvif/proxy/lib/ONVIF/PTZ/Types/GenericEapPwdConfigurationExtension.pm +02c8fc685bf70db8ddd2e7352971462c ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11PSK.pm +43854a19e416a6a7e6adfd19fcf79fa9 ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataInput.pm +aef55f852533a97d7c49f70b27b44f9c ./onvif/proxy/lib/ONVIF/PTZ/Types/OnvifVersion.pm +350db209268dff096cfb2c69591ee130 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoOutputConfiguration.pm +cb9559902024e08cf28fb5807018faa0 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelativeFocusOptions20.pm +e4396d0c3c10e429e8eebe48f514ca19 ./onvif/proxy/lib/ONVIF/PTZ/Types/MaximumNumberOfOSDs.pm +196dc970621f06a407ac5e4deafb10cc ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoEncoderOptionsExtension.pm +24d8afeb67d0b5db683b7542d1dd3f57 ./onvif/proxy/lib/ONVIF/PTZ/Types/Time.pm +afc39e0be5d36ca338edc385be9e2b2f ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceConfigurationOptionsExtension2.pm +e3abb631075cbc60245e03f8f5520e8c ./onvif/proxy/lib/ONVIF/PTZ/Types/IntAttrList.pm +b201197c73d352546c2423b8345d4f50 ./onvif/proxy/lib/ONVIF/PTZ/Types/EventSubscription.pm +c1f2502dfe029eed03e76204946b5a29 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11PSKSetExtension.pm +ac1186a25fc13231b8f2f8451930d877 ./onvif/proxy/lib/ONVIF/PTZ/Types/EventCapabilities.pm +5eec1141655251ebd943e80feff804b7 ./onvif/proxy/lib/ONVIF/PTZ/Types/TrackReference.pm +a588ac1b440d9213535cf211e07bf64c ./onvif/proxy/lib/ONVIF/PTZ/Types/ShapeDescriptorExtension.pm +14bcf2c257c30fa392281fee5c0913bf ./onvif/proxy/lib/ONVIF/PTZ/Types/FindMetadataResultList.pm +5df4e9e6e22e0e031943c80fac2c5964 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv6DHCPConfiguration.pm +eed1fe337b385e7802b71deb1caeb666 ./onvif/proxy/lib/ONVIF/PTZ/Types/Rename.pm +e656e08b80d63c00b0ce44d5a2caa6ea ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataFilter.pm +deccc17ef8d8214b6fc8e9b6efcd7342 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourTypeExtension.pm +a72c9487fcc14ed0da9f3d7a713b7356 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioEncoderConfigurationOptions.pm +f61db1acbd3d854a972be94ee77ba14a ./onvif/proxy/lib/ONVIF/PTZ/Types/WideDynamicMode.pm +8ce4438a6d4816d36eb47db804c488cd ./onvif/proxy/lib/ONVIF/PTZ/Types/Transformation.pm +257f39ef25ae84d438140ef0eaafc875 ./onvif/proxy/lib/ONVIF/PTZ/Types/IrCutFilterMode.pm +d6bb5c8723eaffeb9a7ec16b2493a496 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11SignalStrength.pm +285cf3fd0debde89c0e61658210cf899 ./onvif/proxy/lib/ONVIF/PTZ/Types/ExtensibleDocumented.pm +4d3c4e8df86dc093fcb687b4ba013f49 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourPresetDetailOptionsExtension.pm +1447d08960f21493d0df2202520213d8 ./onvif/proxy/lib/ONVIF/PTZ/Types/RotateOptionsExtension.pm +bd4f52e3417007e0d5544bfa230aa8a5 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingStatus20Extension.pm +1a03053aeed274abfb9a49da723e36a4 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusConfiguration.pm +cd528678a4899f74a0217ed0af8120ce ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoEncoding.pm +0e8c689bdbd05cfe7b426070c98fc853 ./onvif/proxy/lib/ONVIF/PTZ/Types/Mpeg4DecOptions.pm +b32f119d006eb8bf62c40875dc596976 ./onvif/proxy/lib/ONVIF/PTZ/Types/ReceiverReference.pm +a8ca623a07089a109ef271d61e0d0c2d ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv6Address.pm +0e3708e5f156e586a32617082ae0260e ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDPosConfigurationExtension.pm +faa1a6b38df956a7acdfa0dc167e4eb6 ./onvif/proxy/lib/ONVIF/PTZ/Types/DeviceIOCapabilities.pm +c0886d8380cc8eefe441b18cd28eee0b ./onvif/proxy/lib/ONVIF/PTZ/Types/ReceiverStateInformation.pm +892747fb8321c0197a1ae673192bd5d8 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceConfigurationExtension.pm +af540aeae5ec7c73f5d8ad1da2551126 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceSetConfigurationExtension2.pm +5c176f38c4f4d51aebd569c2a72f83f0 ./onvif/proxy/lib/ONVIF/PTZ/Types/TransportProtocol.pm +e869aff20e7935548b5fa4d1d2f46ac9 ./onvif/proxy/lib/ONVIF/PTZ/Types/Direction.pm +dc076e3a3dc855c1f9d7b45afd91e5b4 ./onvif/proxy/lib/ONVIF/PTZ/Types/IrCutFilterAutoAdjustmentOptions.pm +57db3c29a6941ac32e728e7417290dd5 ./onvif/proxy/lib/ONVIF/PTZ/Types/IrCutFilterAutoAdjustmentExtension.pm +1ae2ffed287c9a12fdb8ec663cf8df1d ./onvif/proxy/lib/ONVIF/PTZ/Types/ConfigDescription.pm +7056b2a70c7e9ec78f4a1d2c1a623ec9 ./onvif/proxy/lib/ONVIF/PTZ/Types/AttributedUnsignedLongType.pm +3c9e0e8206005ec8c0a01f8fef42f46b ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZStream.pm +fc352bc67cc9392ffa97bdec6f59175e ./onvif/proxy/lib/ONVIF/PTZ/Types/BehaviourExtension.pm +f4338d0112c64cf4669f190b13a575ca ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11AvailableNetworksExtension.pm +a587bfed81369e52e51e700dc1764f11 ./onvif/proxy/lib/ONVIF/PTZ/Types/Enabled.pm +3a0b7bc941a49e62b663eed3bdc118cf ./onvif/proxy/lib/ONVIF/PTZ/Types/DurationRange.pm +35bdeddbf65d732d7cb1943def3b7459 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterface.pm +35a9863f14394723ffc9dd1417b3ad59 ./onvif/proxy/lib/ONVIF/PTZ/Types/XPathExpression.pm +0621c32e0e96e4fabc502fb45da9d109 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPType.pm +4dd4f0a9ad6740ab0fd459a8b57551ec ./onvif/proxy/lib/ONVIF/PTZ/Types/ConfigurationEntity.pm +d8b74edbaac99bffa0eeab841c7d25b2 ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemLogType.pm +2e95f61c7245c6b7ccbfe82f14afba02 ./onvif/proxy/lib/ONVIF/PTZ/Types/ReverseOptionsExtension.pm +b48371d9d993bcd7fb587f4ecef75a2c ./onvif/proxy/lib/ONVIF/PTZ/Types/ReverseMode.pm +95d73a03588f026b2e20a594b0a9fad5 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceSetConfigurationExtension.pm +1f397e2acf4cf7122d05e9ac35f1a1bd ./onvif/proxy/lib/ONVIF/PTZ/Types/TrackType.pm +f365fcc1635b1328a5f965b0a970e52d ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZSpeed.pm +7c69e698b3d3e67189033fbcc4f6d6de ./onvif/proxy/lib/ONVIF/PTZ/Types/ReferenceParametersType.pm +26f1fd9e382a63e205a101106e04b19b ./onvif/proxy/lib/ONVIF/PTZ/Types/SearchCapabilities.pm +951beb6ce3f3126bdf1431d3b9412f2e ./onvif/proxy/lib/ONVIF/PTZ/Types/StreamSetup.pm +68c8097f6740a2ca3917fbad20df5403 ./onvif/proxy/lib/ONVIF/PTZ/Types/DateTime.pm +9aa8b7559fc3e98e8b1a064635e3cb8d ./onvif/proxy/lib/ONVIF/PTZ/Types/AuxiliaryData.pm +00a5554d0c7cf6a922efa55ea017f768 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDImgConfiguration.pm +b6517889225bddf9d2a762a2760918f5 ./onvif/proxy/lib/ONVIF/PTZ/Types/encodingStyle.pm +7f2dfddd238657ca217fe20a11b05f32 ./onvif/proxy/lib/ONVIF/PTZ/Types/RotateOptions.pm +07522921601bcaeb9444611efdeed051 ./onvif/proxy/lib/ONVIF/PTZ/Types/Date.pm +8fc4bfbe1edac86227d9e2d5fde66464 ./onvif/proxy/lib/ONVIF/PTZ/Types/MessageDescriptionExtension.pm +e8949c017ab49886fed65ae7b660590d ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateInformation.pm +e3d13cb9f11294f20eaa57fb045005dd ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSpotOptions.pm +b9452d4347aa5a900c6fa84a4a02d15b ./onvif/proxy/lib/ONVIF/PTZ/Types/ActionEngineEventPayload.pm +aa7f078b0558e82d95ee3e924daee5e4 ./onvif/proxy/lib/ONVIF/PTZ/Types/MoveOptions.pm +513109d7fd712962eb99ed1f96ca36f8 ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemDateTime.pm +6336c21619559ce89b97dcf659016ec8 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelationshipType.pm +1fface4bcd6396e06e4519e60e4bd49e ./onvif/proxy/lib/ONVIF/PTZ/Types/H264Options.pm +62869f7f93785e99b007e4af2e9a0a52 ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalanceOptions.pm +b81a4013c8e21b5bd7200498b3bc1a5e ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusOptions20Extension.pm +a2e3521636e4e22d1a700b71f6de021a ./onvif/proxy/lib/ONVIF/PTZ/Types/ClassDescriptorExtension.pm +6e349fb7c73e23cf1052c9f3897c50f7 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobConfigurationExtension.pm +3974cda032d24fc034fe6956bcbe27ec ./onvif/proxy/lib/ONVIF/PTZ/Types/MotionExpression.pm +9f581f2fb9136c2d3f3c7fcaa9c6c50e ./onvif/proxy/lib/ONVIF/PTZ/Types/H264Profile.pm +29df973cfcc32254810d08b77179a932 ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateGenerationParametersExtension.pm +ec24a81f3d8394188ec7d905320eb557 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioClassType.pm +de015eabe462ae9be40df7e57a9183a6 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfigurationOptions.pm +eab371c7c199cba15e08a6c2ab5f1dbe ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextConfiguration.pm +d7cb1753681b67319fab53cb525e029d ./onvif/proxy/lib/ONVIF/PTZ/Types/AbsoluteFocus.pm +c3d3b6a0a7ae70cbab3b38e7eb04b512 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingInformation.pm +d70554efc44d55cc788cb344166fc5c5 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioOutputConfiguration.pm +20f7adb7da0b7688602cc28f2f5b8ac3 ./onvif/proxy/lib/ONVIF/PTZ/Types/AttributedURIType.pm +fe6e924c820524bc65c6a4e44273bbcb ./onvif/proxy/lib/ONVIF/PTZ/Types/PaneLayout.pm +035f6ddf4be91431a1a8e9f2fc7ba683 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioDecoderConfiguration.pm +18a8ba3da9265e93bbf4484e49e5fd1e ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioDecoderConfigurationOptionsExtension.pm +b0039f0e7fd29116ede0d1950835b475 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioSourceConfigurationOptions.pm +9d73ce28382cee2b4078f54a5ae9d9c2 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextConfigurationExtension.pm +50ebc090b2462a2503a14c37132743f5 ./onvif/proxy/lib/ONVIF/PTZ/Types/ProfileExtension2.pm +33ebea0e7b81e27db5dd1bcd5d749f72 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioClassCandidate.pm +fc04f6cc81e7dfdaeef191e85980fb6f ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusStatus.pm +23c65e774e00a62a378ef7ada4a0aed5 ./onvif/proxy/lib/ONVIF/PTZ/Types/DNSInformationExtension.pm +0624b721c40126bc8992f6457667c980 ./onvif/proxy/lib/ONVIF/PTZ/Types/SecurityCapabilities.pm +e458bf342d2a79f3120530b37f1ebccc ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoEncoderConfiguration.pm +8994558b8b34cdfa1668337b80f3442e ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11StationMode.pm +e82d283e80b3ef013adf57e58b1b6f08 ./onvif/proxy/lib/ONVIF/PTZ/Types/DynamicDNSInformation.pm +3301e461f772e7d67be1230de08b0068 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobSourceExtension.pm +09b4d3f2b017b5a397dfa60c8498e6b6 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobStateInformationExtension.pm +41af241402ada565ffe9f506f19aef06 ./onvif/proxy/lib/ONVIF/PTZ/Types/ReplayCapabilities.pm +b1fba1b5ea9f66b75547a2a105b40992 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDColorOptions.pm +d8f77b3120cce193977e28175b4fad55 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceSetConfiguration.pm +b45f844788152c2a27daa273e7ee61c1 ./onvif/proxy/lib/ONVIF/PTZ/Types/IrCutFilterAutoAdjustment.pm +bd183fc8a27b043ec53a9f52eb4a54c8 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngineConfiguration.pm +26622a26defad1b69c32928e5625800d ./onvif/proxy/lib/ONVIF/PTZ/Types/Vector1D.pm +d05e675840ffbd6bb636beafa96fc714 ./onvif/proxy/lib/ONVIF/PTZ/Types/GetRecordingJobsResponseItem.pm +b9bd141db0b3ce4faf04f4bc8927eaad ./onvif/proxy/lib/ONVIF/PTZ/Types/FaultCodesType.pm +4a4a983eb559906893bad343bc5ca8ef ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDReference.pm +e3dc14af1e448a963daaf395f9bee84d ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoOutput.pm +4ad6eda5b2924a43a899e8d4ffabc787 ./onvif/proxy/lib/ONVIF/PTZ/Types/BacklightCompensationOptions20.pm +6e01f38201cf2c989f5fda04ce6df80a ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSpot.pm +92a11c4110f6ed66a5fbbea21b4e9612 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsDeviceEngineConfigurationExtension.pm +9a9cf1d258d649a2bc814bf31180660b ./onvif/proxy/lib/ONVIF/PTZ/Types/SearchScope.pm +fcb2a3cf1572a8ffd0fed0bc62ddac8a ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalanceOptions20Extension.pm +f6865792804122c3ca81027e1a8325a1 ./onvif/proxy/lib/ONVIF/PTZ/Types/Duplex.pm +8989b9364ff5a12df49873c8f3fc3571 ./onvif/proxy/lib/ONVIF/PTZ/Types/HwAddress.pm +9922b961dc2e6dbc1fb8db91d47953f3 ./onvif/proxy/lib/ONVIF/PTZ/Types/FindRecordingResultList.pm +bec695b81722dc6c4744de210d0a98d8 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingConfiguration.pm +ddbd696d91ecb5e46ae51727efd39984 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobStateTracks.pm +8f8e1f02b231d2bcc1d2b9d4a08ad6ae ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioEncoderConfiguration.pm +705dbf3204a9223e56f59c9ae98bb199 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv4Address.pm +4935d82bf2c2090e6a576a5d2baa878a ./onvif/proxy/lib/ONVIF/PTZ/Types/AutoFocusMode.pm +158f5875c591bd643cdee7a0368038a7 ./onvif/proxy/lib/ONVIF/PTZ/Types/H264Configuration.pm +784fae5a09a9e6796ce2a29c8f25ca4d ./onvif/proxy/lib/ONVIF/PTZ/Types/IrCutFilterAutoBoundaryType.pm +5725c2dd6f2597be8fba7a5ca0811606 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceInfo.pm +c90f3ddd4ee1298bcff0470fd7bdb06f ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZCapabilities.pm +d566e5270ba68ccec57716a0c5c23397 ./onvif/proxy/lib/ONVIF/PTZ/Types/Space1DDescription.pm +b4ec43ca8b18c6d5f018a0fffc81359a ./onvif/proxy/lib/ONVIF/PTZ/Types/JpegOptions2.pm +acdb46761cce74b318dc7da3bf2b3936 ./onvif/proxy/lib/ONVIF/PTZ/Types/UserLevel.pm +2bfaee3061ef5a63576d8b250a839693 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTControlDirectionOptions.pm +70b598b79b063f5d5bfed7fad81767e8 ./onvif/proxy/lib/ONVIF/PTZ/Types/AttributedQNameType.pm +2faf66e74e8aad641998c0eaf48b4c74 ./onvif/proxy/lib/ONVIF/PTZ/Types/BacklightCompensation.pm +a2db152aaa71a01058e13cb008ef2891 ./onvif/proxy/lib/ONVIF/PTZ/Types/Rectangle.pm +bdaf02a1bbed231794e9c49bbab71d16 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingOptions20.pm +72f183a80c092267b7b64948ab7c8be5 ./onvif/proxy/lib/ONVIF/PTZ/Types/ReceiverCapabilities.pm +cb71080c5838466879347db19c7fb619 ./onvif/proxy/lib/ONVIF/PTZ/Types/BacklightCompensationMode.pm +117031f6dfeb9eb827bf9145e5745075 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZMoveStatus.pm +9541b44f03816069e414558dc313d0c8 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingOptions20Extension3.pm +8aec43ef87b3ca3b703eada0f518717c ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourPresetDetail.pm +059c8e36f6a9b9cb1e8afa9fee217a36 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoOutputConfigurationOptions.pm +ddf689567943e26399515e4c50278bdd ./onvif/proxy/lib/ONVIF/PTZ/Types/ColorspaceRange.pm +af569a07c6039ee4c349414c7dd761b2 ./onvif/proxy/lib/ONVIF/PTZ/Types/Domain.pm +30583a27a3e051078d893ecb193f8257 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfiguration.pm +63c56d56516f4ad9144bec4f5a077ea1 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusConfiguration20Extension.pm +39d2e71682c2db45ef60a7baf30be5f2 ./onvif/proxy/lib/ONVIF/PTZ/Types/FloatAttrList.pm +69e7c54f59f6b0e050cc323461a332c9 ./onvif/proxy/lib/ONVIF/PTZ/Types/TimeZone.pm +d930a0adc487ab2dad91f1b2472de3bf ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv6NetworkInterface.pm +e3c3c07ae5254acf30cbf4ba161501e3 ./onvif/proxy/lib/ONVIF/PTZ/Types/DeviceCapabilitiesExtension.pm +cbcf034509f71f62f3913e7ae46b77cf ./onvif/proxy/lib/ONVIF/PTZ/Types/TrackAttributesExtension.pm +de32dd237f8fd8ffc08884d3b5cf7030 ./onvif/proxy/lib/ONVIF/PTZ/Types/AttributedAnyType.pm +3444da58a9d1fe42a17f14d6d3243866 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusOptions20.pm +a19ccb86eb38efe3c5fd496e17ac178a ./onvif/proxy/lib/ONVIF/PTZ/Types/Config.pm +b4eb2711a60c10381132f518894aca53 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourExtension.pm +dc0444716e9a65b8813df83c87a5e792 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioDecoderConfigurationOptions.pm +62eb426693f84c588fdd90aae5106656 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImageStabilizationExtension.pm +3636730d682ed1240b23184f6aa9baed ./onvif/proxy/lib/ONVIF/PTZ/Types/IntRange.pm +f12be7f5fdefc44c4e60a78e9b2c88bc ./onvif/proxy/lib/ONVIF/PTZ/Types/IntRectangleRange.pm +708a26e66a28316bcf8db1fbbfe7f14b ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingOptions20Extension2.pm +24aaeaceac8056895566888f3e480f4a ./onvif/proxy/lib/ONVIF/PTZ/Types/PrefixedIPv6Address.pm +7ff85363188183d52b9a9ef1cd9a3952 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZStatusFilterOptions.pm +d866a9df35b0d91965178362c3c46c4a ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv6ConfigurationExtension.pm +9425f4d6bbbd522a0d4f138d227c0ca3 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZStreamExtension.pm +7657892f34d84206e6b274eb93bdf87a ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoResolution.pm +f68ea442cfde8ce4e65dab8320747b9d ./onvif/proxy/lib/ONVIF/PTZ/Types/Behaviour.pm +555b6eb3a4ea7bfabdde894b6caff3b0 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSupported.pm +919f8840203d2f51774b16dab01e33a7 ./onvif/proxy/lib/ONVIF/PTZ/Types/RotateExtension.pm +d6a457cd4dca0dd209579ce8e632c415 ./onvif/proxy/lib/ONVIF/PTZ/Types/SourceReference.pm +8a1b877acca2ea2a6c28ca0d97191332 ./onvif/proxy/lib/ONVIF/PTZ/Types/RotateMode.pm +8d285f3ced32b368e75d2ad275055f34 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioAnalyticsStreamExtension.pm +84072968a2873935ee3bcf4d6438cf11 ./onvif/proxy/lib/ONVIF/PTZ/Types/Fault.pm +803eac72a19a0532d5dc514de6feccea ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoAnalyticsStream.pm +42fd23fc1a07b298abfc5c63de42bf14 ./onvif/proxy/lib/ONVIF/PTZ/Types/PaneOptionExtension.pm +b68011084502eff7fbabee02ac087704 ./onvif/proxy/lib/ONVIF/PTZ/Types/User.pm +3d1f310f86f50a119550b1d0901c9597 ./onvif/proxy/lib/ONVIF/PTZ/Types/Mpeg4Options.pm +04a796af14dd01c7d7f60f6eeeb8818d ./onvif/proxy/lib/ONVIF/PTZ/Types/Merge.pm +ebcf1da91bb25af71903c82d318f0952 ./onvif/proxy/lib/ONVIF/PTZ/Types/WideDynamicRangeOptions.pm +9e6fd3e5c5c7200fb488920351a34231 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusMove.pm +4c9beca975166e3e8f7900a1a29054cd ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataConfigurationOptions.pm +4805642774fa3f6e95376afaa1ea008a ./onvif/proxy/lib/ONVIF/PTZ/Types/ColorDescriptor.pm +1e4a8458ea08047e752a2ec06c70022b ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkProtocolExtension.pm +53a7531053e4e3464c0ddfda6ad22331 ./onvif/proxy/lib/ONVIF/PTZ/Types/MessageExtension.pm +edc760d026509b2bbc91fbbba3f1289e ./onvif/proxy/lib/ONVIF/PTZ/Types/EFlipMode.pm +e4ad7fca0796cd299e15bc298bed273c ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourState.pm +00f08361412fb8f4e558b97c0154020d ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZFilter.pm +29e0d9ab2f41324be4df7f79b5217433 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobStateInformation.pm +a653fc3f752d996732d99add69b2f080 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv4NetworkInterface.pm +97f06dcbb56ddd46f270f4db56c84f70 ./onvif/proxy/lib/ONVIF/PTZ/Types/HostnameInformation.pm +f602fd349673bb4575047e09940e3510 ./onvif/proxy/lib/ONVIF/PTZ/Types/RuleEngineConfigurationExtension.pm +3eff909ec0609f2188f069342721480e ./onvif/proxy/lib/ONVIF/PTZ/Types/TopicNamespaceLocation.pm +9fd189d2fd071bae4039e9c60d0e0c9f ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11AuthAndMangementSuite.pm +86043e8d44540663bd1c970368767a7c ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemLogUriList.pm +d598588f401bc345693cd00b395f8140 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoEncoderOptionsExtension2.pm +682bf5d47f036127d5b886422eb0e88e ./onvif/proxy/lib/ONVIF/PTZ/Types/BackupFile.pm +5dbcd5d20f246d286f397ceed3d27554 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkZeroConfiguration.pm +e68bd5190c27a0a6470fb3661b780347 ./onvif/proxy/lib/ONVIF/PTZ/Types/PolylineArray.pm +ff7595d0df821323b24d25c2da2a3deb ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11PSKSet.pm +ebec4ecea9ed94413eb15546a10a19d5 ./onvif/proxy/lib/ONVIF/PTZ/Types/LayoutOptionsExtension.pm +24716b0e4d64c60661c9c0034750bcbb ./onvif/proxy/lib/ONVIF/PTZ/Types/Receiver.pm +22bf5714b2ac78cf5a0564bdc765748d ./onvif/proxy/lib/ONVIF/PTZ/Types/SecurityCapabilitiesExtension.pm +a8a09a1e45540d49fd3aa709f7f6a634 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingSettingsExtension202.pm +92bf512a82589b2b4b4d36c2b7fa9d19 ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataType.pm +53faeb737ec48b25f6e48eb97d1ee3fd ./onvif/proxy/lib/ONVIF/PTZ/Types/EngineConfiguration.pm +d3c1f325d3ea1445281b879a9382c00d ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemCapabilities.pm +3ed4f4102b95c0ace6e2eb7b988069da ./onvif/proxy/lib/ONVIF/PTZ/Types/IntRectangle.pm +2ac671b8924817e740b8c4f8896d272d ./onvif/proxy/lib/ONVIF/PTZ/Types/ClassType.pm +0e420e8b2a6a333c6b921783d36bcbdf ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkZeroConfigurationExtension2.pm +5404a867b87cff1b94a19eb5b4ec6d37 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusConfiguration20.pm +9c101eeefb668dfd7ffab20564c5a3ab ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZConfigurationOptions2.pm +1e11f99a70e614ae78fe72fa4f029dd0 ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataInputExtension.pm +d9ed082be6dcb120ccf970afa4a3ffdf ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateUsage.pm +e226c1f280e88c0b7ca5c8b4a22310e8 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioEncoding.pm +7911e56fc0f09e79829d45174cde6d44 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZConfigurationOptions.pm +c422aeb9eb38fa12bf161368767149dc ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioOutput.pm +ca397482d4463c168219f1ea51b74204 ./onvif/proxy/lib/ONVIF/PTZ/Types/AppearanceExtension.pm +b8e03fc3882bf331216ed58f6f5660db ./onvif/proxy/lib/ONVIF/PTZ/Types/ColorOptions.pm +f0739bd020ca634794073d6f3b97b9f6 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZNodeExtension2.pm +999c0ce2fa5ddd5694e79b89300e1315 ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalanceOptions20.pm +0477c4f873e38acb20e059c883d3e170 ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateWithPrivateKey.pm +a1078017b1b1cbc9e1b94c1b5e16fa2f ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoOutputExtension.pm +12a0fc9573b124b5e4c42707b8bad97c ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingSettings20.pm +0d47ec7bc13c93148aecf1939c40441d ./onvif/proxy/lib/ONVIF/PTZ/Types/RealTimeStreamingCapabilities.pm +6493e53d6b8995da0cebc4ea1a6d259a ./onvif/proxy/lib/ONVIF/PTZ/Types/ClassDescriptor.pm +4ea3373b501bcbb0104173110d8da8b7 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZConfigurationExtension2.pm +691638112f43fe37c9a74fe3541e848e ./onvif/proxy/lib/ONVIF/PTZ/Types/TLSConfiguration.pm +1c0d47cb30c902facf5e677acd0062ea ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot1XConfiguration.pm +e2f035df5bcb309b1e84f8b8ebd0710c ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZNode.pm +cf2271bac421e7471668ee3f9ff211e5 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSource.pm +70e6ca7c816200ce6bdb9e7d6a936db1 ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemDateTimeExtension.pm +ce64dcd18fdbc8c2af492b5ce97dc9ad ./onvif/proxy/lib/ONVIF/PTZ/Types/RealTimeStreamingCapabilitiesExtension.pm +9ef6a841c89d97fb448e918812e63521 ./onvif/proxy/lib/ONVIF/PTZ/Types/ExposureOptions.pm +30b663228ee0414922ace0ef12cccd90 ./onvif/proxy/lib/ONVIF/PTZ/Types/FindEventResultList.pm +9b18d50d63b99309c83fb937ebe5b0c8 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoAttributes.pm +aa6df705fbab248ac87068f20725f1c6 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImageStabilizationOptionsExtension.pm +cc5acd54c5d474e8a441143531a9727b ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemCapabilitiesExtension.pm +8a1be43fc3a2192c84eef7fa37fb3099 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfigurationExtension.pm +3a25c8e68d1eed245934013b58f0603d ./onvif/proxy/lib/ONVIF/PTZ/Types/Vector2D.pm +b167dc94bf9d2ed45d3bebb53b6df6d3 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoEncoderConfigurationOptions.pm +7e96c1282180bf4c5be835af672a6b3d ./onvif/proxy/lib/ONVIF/PTZ/Types/IrCutFilterAutoAdjustmentOptionsExtension.pm +5a0b1e08f15217623b67300e47311d31 ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateInformationExtension.pm +4c5afa63d5dd7e8d3538ec4f22fb1662 ./onvif/proxy/lib/ONVIF/PTZ/Types/ConfigDescriptionExtension.pm +b264fcf0a3766e783e89c7f92cc9297c ./onvif/proxy/lib/ONVIF/PTZ/Types/DigitalInput.pm +8a110bf7eb5b7c8a93d59332e7871842 ./onvif/proxy/lib/ONVIF/PTZ/Types/SourceIdentification.pm +e06434ed7d58b2339448e5eef562ddea ./onvif/proxy/lib/ONVIF/PTZ/Types/IANA_IfTypes.pm +bc2fad5ccc2805ca097f69c49c36ca74 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceLink.pm +f619b56971953a444546a3f5d2a024b5 ./onvif/proxy/lib/ONVIF/PTZ/Types/PaneConfiguration.pm +094e04aeea05761bd19fac46e57a57bc ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11AvailableNetworks.pm +925500e642999dc9f4b105fb90e6078e ./onvif/proxy/lib/ONVIF/PTZ/Types/IPAddressFilter.pm +ba1ebdb64c04310d609cfb0d22bb2256 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobState.pm +43302b46c907a96954f8938029d553a8 ./onvif/proxy/lib/ONVIF/PTZ/Types/Profile.pm +52e25ec8dadd46ff692b8caf03487857 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPositionFilter.pm +e84c8fe358b804d48e82bb22634befee ./onvif/proxy/lib/ONVIF/PTZ/Types/RuleEngineConfiguration.pm +a2af5bd31f2f0481148fed800476b40f ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceConfigPriority.pm +57763cb5bb5ea06d3ffd7a5190a7e9d6 ./onvif/proxy/lib/ONVIF/PTZ/Types/SourceIdentificationExtension.pm +ca79daa2f608aa19ad9ed2265ce02083 ./onvif/proxy/lib/ONVIF/PTZ/Types/Documentation.pm +e764c53a0a6450f3293c8abc72f1382b ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextOptions.pm +99c347e7a287c9be0f58a8af9fb71342 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceConfigurationOptionsExtension.pm +879e7282a4b0e7c69a58639b395b187d ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsStateInformation.pm +b947b21976384f21fdd2a07c12483b3f ./onvif/proxy/lib/ONVIF/PTZ/Types/ClassDescriptorExtension2.pm +8cb4233d473cecc7769a752892351abd ./onvif/proxy/lib/ONVIF/PTZ/Types/ExposureMode.pm +bc8d4f957b4415d9c7e207b653c348fb ./onvif/proxy/lib/ONVIF/PTZ/Types/ReceiverMode.pm +31f359c48445cf9d7c5b4ea87e6c8bcb ./onvif/proxy/lib/ONVIF/PTZ/Types/ReplayConfiguration.pm +d93a6501e3cfecc405a766a689207764 ./onvif/proxy/lib/ONVIF/PTZ/Types/ContinuousFocus.pm +e512e528ed046c9c02bdce16358d2cca ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStartingCondition.pm +d27151385db4b6063edecfa35cc233ea ./onvif/proxy/lib/ONVIF/PTZ/Types/ShapeDescriptor.pm +e3a42266c97869997339a07899dc78a9 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDImgConfigurationExtension.pm +6f05d7a2875e2a9441927bbe7b3f86e1 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDPosConfiguration.pm +d422ed5b199f77bcea35f5716feee596 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStartingConditionOptionsExtension.pm +e0a535d36d07b17360963fb1479dd955 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingSummary.pm +b326174d927a14a68801ab536ce6ff7f ./onvif/proxy/lib/ONVIF/PTZ/Types/ModeOfOperation.pm +5aefa2565e6f3b01b0c1ba01aaaa7d19 ./onvif/proxy/lib/ONVIF/PTZ/Types/BacklightCompensationOptions.pm +c9eea82e0cf16a7eedb177ea327bd4ac ./onvif/proxy/lib/ONVIF/PTZ/Types/Appearance.pm +fcb56b25162445cae8ecb3c4cedb4d0a ./onvif/proxy/lib/ONVIF/PTZ/Types/ItemList.pm +65438ae32abb407620f80fe8bc997355 ./onvif/proxy/lib/ONVIF/PTZ/Types/DNSName.pm +a99b5b52c1a155bc1ffb471710e8cbe0 ./onvif/proxy/lib/ONVIF/PTZ/Types/H264DecOptions.pm +7d2247e9028cdc4a72938f308497c890 ./onvif/proxy/lib/ONVIF/PTZ/Types/FrameExtension.pm +33c1cd846d8a56fdd307f776285b8482 ./onvif/proxy/lib/ONVIF/PTZ/Types/WideDynamicRange.pm +8698bb91e76cae09f8a5238a91b0674e ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv6Configuration.pm +11b251dff045bd3f66329aaba9f63480 ./onvif/proxy/lib/ONVIF/PTZ/Types/ColorCovariance.pm +69161dfd5c273ab0cc265cd01b482c4d ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDColorOptionsExtension.pm +3ff0c20bf0589bdd2c0e9fefa8f27ac3 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStartingConditionOptions.pm +3cb0409a32605032a25fce376d02b9fa ./onvif/proxy/lib/ONVIF/PTZ/Types/NTPInformationExtension.pm +9cba9dd2c12b1f7fdc313f4fd01c3234 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioSource.pm +02c26dee63e2180d5438adf84ad8b375 ./onvif/proxy/lib/ONVIF/PTZ/Types/PolygonConfiguration.pm +908adc52677a961b1b56be4e3ebfc2a0 ./onvif/proxy/lib/ONVIF/PTZ/Types/G711DecOptions.pm +ca6236d4d1e66c2cd85a11abb70c5edd ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv6NetworkInterfaceSetConfiguration.pm +79163074c3ca2d4c9f9b1a57b6d503fe ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11Status.pm +3dc7d116f04d43d84221da8863e0b5db ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourDirection.pm +1ada8562c1359650783c4c55cd4e9b38 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot1XConfigurationExtension.pm +f3e3692b5fb3dbc1dc381ae7c06ea8ae ./onvif/proxy/lib/ONVIF/PTZ/Types/DNSInformation.pm +447523d9e33a3c3c49e1c92f9d78bf22 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStatus.pm +4b8f0185a0919577636974bd47f809da ./onvif/proxy/lib/ONVIF/PTZ/Types/ReverseOptions.pm +c87869a64679cc1ebe5d4a77b7433c08 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingCapabilities.pm +50962a094e4792dc472bb88971ea2235 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngineInputInfo.pm +0cad472514d2601e0d8d1bdc108eaeb7 ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemLog.pm +9a479ec90cf623e6bf02c303d8706c92 ./onvif/proxy/lib/ONVIF/PTZ/Types/HostnameInformationExtension.pm +4034c1a8a1cf0c70a363a5cc157ea49d ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobTrack.pm +627c9b3d8fd7bad989e1836bce90625b ./onvif/proxy/lib/ONVIF/PTZ/Types/FindMetadataResult.pm +4f3b453acec771d2dd73abd6c247f722 ./onvif/proxy/lib/ONVIF/PTZ/Types/FloatRange.pm +dc80b53870d7a6cc3477f950f51ccff7 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingOptions.pm +48a16e18aa6997763a0444f9cf9d3fd4 ./onvif/proxy/lib/ONVIF/PTZ/Types/Mpeg4Profile.pm +07ef935634ca348011a9938cf1cefae5 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingSettingsExtension203.pm +6409392ceb88d54a9d80d2e8cd37225c ./onvif/proxy/lib/ONVIF/PTZ/Types/ImageStabilizationMode.pm +b5b9244591b87d44a3c1d9a36f43aa7b ./onvif/proxy/lib/ONVIF/PTZ/Types/FaultCodesOpenEnumType.pm +f13a44fcde0f2bba422cf1d27380acd1 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelayOutputSettings.pm +9f1e0ea27c22835c187cea54afc61132 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusOptions.pm +2f468e86615156ec6d7cbe49c5fb80b7 ./onvif/proxy/lib/ONVIF/PTZ/Types/FindPTZPositionResultList.pm +d91d54f358a7af70b5369ec7a72cbd7e ./onvif/proxy/lib/ONVIF/PTZ/Types/DynamicDNSType.pm +c00da9b2aa6d83111c46d60145c75c15 ./onvif/proxy/lib/ONVIF/PTZ/Types/PropertyOperation.pm +78ca4182bd7cb164c615a74a63c16d55 ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataStream.pm +685adb6f3dcf3a7a7cb82bbaca3d2a41 ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataStreamExtension.pm +e3f0240aa2af6163770b5e8f17d2abe7 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot3Configuration.pm +7793085a293b4357210e97fefc312009 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingStatus.pm +c24d5a434737e3c8af5e73d6a63d7057 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelationshipTypeOpenEnum.pm +45c27714afda42163b66c64b0da7cd30 ./onvif/proxy/lib/ONVIF/PTZ/Types/ObjectExtension.pm +7f49562c85768a52780e0f90b07c16d4 ./onvif/proxy/lib/ONVIF/PTZ/Types/Polyline.pm +2ad4231292a710bbc410b5d66bf3a7f5 ./onvif/proxy/lib/ONVIF/PTZ/Types/GetRecordingsResponseItem.pm +91c3e92dd6d87d3eefc632fdb6026861 ./onvif/proxy/lib/ONVIF/PTZ/Types/StreamType.pm +a1e127da734b84c57f8e80087644d5f0 ./onvif/proxy/lib/ONVIF/PTZ/Types/FindEventResult.pm +2c2bcd9b153f0c010c0e245ab17d887c ./onvif/proxy/lib/ONVIF/PTZ/Types/LayoutExtension.pm +dde57131df02d63188bfe1fe6d406795 ./onvif/proxy/lib/ONVIF/PTZ/Types/PaneLayoutOptions.pm +cdcdecef7144bf0d6eb9efd3a6ce4c10 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsState.pm +cb9368c4d79919f02066fac9d83f7d10 ./onvif/proxy/lib/ONVIF/PTZ/Types/EAPMethodConfiguration.pm +ba39f4ac42fd3f2f9a163c262437ded4 ./onvif/proxy/lib/ONVIF/PTZ/Types/TrackAttributes.pm +7a2e2d95005e54026261f9b5c7635b81 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsDeviceEngineConfiguration.pm +b2ee2f6d668b2b168bd638fd809b3db8 ./onvif/proxy/lib/ONVIF/PTZ/Types/MediaCapabilities.pm +87d988d0503890f2d0ea65611a9357e8 ./onvif/proxy/lib/ONVIF/PTZ/Types/Object.pm +4f2fd9f1547b5a97529461f7b3676a23 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkCapabilitiesExtension.pm +54abb362024d8a8d272262a992b2cd3b ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStatusExtension.pm +712bd2d8142d689b9a1d1f4a9d3435db ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourOptions.pm +3b69eec64f154b5d6784d62681ff2dec ./onvif/proxy/lib/ONVIF/PTZ/Types/ProfileCapabilities.pm +1c48e62e6b186bcd32672bb71d81f8fe ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioSourceConfiguration.pm +026cc2bdbf18681774be36e404aa064f ./onvif/proxy/lib/ONVIF/PTZ/Types/FactoryDefaultType.pm +ef9adc5afceed0d455c37f9e2fca0051 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTControlDirectionExtension.pm +a630edf2ba97e8467cfb90d4a215b825 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSupportedExtension.pm +08239af25850fc8a84a493eca451ac06 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDType.pm +c36830014968a1a4be7eb7d2388724b6 ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateStatus.pm +f567b2183bb26dea5399f945afd1c7fb ./onvif/proxy/lib/ONVIF/PTZ/Types/Header.pm +2297a0342d1bf60ef6231ba696774617 ./onvif/proxy/lib/ONVIF/PTZ/Types/PrefixedIPv4Address.pm +deffc2bc65510147affe2c39d21240f2 ./onvif/proxy/lib/ONVIF/PTZ/Types/BaseFaultType.pm +844a7d6ba51f7692e4dd9842ab9ad6f3 ./onvif/proxy/lib/ONVIF/PTZ/Types/IOCapabilitiesExtension2.pm +ed9ca3930f8d8ab89c83714f099a17fb ./onvif/proxy/lib/ONVIF/PTZ/Types/DiscoveryMode.pm +9c8859bfcf14fc3d4af092c8a12e9c47 ./onvif/proxy/lib/ONVIF/PTZ/Types/SearchScopeExtension.pm +78d548bb28ede881ad75e827a9d81562 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextOptionsExtension.pm +c447d0bb4b4edd70603d004ac70245f4 ./onvif/proxy/lib/ONVIF/PTZ/Types/ProblemActionType.pm +7adbf31c62c9f299ce596822c4eb26df ./onvif/proxy/lib/ONVIF/PTZ/Types/Color.pm +f8bffeffc13ec4ce0438ad7a7d0ea701 ./onvif/proxy/lib/ONVIF/PTZ/Types/OtherType.pm +f1c6fc188590b06ab872d107ecc59d95 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioDescriptor.pm +8e4a4b8b877e7cbee249cb8489b35cee ./onvif/proxy/lib/ONVIF/PTZ/Types/base64Binary.pm +927ec62a3df1e5a96de0a2196bc7e7db ./onvif/proxy/lib/ONVIF/PTZ/Types/IOCapabilitiesExtension.pm +c6a0e8b19bace704a89f667124e52ba7 ./onvif/proxy/lib/ONVIF/PTZ/Types/H264Options2.pm +65ff49d5dd964d8aba8c1373a3206e66 ./onvif/proxy/lib/ONVIF/PTZ/Types/PolylineArrayConfiguration.pm +de58161497313afe2546b6d07b040578 ./onvif/proxy/lib/ONVIF/PTZ/Types/ContinuousFocusOptions.pm +910c9e1eb1d7bbf312495736ad26acee ./onvif/proxy/lib/ONVIF/PTZ/Types/G726DecOptions.pm +0a7e5e323d162297d7daf4b674b9a642 ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalance20Extension.pm +13ebef6a796d11fd04d20f30a58cff90 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusStatus20.pm +fdcb0f87493aa48e2a0e1df2c00ab98a ./onvif/proxy/lib/ONVIF/PTZ/Types/IOCapabilities.pm +c68639f53a362ebda6b75985121169f2 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkProtocolType.pm +7ba0a4db988059e3ebe696aafd78bb4b ./onvif/proxy/lib/ONVIF/PTZ/Types/Include.pm +046176f99a7acb1ed56e520e3972cdec ./onvif/proxy/lib/ONVIF/PTZ/Types/ItemListDescription.pm +c87f1ea70a739b5479b4af03a9f82bbc ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingStatus20.pm +3610dc7e3cffb7ee4b6932c52618f86e ./onvif/proxy/lib/ONVIF/PTZ/Types/MulticastConfiguration.pm +52959d3d03a51b1afbd32240cf33c9aa ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataConfigurationExtension.pm +cd777fc3416f67e563705740bddc3922 ./onvif/proxy/lib/ONVIF/PTZ/Types/ActionEngineEventPayloadExtension.pm +372590a9b37eda8fa6ba863aead2b1af ./onvif/proxy/lib/ONVIF/PTZ/Types/MediaUri.pm +5bc36393cf96957f69c1b5ce0386f4d3 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZVector.pm +de09beaff3404177c5a18536897972f8 ./onvif/proxy/lib/ONVIF/PTZ/Types/MoveOptions20.pm +932e85df59be0257b7bdc9b4d708e3d4 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelatesToType.pm +ae8a0d913e73d93212e42cc11d00a785 ./onvif/proxy/lib/ONVIF/PTZ/Types/PolylineArrayExtension.pm +0d6182f83fc8ac66ca1bd1a981443bd1 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingStatus.pm +415d743c151983e62e505196cd9c4cb7 ./onvif/proxy/lib/ONVIF/PTZ/Types/IntList.pm +349fa7d1b1b802d51a254812c65356d1 ./onvif/proxy/lib/ONVIF/PTZ/Types/Capabilities.pm +5def0c6243a96e3ed339e3146765ecef ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZConfiguration.pm +54c831a42dc4ed72db9d43ba2f0df9a2 ./onvif/proxy/lib/ONVIF/PTZ/Types/Certificate.pm +406b3a1cdb7c3d3bb375756517db058d ./onvif/proxy/lib/ONVIF/PTZ/Types/AttachmentData.pm +c46504b1e5f8be1296d48678b95acfba ./onvif/proxy/lib/ONVIF/PTZ/Types/ReferenceToken.pm +2b514b2f5959e5778bfc0d7056d5f609 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnyHolder.pm +d774a6ef0c6bf6effe7a664250d00fc0 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobConfiguration.pm +f384f81ce8c848070102425135fc249b ./onvif/proxy/lib/ONVIF/PTZ/Types/RelayMode.pm +4b478d9dd6a821e46156dc628400cc9d ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingSettingsExtension20.pm +5eb90070b2082ef3ee5a4518c5525d68 ./onvif/proxy/lib/ONVIF/PTZ/Types/UserExtension.pm +0e479121deca10925ecb0e6386be5e14 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv4Configuration.pm +6792f9be82908cc82b91271a1ae00235 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsDeviceExtension.pm +2a193dfc28b676dcbbd45d43b93a0e26 ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemCapabilitiesExtension2.pm +320397f53711bae8cdf2f904be0544f6 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPAddress.pm +cd787fb66f46f72747fdcbcbea85b104 ./onvif/proxy/lib/ONVIF/PTZ/Types/CapabilitiesExtension.pm +50f345b06024dfd50f76a9ef9691dd64 ./onvif/proxy/lib/ONVIF/PTZ/Types/TrackInformation.pm +953a1ecebc4ff50aff3aa024a1a4b1b9 ./onvif/proxy/lib/ONVIF/PTZ/Types/SecurityCapabilitiesExtension2.pm +acd15357a4bdae1b4e29cb88c744a55c ./onvif/proxy/lib/ONVIF/PTZ/Types/CellLayout.pm +e37690797037075a885df3c4c0fd92e0 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZStatus.pm +af8767580765ae7e44f3487e2b70fb06 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusStatus20Extension.pm +69cdfa2509600e9808d92a608392acfc ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoDecoderConfigurationOptionsExtension.pm +cb97003ce2175ca502c77dff739a4591 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsCapabilities.pm +30732a84a833ed92828c43f45f902064 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkGateway.pm +d16f65d599a7ba714002a5aac71b7263 ./onvif/proxy/lib/ONVIF/PTZ/Types/ProfileExtension.pm +83491d97c2a21ee3ad13aecbb1626544 ./onvif/proxy/lib/ONVIF/PTZ/Types/BinaryData.pm +ff554ef559f3d347d99c00172a31eb74 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioAttributes.pm +2bcd7202a3836ac7da51c7b87f3a4825 ./onvif/proxy/lib/ONVIF/PTZ/Types/EndpointReferenceType.pm +1337bedfa7022a5d935d15d55069d17d ./onvif/proxy/lib/ONVIF/PTZ/Types/ReceiverState.pm +07fdd04787d4016cf6b1bb3c90e84ff1 ./onvif/proxy/lib/ONVIF/PTZ/Types/TransformationExtension.pm +e98be022dcfcd1f7e1dc835963310d20 ./onvif/proxy/lib/ONVIF/PTZ/Types/hexBinary.pm +7aa55a88ba99df9c4a10285e904fb7c7 ./onvif/proxy/lib/ONVIF/PTZ/Types/Exposure.pm +5fdf1c1d648e13bd48bff49700e40b08 ./onvif/proxy/lib/ONVIF/PTZ/Types/ExposurePriority.pm +2f60cd97770012479eb0e38bbd27c585 ./onvif/proxy/lib/ONVIF/PTZ/Types/EFlipOptions.pm +08ec8074ce0a3fcf1606fb79e1ecfb50 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsDeviceCapabilities.pm +29dba0952d296c946089ccbeb09cac9d ./onvif/proxy/lib/ONVIF/PTZ/Types/FindPTZPositionResult.pm +33162dabd0dcbcb3ddfd63e2c09f33b5 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngineControl.pm +3bdffb3e0e95edf2df786fa50276d43a ./onvif/proxy/lib/ONVIF/PTZ/Types/LayoutOptions.pm +5319ba09b6e562bcd31e6e3f424a0339 ./onvif/proxy/lib/ONVIF/PTZ/Types/ColorDescriptorExtension.pm +4b6c1891788a580ea171f652fe0a70c2 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkCapabilitiesExtension2.pm +a68309215919e9fc97b2832684b9d162 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelayOutput.pm +a9c15727a9018e7f51b2912a96046135 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourOperation.pm +5b98973aacdf2a55c02fffb4d10c58e4 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceExtension2.pm +a771d947f19bf77f880b6b24b63d3909 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZNodeExtension.pm +14614b956d5c5a78635a2e96a04c5d7a ./onvif/proxy/lib/ONVIF/PTZ/Types/JpegOptions.pm +9e331ec49504e31e39d558a749a5856f ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkHostType.pm +389ae5e4b36e22671835c8b87e85282e ./onvif/proxy/lib/ONVIF/PTZ/Types/DynamicDNSInformationExtension.pm +8193470efbbb952e522c63f172f3db2d ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateGenerationParameters.pm +4e878d0b9acc263a8d083e9f4e5ec890 ./onvif/proxy/lib/ONVIF/PTZ/Types/ObjectTreeExtension.pm +f3a303ed0522994054600e622710661e ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngine.pm +2db438578920e728426f184a003ab7f1 ./onvif/proxy/lib/ONVIF/PTZ/Types/MotionInCells.pm +72376d4076180b90ade906f5658b7fa8 ./onvif/proxy/lib/ONVIF/PTZ/Types/Rotate.pm +ff193284a96c096fa522547be4b422c0 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobMode.pm +5b123bbe77ea02b99febd6dd2e4e2400 ./onvif/proxy/lib/ONVIF/PTZ/Types/RemoteUser.pm +7500dafa32552c1191214f55d7bff746 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTControlDirection.pm +c76d8b56ccf24405968e73ee2d00cb29 ./onvif/proxy/lib/ONVIF/PTZ/Types/Reverse.pm +19bf97fbc3e0b9a80cc82ddab0e8f5b2 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZConfigurationExtension.pm +97c19cca570b09d044fbf0a19a4c28e9 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioEncoderConfigurationOption.pm +ccbcdb7390f06ac06801b9c8de033bf5 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoAnalyticsStreamExtension.pm +a46c912eef961c4ccffe7d9eeef8411f ./onvif/proxy/lib/ONVIF/PTZ/Types/RelativeFocus.pm +d674604a3e672a04056768caa5c07a4b ./onvif/proxy/lib/ONVIF/PTZ/Types/Mpeg4Configuration.pm +837642259d53ae82c22ca9e6e650f7fd ./onvif/proxy/lib/ONVIF/PTZ/Types/ObjectId.pm +5b41ad14b3d6875a01bd87d0bc7c5d60 ./onvif/proxy/lib/ONVIF/PTZ/Types/DeviceEntity.pm +a0b70837196f70acfd279e9fe3cf15f0 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobStateSource.pm +fcb21f5049ec7817ae4bba81229b6802 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoAnalyticsConfiguration.pm +857d6cc251df3d9d8cf055f6a4cb92ca ./onvif/proxy/lib/ONVIF/PTZ/Types/IPAddressFilterExtension.pm +6be59f6efab565c3ae29972c7c99dbbf ./onvif/proxy/lib/ONVIF/PTZ/Types/JobToken.pm +f19f0fbe70e564d1d01e0b105d09f31e ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataAttributes.pm +f7f4750a9335f2a42baa546810a8c973 ./onvif/proxy/lib/ONVIF/PTZ/Types/Body.pm +e69ee4e6a71b04cb78a4545094a8bebc ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioAnalyticsStream.pm +f82437a253890af1ef91543e2331257d ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngineInput.pm +a98be533fd46d4c10641bf278fa0a98a ./onvif/proxy/lib/ONVIF/PTZ/Types/MotionExpressionConfiguration.pm +3336f0dd038bad101f7a6b8e56760f47 ./onvif/proxy/lib/ONVIF/PTZ/Types/JpegDecOptions.pm +25df7c2d184de678e47e8778d494432a ./onvif/proxy/lib/ONVIF/PTZ/Types/ItemListDescriptionExtension.pm +b9823ad667d40f6a0495b3704aaa7388 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceExtension2.pm +e5dc354d75fdd2fd679ad31920da51b8 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZSpacesExtension.pm +6bf51a0d9e348238fca9fdbc8060a278 ./onvif/proxy/lib/ONVIF/PTZ/Types/Exposure20.pm +f4793fc644fe89ebffc349b99216a3fb ./onvif/proxy/lib/ONVIF/PTZ/Types/Description.pm +b058ed12d90d2e96e03e1e7e43e26a8b ./onvif/proxy/lib/ONVIF/PTZ/Types/Vector.pm +8d6d0cdcc18332f3201b7ffdacb8488e ./onvif/proxy/lib/ONVIF/PTZ/Types/EapMethodExtension.pm +3073084db9bb30d51516a863c1f939a4 ./onvif/proxy/lib/ONVIF/PTZ/Types/WideDynamicRange20.pm +4061d9a73840f316717ea70cfd178808 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDImgOptionsExtension.pm +21c504d25b790b52a5a7dfbd424a23b2 ./onvif/proxy/lib/ONVIF/PTZ/Types/ItemListExtension.pm +096d6dcaa397942b9f280c0ae88bb31d ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobStateTrack.pm +ea667e818f376a9b3159ee9a7e9ae260 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11Cipher.pm +2187ac9eae99dda92178a98ba78025f5 ./onvif/proxy/lib/ONVIF/PTZ/Types/MediaCapabilitiesExtension.pm +47e0d2332d89e12cc63eb5040f70fe7f ./onvif/proxy/lib/ONVIF/PTZ/Types/Envelope.pm +70c342e6e5962130af509d4d235ac5a2 ./onvif/proxy/lib/ONVIF/PTZ/Types/SupportInformation.pm +1517f410a3ac7162254ff06e65701bbf ./onvif/proxy/lib/ONVIF/PTZ/Types/ReceiverConfiguration.pm +c1c05dcd0fa44b08a513eb41be8b8b4e ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceConfigurationOptions.pm +4468270f3dab544c9312de271ee02e8a ./onvif/proxy/lib/ONVIF/PTZ/Types/Scope.pm +b5ebd2f228aecbc3149a1965eab46241 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPreset.pm +9a83327db5e3d3f98128569f7edc9574 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioClassDescriptor.pm +8c31bc687aabd15f2d15d0a836a09e7e ./onvif/proxy/lib/ONVIF/PTZ/Types/Space2DDescription.pm +774ee43ad4495f0b09b666364ef0ec8d ./onvif/proxy/lib/ONVIF/PTZ/Types/StringAttrList.pm +a1e58734aeb619e0732a756aee8a1e0b ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11Configuration.pm +0d052758af361eec0f9f12d1f3ba78b0 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkZeroConfigurationExtension.pm +4e7661ec886ed94f3d1a9a9c9e7e481c ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDColor.pm +ccc7e15209c2649678e14edc4e6720c0 ./onvif/proxy/lib/ONVIF/PTZ/Types/SupportedAnalyticsModules.pm +2f547cbfd2da5c789b658b7bc9e09f04 ./onvif/proxy/lib/ONVIF/Device/Elements/SetScopes.pm +47ddb7cba48fefdb05dd644b1050aed1 ./onvif/proxy/lib/ONVIF/Device/Elements/GetServiceCapabilitiesResponse.pm +b99949886847590cd484ca15c0897f3d ./onvif/proxy/lib/ONVIF/Device/Elements/GetScopes.pm +edd73ddebc665c6d07d92da75fcc759f ./onvif/proxy/lib/ONVIF/Device/Elements/Polygon.pm +9338f60f44ed7c07319a015b75651aca ./onvif/proxy/lib/ONVIF/Device/Elements/GetPkcs10RequestResponse.pm +9f31e8b43159fb96cc708869373ebffb ./onvif/proxy/lib/ONVIF/Device/Elements/ScanAvailableDot11NetworksResponse.pm +616c60cfad3d0dcd4524bc954120e8b9 ./onvif/proxy/lib/ONVIF/Device/Elements/GetClientCertificateModeResponse.pm +7006833f4819c61f9c62954abce8157a ./onvif/proxy/lib/ONVIF/Device/Elements/GetNTPResponse.pm +822ec88bf2636826ab5ef5f8ebc860f4 ./onvif/proxy/lib/ONVIF/Device/Elements/CreateUsers.pm +172226e2ae1e6be14dc31c352b448a1c ./onvif/proxy/lib/ONVIF/Device/Elements/MetadataConfiguration.pm +f3c8ea28093cb61063c15be3cf98709e ./onvif/proxy/lib/ONVIF/Device/Elements/DeleteUsersResponse.pm +3cac3ab5e1e0b05521ce824800f3cc38 ./onvif/proxy/lib/ONVIF/Device/Elements/SetRelayOutputState.pm +5f5b6c6993841f579e0b0cdbc926fdf9 ./onvif/proxy/lib/ONVIF/Device/Elements/SetDPAddresses.pm +f50a4e5d9e9de98ae3d049cf07efc6b4 ./onvif/proxy/lib/ONVIF/Device/Elements/SetNetworkProtocols.pm +f2e95c2c3665ec1404b15e331bbfa457 ./onvif/proxy/lib/ONVIF/Device/Elements/GetWsdlUrl.pm +0837db6020e3849bf959be2484fc866a ./onvif/proxy/lib/ONVIF/Device/Elements/GetCapabilities.pm +7dbe11a3e0d3476308cbea6569ecc399 ./onvif/proxy/lib/ONVIF/Device/Elements/GetCACertificatesResponse.pm +a8055741eff860611ba5d0a5422a6712 ./onvif/proxy/lib/ONVIF/Device/Elements/VideoSourceConfiguration.pm +20bfa2b7cad41777d52c68d6a7b422be ./onvif/proxy/lib/ONVIF/Device/Elements/GetDPAddresses.pm +ad75dd746cc7d0b2fe36a74d15d82677 ./onvif/proxy/lib/ONVIF/Device/Elements/GetRelayOutputs.pm +5fc44665a5b41578ad0a7c52ebdea38a ./onvif/proxy/lib/ONVIF/Device/Elements/GetCACertificates.pm +3bc647b0281f890e02cc64ad4882891d ./onvif/proxy/lib/ONVIF/Device/Elements/SetUser.pm +0359c22ccde58375a1d725fef77b2d39 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDiscoveryModeResponse.pm +0585089380807f5518be138db463bf98 ./onvif/proxy/lib/ONVIF/Device/Elements/StartSystemRestore.pm +290a57bac4f17af4b41610ea98bf31d7 ./onvif/proxy/lib/ONVIF/Device/Elements/SetRelayOutputSettingsResponse.pm +8509fdc68f97ceda1f78b30c9b54fc7b ./onvif/proxy/lib/ONVIF/Device/Elements/GetAccessPolicy.pm +0ab1b848d0bd14d875ba680e0a72e586 ./onvif/proxy/lib/ONVIF/Device/Elements/SetDNS.pm +da023810c4bbf60d11d377d9b75f3249 ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemLog.pm +6aa13b38a32d717c4dd8d2a8e698ea12 ./onvif/proxy/lib/ONVIF/Device/Elements/GetRemoteDiscoveryModeResponse.pm +355391569d2e0716a7ba45485bcd2d72 ./onvif/proxy/lib/ONVIF/Device/Elements/GetAccessPolicyResponse.pm +5140e145bca2a544ad59a0d06b0561fb ./onvif/proxy/lib/ONVIF/Device/Elements/SystemRebootResponse.pm +fd41ae7a8e6b6aa8c337a29efb3b2d7e ./onvif/proxy/lib/ONVIF/Device/Elements/GetDynamicDNS.pm +3da72ff6d3cb67421cfc2c4acceaf9c2 ./onvif/proxy/lib/ONVIF/Device/Elements/GetIPAddressFilter.pm +287d835df85a4976546350edbce03cd8 ./onvif/proxy/lib/ONVIF/Device/Elements/GetNetworkDefaultGatewayResponse.pm +9432eb90769e07d1d933c8cb5c3eb63b ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemUrisResponse.pm +cc4bddada708457ea2bf0af884faebf9 ./onvif/proxy/lib/ONVIF/Device/Elements/StartSystemRestoreResponse.pm +20eea2ab8d819f1e96b100decb30458a ./onvif/proxy/lib/ONVIF/Device/Elements/SetRelayOutputStateResponse.pm +f7a700af63a40855ce41c9370ab33881 ./onvif/proxy/lib/ONVIF/Device/Elements/SetRelayOutputSettings.pm +1343b5fdb3b71768e1f8ecc10bc8f7f4 ./onvif/proxy/lib/ONVIF/Device/Elements/CreateCertificate.pm +1e046d66dafcc8821d156d11a8e7faf5 ./onvif/proxy/lib/ONVIF/Device/Elements/SetAccessPolicy.pm +c6a12babf14038b1c170f3f9d245d3a6 ./onvif/proxy/lib/ONVIF/Device/Elements/GetCertificates.pm +41f3cf84eba2cb6c1e1f89919cebab4e ./onvif/proxy/lib/ONVIF/Device/Elements/SetRemoteDiscoveryModeResponse.pm +7871ba0b702d6db2bca9b36a3e2be421 ./onvif/proxy/lib/ONVIF/Device/Elements/SetRemoteUserResponse.pm +80b287a3ed8fa6e8626525ce46a4001a ./onvif/proxy/lib/ONVIF/Device/Elements/SetRemoteDiscoveryMode.pm +4be36b42d6a5aef0cbab28767f5b6b1c ./onvif/proxy/lib/ONVIF/Device/Elements/SetNetworkDefaultGatewayResponse.pm +b811f41067bfacabaefa77dc5ca0466c ./onvif/proxy/lib/ONVIF/Device/Elements/SetNetworkDefaultGateway.pm +f3134690c974ca31b8f971c50b7c7c98 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDNSResponse.pm +b47df02be6576da088f9f6eb1c9b6f16 ./onvif/proxy/lib/ONVIF/Device/Elements/GetCertificateInformation.pm +9c0c3873f09bb8caae6aa853aefc9b73 ./onvif/proxy/lib/ONVIF/Device/Elements/AudioOutputConfiguration.pm +4e760fb1f2b37219d9ce6f8086a2f014 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDPAddressesResponse.pm +5938faaf326da682edede7642c4b4b7a ./onvif/proxy/lib/ONVIF/Device/Elements/AudioDecoderConfiguration.pm +9a1ab0a50fb0905a6ff7db1dd2e28eff ./onvif/proxy/lib/ONVIF/Device/Elements/GetEndpointReferenceResponse.pm +e2af282087d02d55cb1910d5ee0af423 ./onvif/proxy/lib/ONVIF/Device/Elements/SetHostnameResponse.pm +7febec4877940e1835b3826b8737b813 ./onvif/proxy/lib/ONVIF/Device/Elements/SetClientCertificateMode.pm +c0ab90c0820f761ece60abe8ed00a906 ./onvif/proxy/lib/ONVIF/Device/Elements/LoadCertificates.pm +902b037fbfdfef50de0809e45c4380da ./onvif/proxy/lib/ONVIF/Device/Elements/SetNTPResponse.pm +01f5eb0760a0d403f4b1605a3fc7fc34 ./onvif/proxy/lib/ONVIF/Device/Elements/GetNetworkProtocolsResponse.pm +e12ba4ea8421924eef9fd8f087dd9d96 ./onvif/proxy/lib/ONVIF/Device/Elements/SetNTP.pm +2149212e2d93450bdaf4f21d73b8666d ./onvif/proxy/lib/ONVIF/Device/Elements/VideoEncoderConfiguration.pm +be9da33773efcd8235c98d407ceb31ca ./onvif/proxy/lib/ONVIF/Device/Elements/Message.pm +381e3a8f6f16c64a7947e048f21f4f15 ./onvif/proxy/lib/ONVIF/Device/Elements/RemoveScopesResponse.pm +829b863b6f37afce8b517a645de84883 ./onvif/proxy/lib/ONVIF/Device/Elements/LoadCACertificatesResponse.pm +8a1254ed5cf4967e52757425fc224c49 ./onvif/proxy/lib/ONVIF/Device/Elements/SetSystemFactoryDefaultResponse.pm +9da9ea1de29cb94aa9f5b0ab9886585e ./onvif/proxy/lib/ONVIF/Device/Elements/GetNTP.pm +e176aab6820d92ae52e475ae627fcd8a ./onvif/proxy/lib/ONVIF/Device/Elements/SetDot1XConfiguration.pm +06bf10d617ff75f84e2934b1e3a0efd7 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot11StatusResponse.pm +782718d241afb0c792ad246a98c99c9e ./onvif/proxy/lib/ONVIF/Device/Elements/AudioEncoderConfiguration.pm +88f51d3e1896744dfe9d39b6211315cc ./onvif/proxy/lib/ONVIF/Device/Elements/SetDynamicDNS.pm +bf28abe0772331986ade663919eadd60 ./onvif/proxy/lib/ONVIF/Device/Elements/SetAccessPolicyResponse.pm +8f6d223ef3616ae7138f7f87dd101ecc ./onvif/proxy/lib/ONVIF/Device/Elements/SetDNSResponse.pm +a322cc75d451087523a6517921b7aa35 ./onvif/proxy/lib/ONVIF/Device/Elements/SetHostname.pm +3206e06dfe33f9c71b5a51fec246f768 ./onvif/proxy/lib/ONVIF/Device/Elements/UpgradeSystemFirmware.pm +33805d97952625a63ded500136f675f5 ./onvif/proxy/lib/ONVIF/Device/Elements/GetUsersResponse.pm +f83c241950d47f6262c928d80897678b ./onvif/proxy/lib/ONVIF/Device/Elements/GetRemoteUser.pm +959f311b33e081b2c85f0a5657ee679b ./onvif/proxy/lib/ONVIF/Device/Elements/Fault.pm +6ae270f036d4dbb8fdd35b396dd53bc7 ./onvif/proxy/lib/ONVIF/Device/Elements/AddIPAddressFilter.pm +d10b585a63307a5bfc6ad0ce19b4d8cc ./onvif/proxy/lib/ONVIF/Device/Elements/SetDot1XConfigurationResponse.pm +cf84a30185677bc42a0e42f99f41d956 ./onvif/proxy/lib/ONVIF/Device/Elements/GetZeroConfiguration.pm +78874b449b8b0b6a1812d9316d6c06b9 ./onvif/proxy/lib/ONVIF/Device/Elements/GetCertificatesStatusResponse.pm +1f5d0fb96607b4394e70a2a6738ba844 ./onvif/proxy/lib/ONVIF/Device/Elements/SetHostnameFromDHCPResponse.pm +abe1af1cfe8bfb7c371a57f9381ed253 ./onvif/proxy/lib/ONVIF/Device/Elements/SetUserResponse.pm +62730ecdabe438918334be8b83d7009b ./onvif/proxy/lib/ONVIF/Device/Elements/DeleteCertificatesResponse.pm +aa746d9a7c0329d61ece5533e401cd5e ./onvif/proxy/lib/ONVIF/Device/Elements/GetHostname.pm +62f57fc839a5d3039a8a66d3199bba94 ./onvif/proxy/lib/ONVIF/Device/Elements/AddScopesResponse.pm +d97802cf2a84ddddc7f1c695a7cef823 ./onvif/proxy/lib/ONVIF/Device/Elements/CreateDot1XConfigurationResponse.pm +e231a212213428ee0d3b157d16313a8c ./onvif/proxy/lib/ONVIF/Device/Elements/RemoveIPAddressFilterResponse.pm +aea4d2b855f04a93082aabea19021ae2 ./onvif/proxy/lib/ONVIF/Device/Elements/GetRemoteDiscoveryMode.pm +4a6a6fe0d6aba9bd532c7c6d42e5cb3f ./onvif/proxy/lib/ONVIF/Device/Elements/AddIPAddressFilterResponse.pm +8f59026626419999a546b480b749e764 ./onvif/proxy/lib/ONVIF/Device/Elements/GetServicesResponse.pm +75a3f87010e8ba13adde54c99be0a475 ./onvif/proxy/lib/ONVIF/Device/Elements/SetNetworkProtocolsResponse.pm +9ea5a670d8ae5a4d9a4eb5bc86da598b ./onvif/proxy/lib/ONVIF/Device/Elements/GetServiceCapabilities.pm +2861a8ad70b030bc53f1e83be8735a01 ./onvif/proxy/lib/ONVIF/Device/Elements/DeleteDot1XConfigurationResponse.pm +e4d0bc967ae0f987adae9594b14baf3c ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemSupportInformation.pm +65f8e08dbb9fefedb87a834af6b95532 ./onvif/proxy/lib/ONVIF/Device/Elements/SetSystemDateAndTimeResponse.pm +d3d90d87db7e2f1ed7779316ead4af71 ./onvif/proxy/lib/ONVIF/Device/Elements/SetIPAddressFilterResponse.pm +8a567609e8525fd587a9b89f6f8c28a1 ./onvif/proxy/lib/ONVIF/Device/Elements/SetZeroConfigurationResponse.pm +6ad1d46c759bd2da41fc993b3e4aafb3 ./onvif/proxy/lib/ONVIF/Device/Elements/GetHostnameResponse.pm +40c51fbfbe2095d1eb7f51be4eb53e39 ./onvif/proxy/lib/ONVIF/Device/Elements/SetNetworkInterfacesResponse.pm +07010f86f70abe809330b5a46a1da2a1 ./onvif/proxy/lib/ONVIF/Device/Elements/RestoreSystem.pm +d561837896f38178d348f1d51c9b3862 ./onvif/proxy/lib/ONVIF/Device/Elements/GetCertificatesResponse.pm +25af209037fa9ac08ca634f1faeb86ba ./onvif/proxy/lib/ONVIF/Device/Elements/SetSystemFactoryDefault.pm +d161657d2600c508d53bb6f7b12a93be ./onvif/proxy/lib/ONVIF/Device/Elements/SendAuxiliaryCommand.pm +51799efc090bbbd6eb2aac56f6abb7bc ./onvif/proxy/lib/ONVIF/Device/Elements/LoadCACertificates.pm +a8cb92779c211f3a3a1bf3323e44d67f ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot1XConfigurationResponse.pm +4f7472bf95f7c1bcfc26d08792725c6d ./onvif/proxy/lib/ONVIF/Device/Elements/CreateCertificateResponse.pm +a451cd4b8a7dd95552d531c119964089 ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemBackup.pm +bf5753749ef567004acef866306c135c ./onvif/proxy/lib/ONVIF/Device/Elements/SetDynamicDNSResponse.pm +94f3fcfd4847932cc160a72fd82633c7 ./onvif/proxy/lib/ONVIF/Device/Elements/StartFirmwareUpgrade.pm +96f10f67dfe10449f9fa751e4e0bd688 ./onvif/proxy/lib/ONVIF/Device/Elements/CreateUsersResponse.pm +59b2d147e35b72986ace1558dfbcf38d ./onvif/proxy/lib/ONVIF/Device/Elements/GetRemoteUserResponse.pm +bbbbc051ba541395e8cff028d7a7fb6b ./onvif/proxy/lib/ONVIF/Device/Elements/GetCapabilitiesResponse.pm +912bd6a762d22e4b5777f0617b84878e ./onvif/proxy/lib/ONVIF/Device/Elements/GetScopesResponse.pm +95164327c682ff73d025244ebb084b74 ./onvif/proxy/lib/ONVIF/Device/Elements/LoadCertificatesResponse.pm +0bec37b220f107dad96c435765e80999 ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemBackupResponse.pm +c7cabd446fec2f9fd85dbf219b3a5307 ./onvif/proxy/lib/ONVIF/Device/Elements/SetIPAddressFilter.pm +718fe1440ee5c25f188d19173b3e668f ./onvif/proxy/lib/ONVIF/Device/Elements/GetDynamicDNSResponse.pm +d608cbdc7737361b2bb46b711790c67d ./onvif/proxy/lib/ONVIF/Device/Elements/DeleteDot1XConfiguration.pm +0d9752c9308ec11961dee550ad1a2b69 ./onvif/proxy/lib/ONVIF/Device/Elements/GetEndpointReference.pm +d2241187a926edf11d544e6095576382 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot11CapabilitiesResponse.pm +f1092d6025ae992bf3f94ee258f33538 ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemSupportInformationResponse.pm +dd4ba84697840cd324839687ebb991fe ./onvif/proxy/lib/ONVIF/Device/Elements/MetadataStream.pm +c8bc0ee1c82162b6acd2240f16bb11c9 ./onvif/proxy/lib/ONVIF/Device/Elements/SetNetworkInterfaces.pm +d5d17d49623486913d4151fdac436bfa ./onvif/proxy/lib/ONVIF/Device/Elements/GetDNS.pm +bceeddf8a8f67c5fc4045fa207188a8e ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemLogResponse.pm +0e55af6285c2521370886f1ad145a478 ./onvif/proxy/lib/ONVIF/Device/Elements/Polyline.pm +877c4f37aad65fde1a8f15831466de9f ./onvif/proxy/lib/ONVIF/Device/Elements/GetPkcs10Request.pm +900590fcccb8953f7ec0855e5e9c731a ./onvif/proxy/lib/ONVIF/Device/Elements/SetCertificatesStatus.pm +181dfcf11fea79766431dc3aeaa095cb ./onvif/proxy/lib/ONVIF/Device/Elements/GetCertificatesStatus.pm +9f4ceb093c3c6e2a908b32a2f0a25986 ./onvif/proxy/lib/ONVIF/Device/Elements/GetNetworkInterfacesResponse.pm +829c0646ce98af380bc0989b7a3ad7d4 ./onvif/proxy/lib/ONVIF/Device/Elements/LoadCertificateWithPrivateKeyResponse.pm +4a902f72c5403b42d9d26a0caefd2cc4 ./onvif/proxy/lib/ONVIF/Device/Elements/AudioSourceConfiguration.pm +5e970e5c89817508beef27c33f1d4ffa ./onvif/proxy/lib/ONVIF/Device/Elements/StartFirmwareUpgradeResponse.pm +237d3f05529319f28e5592744d13f4e8 ./onvif/proxy/lib/ONVIF/Device/Elements/Header.pm +323166880980263c1d36673fa7e1299a ./onvif/proxy/lib/ONVIF/Device/Elements/SystemReboot.pm +5fdd0eac2c28b621e9378a295180a357 ./onvif/proxy/lib/ONVIF/Device/Elements/GetUsers.pm +a6c3f2904572e0998f15fdc9d421ccc5 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDeviceInformationResponse.pm +f5710f380aac7e9ae407a0544c3d523b ./onvif/proxy/lib/ONVIF/Device/Elements/SetScopesResponse.pm +7b62d62cb53ef8af155b85c75abd3d06 ./onvif/proxy/lib/ONVIF/Device/Elements/SetDiscoveryMode.pm +31a8ea1a520f6e78e01ad24a6588a4b7 ./onvif/proxy/lib/ONVIF/Device/Elements/SetHostnameFromDHCP.pm +62ac5b4f79de408d71eafa0c0ce97239 ./onvif/proxy/lib/ONVIF/Device/Elements/Include.pm +fdf69b7d74209c7d5e7b7c977050d35c ./onvif/proxy/lib/ONVIF/Device/Elements/GetNetworkProtocols.pm +be182055164f6cbff63bfbae84db3503 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot11Capabilities.pm +ab8068a743628417f0be18a197060687 ./onvif/proxy/lib/ONVIF/Device/Elements/Capabilities.pm +b95349b1839fdb6cd8aea48ad2ab13f7 ./onvif/proxy/lib/ONVIF/Device/Elements/PTZConfiguration.pm +3e025e32895ab6480c6185b8135a6a0c ./onvif/proxy/lib/ONVIF/Device/Elements/SetDPAddressesResponse.pm +d21a7d6226ac58049857f4bdbef4dd37 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot11Status.pm +cb9386d28437c6198cae42ec7db70eef ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot1XConfiguration.pm +fbf400bc90e012d01924132d79bc40d5 ./onvif/proxy/lib/ONVIF/Device/Elements/DeleteUsers.pm +2954e871ecd42404425f6aae071563a3 ./onvif/proxy/lib/ONVIF/Device/Elements/RemoveScopes.pm +55fefdaca5122bc040bbf19cc918049f ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemDateAndTime.pm +9de966fedcbf36907621c2ba29567b6e ./onvif/proxy/lib/ONVIF/Device/Elements/RestoreSystemResponse.pm +a4f9134186e43c9f09fa456bfc5ba832 ./onvif/proxy/lib/ONVIF/Device/Elements/SendAuxiliaryCommandResponse.pm +a851a7b17bd7fc9a7df7593d46f3ae79 ./onvif/proxy/lib/ONVIF/Device/Elements/SetCertificatesStatusResponse.pm +9cc62a6bd6c7b2f181ab82772bf2a66b ./onvif/proxy/lib/ONVIF/Device/Elements/SetZeroConfiguration.pm +1fac9aa00bacefb506eaa85f6e74383c ./onvif/proxy/lib/ONVIF/Device/Elements/GetIPAddressFilterResponse.pm +f6a44574604c09ae040049e670cc155b ./onvif/proxy/lib/ONVIF/Device/Elements/SetSystemDateAndTime.pm +93997e64602714bfd99fd12687cd2930 ./onvif/proxy/lib/ONVIF/Device/Elements/SetRemoteUser.pm +80b83a35eaf1ac7e25a861728290c404 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot1XConfigurations.pm +f0885fb923c93ad76c40f7a625fcad15 ./onvif/proxy/lib/ONVIF/Device/Elements/LoadCertificateWithPrivateKey.pm +495924ea54764396035dd3ff898b06d8 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot1XConfigurationsResponse.pm +a129437bb82c2e7837b12ce89179f2ac ./onvif/proxy/lib/ONVIF/Device/Elements/RemoveIPAddressFilter.pm +189a1238f4b52c215e784a3b74cfb0f7 ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemDateAndTimeResponse.pm +27ebfd3b73019570deac49b6aae6b7bf ./onvif/proxy/lib/ONVIF/Device/Elements/VideoAnalyticsConfiguration.pm +9e4c324c5d7fb58a03d09ba74385ec1a ./onvif/proxy/lib/ONVIF/Device/Elements/AddScopes.pm +728d5da078bf538e7275eba45e4ae6f1 ./onvif/proxy/lib/ONVIF/Device/Elements/UpgradeSystemFirmwareResponse.pm +acd669458aedb53ecd00e7dba6ad0807 ./onvif/proxy/lib/ONVIF/Device/Elements/CreateDot1XConfiguration.pm +a6fe55c542b0e8ee8425dbbd02aa9aef ./onvif/proxy/lib/ONVIF/Device/Elements/GetNetworkDefaultGateway.pm +fe9fad8e64d6c9f372280967e5a889be ./onvif/proxy/lib/ONVIF/Device/Elements/GetCertificateInformationResponse.pm +88a4e611e64e8e31ca943ff177719619 ./onvif/proxy/lib/ONVIF/Device/Elements/GetRelayOutputsResponse.pm +841d14d344d00e5a63cd1ca1107fd167 ./onvif/proxy/lib/ONVIF/Device/Elements/SetClientCertificateModeResponse.pm +e9f2c55487c0850a9a3f901bfe29259f ./onvif/proxy/lib/ONVIF/Device/Elements/Body.pm +98e6fa8baecce94d279c63540fcd120d ./onvif/proxy/lib/ONVIF/Device/Elements/GetClientCertificateMode.pm +dcd679e364b1886faf2d06488b79d18d ./onvif/proxy/lib/ONVIF/Device/Elements/DeleteCertificates.pm +6e59431c50785b40052357add8b19983 ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemUris.pm +4cbe06784319eb234f19a29337ad795c ./onvif/proxy/lib/ONVIF/Device/Elements/GetZeroConfigurationResponse.pm +36381d5539e5a81e15856c57fd2a1914 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDeviceInformation.pm +904059755856b32c087f9831a8aca0c8 ./onvif/proxy/lib/ONVIF/Device/Elements/SetDiscoveryModeResponse.pm +b17fe5050e8830ecafba102adbc56492 ./onvif/proxy/lib/ONVIF/Device/Elements/GetNetworkInterfaces.pm +251f7b2c703cb212919deb4a786ab4c5 ./onvif/proxy/lib/ONVIF/Device/Elements/Envelope.pm +573436bd7008de002f7085986a7a2902 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDiscoveryMode.pm +6e55b31f43cc36f843de6d704d3eae47 ./onvif/proxy/lib/ONVIF/Device/Elements/ScanAvailableDot11Networks.pm +b7620f43c4ca0a737dc4ad7a0606081d ./onvif/proxy/lib/ONVIF/Device/Elements/GetWsdlUrlResponse.pm +e1c149864a5fa28cc65b9e486af0ef3d ./onvif/proxy/lib/ONVIF/Device/Elements/GetServices.pm +dc114f48bdbf12a076ec4e23e0656436 ./onvif/proxy/lib/ONVIF/Device/Attributes/contentType.pm +a632a6c5805e73c2e835b6ae098320af ./onvif/proxy/lib/ONVIF/Device/Attributes/actor.pm +a0ef5133db1b1817665e282abcff22cc ./onvif/proxy/lib/ONVIF/Device/Attributes/encodingStyle.pm +5656bb0c845853dc0cd26451e2d44994 ./onvif/proxy/lib/ONVIF/Device/Attributes/expectedContentTypes.pm +cc4d6106a185e42fcfc3b29d8cc4fb2d ./onvif/proxy/lib/ONVIF/Device/Attributes/mustUnderstand.pm +6d47ed24c1e911a66046c5b6a9ed8103 ./onvif/proxy/lib/ONVIF/Device/Interfaces/Device/DevicePort.pm +97cc09a47d863f2d8c52ebbf69fa7339 ./onvif/proxy/lib/ONVIF/Device/Typemaps/Device.pm +f36c8a4c013cbaeec72f521e99bc94c9 ./onvif/proxy/lib/ONVIF/Device/Types/VideoRateControl.pm +5c06004cece7264b2c0138ef599b9cbb ./onvif/proxy/lib/ONVIF/Device/Types/PTZStatusFilterOptionsExtension.pm +3109938ed696acf547401108d8d36e3f ./onvif/proxy/lib/ONVIF/Device/Types/MessageDescription.pm +4df6b8a2bb19c811f40c67af2558e6ca ./onvif/proxy/lib/ONVIF/Device/Types/DisplayCapabilities.pm +9dae389fa6d34ff50bc1284354b3cd38 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingSourceInformation.pm +2fc5ce8f9c452dbb6c3b5d2cdf35576e ./onvif/proxy/lib/ONVIF/Device/Types/detail.pm +a32c75799388d40ca17df6fba000a26a ./onvif/proxy/lib/ONVIF/Device/Types/NTPInformation.pm +f017901e8fbc440a2cebf700a9230402 ./onvif/proxy/lib/ONVIF/Device/Types/ScopeDefinition.pm +92362f045479157bf7d893063f3e3b3a ./onvif/proxy/lib/ONVIF/Device/Types/NetworkHostExtension.pm +c70fb7918b61a43dbc86daf54d12c73b ./onvif/proxy/lib/ONVIF/Device/Types/NetworkCapabilities.pm +55ccdcc92809273e856ed08333a78598 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingSettings.pm +53999c7623f6a33996a9a3db116c358d ./onvif/proxy/lib/ONVIF/Device/Types/AudioClassDescriptorExtension.pm +68a4b96756654ee011fab2134d31efcc ./onvif/proxy/lib/ONVIF/Device/Types/ExposureOptions20.pm +fc41a1fad4bd66b8b98261601eb9ffa0 ./onvif/proxy/lib/ONVIF/Device/Types/SetDateTimeType.pm +17de35bd0b08d80a60edab041771e5bc ./onvif/proxy/lib/ONVIF/Device/Types/EFlip.pm +2e251db9b6440656c8ca21b7335c6a01 ./onvif/proxy/lib/ONVIF/Device/Types/RelativeFocusOptions.pm +1ac774688ad2d90d23763ca58d25a04d ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalanceMode.pm +b80b21b14264ee545fd781838956cbab ./onvif/proxy/lib/ONVIF/Device/Types/SupportedRulesExtension.pm +05235dce7ebc6aebf3f7866cfa742081 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingOptions20Extension.pm +33a838d8da22317526e28a3bdfb455dc ./onvif/proxy/lib/ONVIF/Device/Types/FrameExtension2.pm +3f23a420aea59ebd8c7dedd4d05ee192 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11Capabilities.pm +ddff6046418af666808341a738aca8d8 ./onvif/proxy/lib/ONVIF/Device/Types/VideoDecoderConfigurationOptions.pm +d35f5fb88e6448d1f3016b64e7bd144f ./onvif/proxy/lib/ONVIF/Device/Types/GetTracksResponseItem.pm +7f2ee4f8369a1d9f106ecc9d2f90d84a ./onvif/proxy/lib/ONVIF/Device/Types/WideDynamicRangeOptions20.pm +08f0de7e1f6b8eeb944c39bfd1d1810b ./onvif/proxy/lib/ONVIF/Device/Types/ImagingCapabilities.pm +7aecdd6b9184c11550a39bffd5910cfa ./onvif/proxy/lib/ONVIF/Device/Types/Name.pm +897ba42e2d77152616c158e690a45e11 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkHost.pm +271acf5eac9f855511a0cedb618ad974 ./onvif/proxy/lib/ONVIF/Device/Types/ObjectTree.pm +c68188cf59cfff1bf254bab13f5a5533 ./onvif/proxy/lib/ONVIF/Device/Types/RelayIdleState.pm +049eeb7afb583a07abb0c3fba36e9200 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataStreamExtension2.pm +b188f9625c58b2083dd86f968588bcb0 ./onvif/proxy/lib/ONVIF/Device/Types/Polygon.pm +13d4ea345dac030e755893e425a78fc1 ./onvif/proxy/lib/ONVIF/Device/Types/OSDImgOptions.pm +3c576cf5662ceefb4f1b125a8b599856 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSpotExtension.pm +7f4e825fa0b0bf76ad0e3494a190d07a ./onvif/proxy/lib/ONVIF/Device/Types/ZoomLimits.pm +f5d5d82647853967ce80e992f5a8e883 ./onvif/proxy/lib/ONVIF/Device/Types/Mpeg4Options2.pm +7ae71a9835d4fafeef9b733a6c4eed41 ./onvif/proxy/lib/ONVIF/Device/Types/PTZSpaces.pm +dd264db55354e82a38600bbd2f3bfe67 ./onvif/proxy/lib/ONVIF/Device/Types/PTControlDirectionOptionsExtension.pm +8bcd3453e9a5c7acdce73fe7709476ec ./onvif/proxy/lib/ONVIF/Device/Types/FloatList.pm +74063272381ad4ef8a1eeb1e37521103 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceExtension.pm +1c7729e2b0ce1ee1a65ccddde28496c0 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11SecurityMode.pm +05d605f6b122b2d8607285005e147b80 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11PSKPassphrase.pm +dd067fcf698efba7415c5e75895f7b01 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11SecurityConfigurationExtension.pm +09478e4b7c079e6e9c57255e38df5456 ./onvif/proxy/lib/ONVIF/Device/Types/AbsoluteFocusOptions.pm +e1fdafcfba2797b6d542a788e77d24d6 ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalance20.pm +b48ef1aefbde565db223518d2ccce43e ./onvif/proxy/lib/ONVIF/Device/Types/ImageStabilizationOptions.pm +7f2192b78b22d2ff0e90c162e03334d6 ./onvif/proxy/lib/ONVIF/Device/Types/AudioSourceOptionsExtension.pm +7ec712d555f374c349a592d5ce8eba0b ./onvif/proxy/lib/ONVIF/Device/Types/MetadataConfiguration.pm +feec5c7a72b04d68087a07423115cf73 ./onvif/proxy/lib/ONVIF/Device/Types/BacklightCompensation20.pm +058b35b6dafa31427f02467b1166c44d ./onvif/proxy/lib/ONVIF/Device/Types/IPv4NetworkInterfaceSetConfiguration.pm +c6e828f5e1c43e1417410d57e5cc0859 ./onvif/proxy/lib/ONVIF/Device/Types/RelayLogicalState.pm +d6ab6bb65fb757120c2b185080d4fe31 ./onvif/proxy/lib/ONVIF/Device/Types/PresetTour.pm +d224c91d6b04643998ca465085a9b036 ./onvif/proxy/lib/ONVIF/Device/Types/OSDConfigurationOptionsExtension.pm +38adac2af1c75606e803ab18b5e545a4 ./onvif/proxy/lib/ONVIF/Device/Types/PanTiltLimits.pm +616b26e93eb650d449ab446439f907f0 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingReference.pm +624dbb1b2d3ebf4fac7fc9ce44096ff4 ./onvif/proxy/lib/ONVIF/Device/Types/MoveStatus.pm +d10f7125b0921b1416c2608838fa99ff ./onvif/proxy/lib/ONVIF/Device/Types/GetTracksResponseList.pm +efc2f3f6eb5f4de75be324cedf568e9a ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceExtension.pm +3849006303260b4505d65e685ec733fe ./onvif/proxy/lib/ONVIF/Device/Types/EventStreamExtension.pm +4b3d94d26676cacc35c45b22205801ea ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobSource.pm +1dedabdfb04ae5630b3da0086a1902a9 ./onvif/proxy/lib/ONVIF/Device/Types/SystemLogUri.pm +066d10aefe16b6b1e91ffea591422431 ./onvif/proxy/lib/ONVIF/Device/Types/CodingCapabilities.pm +cfde7a64d255f66bad3c4d77dac1ebaa ./onvif/proxy/lib/ONVIF/Device/Types/Transport.pm +d481f5a904e8237b804c1d0f69a012ee ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobReference.pm +a7bef56ebc6a207c21acc21ad97b3c9a ./onvif/proxy/lib/ONVIF/Device/Types/AACDecOptions.pm +1782d9ce499ce8d795e34db1986b332d ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceConfiguration.pm +361a421cf61a40dfcd942707f73adc12 ./onvif/proxy/lib/ONVIF/Device/Types/IPAddressFilterType.pm +264f31bc12d4a247f6556224b855bef3 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStartingConditionExtension.pm +08e2ca0458ff905f00f0fd8e6b3b7e71 ./onvif/proxy/lib/ONVIF/Device/Types/ImageStabilization.pm +6d2a5ff504809e35dcfd4e37de833f4d ./onvif/proxy/lib/ONVIF/Device/Types/DeviceCapabilities.pm +1fc07c2f1a80bec8c90fe061c124ad3d ./onvif/proxy/lib/ONVIF/Device/Types/NetworkProtocol.pm +f41d1e621062e1e8c79c15cfbf92fb06 ./onvif/proxy/lib/ONVIF/Device/Types/Layout.pm +588043a73ae74e4e70677186af8ccd20 ./onvif/proxy/lib/ONVIF/Device/Types/Split.pm +e6dc0bc1ed739d004f4cc06d3cc14226 ./onvif/proxy/lib/ONVIF/Device/Types/CapabilitiesExtension2.pm +08888e7b9227d929c4aeda4787a3e0bb ./onvif/proxy/lib/ONVIF/Device/Types/MediaAttributes.pm +93fedd5f155f5a04225b3105f47ff54c ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceConfigurationExtension2.pm +94c5b0d31ed7919dc8db9d7e770b4fb5 ./onvif/proxy/lib/ONVIF/Device/Types/TrackConfiguration.pm +68fedaa79e38235bc1a14695017a6529 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingSettingsExtension.pm +7c85cacfe4c11ec74bf6e31eeae1e112 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11SecurityConfiguration.pm +053e5e052dce5a55bb6c3302724cc3fe ./onvif/proxy/lib/ONVIF/Device/Types/SearchState.pm +cc412aa3d15fce8b18c1ae9510c9dd2c ./onvif/proxy/lib/ONVIF/Device/Types/Frame.pm +df54410725c59759eaa9e0b90305df4a ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngineInputInfoExtension.pm +41448fe80f699d478e92edf4ea4d2beb ./onvif/proxy/lib/ONVIF/Device/Types/DateTimeRange.pm +c38dd1465085258a237d0b6ea5cee336 ./onvif/proxy/lib/ONVIF/Device/Types/CapabilityCategory.pm +ab0f6db2978b246fd7432b0b921986a0 ./onvif/proxy/lib/ONVIF/Device/Types/SupportedAnalyticsModulesExtension.pm +bcceacad0df7a023c5636ddf97c4a9f4 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11SSIDType.pm +2812bd3b431d1f9de5b4f985809f6f74 ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalance.pm +6825555b591af4ebde1314ab86cede97 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceConnectionSetting.pm +8571ba12818bff1b4db4d6ce9e855659 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourPresetDetailOptions.pm +b92e7170c54ad076ca6b8466ec8d673a ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngineConfigurationExtension.pm +c5f3e6febe8f66786d68bc5388e7878c ./onvif/proxy/lib/ONVIF/Device/Types/EFlipOptionsExtension.pm +c349c8d38aa93c655e66c6710d07f9d8 ./onvif/proxy/lib/ONVIF/Device/Types/AudioOutputConfigurationOptions.pm +7f448eec965863e07d50f2990b21fa89 ./onvif/proxy/lib/ONVIF/Device/Types/SupportedRules.pm +454b01bc39dad37804e96844c02b5ad2 ./onvif/proxy/lib/ONVIF/Device/Types/GenericEapPwdConfigurationExtension.pm +dd9605b9dd980f131659a88ebef0be39 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11PSK.pm +703247d25ac998297686fc80fc577f24 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataInput.pm +f9a080793e3cd6467a115bc07ed171d9 ./onvif/proxy/lib/ONVIF/Device/Types/OnvifVersion.pm +028ac159853aff88a53a74d918637281 ./onvif/proxy/lib/ONVIF/Device/Types/VideoOutputConfiguration.pm +2d300407112844f15eafa98c6bd17e6b ./onvif/proxy/lib/ONVIF/Device/Types/RelativeFocusOptions20.pm +236434e96c966e6469e267fde3cbd63a ./onvif/proxy/lib/ONVIF/Device/Types/MaximumNumberOfOSDs.pm +ecb166623c5b6530258a055b0bcebd9c ./onvif/proxy/lib/ONVIF/Device/Types/VideoEncoderOptionsExtension.pm +395c6f582abc36f6c3ab1dde7911de66 ./onvif/proxy/lib/ONVIF/Device/Types/Time.pm +598f21491aa3dbbfcc4ba6040f29bbf1 ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceConfigurationOptionsExtension2.pm +f312377a4f602093c984d8041fb1d734 ./onvif/proxy/lib/ONVIF/Device/Types/IntAttrList.pm +517c692be26c3da4c0332a901a4fceef ./onvif/proxy/lib/ONVIF/Device/Types/EventSubscription.pm +fede94c6098187c3d69cd23cfaeb7b1a ./onvif/proxy/lib/ONVIF/Device/Types/Dot11PSKSetExtension.pm +7cb8f3f405f1bd7688e61acc3b51eeaa ./onvif/proxy/lib/ONVIF/Device/Types/EventCapabilities.pm +377d7fa6e23f6f71aa48203dc3c02803 ./onvif/proxy/lib/ONVIF/Device/Types/TrackReference.pm +1685a55112e4aa83162c41010028ff27 ./onvif/proxy/lib/ONVIF/Device/Types/ShapeDescriptorExtension.pm +a749a0ddf683b97ed7e62d2b133ebaa2 ./onvif/proxy/lib/ONVIF/Device/Types/FindMetadataResultList.pm +7b36177073980f1c34ca5645ed9f8782 ./onvif/proxy/lib/ONVIF/Device/Types/IPv6DHCPConfiguration.pm +54f3290d8fa5b18db3170f2ba6b02ea7 ./onvif/proxy/lib/ONVIF/Device/Types/Rename.pm +e2f2dfdb56b2599a0b6faa07100bd9fc ./onvif/proxy/lib/ONVIF/Device/Types/MetadataFilter.pm +dcf9d8a817eb16e5c61ce2ff2bb61ad4 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourTypeExtension.pm +4a57775744c75cf6be031a4909cfdf88 ./onvif/proxy/lib/ONVIF/Device/Types/AudioEncoderConfigurationOptions.pm +2c8a4ed924a00b51f1d6148a1125a31c ./onvif/proxy/lib/ONVIF/Device/Types/WideDynamicMode.pm +5eb5e14df7e60a01a4832d057870eb21 ./onvif/proxy/lib/ONVIF/Device/Types/Transformation.pm +b7a19fa80b7f434db8f8ebb4d15e45f4 ./onvif/proxy/lib/ONVIF/Device/Types/IrCutFilterMode.pm +7f6ccafc174fc418f1ff5896f363403c ./onvif/proxy/lib/ONVIF/Device/Types/Dot11SignalStrength.pm +552a7a29a491c17b8fec98ce364fa4eb ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourPresetDetailOptionsExtension.pm +772f54a6c83cecd08f2bb1c931bd66fe ./onvif/proxy/lib/ONVIF/Device/Types/RotateOptionsExtension.pm +1105034866dcdfdaf42540a3cc51ac01 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingStatus20Extension.pm +ea3610eaf07b248471abb5ea9e469fab ./onvif/proxy/lib/ONVIF/Device/Types/FocusConfiguration.pm +7f5822f58d7b811521c1891ae021438c ./onvif/proxy/lib/ONVIF/Device/Types/VideoEncoding.pm +21c92bf8c99d0921a40bca981f81bb0a ./onvif/proxy/lib/ONVIF/Device/Types/Mpeg4DecOptions.pm +3c9566c0321f23da7ca7a4e0b60dc93a ./onvif/proxy/lib/ONVIF/Device/Types/ReceiverReference.pm +af40c3c1a489ec021294ad9d25f9450a ./onvif/proxy/lib/ONVIF/Device/Types/Service.pm +19f09037dab6d37019e17bb3b98dcc71 ./onvif/proxy/lib/ONVIF/Device/Types/IPv6Address.pm +67389d3e9f8008eb8be1770c517e0f11 ./onvif/proxy/lib/ONVIF/Device/Types/OSDPosConfigurationExtension.pm +5f932669b614415746510ec338b9d3c5 ./onvif/proxy/lib/ONVIF/Device/Types/DeviceIOCapabilities.pm +7971a48e53cbc3a52d84adb73b2e3bc9 ./onvif/proxy/lib/ONVIF/Device/Types/ReceiverStateInformation.pm +0709ed4fe9e0619daff97fc0fa592e37 ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceConfigurationExtension.pm +c4a7b09c1fa742256c8c30f6ec483b6a ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceSetConfigurationExtension2.pm +729a3d3a6d23037c691bebc64e92fa64 ./onvif/proxy/lib/ONVIF/Device/Types/TransportProtocol.pm +f8a4204719b3d6ac2e595cb182fa9323 ./onvif/proxy/lib/ONVIF/Device/Types/Direction.pm +8f5e464ddbf13fe87d22ecd264a11409 ./onvif/proxy/lib/ONVIF/Device/Types/IrCutFilterAutoAdjustmentOptions.pm +d733cd1097282565f4e7ed1008ae6cd7 ./onvif/proxy/lib/ONVIF/Device/Types/IrCutFilterAutoAdjustmentExtension.pm +bfd230c17f5369ffe72ec52dbb51c164 ./onvif/proxy/lib/ONVIF/Device/Types/ConfigDescription.pm +b6f7e465fa354d47a471b76d41dbc0bb ./onvif/proxy/lib/ONVIF/Device/Types/PTZStream.pm +4f2bb2b935056467890349d426f6dc7e ./onvif/proxy/lib/ONVIF/Device/Types/BehaviourExtension.pm +b68733e5ca3a3fc7398a938149b6c7a1 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11AvailableNetworksExtension.pm +29b6d0f26ccb8e9d1a9da947300bb149 ./onvif/proxy/lib/ONVIF/Device/Types/Enabled.pm +81b2354e2f72a5069848bac4cf76be46 ./onvif/proxy/lib/ONVIF/Device/Types/DurationRange.pm +91ff954b7c8a252f8273cfc5f8cb73e3 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterface.pm +20ecda9504f81fed0bb2b41b6363b2c4 ./onvif/proxy/lib/ONVIF/Device/Types/XPathExpression.pm +928889b26cde22f624ff4c6d8d400149 ./onvif/proxy/lib/ONVIF/Device/Types/IPType.pm +72edded74985ad332ca9e424a59bcd76 ./onvif/proxy/lib/ONVIF/Device/Types/ConfigurationEntity.pm +6ab4ba1c281a6f84a85cdb4dd51241ed ./onvif/proxy/lib/ONVIF/Device/Types/SystemLogType.pm +6ec7b411e65b04c2bd709bb3206d43e3 ./onvif/proxy/lib/ONVIF/Device/Types/ReverseOptionsExtension.pm +caace681369b63ba7247a3d12b48540b ./onvif/proxy/lib/ONVIF/Device/Types/ReverseMode.pm +aba97fde982a99774fdcef16018a6cae ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceSetConfigurationExtension.pm +fc7449469210fc53ef94d9204bad3dda ./onvif/proxy/lib/ONVIF/Device/Types/TrackType.pm +fc9d3be64653f37a3408af84bd92f7d0 ./onvif/proxy/lib/ONVIF/Device/Types/PTZSpeed.pm +0265e95dec66495f6246a56f8e4be25a ./onvif/proxy/lib/ONVIF/Device/Types/SearchCapabilities.pm +fcb58018c85a5be28331f71dfe14b727 ./onvif/proxy/lib/ONVIF/Device/Types/StreamSetup.pm +6694a6ca46946e7c5f998bedfe57a9ab ./onvif/proxy/lib/ONVIF/Device/Types/DateTime.pm +99da479ca108ba71011adaf219cf273f ./onvif/proxy/lib/ONVIF/Device/Types/AuxiliaryData.pm +4400c66f6db4e3a7eacccefe85ded821 ./onvif/proxy/lib/ONVIF/Device/Types/OSDImgConfiguration.pm +4a20d80aa8a6c476a407f861f1820972 ./onvif/proxy/lib/ONVIF/Device/Types/encodingStyle.pm +d9fe6a42b97bea05078efcb7dcfd71a5 ./onvif/proxy/lib/ONVIF/Device/Types/RotateOptions.pm +748b0118e674f12957299a284515f4e4 ./onvif/proxy/lib/ONVIF/Device/Types/Date.pm +9d097325a4aa09e715400b12893a99c1 ./onvif/proxy/lib/ONVIF/Device/Types/MessageDescriptionExtension.pm +a10070acd4d47fb04f6d87e42a029920 ./onvif/proxy/lib/ONVIF/Device/Types/CertificateInformation.pm +576d23aeb38c0787b746a0eb206d0e07 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSpotOptions.pm +d4f4d73013625e0e46b634116e090a90 ./onvif/proxy/lib/ONVIF/Device/Types/ActionEngineEventPayload.pm +b02deb65b85af84a7b54944909fc3dab ./onvif/proxy/lib/ONVIF/Device/Types/MoveOptions.pm +ed4f78ea39a48e5431d38e566d0de0dc ./onvif/proxy/lib/ONVIF/Device/Types/SystemDateTime.pm +ca0dc3da8ec40881fd973e0d6cf74410 ./onvif/proxy/lib/ONVIF/Device/Types/H264Options.pm +934952ebbcb0c725297704fd96319aa4 ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalanceOptions.pm +c60ce400108e97c9fbc2cdc6b50ecadc ./onvif/proxy/lib/ONVIF/Device/Types/FocusOptions20Extension.pm +a484bf2ed0c05951b9eec8e68199b281 ./onvif/proxy/lib/ONVIF/Device/Types/ClassDescriptorExtension.pm +ec12a875cb70a390b89d586e3c98b6a0 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobConfigurationExtension.pm +69c3478ea945f551c3701c2d565eac3f ./onvif/proxy/lib/ONVIF/Device/Types/MotionExpression.pm +c64e83c85bdd3e40ffd29207820dadc7 ./onvif/proxy/lib/ONVIF/Device/Types/H264Profile.pm +92e01c7ff57953ba55977d7fff07f4ee ./onvif/proxy/lib/ONVIF/Device/Types/CertificateGenerationParametersExtension.pm +0802e493bc25fed4330aa6306fa7d5b3 ./onvif/proxy/lib/ONVIF/Device/Types/AudioClassType.pm +cb42e393aa5db142c8868f8d9c50d7c9 ./onvif/proxy/lib/ONVIF/Device/Types/OSDConfigurationOptions.pm +59769211e2c4e88fb0d66819b7a9be91 ./onvif/proxy/lib/ONVIF/Device/Types/OSDTextConfiguration.pm +bef05e03c2acf8befaf7a1cb24b992c8 ./onvif/proxy/lib/ONVIF/Device/Types/AbsoluteFocus.pm +54dea5538c1d04be778fdbfec859b093 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingInformation.pm +6247c3a484b3805053661568d6cba0c3 ./onvif/proxy/lib/ONVIF/Device/Types/AudioOutputConfiguration.pm +b029cefae160a8e39aeba0b2e9dcd2ad ./onvif/proxy/lib/ONVIF/Device/Types/PaneLayout.pm +1ea2951bc25330fc0adb670d3015e5d5 ./onvif/proxy/lib/ONVIF/Device/Types/AudioDecoderConfiguration.pm +4f994866babd19e0f1358ca0d662842e ./onvif/proxy/lib/ONVIF/Device/Types/AudioDecoderConfigurationOptionsExtension.pm +30b48396226ce6ac77f737273936ccc8 ./onvif/proxy/lib/ONVIF/Device/Types/AudioSourceConfigurationOptions.pm +3405ae890a6668df1fcd6fec2801684c ./onvif/proxy/lib/ONVIF/Device/Types/OSDTextConfigurationExtension.pm +f8b4566b4e4a641d8d572e7ecc02dd24 ./onvif/proxy/lib/ONVIF/Device/Types/ProfileExtension2.pm +79fd92916e240a4bffecb92da50c63ca ./onvif/proxy/lib/ONVIF/Device/Types/AudioClassCandidate.pm +9ed3b7c6b2c2e44c12ac48a3bee351a9 ./onvif/proxy/lib/ONVIF/Device/Types/FocusStatus.pm +871f698f69b968650bb155563f0b72c5 ./onvif/proxy/lib/ONVIF/Device/Types/DNSInformationExtension.pm +3cb3daa390dbabe8436a725682133e77 ./onvif/proxy/lib/ONVIF/Device/Types/SecurityCapabilities.pm +d9d89aaf5e0a68c976023f58bfb2d82b ./onvif/proxy/lib/ONVIF/Device/Types/VideoEncoderConfiguration.pm +b21d7f3a9988aecb8abcde8334e89b86 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11StationMode.pm +bae7da0ece0427a74197f9e8c759d378 ./onvif/proxy/lib/ONVIF/Device/Types/DynamicDNSInformation.pm +5673bf1b133271cd487f6c0bd08fd74b ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobSourceExtension.pm +52ed522f2ca19b99191f5ce05c4e5564 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobStateInformationExtension.pm +df1d558a7163af2d56a4d200964d20c1 ./onvif/proxy/lib/ONVIF/Device/Types/ReplayCapabilities.pm +924a2eaec7effe51b035386d9484f24f ./onvif/proxy/lib/ONVIF/Device/Types/OSDColorOptions.pm +92452630f5b58b7443b4e1d2b75b0142 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceSetConfiguration.pm +e402901b45cd0e698922d94741e88704 ./onvif/proxy/lib/ONVIF/Device/Types/IrCutFilterAutoAdjustment.pm +e173dfd062cf07bb05b7bdd71b55f5ce ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngineConfiguration.pm +47508464895f345bc2777a5988ad999b ./onvif/proxy/lib/ONVIF/Device/Types/Vector1D.pm +f86087e22b3d060e15cb4bca60e51966 ./onvif/proxy/lib/ONVIF/Device/Types/GetRecordingJobsResponseItem.pm +48e5d92e4cb175339f79db2141a50555 ./onvif/proxy/lib/ONVIF/Device/Types/OSDReference.pm +b46527cb358745cd45914842ade1cc86 ./onvif/proxy/lib/ONVIF/Device/Types/VideoOutput.pm +ce7d14bd4476b7a4ca669e6874df4099 ./onvif/proxy/lib/ONVIF/Device/Types/BacklightCompensationOptions20.pm +be4a1f73927e7f63f19ba2412fb31f44 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSpot.pm +2e355a177ae5968dac2d44e9d3f0b690 ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsDeviceEngineConfigurationExtension.pm +b6142fad46a973bbfb93956a74232e9e ./onvif/proxy/lib/ONVIF/Device/Types/SearchScope.pm +1be6a3e68b6659cab385b9fcc2f9a0f8 ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalanceOptions20Extension.pm +764bcbf7c6e0f2fa2a58b324de8de317 ./onvif/proxy/lib/ONVIF/Device/Types/Duplex.pm +1aab17e200000aa6812c1cfdea77cc1f ./onvif/proxy/lib/ONVIF/Device/Types/HwAddress.pm +fbf88bfe0ba3c529e29fc03016ab76b2 ./onvif/proxy/lib/ONVIF/Device/Types/FindRecordingResultList.pm +a9dc9d2f65af34ee46cc82bd17162bc7 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingConfiguration.pm +c289e2728e4120b2f4d4a449de458a8f ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobStateTracks.pm +e770cd9fa4ea78f0aaf58c3ed48ec4da ./onvif/proxy/lib/ONVIF/Device/Types/AudioEncoderConfiguration.pm +b1a83950228a6dd00993fc2cdfceb76b ./onvif/proxy/lib/ONVIF/Device/Types/IPv4Address.pm +74e8851fc352cc85281b4128da6d5c37 ./onvif/proxy/lib/ONVIF/Device/Types/AutoFocusMode.pm +376f7a1bcfdf082fdf6f4066fa645942 ./onvif/proxy/lib/ONVIF/Device/Types/H264Configuration.pm +44103cab4922bb3fcd27e5609553c9aa ./onvif/proxy/lib/ONVIF/Device/Types/IrCutFilterAutoBoundaryType.pm +f1b20270bd0a3de0c28430dccad7f843 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceInfo.pm +1652796729ee787c41401ac8280ccc1e ./onvif/proxy/lib/ONVIF/Device/Types/PTZCapabilities.pm +ac2074808167460a4336b354d16b69ea ./onvif/proxy/lib/ONVIF/Device/Types/Space1DDescription.pm +4daee8406cf40677add3d0b63183d591 ./onvif/proxy/lib/ONVIF/Device/Types/JpegOptions2.pm +557016ac18ef3fa2070a033f8d48dba8 ./onvif/proxy/lib/ONVIF/Device/Types/UserLevel.pm +04de4d3367994a39417adbf3d09b0414 ./onvif/proxy/lib/ONVIF/Device/Types/PTControlDirectionOptions.pm +40fe5b5825b1db0a30d37a189ea6e074 ./onvif/proxy/lib/ONVIF/Device/Types/BacklightCompensation.pm +509d6c1ef2f3233e820b9d62a302567f ./onvif/proxy/lib/ONVIF/Device/Types/Rectangle.pm +b1f650b897ec0d51a1d0da69a7624b2a ./onvif/proxy/lib/ONVIF/Device/Types/ImagingOptions20.pm +aa877a9eeecbdca66365cbcf4f922cc4 ./onvif/proxy/lib/ONVIF/Device/Types/ReceiverCapabilities.pm +e4dc4f50c2372c93b6ed255213586b29 ./onvif/proxy/lib/ONVIF/Device/Types/BacklightCompensationMode.pm +65bf26dec0320c8fc210edc2537989cc ./onvif/proxy/lib/ONVIF/Device/Types/PTZMoveStatus.pm +98e2a6b59367dedb571d46527200733a ./onvif/proxy/lib/ONVIF/Device/Types/ImagingOptions20Extension3.pm +0aa795fb2405b22a81b93aca37e833ff ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourPresetDetail.pm +b3198f293a4a6ed69b0c4caf48124d71 ./onvif/proxy/lib/ONVIF/Device/Types/VideoOutputConfigurationOptions.pm +57d2a31c2f3546ea67b860f8ab8f475f ./onvif/proxy/lib/ONVIF/Device/Types/ColorspaceRange.pm +a87e3c0fc9d9f9967db0ce820977cb7b ./onvif/proxy/lib/ONVIF/Device/Types/Domain.pm +0afa9e75e5dcdbde9591f2f94eb73be9 ./onvif/proxy/lib/ONVIF/Device/Types/OSDConfiguration.pm +cd61175f951f104efcab2b9fd25b0a99 ./onvif/proxy/lib/ONVIF/Device/Types/FocusConfiguration20Extension.pm +8f4ce5067f40efde3c2d8c749f0e4c0b ./onvif/proxy/lib/ONVIF/Device/Types/FloatAttrList.pm +53a1aa0fc0a3c1bc0bd0c320c2808aad ./onvif/proxy/lib/ONVIF/Device/Types/TimeZone.pm +b202f9070a58e734a062799b7b9bf22d ./onvif/proxy/lib/ONVIF/Device/Types/IPv6NetworkInterface.pm +b4a63ec05cb2b0dc1beda11d2559134e ./onvif/proxy/lib/ONVIF/Device/Types/DeviceCapabilitiesExtension.pm +23811606764a165786ed5b5a1fefb359 ./onvif/proxy/lib/ONVIF/Device/Types/TrackAttributesExtension.pm +5fae7fc3ac07f2307def43c35a8a9a7f ./onvif/proxy/lib/ONVIF/Device/Types/FocusOptions20.pm +335cace1c761c35f8142f24010f64bd7 ./onvif/proxy/lib/ONVIF/Device/Types/Config.pm +24317d6caa7a5582db4ef34ab8b2f5e5 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourExtension.pm +4ee73a8f19133a5fa9fac6ef1d46f749 ./onvif/proxy/lib/ONVIF/Device/Types/AudioDecoderConfigurationOptions.pm +ca6a8f227199286c0f3976f56d36df70 ./onvif/proxy/lib/ONVIF/Device/Types/ImageStabilizationExtension.pm +660cf6028d54e3a6c85b3262113cc211 ./onvif/proxy/lib/ONVIF/Device/Types/IntRange.pm +3ba907d337e5ac1e2422bd4f35db854e ./onvif/proxy/lib/ONVIF/Device/Types/IntRectangleRange.pm +9d694cb3d5334e8b7e0aa6e2955a6e1e ./onvif/proxy/lib/ONVIF/Device/Types/ImagingOptions20Extension2.pm +12ba39552c07993e0336bafe265c53d5 ./onvif/proxy/lib/ONVIF/Device/Types/PrefixedIPv6Address.pm +8cd35b1e6747819ce5cf077a2da9ef41 ./onvif/proxy/lib/ONVIF/Device/Types/PTZStatusFilterOptions.pm +0432639017c7bc0cc7da40d6fccd53d9 ./onvif/proxy/lib/ONVIF/Device/Types/IPv6ConfigurationExtension.pm +283cd2d9d9cec77bacb7c22e7cf0a85f ./onvif/proxy/lib/ONVIF/Device/Types/PTZStreamExtension.pm +dd2c29b245acaf02f2768d6776886bff ./onvif/proxy/lib/ONVIF/Device/Types/VideoResolution.pm +7b14e2657ff53225da8b1ad7828ec729 ./onvif/proxy/lib/ONVIF/Device/Types/Behaviour.pm +174e8d9e8d46bd0ad088b31187368019 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSupported.pm +acab9b548d65df42441118d318a1bb16 ./onvif/proxy/lib/ONVIF/Device/Types/RotateExtension.pm +be00de6203320c8ae684f90eb9cee1e1 ./onvif/proxy/lib/ONVIF/Device/Types/SourceReference.pm +53b8525695850d952c6aea9eb771834c ./onvif/proxy/lib/ONVIF/Device/Types/RotateMode.pm +47510880d19f79a47cb7c0899e6f2e82 ./onvif/proxy/lib/ONVIF/Device/Types/AudioAnalyticsStreamExtension.pm +7f16bc144eaa3016b8c04eaf57dad862 ./onvif/proxy/lib/ONVIF/Device/Types/Fault.pm +21296d46b45128e143a855131ef13979 ./onvif/proxy/lib/ONVIF/Device/Types/VideoAnalyticsStream.pm +456f8b8f9c2fa943dc01f52d208d36c4 ./onvif/proxy/lib/ONVIF/Device/Types/PaneOptionExtension.pm +4f237f6ad6d756021bb7a6f0d422e140 ./onvif/proxy/lib/ONVIF/Device/Types/User.pm +bcdd539c6456cbb3283f7b4cc6644248 ./onvif/proxy/lib/ONVIF/Device/Types/Mpeg4Options.pm +40683c0c36b41294889552646b229135 ./onvif/proxy/lib/ONVIF/Device/Types/Merge.pm +fc2eb814cdda573a0e33271198a2a7e7 ./onvif/proxy/lib/ONVIF/Device/Types/WideDynamicRangeOptions.pm +27078af4c216253a36795c083c719457 ./onvif/proxy/lib/ONVIF/Device/Types/FocusMove.pm +c14d52fb6f3ecee4b9ee32f0e20c3a2f ./onvif/proxy/lib/ONVIF/Device/Types/MetadataConfigurationOptions.pm +5bdc6ee2002bb6b9e665e0439bb1148e ./onvif/proxy/lib/ONVIF/Device/Types/ColorDescriptor.pm +efa07dd3da802b1861b1df3854b8456e ./onvif/proxy/lib/ONVIF/Device/Types/NetworkProtocolExtension.pm +52a27a0f89fe70c35d5d07bd73e78d48 ./onvif/proxy/lib/ONVIF/Device/Types/MessageExtension.pm +a66173fd9d7e786665318993583b3bfc ./onvif/proxy/lib/ONVIF/Device/Types/EFlipMode.pm +dee9b7b59830248cf4ebbb6f4750dda8 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourState.pm +b697c339b2350259f4d1d1732ec4d514 ./onvif/proxy/lib/ONVIF/Device/Types/PTZFilter.pm +d7ec4617905affa33d9ef5c45cd18cf9 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobStateInformation.pm +a90a9c478c168d3cbf785faa356e07a0 ./onvif/proxy/lib/ONVIF/Device/Types/IPv4NetworkInterface.pm +8b2204dd153fcf04f7f223e445485ea0 ./onvif/proxy/lib/ONVIF/Device/Types/HostnameInformation.pm +482b5f64a18ede70f3c9a2520937f68d ./onvif/proxy/lib/ONVIF/Device/Types/RuleEngineConfigurationExtension.pm +cb89dcbf70ba688d7cbfc1d67ea528da ./onvif/proxy/lib/ONVIF/Device/Types/TopicNamespaceLocation.pm +980108209a95c53d71f2f71a507cb7bd ./onvif/proxy/lib/ONVIF/Device/Types/Dot11AuthAndMangementSuite.pm +eaf6663c8b02c8f08eb7f5dfbd73af69 ./onvif/proxy/lib/ONVIF/Device/Types/SystemLogUriList.pm +0dcff7b290878e466bcc0f7412503f25 ./onvif/proxy/lib/ONVIF/Device/Types/VideoEncoderOptionsExtension2.pm +9b4c79f774e5c92bea175d6193ad049d ./onvif/proxy/lib/ONVIF/Device/Types/BackupFile.pm +e101af7d8c4d97b3a6a4c192c86d026b ./onvif/proxy/lib/ONVIF/Device/Types/NetworkZeroConfiguration.pm +914d1ea61e50be8970180729461be3eb ./onvif/proxy/lib/ONVIF/Device/Types/PolylineArray.pm +3f22f45ecb8c08adf02e0df221139e3e ./onvif/proxy/lib/ONVIF/Device/Types/Dot11PSKSet.pm +4a2812f0af9499fc4b89072f77a478fa ./onvif/proxy/lib/ONVIF/Device/Types/LayoutOptionsExtension.pm +9eb562be5501d90fdb05164c34a28e42 ./onvif/proxy/lib/ONVIF/Device/Types/Receiver.pm +524e30dc997296e0cdaa4a77ec300b53 ./onvif/proxy/lib/ONVIF/Device/Types/SecurityCapabilitiesExtension.pm +29d33aa034da04afaa8a016bc03bacce ./onvif/proxy/lib/ONVIF/Device/Types/ImagingSettingsExtension202.pm +d7fe9d440f3295f892850e55dd064045 ./onvif/proxy/lib/ONVIF/Device/Types/EngineConfiguration.pm +e55c692cbbd4f5fe41bceb0f3ab0b987 ./onvif/proxy/lib/ONVIF/Device/Types/SystemCapabilities.pm +c55371aa1ad45d1bfdb08ec5d430c62b ./onvif/proxy/lib/ONVIF/Device/Types/IntRectangle.pm +3fbbd09f2991df13cbf075e087a60d20 ./onvif/proxy/lib/ONVIF/Device/Types/ClassType.pm +4735789d551b014edc538cab6b642358 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkZeroConfigurationExtension2.pm +41b7a78ee2ccda8676331ea2ed543bd1 ./onvif/proxy/lib/ONVIF/Device/Types/FocusConfiguration20.pm +df41d6baec3927ba5c471c6ae62b6de4 ./onvif/proxy/lib/ONVIF/Device/Types/PTZConfigurationOptions2.pm +11e72870c9137089a059ed53bb030276 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataInputExtension.pm +76cdf90bcd3e418946508edb2fcdeac7 ./onvif/proxy/lib/ONVIF/Device/Types/CertificateUsage.pm +8cecc91d34d38a938c34129f5965a50a ./onvif/proxy/lib/ONVIF/Device/Types/AudioEncoding.pm +95821d3f43d92edf47cfc4d96b4e7e6e ./onvif/proxy/lib/ONVIF/Device/Types/PTZConfigurationOptions.pm +9de9dfaaa3d8a35bd5956a38fbc38763 ./onvif/proxy/lib/ONVIF/Device/Types/AudioOutput.pm +e5bb963c86c1ac1ed58d824889a64d0a ./onvif/proxy/lib/ONVIF/Device/Types/AppearanceExtension.pm +6ba36d1f4f9d6065519d42a29d9ace54 ./onvif/proxy/lib/ONVIF/Device/Types/ColorOptions.pm +36d852f900092e84b16ff80944d67289 ./onvif/proxy/lib/ONVIF/Device/Types/PTZNodeExtension2.pm +fe5ddfa224300bfa53db0dc9d1ddbca3 ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalanceOptions20.pm +989fbc0dad32eaf3efd52c86a84a0314 ./onvif/proxy/lib/ONVIF/Device/Types/CertificateWithPrivateKey.pm +a9cca26088a9bab127a78e71be8dbaaa ./onvif/proxy/lib/ONVIF/Device/Types/VideoOutputExtension.pm +deea7a6865127ab2d82df84f0e5dfb85 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingSettings20.pm +45cbac82e95fa447034ca61ae20cc797 ./onvif/proxy/lib/ONVIF/Device/Types/RealTimeStreamingCapabilities.pm +2b3dd5d655c65fdd46d7631b7a4de2fb ./onvif/proxy/lib/ONVIF/Device/Types/ClassDescriptor.pm +7d46ba77ebc448c40d73dfdb3f666a1e ./onvif/proxy/lib/ONVIF/Device/Types/PTZConfigurationExtension2.pm +e9a24ac99fcf7bb7fbb4337bca7b91a3 ./onvif/proxy/lib/ONVIF/Device/Types/TLSConfiguration.pm +1a2a275ecbf846e29950df95f0a6aa2f ./onvif/proxy/lib/ONVIF/Device/Types/Dot1XConfiguration.pm +c46a954f23b84474030019c40577238e ./onvif/proxy/lib/ONVIF/Device/Types/PTZNode.pm +ba4f9fd9887e27cce20bd63a6ca656fe ./onvif/proxy/lib/ONVIF/Device/Types/VideoSource.pm +2b153afc0c9ef1e516dd361ef0a850c2 ./onvif/proxy/lib/ONVIF/Device/Types/SystemDateTimeExtension.pm +b3cc4d9a5dbaf141cc8e8ff3de90427e ./onvif/proxy/lib/ONVIF/Device/Types/RealTimeStreamingCapabilitiesExtension.pm +430f9dd2737a267e0b2e74412b10a152 ./onvif/proxy/lib/ONVIF/Device/Types/ExposureOptions.pm +fe8d1555493fec8e2b3079d3a246669d ./onvif/proxy/lib/ONVIF/Device/Types/FindEventResultList.pm +f8ce5b1b8bd7e26a1a7d524f4c0b66b3 ./onvif/proxy/lib/ONVIF/Device/Types/VideoAttributes.pm +6d6265fb3dde65dd16e4fd5117a25065 ./onvif/proxy/lib/ONVIF/Device/Types/ImageStabilizationOptionsExtension.pm +972fb2a5765b45c8776e6ae2c078b505 ./onvif/proxy/lib/ONVIF/Device/Types/SystemCapabilitiesExtension.pm +c3e8b06abc2b25d23d3e9423aed74376 ./onvif/proxy/lib/ONVIF/Device/Types/OSDConfigurationExtension.pm +db84c760f75c9f720660a0511e73f405 ./onvif/proxy/lib/ONVIF/Device/Types/Vector2D.pm +b7db6a63b104403261deae720534d98c ./onvif/proxy/lib/ONVIF/Device/Types/VideoEncoderConfigurationOptions.pm +5f808828db1d5e547d38ce94704205d0 ./onvif/proxy/lib/ONVIF/Device/Types/IrCutFilterAutoAdjustmentOptionsExtension.pm +f933dfb57652d654a21ce1d8883e8fde ./onvif/proxy/lib/ONVIF/Device/Types/CertificateInformationExtension.pm +58539774e445dce3d7712b7ec2817ab5 ./onvif/proxy/lib/ONVIF/Device/Types/ConfigDescriptionExtension.pm +41c0b023a04902d50bb6bda73ac2ab73 ./onvif/proxy/lib/ONVIF/Device/Types/DigitalInput.pm +fc0a7ead3760d81231203d53ffbd4512 ./onvif/proxy/lib/ONVIF/Device/Types/SourceIdentification.pm +1e1cdb4cd570951c04a5fce9f5c098dd ./onvif/proxy/lib/ONVIF/Device/Types/IANA_IfTypes.pm +4b47cdd7878dd0749dc6548f6507c580 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceLink.pm +5a0823f66bd56f872536a729d4baa266 ./onvif/proxy/lib/ONVIF/Device/Types/PaneConfiguration.pm +20718fde3f322c1252ee906933a8f482 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11AvailableNetworks.pm +0eed18bd02f98fa7ff1df7c7cc078756 ./onvif/proxy/lib/ONVIF/Device/Types/IPAddressFilter.pm +2e04f2f57d280d5a99ee83fd84614d50 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobState.pm +37c812ec8ca1ac654076cc4fe7281725 ./onvif/proxy/lib/ONVIF/Device/Types/Profile.pm +a18ab88e1b16eda263ad7ebf757d7f07 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPositionFilter.pm +3d0407104d7cf5a4eddf415c34b5d840 ./onvif/proxy/lib/ONVIF/Device/Types/RuleEngineConfiguration.pm +1ddd814555dab01a336c6df5e4a50ec5 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceConfigPriority.pm +c3dc65047461fc97dce73ce017a4df25 ./onvif/proxy/lib/ONVIF/Device/Types/SourceIdentificationExtension.pm +b3d409a69596aa7dea129c3116db97c6 ./onvif/proxy/lib/ONVIF/Device/Types/OSDTextOptions.pm +9a63f6464187e282b135333593edc5a5 ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceConfigurationOptionsExtension.pm +6188ff40d783db0866b2dd23d51f227e ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsStateInformation.pm +ced96cf26f3581330f2d1d11873aeee9 ./onvif/proxy/lib/ONVIF/Device/Types/ClassDescriptorExtension2.pm +52de920d1b963f9495b2a37d84b1a4f1 ./onvif/proxy/lib/ONVIF/Device/Types/ExposureMode.pm +459ee3341d19f2216260ec4f02e7620c ./onvif/proxy/lib/ONVIF/Device/Types/ReceiverMode.pm +1dad8929f47bb2b6748de976a07a7687 ./onvif/proxy/lib/ONVIF/Device/Types/ReplayConfiguration.pm +f023cc95020fc92c7e9c5930e0f95236 ./onvif/proxy/lib/ONVIF/Device/Types/ContinuousFocus.pm +3b8c864f6cd53a0e56d3de44d7bfc347 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStartingCondition.pm +f3d27488a7f6e98c6d16feb0e224fa1d ./onvif/proxy/lib/ONVIF/Device/Types/ShapeDescriptor.pm +ad13ba4874d55b3abdd6276e05c1b54c ./onvif/proxy/lib/ONVIF/Device/Types/OSDImgConfigurationExtension.pm +86969c42dbb75f01e3422091004ae243 ./onvif/proxy/lib/ONVIF/Device/Types/OSDPosConfiguration.pm +6147f4779de281b1cbabf0f308e4e33e ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStartingConditionOptionsExtension.pm +fb41c122ade37a57cf9fabd770adf473 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingSummary.pm +6b4277c6b3da82d6ab3145687be8fd98 ./onvif/proxy/lib/ONVIF/Device/Types/ModeOfOperation.pm +a59725881893c4f1886a167b24ef1d1b ./onvif/proxy/lib/ONVIF/Device/Types/BacklightCompensationOptions.pm +ff3e160789c31c480be6dc84b53ba611 ./onvif/proxy/lib/ONVIF/Device/Types/Appearance.pm +1b061750cbec7e95c7c95ed5dd161496 ./onvif/proxy/lib/ONVIF/Device/Types/ItemList.pm +20f2709bc593de2513f04a856c4ba705 ./onvif/proxy/lib/ONVIF/Device/Types/DNSName.pm +280b764f4dafae30a38ce914cff6b676 ./onvif/proxy/lib/ONVIF/Device/Types/H264DecOptions.pm +c83d52478348922d39c5506611e09056 ./onvif/proxy/lib/ONVIF/Device/Types/FrameExtension.pm +38d4e0bbaf477cb5f6d5c5c15b565117 ./onvif/proxy/lib/ONVIF/Device/Types/WideDynamicRange.pm +57b6a1b881b483d486aef98a72e60d7e ./onvif/proxy/lib/ONVIF/Device/Types/IPv6Configuration.pm +ca118102cfe90abdb470b3ab1df17cae ./onvif/proxy/lib/ONVIF/Device/Types/ColorCovariance.pm +68f492708c2bb5fd18a46c2f398d8f0d ./onvif/proxy/lib/ONVIF/Device/Types/OSDColorOptionsExtension.pm +8179c9db388780229cef2eb8c2d9f932 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStartingConditionOptions.pm +2da6ce483ec8290cac3f2d1d95435f9c ./onvif/proxy/lib/ONVIF/Device/Types/NTPInformationExtension.pm +9266556b603462c9158e8054c322969f ./onvif/proxy/lib/ONVIF/Device/Types/AudioSource.pm +b7d372f036c14675eb3ad8ab98aa7620 ./onvif/proxy/lib/ONVIF/Device/Types/PolygonConfiguration.pm +86f7d18d9bcd8babf7397ce7e730afe2 ./onvif/proxy/lib/ONVIF/Device/Types/G711DecOptions.pm +11992edc8f515921cd132ad29730d66b ./onvif/proxy/lib/ONVIF/Device/Types/IPv6NetworkInterfaceSetConfiguration.pm +eee67a6ae874ddd1ea72028ec43ecd46 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11Status.pm +4552cedd184eff4141c618ab23e54ef3 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourDirection.pm +62615597d2bf3d2d1cd6784d9c9a1f52 ./onvif/proxy/lib/ONVIF/Device/Types/Dot1XConfigurationExtension.pm +63865ae466bbbbdfbb5e27f92736f779 ./onvif/proxy/lib/ONVIF/Device/Types/DNSInformation.pm +77c760915a3d1aa5192c3f57aa167fa1 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStatus.pm +eb8b3a08a3e54236a8e764493c1ff2ae ./onvif/proxy/lib/ONVIF/Device/Types/ReverseOptions.pm +28b657ec114b098ff543f21362518b71 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingCapabilities.pm +8e8012c6bc11d00a7d25b5331070e95d ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngineInputInfo.pm +1d21f21b298c9edb7bad46be64fa72dd ./onvif/proxy/lib/ONVIF/Device/Types/SystemLog.pm +6f7edeb07f50e06655d85339694b779e ./onvif/proxy/lib/ONVIF/Device/Types/HostnameInformationExtension.pm +41bea7665e3d9edde605c493db0a11d1 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobTrack.pm +0439d49fa750d0bb45525e65d11ba5c7 ./onvif/proxy/lib/ONVIF/Device/Types/FindMetadataResult.pm +5d4e8ea5eb51d6ce4579b40680341024 ./onvif/proxy/lib/ONVIF/Device/Types/FloatRange.pm +bfb41faaf450738b241b9262dddbb63d ./onvif/proxy/lib/ONVIF/Device/Types/ImagingOptions.pm +c720ac3a4939b1bbecfb3c988ac5f9eb ./onvif/proxy/lib/ONVIF/Device/Types/Mpeg4Profile.pm +5bf7a0fa18e5c34ecb0820e2e7621bef ./onvif/proxy/lib/ONVIF/Device/Types/ImagingSettingsExtension203.pm +8b324cdf7289f2c5908f3601ef19d55a ./onvif/proxy/lib/ONVIF/Device/Types/ImageStabilizationMode.pm +3fc30f9f959d02dbc2b68cbfc6ee9344 ./onvif/proxy/lib/ONVIF/Device/Types/DeviceServiceCapabilities.pm +8d9b39672f5a89086ce829bf57099857 ./onvif/proxy/lib/ONVIF/Device/Types/RelayOutputSettings.pm +72c1a0d79b4d40263a24add731f90d64 ./onvif/proxy/lib/ONVIF/Device/Types/FocusOptions.pm +e549b881520801fcbffd7a95a6604912 ./onvif/proxy/lib/ONVIF/Device/Types/FindPTZPositionResultList.pm +7268da1fed01131beb4138f4b58cbca2 ./onvif/proxy/lib/ONVIF/Device/Types/DynamicDNSType.pm +e204394c33a75db7d87faac7615d912c ./onvif/proxy/lib/ONVIF/Device/Types/PropertyOperation.pm +d68d6180b84ff91be9d18420968e32d6 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataStream.pm +891a09afdbfc49ec3ff99b21404f8b74 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataStreamExtension.pm +0a5093b80dcd900f2daffe40915609f7 ./onvif/proxy/lib/ONVIF/Device/Types/Dot3Configuration.pm +9d97d7dd8933ca3463d388e814aad579 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingStatus.pm +c112e0949fda8a0bf3eb473752fb8cc6 ./onvif/proxy/lib/ONVIF/Device/Types/ObjectExtension.pm +ec812876ff8d7619a53928253370ee57 ./onvif/proxy/lib/ONVIF/Device/Types/Polyline.pm +d1597e68af96652270dd707471ad3708 ./onvif/proxy/lib/ONVIF/Device/Types/GetRecordingsResponseItem.pm +eb800570fe5cbc16834469aa76cbd844 ./onvif/proxy/lib/ONVIF/Device/Types/StreamType.pm +496d19cbb93e3337894ab4503d8c102e ./onvif/proxy/lib/ONVIF/Device/Types/FindEventResult.pm +bb1d1088785ce8e1c3fc7ed548e69818 ./onvif/proxy/lib/ONVIF/Device/Types/LayoutExtension.pm +8708e5861dc8212538d20efe79b16ce5 ./onvif/proxy/lib/ONVIF/Device/Types/PaneLayoutOptions.pm +3a580fd8354cd135a722d9a7db945c5a ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsState.pm +579e98b22a661ebbd379e73910961338 ./onvif/proxy/lib/ONVIF/Device/Types/EAPMethodConfiguration.pm +3e0549db322a574ab9dcfda2c625375d ./onvif/proxy/lib/ONVIF/Device/Types/TrackAttributes.pm +68e9d3a4b9dbdcf1cdd797a36d1a4b65 ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsDeviceEngineConfiguration.pm +2f50eb7b0f717991f6619da0bc443fbf ./onvif/proxy/lib/ONVIF/Device/Types/MediaCapabilities.pm +9c49b168e88149770f52b28d761d16ba ./onvif/proxy/lib/ONVIF/Device/Types/Object.pm +a817fce581488c0920646cc78d9e9933 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkCapabilitiesExtension.pm +bba0228c9f39edab2b9f9993bbbcfe2a ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStatusExtension.pm +525a4ffe68f824bfc0c8fa9b9980b4ce ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourOptions.pm +f0c6321b11af7564665cc9c07c84df86 ./onvif/proxy/lib/ONVIF/Device/Types/ProfileCapabilities.pm +f1a33c310778b3439f66b615551caf54 ./onvif/proxy/lib/ONVIF/Device/Types/AudioSourceConfiguration.pm +d64980aa7d927f193b8c5ad889ee4f3b ./onvif/proxy/lib/ONVIF/Device/Types/FactoryDefaultType.pm +65058a38fa5a9d9246a562431cafe7d1 ./onvif/proxy/lib/ONVIF/Device/Types/PTControlDirectionExtension.pm +2f7abb614416689cceb955fbe3016003 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSupportedExtension.pm +ba29e80d85c7dea497ec6bf17d81ed16 ./onvif/proxy/lib/ONVIF/Device/Types/OSDType.pm +97ea10fe71adb25537246b5fb22862cd ./onvif/proxy/lib/ONVIF/Device/Types/CertificateStatus.pm +fb790843b65b658785fe577b1c7b5e1e ./onvif/proxy/lib/ONVIF/Device/Types/Header.pm +3c7d2c3ddc9470bb345e31b18956b221 ./onvif/proxy/lib/ONVIF/Device/Types/PrefixedIPv4Address.pm +d977aa7036ed935693078a9dc540bd7b ./onvif/proxy/lib/ONVIF/Device/Types/IOCapabilitiesExtension2.pm +ac6ee4229c293905526a0639b7d13b6c ./onvif/proxy/lib/ONVIF/Device/Types/DiscoveryMode.pm +4039b0322c7b62b1158386eeb02a6e57 ./onvif/proxy/lib/ONVIF/Device/Types/SearchScopeExtension.pm +a11a3642713d9a1c3ef8bda52f0237b0 ./onvif/proxy/lib/ONVIF/Device/Types/OSDTextOptionsExtension.pm +67da146b95cd82706d297ed554bcee66 ./onvif/proxy/lib/ONVIF/Device/Types/Color.pm +9180018e17bad7af17bdbbdd67ef64a7 ./onvif/proxy/lib/ONVIF/Device/Types/OtherType.pm +74e4e03566b9186866615fd87bbd1571 ./onvif/proxy/lib/ONVIF/Device/Types/AudioDescriptor.pm +ff3aa19fa54c858d90ea1cfeda0b9c82 ./onvif/proxy/lib/ONVIF/Device/Types/base64Binary.pm +c3527595113e3463e28cb33460c72a08 ./onvif/proxy/lib/ONVIF/Device/Types/IOCapabilitiesExtension.pm +54e09355be60b0af55bb9fb0bb723042 ./onvif/proxy/lib/ONVIF/Device/Types/H264Options2.pm +fa334767daaae18cf938f3194ad3cf55 ./onvif/proxy/lib/ONVIF/Device/Types/PolylineArrayConfiguration.pm +44cf3c892ef12d0bc78ef200a0784091 ./onvif/proxy/lib/ONVIF/Device/Types/ContinuousFocusOptions.pm +ed1c8b61954b67eb127deb9480223bbf ./onvif/proxy/lib/ONVIF/Device/Types/G726DecOptions.pm +65a6a6620cd4a8636a80ee3a73635db3 ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalance20Extension.pm +7b2c0b455b25aa34b22b6cdd839d33a0 ./onvif/proxy/lib/ONVIF/Device/Types/FocusStatus20.pm +4972324ec7c3572b1e854e99e1a22ee6 ./onvif/proxy/lib/ONVIF/Device/Types/IOCapabilities.pm +795d65b8a8ead41e51a27de7abbe6905 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkProtocolType.pm +bd503459d6db32ef573c3c89d8f0553e ./onvif/proxy/lib/ONVIF/Device/Types/Include.pm +e736a328a66e9cbf2b014328767de3b9 ./onvif/proxy/lib/ONVIF/Device/Types/ItemListDescription.pm +e24393d6fa4d59adb5a29833254adfa7 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingStatus20.pm +a485965ab11a979517f69ac0703fe7c5 ./onvif/proxy/lib/ONVIF/Device/Types/MulticastConfiguration.pm +001cbfd8ad8eea26610bd61e6509f596 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataConfigurationExtension.pm +24a655de2237a6ba9676b00d59e5fd51 ./onvif/proxy/lib/ONVIF/Device/Types/ActionEngineEventPayloadExtension.pm +185e0918db9a0ea17ad261b32d01e914 ./onvif/proxy/lib/ONVIF/Device/Types/MediaUri.pm +171af1aafd537b20536184e9bb760263 ./onvif/proxy/lib/ONVIF/Device/Types/PTZVector.pm +7f866539b3ee7b543b6aeb2de75bd1c0 ./onvif/proxy/lib/ONVIF/Device/Types/MoveOptions20.pm +267f0140c48bb44afe8922a1de82b1a8 ./onvif/proxy/lib/ONVIF/Device/Types/PolylineArrayExtension.pm +53a941bb3ec2d2e3a8572a75da271201 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingStatus.pm +3390eee171e5b67dff71fb6b094c16cb ./onvif/proxy/lib/ONVIF/Device/Types/IntList.pm +885e312cb4a2773dec5390102a09a911 ./onvif/proxy/lib/ONVIF/Device/Types/Capabilities.pm +d3ce1926eb1f1965392c81b2eb3cbaaa ./onvif/proxy/lib/ONVIF/Device/Types/PTZConfiguration.pm +dd22b1b4b8ad1cb4dc4ddabb4377e06e ./onvif/proxy/lib/ONVIF/Device/Types/Certificate.pm +5d9518b3a55a9201b19d9497bea1f642 ./onvif/proxy/lib/ONVIF/Device/Types/AttachmentData.pm +ab1f54dfa7703d39686ffd99d773bd5b ./onvif/proxy/lib/ONVIF/Device/Types/ReferenceToken.pm +4e81a1114c0eb0f68cbe04d75019f773 ./onvif/proxy/lib/ONVIF/Device/Types/AnyHolder.pm +a173affc3d8b624b11165ecbf7f953f1 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobConfiguration.pm +4fa6beed6e215bf7f3208509a7596b6e ./onvif/proxy/lib/ONVIF/Device/Types/RelayMode.pm +cce1afa057b7d87390d1c520265ca572 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingSettingsExtension20.pm +9ec3b43437d1361af37a8749311b7709 ./onvif/proxy/lib/ONVIF/Device/Types/UserExtension.pm +bb7bb7d04992eb82d68aed3319fa9be0 ./onvif/proxy/lib/ONVIF/Device/Types/IPv4Configuration.pm +2895460a5a5cfbfb495abed94de28c56 ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsDeviceExtension.pm +cf9fd3bcb9a5e9e3775ea4af1e6f493e ./onvif/proxy/lib/ONVIF/Device/Types/SystemCapabilitiesExtension2.pm +5d089d3baefa94092138dfd980179346 ./onvif/proxy/lib/ONVIF/Device/Types/MiscCapabilities.pm +7e8db8afa88509c9fd64cccdb83c703d ./onvif/proxy/lib/ONVIF/Device/Types/IPAddress.pm +b83c7a895a9044eeff804f4e436797af ./onvif/proxy/lib/ONVIF/Device/Types/CapabilitiesExtension.pm +892e22036b14da1f56d030fb03be276d ./onvif/proxy/lib/ONVIF/Device/Types/TrackInformation.pm +a5bd703aeee3a8343c33c3e2197dddd7 ./onvif/proxy/lib/ONVIF/Device/Types/SecurityCapabilitiesExtension2.pm +0469cfc81b40f81efd415cbaec9543a1 ./onvif/proxy/lib/ONVIF/Device/Types/CellLayout.pm +40347c71fb738b3a5fa2e0da9e3351dc ./onvif/proxy/lib/ONVIF/Device/Types/PTZStatus.pm +23c9234a50ba56a95de2f975caba4b93 ./onvif/proxy/lib/ONVIF/Device/Types/FocusStatus20Extension.pm +b93f4c20e290cd12268992d3b9f33941 ./onvif/proxy/lib/ONVIF/Device/Types/VideoDecoderConfigurationOptionsExtension.pm +09cd4230250e1be443ad5082cafb6ded ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsCapabilities.pm +4654a45cecc9d594d6ef537bfd012e86 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkGateway.pm +eb12bc2e4eb8ea5acbb62d4355c001d9 ./onvif/proxy/lib/ONVIF/Device/Types/ProfileExtension.pm +740323ae5681616bba913b2d28c7f5ee ./onvif/proxy/lib/ONVIF/Device/Types/BinaryData.pm +c6a1059bf459cbcf34ba346a62a1eaaa ./onvif/proxy/lib/ONVIF/Device/Types/AudioAttributes.pm +e0363c918d89d608a5e7fd9be3127ee4 ./onvif/proxy/lib/ONVIF/Device/Types/ReceiverState.pm +c0f5895bece32957d4ef957015f62e07 ./onvif/proxy/lib/ONVIF/Device/Types/TransformationExtension.pm +34faeeb3dd1ac67c6f31511653fb2466 ./onvif/proxy/lib/ONVIF/Device/Types/hexBinary.pm +54b3e259035222994e26ac0332d5eed0 ./onvif/proxy/lib/ONVIF/Device/Types/Exposure.pm +b3763ac2f2504474c7dd325b15ad665a ./onvif/proxy/lib/ONVIF/Device/Types/ExposurePriority.pm +129563e906d30035e8aef927499b6365 ./onvif/proxy/lib/ONVIF/Device/Types/EFlipOptions.pm +ae87a6dcf2cbfe6e9f03eaab863b3e15 ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsDeviceCapabilities.pm +d4c462b2c939ad5683f6c857fdb961c3 ./onvif/proxy/lib/ONVIF/Device/Types/FindPTZPositionResult.pm +12cbc75ce501a8b3032170d878680ed3 ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngineControl.pm +ad25a99a60b0a10ccf50c92783007ec7 ./onvif/proxy/lib/ONVIF/Device/Types/LayoutOptions.pm +b023d822432ae6cc4e0301814b7055e2 ./onvif/proxy/lib/ONVIF/Device/Types/ColorDescriptorExtension.pm +5f2c8d5a0ea8870e6bfec89d82525258 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkCapabilitiesExtension2.pm +f9af12d78f3bb23467c7aa639e55d582 ./onvif/proxy/lib/ONVIF/Device/Types/RelayOutput.pm +05e898c2e1d220dcddf4f74b5392cb10 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourOperation.pm +d54a5ccfe7bc9632efa448326769b48d ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceExtension2.pm +bec34cd5ee4d124804b27479e3799f4b ./onvif/proxy/lib/ONVIF/Device/Types/PTZNodeExtension.pm +846cdc3834ac11735c294672d5e533e4 ./onvif/proxy/lib/ONVIF/Device/Types/JpegOptions.pm +8b6574c37ccd707f8243fef646d206ab ./onvif/proxy/lib/ONVIF/Device/Types/NetworkHostType.pm +9acfba64cb61788d8cb0585b9ce8aaa1 ./onvif/proxy/lib/ONVIF/Device/Types/DynamicDNSInformationExtension.pm +8b7a5f3466701b001c74e4b24396a655 ./onvif/proxy/lib/ONVIF/Device/Types/CertificateGenerationParameters.pm +7bb52a0a75af4354a77cbb5deb227a41 ./onvif/proxy/lib/ONVIF/Device/Types/ObjectTreeExtension.pm +be258710b28a187dafd6a4dafb58cea3 ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngine.pm +a7d2441ad34d2c796fc1784e74ac835e ./onvif/proxy/lib/ONVIF/Device/Types/MotionInCells.pm +27715d16e700602303f727bd7d1b4ac5 ./onvif/proxy/lib/ONVIF/Device/Types/Rotate.pm +0d88d57a019ff52d948854fd6ceea6dd ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobMode.pm +73275e4c8677c66f5bab2091e7bd35e8 ./onvif/proxy/lib/ONVIF/Device/Types/RemoteUser.pm +8d7930f57dbcc9cbbcd3c336327a994f ./onvif/proxy/lib/ONVIF/Device/Types/PTControlDirection.pm +b0bc1d37bbe9afb24bbb8f8bfbe0af8a ./onvif/proxy/lib/ONVIF/Device/Types/Reverse.pm +3b28b02835303e6fd18d18fe16935d17 ./onvif/proxy/lib/ONVIF/Device/Types/EAPMethodTypes.pm +57c1f2f1298a4394c8bf2b71dbf141fa ./onvif/proxy/lib/ONVIF/Device/Types/PTZConfigurationExtension.pm +a3dbc36706631d09af28378560bea797 ./onvif/proxy/lib/ONVIF/Device/Types/AudioEncoderConfigurationOption.pm +ffdbcadf6e9f4d84bb8333e44577c7c1 ./onvif/proxy/lib/ONVIF/Device/Types/VideoAnalyticsStreamExtension.pm +4f3f309613962d166da3ac11fc29d329 ./onvif/proxy/lib/ONVIF/Device/Types/RelativeFocus.pm +9d653980297f6b8ae685f220ca5eaf2d ./onvif/proxy/lib/ONVIF/Device/Types/Mpeg4Configuration.pm +55750e6acb3e05631a045f495a323fde ./onvif/proxy/lib/ONVIF/Device/Types/ObjectId.pm +7e786e62c2122d6f5c24de160544a478 ./onvif/proxy/lib/ONVIF/Device/Types/DeviceEntity.pm +6457c2fb50bccde84552d9c3699b2ded ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobStateSource.pm +084033083081c1276e20e18a1b6345ef ./onvif/proxy/lib/ONVIF/Device/Types/VideoAnalyticsConfiguration.pm +8b4083cce5aa8b0c0ac2bb878c042d35 ./onvif/proxy/lib/ONVIF/Device/Types/IPAddressFilterExtension.pm +6958813bce2f2bec03a70ded10223418 ./onvif/proxy/lib/ONVIF/Device/Types/JobToken.pm +5a77c75358e74be8384c62b4732bf2f4 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataAttributes.pm +bd098acaef207ccf4085cc90aaf0fca0 ./onvif/proxy/lib/ONVIF/Device/Types/Body.pm +0e10e2f147838df3faff441f609f4e5a ./onvif/proxy/lib/ONVIF/Device/Types/AudioAnalyticsStream.pm +07e67ed933b73fdcb1e453363d818e5d ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngineInput.pm +68b1a84aab5b952287d9b49747ed1c32 ./onvif/proxy/lib/ONVIF/Device/Types/MotionExpressionConfiguration.pm +a2dca53ece3664f04381006a27bc497b ./onvif/proxy/lib/ONVIF/Device/Types/JpegDecOptions.pm +815ec19b0905d1f40bddc90b90621a20 ./onvif/proxy/lib/ONVIF/Device/Types/ItemListDescriptionExtension.pm +453434e140229e716430c706d7f6f8a6 ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceExtension2.pm +1ed8fad6c46a64ea1a173c4f5b9e88c0 ./onvif/proxy/lib/ONVIF/Device/Types/PTZSpacesExtension.pm +a6a6de2556a79c518db3f25ff91ef929 ./onvif/proxy/lib/ONVIF/Device/Types/Exposure20.pm +220eb133a988cea2ead6ab0372426d24 ./onvif/proxy/lib/ONVIF/Device/Types/Description.pm +da552979fb3eac0eca4803f55ec3445d ./onvif/proxy/lib/ONVIF/Device/Types/Vector.pm +cd53d7d938aa5986ad6a75c2f8f6d4c6 ./onvif/proxy/lib/ONVIF/Device/Types/EapMethodExtension.pm +7e17288730828a324ca989c5fa274b22 ./onvif/proxy/lib/ONVIF/Device/Types/WideDynamicRange20.pm +1bf773281c3839abdf0ca49a77868892 ./onvif/proxy/lib/ONVIF/Device/Types/OSDImgOptionsExtension.pm +6dc3fb632e75dfee0175743e52414c90 ./onvif/proxy/lib/ONVIF/Device/Types/ItemListExtension.pm +2e60361035bff22cfa7c78052da2683f ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobStateTrack.pm +689e740206ef30b747cfdc8cc235c1d6 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11Cipher.pm +3e66501f9827623fe6c9d9ba54d32c8e ./onvif/proxy/lib/ONVIF/Device/Types/MediaCapabilitiesExtension.pm +b84f1a9dfae4245a1a5ec7ffe3ce99ec ./onvif/proxy/lib/ONVIF/Device/Types/Envelope.pm +e272a2a8f00d95bf80ff570976f06ec1 ./onvif/proxy/lib/ONVIF/Device/Types/SupportInformation.pm +57c5008c3b5eb491cc6e490e0a7c7ca3 ./onvif/proxy/lib/ONVIF/Device/Types/ReceiverConfiguration.pm +d66dc836d75e1001908d1794b8162256 ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceConfigurationOptions.pm +99cc7e9a0e4b3989e4eaf9e0dfeff35b ./onvif/proxy/lib/ONVIF/Device/Types/Scope.pm +f9ce84938311c85d2aa1552e63ad8b13 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPreset.pm +a1f0f2b02734141a36ee721ad20f560c ./onvif/proxy/lib/ONVIF/Device/Types/AudioClassDescriptor.pm +ed99335c550aac5bdc1d23dcdacd2167 ./onvif/proxy/lib/ONVIF/Device/Types/Space2DDescription.pm +0cb4a9ddad321bd83b8ffee186a72fd1 ./onvif/proxy/lib/ONVIF/Device/Types/StringAttrList.pm +a85306d012b67c5fe33e6a6b038e21c2 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11Configuration.pm +4c52250e864c7f53316495e145d7125e ./onvif/proxy/lib/ONVIF/Device/Types/NetworkZeroConfigurationExtension.pm +a76fa6657bda0355c090ca0a5c89a33f ./onvif/proxy/lib/ONVIF/Device/Types/OSDColor.pm +cb65724eb2a15b0d5671164ad63d75db ./onvif/proxy/lib/ONVIF/Device/Types/SupportedAnalyticsModules.pm +a99cd976f7207bfbffd5afa9e2765eb5 ./onvif/proxy/lib/WSDiscovery/Elements/EndpointReference.pm +a46d35fb8cdba0c981590e1a9c5066d6 ./onvif/proxy/lib/WSDiscovery/Elements/Action.pm +9c2f4f6083464587c7b9dca0979282a7 ./onvif/proxy/lib/WSDiscovery/Elements/ProbeMatches.pm +5cd2d523642fbc1260d53c193a834959 ./onvif/proxy/lib/WSDiscovery/Elements/Scopes.pm +50f8c1bd36872b906ce6589f0e41bd6f ./onvif/proxy/lib/WSDiscovery/Elements/ResolveMatches.pm +624cd0431e7f5bcdf9f650ac99847033 ./onvif/proxy/lib/WSDiscovery/Elements/Hello.pm +737bd1e6e0bd6b5962efb84cda061a59 ./onvif/proxy/lib/WSDiscovery/Elements/Types.pm +6f84072d723189c892951b2188821195 ./onvif/proxy/lib/WSDiscovery/Elements/Security.pm +c9a61cd62ed5db53e28257ad6d3e9f29 ./onvif/proxy/lib/WSDiscovery/Elements/ReplyTo.pm +4b2ca1ef09ee65ffbb25d01986825547 ./onvif/proxy/lib/WSDiscovery/Elements/ProblemIRI.pm +0f2a02c676bc261f3f25ef0c6e55d57e ./onvif/proxy/lib/WSDiscovery/Elements/Resolve.pm +0a8a5c4ea7723d6bbeae17879b95b446 ./onvif/proxy/lib/WSDiscovery/Elements/ReferenceParameters.pm +dfd21d968d8497e968eba296797bdc21 ./onvif/proxy/lib/WSDiscovery/Elements/AppSequence.pm +f6050d9ab665b978cd354bfea3b43336 ./onvif/proxy/lib/WSDiscovery/Elements/Sig.pm +c516066078fe847f15475d20beb1cb41 ./onvif/proxy/lib/WSDiscovery/Elements/Metadata.pm +51f0af94eed09a47c211b250b0b8dee1 ./onvif/proxy/lib/WSDiscovery/Elements/FaultTo.pm +fd50487a03a72d0a69eb4d62e41d6af3 ./onvif/proxy/lib/WSDiscovery/Elements/RetryAfter.pm +5b262140ca5d48b167b27cedb11beda2 ./onvif/proxy/lib/WSDiscovery/Elements/ProblemHeaderQName.pm +ecfeee5efde1ad9489205e5e6874c9e6 ./onvif/proxy/lib/WSDiscovery/Elements/Probe.pm +cc91ab27e1901e1856fb9206705f2321 ./onvif/proxy/lib/WSDiscovery/Elements/XAddrs.pm +162da15edec72bc4aac9ac59562e074f ./onvif/proxy/lib/WSDiscovery/Elements/MetadataVersion.pm +ad77efedd4ed6f6f4a193eba57982e2e ./onvif/proxy/lib/WSDiscovery/Elements/RelatesTo.pm +fad2558ae61b53f99df4d83ddd54e7ce ./onvif/proxy/lib/WSDiscovery/Elements/MessageID.pm +fb3eba850cba67500ce8a0f17b4df6c5 ./onvif/proxy/lib/WSDiscovery/Elements/SupportedMatchingRules.pm +bc7497b3d774e606254567429338230e ./onvif/proxy/lib/WSDiscovery/Elements/ProblemAction.pm +af49813ac4c536b533c0f78f04c9a421 ./onvif/proxy/lib/WSDiscovery/Elements/To.pm +b52a9701606cf9ce94d041a34dc0abda ./onvif/proxy/lib/WSDiscovery/Elements/Bye.pm +85646d61ca8f982232029d01632adb4f ./onvif/proxy/lib/WSDiscovery/Elements/From.pm +83c66283471a520b8e1f06ea1e9f6c15 ./onvif/proxy/lib/WSDiscovery/Attributes/Id.pm +235fa0dde47d15ebb8e613abe45d42e5 ./onvif/proxy/lib/WSDiscovery/Attributes/IsReferenceParameter.pm +ced2172e113da40b9a3c03b198003ed6 ./onvif/proxy/lib/WSDiscovery/Interfaces/WSDiscovery/WSDiscoveryPort.pm +78fc1964f715f70f9028790ba10d0e5a ./onvif/proxy/lib/WSDiscovery/Typemaps/WSDiscovery.pm +99efab93db46f9ba282f397fb752d8a7 ./onvif/proxy/lib/WSDiscovery/Types/FaultCodeType.pm +5c25979bc03d3cb0068f367ca017262e ./onvif/proxy/lib/WSDiscovery/Types/ByeType.pm +8e6b820a156e58190f972dd8cb5eb0b2 ./onvif/proxy/lib/WSDiscovery/Types/ProbeType.pm +eec4fa65769c89a6d50d012cfe9fc438 ./onvif/proxy/lib/WSDiscovery/Types/ResolveType.pm +58b92900e5a6d309cc32c63fcdad69de ./onvif/proxy/lib/WSDiscovery/Types/AttributedUnsignedLongType.pm +7867cfc39a297a7379bdab2509906972 ./onvif/proxy/lib/WSDiscovery/Types/ReferenceParametersType.pm +821942e36c471c70cbdf3c8682bac6d8 ./onvif/proxy/lib/WSDiscovery/Types/RelationshipType.pm +eb6c2155210868b492284a7230b8899a ./onvif/proxy/lib/WSDiscovery/Types/HelloType.pm +67c9c805ab3b01edd81a9bc23e60d196 ./onvif/proxy/lib/WSDiscovery/Types/AttributedURIType.pm +f9d62e0a1dd193eb3b52fe1c69b92c73 ./onvif/proxy/lib/WSDiscovery/Types/FaultCodesType.pm +f2d6a8cd66d746642c62fe8450f30b67 ./onvif/proxy/lib/WSDiscovery/Types/AttributedQNameType.pm +0a6c11c1b00ed1d143974c87d75cc8c8 ./onvif/proxy/lib/WSDiscovery/Types/AppSequenceType.pm +efe084a084bf814291bd11bec2d58a8b ./onvif/proxy/lib/WSDiscovery/Types/ScopesType.pm +b325d5e05a1fb92e94495e8457b137cd ./onvif/proxy/lib/WSDiscovery/Types/MetadataType.pm +61b3d95d46a7b278f0745f397fc36e63 ./onvif/proxy/lib/WSDiscovery/Types/QNameListType.pm +224595697735d0c1d9623b3b6b3ecf4e ./onvif/proxy/lib/WSDiscovery/Types/ProbeMatchType.pm +32a0459a9aa7b53bf66d8d93546fbcc3 ./onvif/proxy/lib/WSDiscovery/Types/SigType.pm +6699aba1a5fa29d0b91f57fbc5778990 ./onvif/proxy/lib/WSDiscovery/Types/FaultCodesOpenEnumType.pm +2d50ff4f56517692bfa2ec8a9414bebb ./onvif/proxy/lib/WSDiscovery/Types/RelationshipTypeOpenEnum.pm +b81453e82f943385152d8cdc3fe0d857 ./onvif/proxy/lib/WSDiscovery/Types/ProbeMatchesType.pm +8e713c3218c4ad1c1282ded553b91b94 ./onvif/proxy/lib/WSDiscovery/Types/SecurityType.pm +7544d347644b76ca4c5cb366eac098a5 ./onvif/proxy/lib/WSDiscovery/Types/ProblemActionType.pm +a8a1c0e022777af409155a4b2e2695a9 ./onvif/proxy/lib/WSDiscovery/Types/RelatesToType.pm +69df36e2c882e324faff0b24b4261318 ./onvif/proxy/lib/WSDiscovery/Types/ResolveMatchType.pm +160e3fbf346b35f422c473b14103ae9d ./onvif/proxy/lib/WSDiscovery/Types/ResolveMatchesType.pm +f427023c3036641cc1f6deed477530a0 ./onvif/proxy/lib/WSDiscovery/Types/UriListType.pm +97abe5d9f567a9a6f1aa37686db6bb41 ./onvif/proxy/lib/WSDiscovery/Types/EndpointReferenceType.pm +94127d00817939d0de5926db8e0a4d0f ./onvif/proxy/lib/WSDiscovery/Types/FaultCodeOpenType.pm +cbe82dbf0cc4a50ac03bbf54706dae7c ./onvif/proxy/Makefile.PL +eca6a95ad91d5f4bd44d48e521dd8eaa ./onvif/proxy/CMakeLists.txt +9e94dc93bb41a382caefb1d8034530bb ./onvif/modules/lib/WSSecurity/SecuritySerializer.pm +35f53d12af1b43e4b99a44f14bc0fc1d ./onvif/modules/lib/ONVIF/Deserializer/MessageParser.pm +a505d93d4f21a82793c1b20beaca7072 ./onvif/modules/lib/ONVIF/Deserializer/XSD.pm +22abbf38f03befb8c03c6a59e221ae1b ./onvif/modules/lib/ONVIF/Serializer/SOAP12.pm +33507e88110a30a473bb07d06228b38d ./onvif/modules/lib/ONVIF/Serializer/Base.pm +b58ce88d3de57a72188f6a5a9bda14bb ./onvif/modules/lib/ONVIF/Serializer/SOAP11.pm +c80ac73a1f043b39a34f217fe5deff12 ./onvif/modules/lib/ONVIF/Client.pm +8c4aa4ed3ad3cd1bab00f498c7022b9d ./onvif/modules/lib/WSDiscovery/TransportUDP.pm +cbe82dbf0cc4a50ac03bbf54706dae7c ./onvif/modules/Makefile.PL +7bd64d6650f267f1abdeb94f0502ac89 ./onvif/modules/CMakeLists.txt +b42bcf8914a24e8f32dfa0f9d0f9d4a8 ./onvif/Makefile.in +446e35ad234a96c2850131340f07bf4b ./onvif/.gitignore +eca821c8d8781c98a1bcae44ab361c13 ./onvif/doc/onvifprobe2b.jpg +0a8781f2991a23e67a89d42dae6103e5 ./onvif/doc/onvifprobe1b.jpg +0bbd4dbee7ac174cd37d3aa727fc8e88 ./onvif/doc/monitor2b.jpg +3be7a20a8b9f83978dcc9b9e01322360 ./onvif/doc/onvifprobe1a.jpg +94e7b0bfe8555247898ef7df5d0ac9de ./onvif/doc/monitor.jpg +d1d5cebbbbdf8a8f19edef531b89a1d5 ./onvif/doc/onvifprobe2a.jpg +af14b3f32ccd07721352432ce7c9c35c ./onvif/doc/monitor2a.jpg +8503afad711f066b734beb4accd47280 ./onvif/CMakeLists.txt +62c802b6c3afcd19a21512d86689abce ./docs/userguide/cameracontrol.rst +c0d5b78ee3bb0d9f81d820ee41c4192a ./docs/userguide/viewevents.rst +e902c73dc4a9e1b50d519911622b1ace ./docs/userguide/options/options_web.rst +b6c52188d0ff765b51a9211536effad6 ./docs/userguide/options/options_email.rst +8fa801cd0afe0e142ed05ca2a035f79e ./docs/userguide/options/options_display.rst +a7bbdeb100a7332e35a124b92760f6c0 ./docs/userguide/options/options_network.rst +3ca37dcdeb91defb6ac06b8686594394 ./docs/userguide/options/options_logging.rst +10a0d433509c209b3f3921538d042bb0 ./docs/userguide/options/options_users.rst +f92dd19032b17a7c0d645f144ddd0df1 ./docs/userguide/options/options_system.rst +ee318c3181ff82a7c7890d9cffee48a8 ./docs/userguide/options/options_eyezm.rst +9fe0e060ec75d4b8e3a5f8167e269bbf ./docs/userguide/options/options_bw.rst +5a2ec26b2bf24e908cf83439772c71e7 ./docs/userguide/options/options_images.rst +20591923694123b762b07c3deec6bdb5 ./docs/userguide/options/options_paths.rst +0e80d6d25d2fe289c06f072ea0a83468 ./docs/userguide/options/options_phonebw.rst +68f71269f0ffd93d6cd75bbb832e54d7 ./docs/userguide/options/options_config.rst +2a6b4c55b246c4bc1b6494d5fc46a903 ./docs/userguide/options/options_x10.rst +8b95c0034df34a47a87e42ae726029f6 ./docs/userguide/options/options_upload.rst +56afc0e2a5b6ae98576579f82d6e3bb4 ./docs/userguide/options/images/Options_X10.png +24b9f2a70da1d17b5e7949a325b6e7fa ./docs/userguide/options/images/Options_System.png +32b32301c3bf4295ff2c3216426cf4d1 ./docs/userguide/options/images/Options_Config.png +6e22af092526862137ca8796a34035d9 ./docs/userguide/options/images/Options_images.png +f651efd7d8a98e6ae5d9a7adade08f19 ./docs/userguide/options/images/Options_web.png +a77fa39b42a9683fddad9eebb8faaf90 ./docs/userguide/options/images/Options_Logging.png +86298c0ceb09c437fd0098ae0a7b75c0 ./docs/userguide/options/images/Options_BW.png +96719dd0c20c940d88825fe3871a33c1 ./docs/userguide/options/images/Options_Paths.png +5fd009720ee0fadf1b558cfc0e491026 ./docs/userguide/options/images/Options_Network.png +45379c5e4dddd375b6e66f35137a9447 ./docs/userguide/options/images/Options_BW_Phone.png +90645f54de1263ce9e892968c2a0b948 ./docs/userguide/options/images/Options_upload.png +b9e9785b6795bb61db6039000f0adb9b ./docs/userguide/options/images/Options_eyezm.png +67854a6582417ae809266c1283373cb3 ./docs/userguide/options/images/Options_Users.png +ba55f09a02ec55c8adebfc7d99709464 ./docs/userguide/options/images/Options_Display.png +373c3619ba0ac8a25d487637d9447cc6 ./docs/userguide/options/images/Options_email.png +80e98a33367d781645d5d1cbecf13a4b ./docs/userguide/viewmonitors.rst +d570036606f0d900e6bb90c35cc4898c ./docs/userguide/options.rst +a3a30a7db39759675b32709d83615bde ./docs/userguide/controlmonitor.rst +112c6c4259dbc52c4e5899a14d8e43cc ./docs/userguide/definezone.rst +fd29c6f32dd7ed12fccc4a666abdc0b3 ./docs/userguide/introduction.rst +5e27632f901c4649c80999440204a750 ./docs/userguide/gettingstarted.rst +da3cedcd3639901443f4353ed91ab148 ./docs/userguide/monitor/images/Monitor_source_curl.png +356596880bbfa568197efec922e839ab ./docs/userguide/monitor/images/Monitor_Misc.png +d8a99a462bb3bd876775de7d727c3969 ./docs/userguide/monitor/images/Monitor_buffers.png +f25d6be2cd63c29b6356c56d634689cf ./docs/userguide/monitor/images/Monitor_timestamp.png +93c6a009de67f1036805fae4dd8e839d ./docs/userguide/monitor/images/Monitor_source_file.png +eb7b4f49d09e4e8c5c34135876b1c79c ./docs/userguide/monitor/images/Monitor_source_remote.png +d271ae4ed989479314c20e4912d80aab ./docs/userguide/monitor/images/Monitor_general.png +5b8bfe5d384533e1cbdc154136a45a54 ./docs/userguide/monitor/images/Monitor_preset.png +6461cf2cd87ab9c99e195c65190ebf9a ./docs/userguide/monitor/images/Monitor_Source_local.png +4e8d9863eacb4416586ee502400e0abc ./docs/userguide/monitor/images/Monitor_Source_ffmpeg.png +dde1846f1d73f1a930ec4a915d821315 ./docs/userguide/monitor/images/Monitor_source_libvlc.png +2ff37307487317e84d9e3d22b56b083a ./docs/userguide/mobile.rst +3c39111a4bb5a3fdaf4bc6dc3ad4ca05 ./docs/userguide/logging.rst +eab8c19e4e8d597c9a77bd8e46f2916b ./docs/userguide/filterevents.rst +0470df29e190730b201b0216cf096e63 ./docs/userguide/components.rst +3e383b060a7c6a85dded7391f443fffd ./docs/userguide/definemonitor.rst +02dd531de2a59e579914a623db5b14cf ./docs/userguide/index.rst +f9de6074f6931f9be235e011aed17fec ./docs/userguide/images/Console.png +a07db18347b4315910e594c390e390db ./docs/installationguide/centos.rst +0cfefff4698b70bbe0dff40dd326e51e ./docs/installationguide/debian.rst +1eea48b4843a4643ab083d93d3dbb65b ./docs/installationguide/fedora.rst +61758887e2871020629f560037d8ce0d ./docs/installationguide/index.rst +1d55c4fe5fb061f851ea300f4ebcbfb2 ./docs/installationguide/ubuntu.rst +3e944fa8357ea69d2b477a02029784c2 ./docs/faq.rst +f8952f4049ffd285f500fa3eee40c3a3 ./docs/conf.py +f83fa3b4dcb6df1f153020734f187756 ./docs/README.md +91fe248d68010c7ce5dff181e73951c3 ./docs/contributing.rst +243665582618ce00e8e75e63e8037ec4 ./docs/api.rst +18da6bbf5d106539b28d12d28dac100a ./docs/Makefile +e01d03652466ce4eeaa64593a52099f9 ./docs/index.rst +357b34eed6e16cd1f77d89666da57dfa ./docs/_templates/hiddenglobaltoc.html +3b77e5fd6696547edc2b7a6a145bf504 ./umutils/nextimeconfigure.zm +558d857f259125badaf2cc4f3c7f1200 ./src/zm_logger.h +fd6be595e1082a5369958a2b0f08e168 ./src/zm_ffmpeg.h +11cce9783aabef06b8a67c83c5698e0a ./src/zm_videostore.h +e69b7a54405624d15fbd8d8786d384e0 ./src/zm_exception.h +2aa690690a17c46e624a34e720a303f9 ./src/zm_coord.h +7c434aa4503fd753a2a22320cfa74490 ./src/zm_logger.cpp +111332466aa21fdb4833a6dd3156124f ./src/zmstreamer.cpp +15b581ae0ab7a10d19c21c718fc7af4c ./src/zm_remote_camera_rtsp.cpp +8496a3baeb5cc2bbab25a8dd1810a5ed ./src/zm_thread.cpp +fdd908541b4f3312858e00377fd548e9 ./src/zm_image_analyser.cpp +2d060d71dc2570574ae3c027262917d2 ./src/zm_db.cpp +d6d7a57c1dacdff6dbb1e05cb55550a6 ./src/Makefile.am +b9ece7b96f8ee41246692b55c621e76e ./src/zm_rtp.cpp +925f6c5ac42134c40d2a68f53ca95a4b ./src/zm_rtp_ctrl.cpp +608cf7026a51b1199de76ebab1bc62b3 ./src/zm_utils.h +823fb8941cf6a1ec8a98bb50fa15e409 ./src/zm_poly.cpp +d358d38240dd17836ae18444a13517c1 ./src/zm_timer.cpp +cc479cb109896c7eabc7ec26cf7a7cfa ./src/zm_user.cpp +a300ce45afc0b7fff0e309fdce17c26a ./src/zm_buffer.h +00ca1445323e36d22343a532452355f6 ./src/zm_local_camera.cpp +8ebf329891f6d9525402442c5460a55b ./src/zm_videostore.cpp +16eb91fa329b7f7f2e563b914f7ac544 ./src/zm_db.h +4fbef7431ed776a6514beff1339e718f ./src/zm_libvlc_camera.h +4089d9ea742cd0c29a63a5ad83d51604 ./src/zm_utils.cpp +2e1204c131fee6eff4c548151e3d1fa7 ./src/zm_ffmpeg_camera.cpp +371d69f5c20081d669333d0f534c19ac ./src/zm_zone.h +7e88f3cf2eb136c0e6242042f3a1072c ./src/zmfix.cpp +ca8325df6c2fb643b7309e143e05dd63 ./src/zm_event.cpp +20846ea8388a14393f0d7a68ca5c324f ./src/zm_config.h.in +eedd87c3ed2782e342b080d9bbb60793 ./src/zm_curl_camera.h +e78883f20f1b94e34e29d211df0732da ./src/zm_libvlc_camera.cpp +34240930ad7988c3e8191a18c6107d23 ./src/zm.cpp +20cf29730432da2ed478324d9e6d5779 ./src/zm_sdp.h +6f5adf7eec0fa8212e0555ea7b0443cd ./src/zm_signal.cpp +122f1984e5807c19a03e408f8e34f7e5 ./src/zm_rtp_source.h +a1385981ade3cfe4012caf962884f734 ./src/zm_curl_camera.cpp +e10eea32d5971b2e5ba570c4a476cab2 ./src/zm_camera.cpp +f0c98a507f16ff7f29e6dba0ada59306 ./src/zm_remote_camera_http.cpp +53b561d4139c9559ed1123b8b691e559 ./src/zm_mpeg.cpp +289edd9e6a518d71437574ee58eeec8a ./src/zm_poly.h +01c7ec5977c6342e33564578c22df56c ./src/zm_user.h +217800e94433b549e044c55cd20718cb ./src/zm_remote_camera.h +11ccdf19c28de970b4648feabf0c5c7b ./src/zm_rtsp_auth.h +fcf9e027264344c3cf45a01240deeb63 ./src/zm_fifo.h +4c38480a4dd50dbae2147f063cda53d1 ./src/zm_camera.h +becf851928ee37eb80dc78409196614d ./src/zm_regexp.h +8738340d189efe68eebcef9c4f305c23 ./src/zm_file_camera.h +cec7ae7350fde1d1a7c878a7fcc56668 ./src/zm_image.cpp +80895763b53d6851df4190a8aa99fb6c ./src/zm_threaddata.cpp +c5adc6032b3dc06f38d16b3538a5ecd6 ./src/zm_remote_camera_rtsp.h +b1eccd7eb5bc91235f0806a114be0a29 ./src/zmc.cpp +831242150b1c201f14ab6ac4b78779b1 ./src/zmf.h +697e4288eb91d2b56351f155b5c1e370 ./src/Makefile.in +3756394985f956047d7168f45f9ea730 ./src/zm_stream.cpp +1c769c51dc1870444e703ba7e6378e2b ./src/zm_rtp_source.cpp +0fd73fc75df1c7c373d8b2e25ddc380b ./src/zm_signal.h +f20ea73d50ffc351738c257a479a1eb3 ./src/zm_rtp.h +cd2cb63a91a49ad4de8968c78ee9aec3 ./src/jinclude.h +2936701066999e476f72beb097270798 ./src/zm_image_analyser.h +2b1286e6d2d9c5ebf4ab4f318b3fe491 ./src/zm_config.cpp +3aec54ffaf40c8b36d27713529c516f7 ./src/zm_buffer.cpp +bd2dde9b127c58397bfcc84a8eb9d732 ./src/zm_event.h +4589c73baea3cb3e6276ab588d2e367e ./src/zm.h +7773b4d976f6c62b2708df6e109a9095 ./src/zm_rtp_data.cpp +cd749097f4794d4779b92d373f4e393a ./src/zm_rtp_data.h +60d5ab60f82e0adb3d95aa2c0e1e629b ./src/zm_jpeg.h +763cedc85e94dcdc10b4c4ccdf2f03bb ./src/zm_time.cpp +7a6576b49e7315659e89efef7e5f6007 ./src/zma.cpp +ed06acfba8623ec221af79ecb15bc8e0 ./src/zm_fifo.cpp +6a6537db40458e34bc5910d7e21bf17f ./src/zm_timer.h +533582ae52d3830775f1bec81b2fe6dd ./src/zm_time.h +7368c756744aecdeef44b1762a4998d6 ./src/zm_jpeg.cpp +927ff5819a0fa92cd69033bb037604e4 ./src/zm_rtsp_auth.cpp +9cfd2160849677e456ecbf6c10995975 ./src/zm_comms.h +38332214339fc9b4e21973a87eb7c233 ./src/zm_comms.cpp +982b0ea73d266d9108861c1977ba1d1d ./src/zm_box.cpp +57ae77d207f0050bb4b6f44faef121a7 ./src/zm_regexp.cpp +c2769c9d34769fb44cf341c083964c94 ./src/zm_thread.h +86e550e5391f5e91ff11f850ca03588c ./src/zm_box.h +4031bc25cd7e6adcc0b6706e47f3d9b2 ./src/zm_mpeg.h +e67bd8ac5f6b3aa353dc5a9a64c4ea8a ./src/zm_rtsp.cpp +e2cac3b2fadb8d6b44b03788c7c8b3d9 ./src/zm_remote_camera_http.h +319967a72a672ad9e8da56d864e5188e ./src/zm_ffmpeg.cpp +003b1090b66b2bcff9d2f37fde841b46 ./src/zms.cpp +d40607e3e909ca2fae020367ae698e8e ./src/zm_monitor.cpp +4f82fc1f895807f53c1c5dc97f8793d0 ./src/zm_monitor.h +115994bf4cc01cfbc79ee6f9458ffb39 ./src/zm_file_camera.cpp +9a342bf3c41730982aaf06184ebd879e ./src/zm_sendfile.h +9b54586550184ed3bd06b1db4c0c3cad ./src/zmf.cpp +e2a4058d2c633191d0aabdde1da906dd ./src/zm_rtsp.h +5eb0daf6f6bedaf1e79008bb403c51d0 ./src/zm_rtp_ctrl.h +22eceeb94f62ff3ad85cebc85c6d40f6 ./src/zm_coord.cpp +9168ca027ba34557b1aac3e60dc6700a ./src/zm_font.h +14da3205800799008023719b8d8c3213 ./src/zm_remote_camera.cpp +30ef739b6824e0a6d2b27bc6b3d6c5c2 ./src/zm_sdp.cpp +38ae781c38ba41cacff1b0b4b4d60661 ./src/zm_rgb.h +ab2776fc93d7486ec02c584d0d5e5879 ./src/zm_ffmpeg_camera.h +06f71222f01afc1f75ecd9d22571eb20 ./src/zmu.cpp +f7b0619610911ba0e5d183180959d3f7 ./src/zm_video.cpp +f79245b1b5bb07c9d01361e6e5a980f8 ./src/zm_local_camera.h +15257f4a5b37024340c8f1e6ea8cdf83 ./src/zm_zone.cpp +139f0ecf1b074a001b59d066f524c124 ./src/zm_stream.h +25f790d2c8a9349764af921a79033eb9 ./src/zm_exception.cpp +7bc215dcd99b375b2183c7b0873f3925 ./src/zm_mem_utils.h +7c58b881637f25f6b96607817e13a4b3 ./src/zm_video.h +a0a7e8cd316b7860b7170163ca4ad8e5 ./src/zm_image.h +128faca72acc5f16fad89e2ecf57ad03 ./src/CMakeLists.txt +0e84ceff801e4b4df57152c872fa6a0d ./zm.conf.in +ebf0599b68b131c40ddcce51135f84cb ./AUTHORS +850781b1a6ab6fb7ade4e7fea53df98e ./bootstrap.sh +e8359862139499468edceddaea790df5 ./configure +6afe490bc9be80daa397584b6285076b ./NEWS +10141c166677c0874f995f99966dcaef ./zmconfgen.pl.in +82a2a0217d299c1b907c80850ba280c0 ./.gitmodules +63ad52527233833e26d03936af7ad06f ./CMakeLists.txt +431df482c3bf47bec0f11ef5d7c63dac ./acinclude.m4 diff --git a/distros/ubuntu1504_cmake_split_packages/autoreconf.before b/distros/ubuntu1504_cmake_split_packages/autoreconf.before new file mode 100644 index 000000000..80c3bda9b --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/autoreconf.before @@ -0,0 +1,5745 @@ +36ac0113f42c54a133e022c7283ac15c ./distros/fedora/zoneminder.f21.spec +631d9c1038bd50afa7ea1e208276b24a ./distros/fedora/zoneminder.service +fdbb1d11248d7a419925fb12fa96544d ./distros/fedora/zoneminder.f20.spec +cf2ce0ab0f4f4292a4fd7d54930ef01e ./distros/fedora/archive/zoneminder-1.24.4-installfix.patch +da387752f159ad3bd954e08e7922ffe1 ./distros/fedora/archive/zoneminder.cmake.f19.spec +ec5eb5968e1886147d0eca41e743f717 ./distros/fedora/archive/zoneminder-1.26.3-noffmpeg.patch +d758e9c7bc19cf3763159cfaf55e986a ./distros/fedora/archive/zoneminder-1.26.0-defaults.patch +93ed9713478770fb9ab5beb4754f253f ./distros/fedora/archive/zoneminder.f19.spec +6535fdd440ca5b4c70ccf6286ad67226 ./distros/fedora/archive/zoneminder-1.26.4-dbinstall.patch +b37d0026d5f9462c5fb507fcc916dd5f ./distros/fedora/archive/zoneminder-1.26.3-dbinstall.patch +9a739e4bfcbb66cdd7c7dec4c217470c ./distros/fedora/archive/zoneminder-1.24.3-runlevel.patch +bf41ee3264703476ab072c6e88da83d1 ./distros/fedora/zoneminder.tmpfiles +b77af584efc3de215dd3a9d449989763 ./distros/fedora/README.Fedora +430610b251c76f3adc1adf9e9037c9e3 ./distros/fedora/redalert.wav +dff3db013c22afeb7d6c9dc4eb105f43 ./distros/fedora/zoneminder-1.28.0-defaults.patch +a2bed831afd59ad6ea3b972d4c6e2593 ./distros/fedora/zoneminder.conf +ff9d8cf901e30e8e7b655cf1b6a220f0 ./distros/fedora/zoneminder.logrotate +cd02fd93bc998dbeca5607fc631fe654 ./distros/fedora/CMakeLists.txt +67df387e312fa2ca4d524475c5a8b269 ./distros/debian_cmake/dirs +7c5aba41f53293b712fd86d08ed5b36e ./distros/debian_cmake/compat +e2e2f9b1d2026a2f6a47030b7322c09e ./distros/debian_cmake/init.d +6b097e14fd6f6a41b162a326d47c3c0c ./distros/debian_cmake/README.Debian +5069cdb6ed90d359f09e87a5eb9db612 ./distros/debian_cmake/copyright +f78d9f1a9f4de83e74c41abe5a762bd6 ./distros/debian_cmake/control +a81b6820a3399e20412e77034e838412 ./distros/debian_cmake/rules +327c45c200cd66e796ae059c709c0adb ./distros/debian_cmake/watch +62bcc6a3d313ff213dc27c14326dd61e ./distros/debian_cmake/links +20eb5d0df8842df2df7e75d60330d3b9 ./distros/debian_cmake/apache.conf +e7266ba90319421311eae24c9009c9d2 ./distros/debian_cmake/preinst +a15f40ea51f88083dffd1df1fa55087f ./distros/debian_cmake/install +ac036608c5c402f92926505d0f0ab0e4 ./distros/debian_cmake/docs +50b93d6ff071d0e219223cf2453954c7 ./distros/debian_cmake/postrm +145566735fa890c4ae69a40667530e1c ./distros/debian_cmake/postinst +f41e52c62d427e15ac1dcc644f2195f2 ./distros/debian_cmake/changelog +d1e124500a76c585074b6c67f1e269b4 ./distros/debian/README.source +9072a65367b02191e3558347bbd8d68e ./distros/debian/dirs +7c5aba41f53293b712fd86d08ed5b36e ./distros/debian/compat +b5a54033efcc9ff3c29b8f56771b31e7 ./distros/debian/init.d +6b097e14fd6f6a41b162a326d47c3c0c ./distros/debian/README.Debian +722ee23d6e76b10f1eae240ea1a49117 ./distros/debian/copyright +f41f5d0666b79f255f83d89d170ad70e ./distros/debian/control +71ecb15d7b4c2ffa86c39c4950bdaa69 ./distros/debian/rules +327c45c200cd66e796ae059c709c0adb ./distros/debian/watch +62bcc6a3d313ff213dc27c14326dd61e ./distros/debian/links +83f158b9cfd39180e8210a11849a5326 ./distros/debian/apache.conf +e7266ba90319421311eae24c9009c9d2 ./distros/debian/preinst +3295df67ccd495efd40c4070bc7db9fe ./distros/debian/install +ac036608c5c402f92926505d0f0ab0e4 ./distros/debian/docs +d41d8cd98f00b204e9800998ecf8427e ./distros/debian/patches/series +c97d936f197ff61af4cf1ff4411c1b87 ./distros/debian/postrm +145566735fa890c4ae69a40667530e1c ./distros/debian/postinst +b6a1e435a67a5e42de84b1b8e96a0b9a ./distros/debian/changelog +45384403199eccd6476d1bf8d03f3b63 ./distros/ubuntu1410/zoneminder-core.config +112313e5183853584e6438f1e93b5d1c ./distros/ubuntu1410/zoneminder-ui-base.config +c4dc6c754dc0459e8fa55f936ac44fce ./distros/ubuntu1410/zoneminder-core.dirs +7c5aba41f53293b712fd86d08ed5b36e ./distros/ubuntu1410/compat +6b097e14fd6f6a41b162a326d47c3c0c ./distros/ubuntu1410/README.Debian +722ee23d6e76b10f1eae240ea1a49117 ./distros/ubuntu1410/copyright +74aaf1c7713607d0b7c61e57413bbed9 ./distros/ubuntu1410/zoneminder-core.links +108c6ab0bd6fb0b90e100b058c210bbb ./distros/ubuntu1410/zoneminder-database.templates +cf5c4ec672f574a27a00eb44352230ed ./distros/ubuntu1410/zoneminder-ui-base.postinst +96582f0c2d26f43896dd1722aa7ffdce ./distros/ubuntu1410/control +38238d0966419b17181186f70275e216 ./distros/ubuntu1410/rules +d261cd2b2faa4dac157335e1e4f46b9f ./distros/ubuntu1410/po/POTFILES.in +b58fa875bbbe10155ef03bbd2876cabc ./distros/ubuntu1410/po/templates.pot +64f325327eb820f669f1d2a712d72876 ./distros/ubuntu1410/po/fr.po +bb2acd3aac786d4c9acce222e1d57266 ./distros/ubuntu1410/zoneminder-core.zoneminder.tmpfile +15aeddec2ea55d4520a3dd0301352d44 ./distros/ubuntu1410/zoneminder-core.install +01230c86823e3435f6a3c3199aaf23d3 ./distros/ubuntu1410/zoneminder-ui-xml.install +4c4678a2118fbef1bd0a49850ef49f32 ./distros/ubuntu1410/zoneminder-ui-base.install +088b471da93d44b8ffbbe5cb8951e383 ./distros/ubuntu1410/autoreconf.before +20eb5d0df8842df2df7e75d60330d3b9 ./distros/ubuntu1410/apache.conf +7d5984727b13f2413a808c0a49064666 ./distros/ubuntu1410/zoneminder-core.preinst +2ea8b5e539b9d3fef230d7a684fe4fd4 ./distros/ubuntu1410/zoneminder-ui-mobile.install +c22bccac94ac55e91dfd0cda85a501a0 ./distros/ubuntu1410/zoneminder-database.prerm +e1c77e20b631d23c141cf45206d1ba51 ./distros/ubuntu1410/zoneminder-core.templates +b00d28a06ea5bc8e71c7a7511d0f742e ./distros/ubuntu1410/zoneminder-core.postrm +9b039676f7f85562d44adcf2b54ae6c2 ./distros/ubuntu1410/zoneminder-core.postinst +9f2fa1326e1853f1667be70a7aa09018 ./distros/ubuntu1410/zoneminder-core.zoneminder.service +37ccc83bb75a9a07d3e6fdcfd3933761 ./distros/ubuntu1410/zoneminder-database.postrm +893c9cc302f18b3ea7748b4cce97b4b2 ./distros/ubuntu1410/libzoneminder-perl.install +38e25f9e02f0f724dad69c4e1a3dc1d5 ./distros/ubuntu1410/zoneminder-ui-base.templates +ac036608c5c402f92926505d0f0ab0e4 ./distros/ubuntu1410/docs +00d1f9796ead7022af0f475bad88a421 ./distros/ubuntu1410/zoneminder-database.install +c85387fb53ef02b1f00924e8b44201f6 ./distros/ubuntu1410/zoneminder-database.config +2ee1c3c6ce369d02b44e652fa22bde5c ./distros/ubuntu1410/zoneminder-ui-base.postrm +726518a41553bb4f6b3f9e7051d88f1b ./distros/ubuntu1410/zoneminder-ui-classic.install +1ab0f150b42784da2e07475029c7cde6 ./distros/ubuntu1410/zoneminder-database.postinst +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1410/patches/series +462b03b0667e79179d457a5e33f735d8 ./distros/ubuntu1410/zoneminder-ui-base.links +ac3e41e591a82f16e3929a4bade77669 ./distros/ubuntu1410/source/options +c5fc031a250b2d76fe051ac3621620ab ./distros/ubuntu1410/source/format +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1410/source/local-options +34a5614f084b1018b9934117e621e55d ./distros/ubuntu1410/zoneminder-database.dirs +b5a54033efcc9ff3c29b8f56771b31e7 ./distros/ubuntu1410/zoneminder-core.zoneminder.init +1164bc28aca7c5ba42aa44c6b316dd15 ./distros/ubuntu1410/changelog +9336fe757053e0128a2899b9505e8c4f ./distros/ubuntu1504/zoneminder.service +9072a65367b02191e3558347bbd8d68e ./distros/ubuntu1504/dirs +7ea3643e1460f62055316fb5e3b4e5a8 ./distros/ubuntu1504/zoneminder.tmpfile +7c5aba41f53293b712fd86d08ed5b36e ./distros/ubuntu1504/compat +ebff2c7cf2c7bd2c7a85bd523f54bfbf ./distros/ubuntu1504/README.Debian +722ee23d6e76b10f1eae240ea1a49117 ./distros/ubuntu1504/copyright +cc1eb330c4affceca07da2cb20f0a8b1 ./distros/ubuntu1504/control +5fdf0f8c6cdf05b8e155da2cae0c07d0 ./distros/ubuntu1504/rules +327c45c200cd66e796ae059c709c0adb ./distros/ubuntu1504/watch +62bcc6a3d313ff213dc27c14326dd61e ./distros/ubuntu1504/links +20eb5d0df8842df2df7e75d60330d3b9 ./distros/ubuntu1504/apache.conf +e7266ba90319421311eae24c9009c9d2 ./distros/ubuntu1504/preinst +3295df67ccd495efd40c4070bc7db9fe ./distros/ubuntu1504/install +ac036608c5c402f92926505d0f0ab0e4 ./distros/ubuntu1504/docs +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1504/patches/series +c97d936f197ff61af4cf1ff4411c1b87 ./distros/ubuntu1504/postrm +057c752f843bdd21580068f36104179a ./distros/ubuntu1504/postinst +7bc0395a55a27a028e557094adc61bb6 ./distros/ubuntu1504/changelog +9072a65367b02191e3558347bbd8d68e ./distros/raspbian/dirs +e94a52235b47e7270c9265b24f273ec6 ./distros/raspbian/files +7c5aba41f53293b712fd86d08ed5b36e ./distros/raspbian/compat +b5a54033efcc9ff3c29b8f56771b31e7 ./distros/raspbian/init.d +4a04bb22fdc3f8feb204ac95d1626c79 ./distros/raspbian/zoneminder.debhelper.log +6b097e14fd6f6a41b162a326d47c3c0c ./distros/raspbian/README.Debian +923300b9c0c8ef1b6d58844bf05cbead ./distros/raspbian/zoneminder-dbg/DEBIAN/md5sums +f119684c9021cbb23b17a266b716bab2 ./distros/raspbian/zoneminder-dbg/DEBIAN/control +4dd50a5c0b8b83eec017e1c108fa770c ./distros/raspbian/zoneminder-dbg/usr/share/doc/zoneminder-dbg/changelog.Debian.gz +722ee23d6e76b10f1eae240ea1a49117 ./distros/raspbian/zoneminder-dbg/usr/share/doc/zoneminder-dbg/copyright +27fcd0f464860f34ee715c84d1de9734 ./distros/raspbian/zoneminder-dbg/usr/share/doc/zoneminder-dbg/changelog.gz +b574b284b16492ed28729aeb5fbb66f5 ./distros/raspbian/zoneminder/DEBIAN/md5sums +01b4460a1f2d4ac1ff63b035f41c303b ./distros/raspbian/zoneminder/DEBIAN/control +995d2b90f757a0f7dd61af0c43f0cab6 ./distros/raspbian/zoneminder/DEBIAN/prerm +f8f4897acefb466933adb9629373f041 ./distros/raspbian/zoneminder/DEBIAN/preinst +c644056d57e40334389691b652c172f5 ./distros/raspbian/zoneminder/DEBIAN/conffiles +441213273c9e3878a835f6b3122ee83d ./distros/raspbian/zoneminder/DEBIAN/postrm +ba453ba095c7811aad2e54caf47b41b9 ./distros/raspbian/zoneminder/DEBIAN/postinst +4b3afb84b2b71ef56df09997a350bd04 ./distros/raspbian/zoneminder/usr/share/zoneminder/graphics/spinner.gif +e07c0775523271d629035dc8921dffc7 ./distros/raspbian/zoneminder/usr/share/zoneminder/graphics/favicon.ico +a840cd88b33f95a014cd654e0a615fd9 ./distros/raspbian/zoneminder/usr/share/zoneminder/graphics/transparent.gif +718d8596a14d123d83afb0d5d6d6fd96 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/includes/init.php +cf2a637c699c32648c715d2faec7c4de ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/includes/config.php +9355288fed99c00c68f8623a3e73280e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/includes/functions.php +96a21cecd35ed5d1b732bfe74b1535ef ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/views/actions.php +83f5492302df18de8c7090a9fa8ac3e7 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/views/notfound.png +f487b23a0841587841fd3dd34306d677 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/views/console.php +d41d8cd98f00b204e9800998ecf8427e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/views/none.php +33d9276165e48e85f9b76d96ceb72c43 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/xml/skin.php +67bdd7f59ebc311b9cd8954d57f68c2d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/css/skin.css +0814d7addb49c87b8cc29eaff5c8effc ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/includes/init.php +2e1176dc3923dd9a44b19754139a1555 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/includes/control_functions.php +3f1549ab15e953d0e1eb5ea978677e8d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/includes/config.php +5c15d51173b096e5597c329511ce7d74 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/includes/functions.php +d5b4372487f53fadf1da7397ae10c77b ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/frame.php +224db60a7b9d89678e3ca4a5de5803fb ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/filter.php +fcf239e684be46104251247cfc51265f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/login.php +63c88c56fe6c4104f811847f70fe7b6d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/watch.php +d52ac90fc23bfc97a3b9afe117c66642 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/event.php +5a61e2227587163542bebb4dfb77fe1f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/css/console.css +6d8509c58a57938eedadb498c9fd9961 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/error.php +e5c59543e4dce3d2719a2d9a8b52fa9c ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/state.php +c121ca1f9a8c4b693b3dcb4bd63d8e7e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/montage.php +1ad2154c2ab8d4e651087584ff533359 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/events.php +6ee5d2b987944284e0fd52e158d70c52 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/console.php +97f6771e6e530e0323c8a7455d4c087b ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/devices.php +e9202a011a59bcb4f4e49a9811f56b03 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/eventdetails.php +4707ce2043a6964c6b0886f8404b37da ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/function.php +b42a65ca6f80ffe2ef69b1bf6d0dfd05 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/views/video.php +1ee43243aff2957f555b2025fe121ddb ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/mobile/skin.php +b08bbad185d4f141f4e16a32961f7e10 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/point-o.gif +3aea4c08fe3d0882bbb50d6a880b9d3e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/center.gif +10481c373da9f2e33955f5f684701e35 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-ur.gif +4253a17d69f9c9f105864b57ef1da4ee ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-l-u.gif +2357c0f1dec549fb5866341acf2f8e64 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-dl.gif +b36b743446eb998574343b265fc2a327 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-dr.gif +de6d2a2b0bd54f72d5c8bde9fddfc56f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-ul.gif +93f79d7c400d1988e58791d692050380 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/point-g.gif +6a948184e447f61a38d54609194eb647 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-l-d.gif +e252c31fdb0b3a65a082069b37042a0f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/seq-u.gif +330f0709c7b846ed5b3e990a6b0b6839 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-u.gif +0c2b9346b65233183cca8dbaa6ee1db2 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-s-d.gif +dad7467542959f7e571f12d0a4988c98 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-r.gif +2c0f5bb849832ea968cffc648d45381c ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-d.gif +2e743de572b45088c05f0471f63fb710 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/point-r.gif +98212c6b29fcd9a09e6d16607fe65909 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/seq-d.gif +269dca955356f221c9ea271f3e259763 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-l.gif +4b755122db75084dd39297fbc1822f27 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-s-u.gif +d41d8cd98f00b204e9800998ecf8427e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/includes/init.php +7c60f2ccaa5b4473b5f9a942c5fea373 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/includes/timeline_functions.php +b6787b20659ab4ae5b06cb9f9900330d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/includes/control_functions.php +5248a1135175c05b1860dac97cca5c0f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/includes/config.php +eff1e8ea2a5418ed47ce69386b4a3e61 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/includes/export_functions.php +1b3a274b77c824b4506765106205f598 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/includes/functions.php +4d1463e6bc5ed133ede23e6372bcbdbf ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/controlcaps.php +1b57a2fecd32647215f68998bffba25a ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/controlpreset.php +97bd8f9eae89b8bb897559ffa0694228 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/monitor.php +c614ed7ac478bf5c9ef863900d89ea66 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/frame.php +21495b9af3361009cb8e77f0fec4a996 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/filter.php +1d675229155ceaa8982d2fc47d47d5f6 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/options.php +8d0be05a8725ed889b056ab3d2acb505 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/frames.php +4ca1ad1cf9c24ab566ff570a8305306a ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/status.php +b571e7b897a14ba6c0af756371fcd197 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/login.php +cc6a31182fde7213ccd9f4d7a2dbe109 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/Makefile.am +c942ee3fa4859956057ca8a17be36989 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/eventdetail.php +9dcd343147a4b8215917b8eaf9441ba8 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/watch.php +35922ff1e4668805878c6343db3d2b18 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/optionhelp.php +3d10f253482dd12a0aaab55ce50f061e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/event.php +16d0a8a023a63797d1ea004e8ece32c6 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/user.php +548571006c1c33eeaec9d288b7d21515 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/postlogin.php +fd250dfd1edcc92d496d00b6e2963c48 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/cycle.php +0a7f4b83bbca22a5061f3f8b3771b3d2 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/donate.php +276b51cb4307b90a5cc3c1c44f86b005 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/version.php +ec4c3a85ce7b717945430d5379e5f5ff ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/device.php +379433cd368bd32608864eb304b02b64 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/groups.php +93a837f7db6bf5a045d3395e6c179718 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/error.php +d358cffe766ff93aafadc9f869c7a07e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/state.php +f675151b8785b307bf2c61efc3e2fa04 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/montage.php +f9c5481d113f67d002883034dddf385a ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/blank.php +5139dfbe378e17b3178b4959b9bf20f7 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/events.php +746ae2ce61073d614242cb3d6c082bce ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/settings.php +1d7491908b75a297519e740c5784e0f1 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/group.php +c3055c24489a3c952e31e105a711545e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/controlcap.php +abb35b5a54dda62386d3aa5abf9720f4 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/control.php +ff693078fbc15e321062d69c302c6aac ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/zones.php +3d9e4bcae9ec10838960e96cdc369fd7 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/filtersave.php +b611697aa6485b9e6ff6a8b342808b2d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/console.php +d95c44748df26ca2bec7d4afb079782d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/zone.php +d5f0879cbf85c330bb0e9b02aa772665 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/monitorprobe.php +189b2cb541386af6138ec96b96538026 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/devices.php +f85cbc69e7d95b4119311c726d9f672f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/monitorpreset.php +16064caa25b6c51360e10ee91210e8fe ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/state.js +c15861718da9974b057a4e6641759bad ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/group.js +de8db540180b86df8d0fc4724df3f12b ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/user.js +59920201dfac5f9a4431f4f3a4e0364b ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/version.js +017aafda61cee8bdf65f36eedcd91644 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/console.js +0dd3c64eb2002ffda9f7cb5a57d45457 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/donate.js +7a9e7f334a1c84d56850ac3b79cd5170 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/log.js +acd524f854058f342f34d0afafbb6075 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/Makefile.am +4628f8f6e13462b957e9ab7c267ded80 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/events.js.php +832e7495163a6ef5c842475f7d44962f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/video.js.php +5cc3fc883beec9e3d1b2a9134a09a72e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/montage.js +63b5fb3cd5a7d7b5479804fac1a02ed8 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/options.js.php +3a8b64c9424f1a9ce02973021f3f1014 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/login.js +437d1084299d1163d36bd83355178a5b ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/events.js +f95f51f93a153403f28bec13da9f079e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitorpreset.js +c125327fce8e049519bb826cce5417f3 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/watch.js +56c208506cecd6a242e38d9c347558ba ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/state.js.php +59f48f29901bf0b1d2dcdbd0287a7243 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/video.js +6656671bba812476fb7964edab8ed7d5 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/groups.js +8c5c9cc7e4961559e345220c9653aec8 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/version.js.php +f9840e08f9ca3c9966315657cfdf47f5 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitorprobe.js +03cd81247cc90a19db3cba077fd00b6e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/control.js +0f09e33012eee04a62ebdb2b05c7b03a ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/cycle.js.php +925a1cf53b3191680541872b4c38b576 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/cycle.js +d80aeb3b09c3bb4db635aaab6a34dd69 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/timeline.js.php +2c9f71673c49866ef4dd2bae89658d72 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/filter.js.php +1ef503037a66111e5bde441ba8ce20cd ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/event.js +32ef30d8527086aa9ee63b73ac5df86d ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/console.js.php +51f2f8a12c688c3c0e70f04929295c99 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/watch.js.php +cade1c87dd48210dcc61fbc2541e76a5 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/filter.js +2da7d63e3e1a8b4a7ddc42506e714873 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/controlpreset.js.php +9dbbc338d288c7053ca08ade4be2a08e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/event.js.php +18f6033a5de91a16561626debedbd04f ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/zone.js.php +f7ed288a9c1556499ff689b277091074 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/export.js +c66feb02c549f81b7910dd31c23964b1 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitor.js.php +0062d1966577b1a04e9b430adf20e441 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/controlpreset.js +99f2883fd66369e397c28730093e0039 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/montage.js.php +f95d23b81ff41694e0f61ba33f116eff ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitor.js +d446cdfa58d7a052b099e65e1417296e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/donate.js.php +9122fd4adc69210dd059f703878da027 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/timeline.js +2cdc936339c10744b45be5560eae9488 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/devices.js +98c7d638b7e90ddae6aabc103a3a197a ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/zone.js +6a329d8f40a74659b1e1fc10763c6f6e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/js/export.js.php +f6db2543d3af0dd4f80a777a4dfc0c69 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/log.php +f142b8cf2d848d8277d605cc0bb5c7f0 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/none.php +b5b778dd3c8bac8c57e4cefea824eebe ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/export.php +07233ba0c8343b441c0532979c56a411 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/function.php +e77abc6802a1da3e4fd62e646a023f46 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/stats.php +bcd5568ad30fbf43c37b1fb067f6fcba ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/video.php +1551da8d4beb70e03872bf2aadecafa8 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/bandwidth.php +e4d9576ea7fc0d077e8f676ca3214510 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/logout.php +2bf800f3105556313be01bd3b4c42aca ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/views/timeline.php +1b5888dd1130c2624e3a89ec6914641e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/skin.php +1d4fc58a4fb06f37e330419e1de5ccc5 ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/js/skin.js.php +dfb38ec6d3f08243b8ed1d3fc3b3370e ./distros/raspbian/zoneminder/usr/share/zoneminder/skins/classic/js/skin.js +8218a18edccf1204d7f6b5be75fd0d78 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/es_ar.php +589fbc097bf0eeaf0470127f7760ec1e ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/pt_br.php +37850e5a2c5496828512b7e752d59ee8 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/dk_dk.php +b194629ea544221b206616c18a0c148a ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/hu_hu.php +b8015b85b9c032dcb061761731b084b8 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/fr_fr.php +b5c7fe7fa19ab9532b4a30723e099881 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/pl_pl.php +5ddb50407c87162ef3bd88cc88a69de1 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/it_it.php +ff9185a540eda7598ce4607045cbfb95 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/se_se.php +0d46d10e46dbbfcdfa3be6ef5ffd0eeb ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/nl_nl.php +bc88aced50114c408e703089ed2c58a1 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/ru_ru.php +6ee18a4395de40fb7e74876ca8725768 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/ro_ro.php +2ce9bebd55d946cf4ea9d0776df0cc7d ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/en_us.php +321a20460bb594abb17b3b925f6c98f2 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/cn_zh.php +c4555f9101c6d257b03cb409fae4529d ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/big5_big5.php +cb3bc7a87a69793b4b7bf90f1737b6b4 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/et_ee.php +fc2bf1773c63c42f4da071ce417a7aec ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/ja_jp.php +86ed6db147aeb77e12b76f47bf3364b5 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/cs_cz.php +42cd66b87061957f08489cb649fa8adf ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/en_gb.php +c53b9bede29062c0e76271c91367a04a ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/he_il.php +c777020c596cee7ceddc1646f19a3080 ./distros/raspbian/zoneminder/usr/share/zoneminder/lang/de_de.php +f3a96b4e82b5e7d722d860b0371e92e2 ./distros/raspbian/zoneminder/usr/share/zoneminder/css/reset.css +d3f02477779fa8a2cddd1c1605583b96 ./distros/raspbian/zoneminder/usr/share/zoneminder/css/overlay.css +a21186623f461fbdf94a1000fb081ee0 ./distros/raspbian/zoneminder/usr/share/zoneminder/css/spinner.css +5dae654caa50798391cecd6e67a49efc ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/actions.php +ea76e136916631c564343e24df07de2b ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/logger.php +8ae8d5b773c4cc9cda879f57aee04dfe ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/control_functions.php +742ad5a8e5eef1b9ce20f1beb5905aed ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/lang.php +ebad7dc7382183db4dd29537868bcae6 ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/config.php +63bdb662ad9c56e1f39a856d67ae1432 ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/database.php +ee1cea9e8373c99741824f8f7be3e4b9 ./distros/raspbian/zoneminder/usr/share/zoneminder/includes/functions.php +d9b8cc5ecc4a1f26e057df31675b55cd ./distros/raspbian/zoneminder/usr/share/zoneminder/views/file.php +90e3a0c17c6d5ac8b0b30e749c89a4ce ./distros/raspbian/zoneminder/usr/share/zoneminder/views/image.php +6dee62a0963ecdc4b7ccb353b7ae7424 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.27.0.sql +bd8b4735fee0bbb064a140819347df6d ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.0.1.sql +632200d5a6238e256e7cf80de95156dd ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.19.2.sql +821f1c1d6c52f99dd47ac14d61fa5640 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.22.2.sql +9045cba37b57d8956c428b1c137ffdff ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_create.sql +8b07b11c7cad1914c3ea833b8ed5817b ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.24.3.sql +3fca704937207aa222e77210aa0c25e0 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.19.5.sql +97edc0c5579da47e346d42df1e545eb0 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.20.0.sql +92d0e29600b0f23c3cabdc02ce6259e2 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.11.sql +08d098374092ba16eb3459a1aa2a8229 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.24.4.sql +54f6c2d009ad16095cad89d9855c91c2 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.27.99.0.sql +4c5855feeaaf945c29c43292e5c74197 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.26.3.sql +c1594ffeff663ea370dbbaeb272e10db ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.22.1.sql +e2dbebece1d49bea27f756895a663f86 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.16.sql +2b89f4c950e227e9313cf7418727f3de ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.26.0.sql +7c452e51249b26c7d6bc2651bd008680 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.21.2.sql +92d5871c239ea24a2bdd738e0776a750 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.28.0.sql +f96d352e85bbffb74ae0c6b354c76cac ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.24.2.sql +85c2f951462a9ca699af571910b2f5e7 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.21.0.sql +6f75164dc4ab8e6189ccc8a2f3a006e4 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.17.2.sql +8601c639ef779f73b37e00df75329bf0 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.13.sql +4466a07866e466e4a69a6986b2f1d0cb ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.23.1.sql +6314f20b3f02056792caf93944965fd8 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.23.0.sql +452cced335ec34b78b4d091b7901ffd5 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.21.1.sql +4ec7ea6a41ced9a48b5922f359a56b6b ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.19.4.sql +c75ceef3b6954b8a8047010bea8d6d4f ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.7.sql +5d46d42dd9f62cdaedd5190f05b0a618 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.24.0.sql +8388ea9b05577c775206dcfd5df72856 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.18.0.sql +bee064f205c14f5c20501e739ce80a1e ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.8.sql +990aade37fd26b6fa4ffdd3a13c48b24 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.19.1.sql +34d526653752e2ec9722b21a007d79e8 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.22.3.sql +e35625686e01f368b3f8f87359aaac7c ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.15.sql +9c82b2ea73453054f9a69c787ec3596b ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.22.0.sql +2f7281f19a02402c8a2b603143bc203d ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.12.sql +07f00f03f78eca783cfc115fcf1168aa ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.19.3.sql +83decad8946e51529e7f7bbc13c743cf ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.24.1.sql +795313d24e9c26b3557feb386df603c6 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.26.1.sql +be7fe21854b261df5b6b28d92ce0dad4 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.19.0.sql +2740f9a92352e7d91be18a67115be71d ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.20.1.sql +ee60615a820f97e43ebab88f173b9921 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.26.5.sql +5880f07d8c485d28a002e45a254c47a5 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.17.1.sql +b7468afae4c69e654a4c61feec101730 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.18.1.sql +9c0fc358cdc873030b0367d005f6b765 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.21.4.sql +fd4e7c581673c85f9734bfdf45337b99 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.23.2.sql +54464055410fdae4f296c00c963bdd4c ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.23.3.sql +dd2109c3b45b0243d92e21031b7a55e0 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.9.sql +6c09c69e9b66b83a0b8ef8f37f985ebc ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.21.3.sql +5983fcbe9f352433a8cdba6dadea4d5a ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-0.9.10.sql +e0651ab19ce94e12f2a05481d4847b52 ./distros/raspbian/zoneminder/usr/share/zoneminder/db/zm_update-1.26.2.sql +06031ab17a0397dcc824cf7e56610771 ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/status.php +c518c03f8783cfb822d3fab322c66bd7 ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/event.php +433c99927f1961f159562627f3c79800 ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/alarm.php +c65641a2edd9bac342684936c391d444 ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/control.php +bcf111c3a38a3a94d5600f33d89416eb ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/zone.php +74836750b8f89f54054ffb31cd67f135 ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/log.php +bf81f42111e73d054802f0aa72027c8e ./distros/raspbian/zoneminder/usr/share/zoneminder/ajax/stream.php +d108695d5815a3fd528df2403f3c50cd ./distros/raspbian/zoneminder/usr/share/zoneminder/index.php +6d1a5880671e67c0d6384a9d33143309 ./distros/raspbian/zoneminder/usr/share/zoneminder/js/logger.js +1eb33d67d6069ec8723920e59e602d31 ./distros/raspbian/zoneminder/usr/share/zoneminder/js/overlay.js +2f4357273ede74623cd7f3dbc210da7f ./distros/raspbian/zoneminder/usr/share/zoneminder/js/mootools.ext.js +861459718684608408e7427d85ad732d ./distros/raspbian/zoneminder/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-nc.js +d514b6d7bbe53cd04ec0558821146e1f ./distros/raspbian/zoneminder/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-yc.js +0c240ed4306c44e2cb6206b11919afa8 ./distros/raspbian/zoneminder/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-yc.js +0b90452e783f31a382c06155a8a3605a ./distros/raspbian/zoneminder/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-nc.js +567590c0a9aa08352375bc19ca34c449 ./distros/raspbian/zoneminder/usr/share/polkit-1/actions/com.zoneminder.systemctl.policy +176294d55f322804317befe0c8129348 ./distros/raspbian/zoneminder/usr/share/polkit-1/rules.d/com.zoneminder.systemctl.rules +4dd50a5c0b8b83eec017e1c108fa770c ./distros/raspbian/zoneminder/usr/share/doc/zoneminder/changelog.Debian.gz +6b097e14fd6f6a41b162a326d47c3c0c ./distros/raspbian/zoneminder/usr/share/doc/zoneminder/README.Debian +722ee23d6e76b10f1eae240ea1a49117 ./distros/raspbian/zoneminder/usr/share/doc/zoneminder/copyright +bf234f8325eef492dfd31ccc1d044dbc ./distros/raspbian/zoneminder/usr/share/doc/zoneminder/README.md.gz +27fcd0f464860f34ee715c84d1de9734 ./distros/raspbian/zoneminder/usr/share/doc/zoneminder/changelog.gz +3d9d9875bcba0fd1bd20b0da452ec99a ./distros/raspbian/zoneminder/usr/lib/cgi-bin/zms +3d9d9875bcba0fd1bd20b0da452ec99a ./distros/raspbian/zoneminder/usr/lib/cgi-bin/nph-zms +e73a0d5ac32d84894e6111a7d386989c ./distros/raspbian/zoneminder/usr/bin/zmaudit.pl +6dcdcf2fedd7141a9200f8c5f965a726 ./distros/raspbian/zoneminder/usr/bin/zmcamtool.pl +7d228dbdb071e161000473b32f796590 ./distros/raspbian/zoneminder/usr/bin/zmsystemctl.pl +a8a7ff2d987e9f694b4bd55bc8fd2868 ./distros/raspbian/zoneminder/usr/bin/zmvideo.pl +c5d8693a57ee669e43a0e091f50f99c9 ./distros/raspbian/zoneminder/usr/bin/zmf +6a3b69b9647a78e7c4f3256b45fa4b2b ./distros/raspbian/zoneminder/usr/bin/zmcontrol.pl +c56439aa4e9126c4b64bd3e9f3a4b00e ./distros/raspbian/zoneminder/usr/bin/zmwatch.pl +a20e15c8b5c8261e4e6a53bb8b4b09fb ./distros/raspbian/zoneminder/usr/bin/zmc +2d1f8febad357dd2bac9e9946e248c49 ./distros/raspbian/zoneminder/usr/bin/zmdc.pl +818dda5e2680bb3d7b3b9809b7a098a1 ./distros/raspbian/zoneminder/usr/bin/zmtrack.pl +a79d951c23921f01dbbb1d428140c95e ./distros/raspbian/zoneminder/usr/bin/zmstreamer +777fedf0edcdb13572149635a84b1e23 ./distros/raspbian/zoneminder/usr/bin/zmpkg.pl +527926beeaea4e9dfd0006d069b9684f ./distros/raspbian/zoneminder/usr/bin/zmupdate.pl +5e864d2a5261c07f315114de6f29f65b ./distros/raspbian/zoneminder/usr/bin/zma +e1e265fb18764b8a0483e8f4372f08fb ./distros/raspbian/zoneminder/usr/bin/zmtrigger.pl +414f4912d096962faac65074125c29cd ./distros/raspbian/zoneminder/usr/bin/zmx10.pl +3e629a608f101b9832a25abd451cb336 ./distros/raspbian/zoneminder/usr/bin/zmu +2819a863d9385427caa75edb10fbbd5d ./distros/raspbian/zoneminder/usr/bin/zmfilter.pl +b5a54033efcc9ff3c29b8f56771b31e7 ./distros/raspbian/zoneminder/etc/init.d/zoneminder +00537a51e40686957c8fa7b3e9b41d7b ./distros/raspbian/zoneminder/etc/zm/zm.conf +83f158b9cfd39180e8210a11849a5326 ./distros/raspbian/zoneminder/etc/zm/apache.conf +722ee23d6e76b10f1eae240ea1a49117 ./distros/raspbian/copyright +3b6cd95d0bb0767e8c3f61dca32f4356 ./distros/raspbian/control +4b3afb84b2b71ef56df09997a350bd04 ./distros/raspbian/tmp/usr/share/zoneminder/graphics/spinner.gif +e07c0775523271d629035dc8921dffc7 ./distros/raspbian/tmp/usr/share/zoneminder/graphics/favicon.ico +a840cd88b33f95a014cd654e0a615fd9 ./distros/raspbian/tmp/usr/share/zoneminder/graphics/transparent.gif +718d8596a14d123d83afb0d5d6d6fd96 ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/includes/init.php +cf2a637c699c32648c715d2faec7c4de ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/includes/config.php +9355288fed99c00c68f8623a3e73280e ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/includes/functions.php +96a21cecd35ed5d1b732bfe74b1535ef ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/views/actions.php +83f5492302df18de8c7090a9fa8ac3e7 ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/views/notfound.png +f487b23a0841587841fd3dd34306d677 ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/views/console.php +d41d8cd98f00b204e9800998ecf8427e ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/views/none.php +33d9276165e48e85f9b76d96ceb72c43 ./distros/raspbian/tmp/usr/share/zoneminder/skins/xml/skin.php +67bdd7f59ebc311b9cd8954d57f68c2d ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/css/skin.css +0814d7addb49c87b8cc29eaff5c8effc ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/includes/init.php +2e1176dc3923dd9a44b19754139a1555 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/includes/control_functions.php +3f1549ab15e953d0e1eb5ea978677e8d ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/includes/config.php +5c15d51173b096e5597c329511ce7d74 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/includes/functions.php +d5b4372487f53fadf1da7397ae10c77b ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/frame.php +224db60a7b9d89678e3ca4a5de5803fb ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/filter.php +fcf239e684be46104251247cfc51265f ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/login.php +63c88c56fe6c4104f811847f70fe7b6d ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/watch.php +d52ac90fc23bfc97a3b9afe117c66642 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/event.php +5a61e2227587163542bebb4dfb77fe1f ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/css/console.css +6d8509c58a57938eedadb498c9fd9961 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/error.php +e5c59543e4dce3d2719a2d9a8b52fa9c ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/state.php +c121ca1f9a8c4b693b3dcb4bd63d8e7e ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/montage.php +1ad2154c2ab8d4e651087584ff533359 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/events.php +6ee5d2b987944284e0fd52e158d70c52 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/console.php +97f6771e6e530e0323c8a7455d4c087b ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/devices.php +e9202a011a59bcb4f4e49a9811f56b03 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/eventdetails.php +4707ce2043a6964c6b0886f8404b37da ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/function.php +b42a65ca6f80ffe2ef69b1bf6d0dfd05 ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/views/video.php +1ee43243aff2957f555b2025fe121ddb ./distros/raspbian/tmp/usr/share/zoneminder/skins/mobile/skin.php +b08bbad185d4f141f4e16a32961f7e10 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/point-o.gif +3aea4c08fe3d0882bbb50d6a880b9d3e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/center.gif +10481c373da9f2e33955f5f684701e35 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-ur.gif +4253a17d69f9c9f105864b57ef1da4ee ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-l-u.gif +2357c0f1dec549fb5866341acf2f8e64 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-dl.gif +b36b743446eb998574343b265fc2a327 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-dr.gif +de6d2a2b0bd54f72d5c8bde9fddfc56f ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-ul.gif +93f79d7c400d1988e58791d692050380 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/point-g.gif +6a948184e447f61a38d54609194eb647 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-l-d.gif +e252c31fdb0b3a65a082069b37042a0f ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/seq-u.gif +330f0709c7b846ed5b3e990a6b0b6839 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-u.gif +0c2b9346b65233183cca8dbaa6ee1db2 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-s-d.gif +dad7467542959f7e571f12d0a4988c98 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-r.gif +2c0f5bb849832ea968cffc648d45381c ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-d.gif +2e743de572b45088c05f0471f63fb710 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/point-r.gif +98212c6b29fcd9a09e6d16607fe65909 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/seq-d.gif +269dca955356f221c9ea271f3e259763 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-l.gif +4b755122db75084dd39297fbc1822f27 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-s-u.gif +d41d8cd98f00b204e9800998ecf8427e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/includes/init.php +7c60f2ccaa5b4473b5f9a942c5fea373 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/includes/timeline_functions.php +b6787b20659ab4ae5b06cb9f9900330d ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/includes/control_functions.php +5248a1135175c05b1860dac97cca5c0f ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/includes/config.php +eff1e8ea2a5418ed47ce69386b4a3e61 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/includes/export_functions.php +1b3a274b77c824b4506765106205f598 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/includes/functions.php +4d1463e6bc5ed133ede23e6372bcbdbf ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/controlcaps.php +1b57a2fecd32647215f68998bffba25a ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/controlpreset.php +97bd8f9eae89b8bb897559ffa0694228 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/monitor.php +c614ed7ac478bf5c9ef863900d89ea66 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/frame.php +21495b9af3361009cb8e77f0fec4a996 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/filter.php +1d675229155ceaa8982d2fc47d47d5f6 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/options.php +8d0be05a8725ed889b056ab3d2acb505 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/frames.php +4ca1ad1cf9c24ab566ff570a8305306a ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/status.php +b571e7b897a14ba6c0af756371fcd197 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/login.php +cc6a31182fde7213ccd9f4d7a2dbe109 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/Makefile.am +c942ee3fa4859956057ca8a17be36989 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/eventdetail.php +9dcd343147a4b8215917b8eaf9441ba8 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/watch.php +35922ff1e4668805878c6343db3d2b18 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/optionhelp.php +3d10f253482dd12a0aaab55ce50f061e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/event.php +16d0a8a023a63797d1ea004e8ece32c6 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/user.php +548571006c1c33eeaec9d288b7d21515 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/postlogin.php +fd250dfd1edcc92d496d00b6e2963c48 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/cycle.php +0a7f4b83bbca22a5061f3f8b3771b3d2 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/donate.php +276b51cb4307b90a5cc3c1c44f86b005 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/version.php +ec4c3a85ce7b717945430d5379e5f5ff ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/device.php +379433cd368bd32608864eb304b02b64 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/groups.php +93a837f7db6bf5a045d3395e6c179718 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/error.php +d358cffe766ff93aafadc9f869c7a07e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/state.php +f675151b8785b307bf2c61efc3e2fa04 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/montage.php +f9c5481d113f67d002883034dddf385a ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/blank.php +5139dfbe378e17b3178b4959b9bf20f7 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/events.php +746ae2ce61073d614242cb3d6c082bce ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/settings.php +1d7491908b75a297519e740c5784e0f1 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/group.php +c3055c24489a3c952e31e105a711545e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/controlcap.php +abb35b5a54dda62386d3aa5abf9720f4 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/control.php +ff693078fbc15e321062d69c302c6aac ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/zones.php +3d9e4bcae9ec10838960e96cdc369fd7 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/filtersave.php +b611697aa6485b9e6ff6a8b342808b2d ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/console.php +d95c44748df26ca2bec7d4afb079782d ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/zone.php +d5f0879cbf85c330bb0e9b02aa772665 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/monitorprobe.php +189b2cb541386af6138ec96b96538026 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/devices.php +f85cbc69e7d95b4119311c726d9f672f ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/monitorpreset.php +16064caa25b6c51360e10ee91210e8fe ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/state.js +c15861718da9974b057a4e6641759bad ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/group.js +de8db540180b86df8d0fc4724df3f12b ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/user.js +59920201dfac5f9a4431f4f3a4e0364b ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/version.js +017aafda61cee8bdf65f36eedcd91644 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/console.js +0dd3c64eb2002ffda9f7cb5a57d45457 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/donate.js +7a9e7f334a1c84d56850ac3b79cd5170 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/log.js +acd524f854058f342f34d0afafbb6075 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/Makefile.am +4628f8f6e13462b957e9ab7c267ded80 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/events.js.php +832e7495163a6ef5c842475f7d44962f ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/video.js.php +5cc3fc883beec9e3d1b2a9134a09a72e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/montage.js +63b5fb3cd5a7d7b5479804fac1a02ed8 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/options.js.php +3a8b64c9424f1a9ce02973021f3f1014 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/login.js +437d1084299d1163d36bd83355178a5b ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/events.js +f95f51f93a153403f28bec13da9f079e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/monitorpreset.js +c125327fce8e049519bb826cce5417f3 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/watch.js +56c208506cecd6a242e38d9c347558ba ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/state.js.php +59f48f29901bf0b1d2dcdbd0287a7243 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/video.js +6656671bba812476fb7964edab8ed7d5 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/groups.js +8c5c9cc7e4961559e345220c9653aec8 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/version.js.php +f9840e08f9ca3c9966315657cfdf47f5 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/monitorprobe.js +03cd81247cc90a19db3cba077fd00b6e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/control.js +0f09e33012eee04a62ebdb2b05c7b03a ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/cycle.js.php +925a1cf53b3191680541872b4c38b576 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/cycle.js +d80aeb3b09c3bb4db635aaab6a34dd69 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/timeline.js.php +2c9f71673c49866ef4dd2bae89658d72 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/filter.js.php +1ef503037a66111e5bde441ba8ce20cd ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/event.js +32ef30d8527086aa9ee63b73ac5df86d ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/console.js.php +51f2f8a12c688c3c0e70f04929295c99 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/watch.js.php +cade1c87dd48210dcc61fbc2541e76a5 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/filter.js +2da7d63e3e1a8b4a7ddc42506e714873 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/controlpreset.js.php +9dbbc338d288c7053ca08ade4be2a08e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/event.js.php +18f6033a5de91a16561626debedbd04f ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/zone.js.php +f7ed288a9c1556499ff689b277091074 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/export.js +c66feb02c549f81b7910dd31c23964b1 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/monitor.js.php +0062d1966577b1a04e9b430adf20e441 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/controlpreset.js +99f2883fd66369e397c28730093e0039 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/montage.js.php +f95d23b81ff41694e0f61ba33f116eff ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/monitor.js +d446cdfa58d7a052b099e65e1417296e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/donate.js.php +9122fd4adc69210dd059f703878da027 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/timeline.js +2cdc936339c10744b45be5560eae9488 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/devices.js +98c7d638b7e90ddae6aabc103a3a197a ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/zone.js +6a329d8f40a74659b1e1fc10763c6f6e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/js/export.js.php +f6db2543d3af0dd4f80a777a4dfc0c69 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/log.php +f142b8cf2d848d8277d605cc0bb5c7f0 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/none.php +b5b778dd3c8bac8c57e4cefea824eebe ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/export.php +07233ba0c8343b441c0532979c56a411 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/function.php +e77abc6802a1da3e4fd62e646a023f46 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/stats.php +bcd5568ad30fbf43c37b1fb067f6fcba ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/video.php +1551da8d4beb70e03872bf2aadecafa8 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/bandwidth.php +e4d9576ea7fc0d077e8f676ca3214510 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/logout.php +2bf800f3105556313be01bd3b4c42aca ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/views/timeline.php +1b5888dd1130c2624e3a89ec6914641e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/skin.php +1d4fc58a4fb06f37e330419e1de5ccc5 ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/js/skin.js.php +dfb38ec6d3f08243b8ed1d3fc3b3370e ./distros/raspbian/tmp/usr/share/zoneminder/skins/classic/js/skin.js +8218a18edccf1204d7f6b5be75fd0d78 ./distros/raspbian/tmp/usr/share/zoneminder/lang/es_ar.php +589fbc097bf0eeaf0470127f7760ec1e ./distros/raspbian/tmp/usr/share/zoneminder/lang/pt_br.php +37850e5a2c5496828512b7e752d59ee8 ./distros/raspbian/tmp/usr/share/zoneminder/lang/dk_dk.php +b194629ea544221b206616c18a0c148a ./distros/raspbian/tmp/usr/share/zoneminder/lang/hu_hu.php +b8015b85b9c032dcb061761731b084b8 ./distros/raspbian/tmp/usr/share/zoneminder/lang/fr_fr.php +b5c7fe7fa19ab9532b4a30723e099881 ./distros/raspbian/tmp/usr/share/zoneminder/lang/pl_pl.php +5ddb50407c87162ef3bd88cc88a69de1 ./distros/raspbian/tmp/usr/share/zoneminder/lang/it_it.php +ff9185a540eda7598ce4607045cbfb95 ./distros/raspbian/tmp/usr/share/zoneminder/lang/se_se.php +0d46d10e46dbbfcdfa3be6ef5ffd0eeb ./distros/raspbian/tmp/usr/share/zoneminder/lang/nl_nl.php +bc88aced50114c408e703089ed2c58a1 ./distros/raspbian/tmp/usr/share/zoneminder/lang/ru_ru.php +6ee18a4395de40fb7e74876ca8725768 ./distros/raspbian/tmp/usr/share/zoneminder/lang/ro_ro.php +2ce9bebd55d946cf4ea9d0776df0cc7d ./distros/raspbian/tmp/usr/share/zoneminder/lang/en_us.php +321a20460bb594abb17b3b925f6c98f2 ./distros/raspbian/tmp/usr/share/zoneminder/lang/cn_zh.php +c4555f9101c6d257b03cb409fae4529d ./distros/raspbian/tmp/usr/share/zoneminder/lang/big5_big5.php +cb3bc7a87a69793b4b7bf90f1737b6b4 ./distros/raspbian/tmp/usr/share/zoneminder/lang/et_ee.php +fc2bf1773c63c42f4da071ce417a7aec ./distros/raspbian/tmp/usr/share/zoneminder/lang/ja_jp.php +86ed6db147aeb77e12b76f47bf3364b5 ./distros/raspbian/tmp/usr/share/zoneminder/lang/cs_cz.php +42cd66b87061957f08489cb649fa8adf ./distros/raspbian/tmp/usr/share/zoneminder/lang/en_gb.php +c53b9bede29062c0e76271c91367a04a ./distros/raspbian/tmp/usr/share/zoneminder/lang/he_il.php +c777020c596cee7ceddc1646f19a3080 ./distros/raspbian/tmp/usr/share/zoneminder/lang/de_de.php +f3a96b4e82b5e7d722d860b0371e92e2 ./distros/raspbian/tmp/usr/share/zoneminder/css/reset.css +d3f02477779fa8a2cddd1c1605583b96 ./distros/raspbian/tmp/usr/share/zoneminder/css/overlay.css +a21186623f461fbdf94a1000fb081ee0 ./distros/raspbian/tmp/usr/share/zoneminder/css/spinner.css +5dae654caa50798391cecd6e67a49efc ./distros/raspbian/tmp/usr/share/zoneminder/includes/actions.php +ea76e136916631c564343e24df07de2b ./distros/raspbian/tmp/usr/share/zoneminder/includes/logger.php +8ae8d5b773c4cc9cda879f57aee04dfe ./distros/raspbian/tmp/usr/share/zoneminder/includes/control_functions.php +742ad5a8e5eef1b9ce20f1beb5905aed ./distros/raspbian/tmp/usr/share/zoneminder/includes/lang.php +ebad7dc7382183db4dd29537868bcae6 ./distros/raspbian/tmp/usr/share/zoneminder/includes/config.php +63bdb662ad9c56e1f39a856d67ae1432 ./distros/raspbian/tmp/usr/share/zoneminder/includes/database.php +ee1cea9e8373c99741824f8f7be3e4b9 ./distros/raspbian/tmp/usr/share/zoneminder/includes/functions.php +d9b8cc5ecc4a1f26e057df31675b55cd ./distros/raspbian/tmp/usr/share/zoneminder/views/file.php +90e3a0c17c6d5ac8b0b30e749c89a4ce ./distros/raspbian/tmp/usr/share/zoneminder/views/image.php +6dee62a0963ecdc4b7ccb353b7ae7424 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.27.0.sql +bd8b4735fee0bbb064a140819347df6d ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.0.1.sql +632200d5a6238e256e7cf80de95156dd ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.19.2.sql +821f1c1d6c52f99dd47ac14d61fa5640 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.22.2.sql +9045cba37b57d8956c428b1c137ffdff ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_create.sql +8b07b11c7cad1914c3ea833b8ed5817b ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.24.3.sql +3fca704937207aa222e77210aa0c25e0 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.19.5.sql +97edc0c5579da47e346d42df1e545eb0 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.20.0.sql +92d0e29600b0f23c3cabdc02ce6259e2 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.11.sql +08d098374092ba16eb3459a1aa2a8229 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.24.4.sql +54f6c2d009ad16095cad89d9855c91c2 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.27.99.0.sql +4c5855feeaaf945c29c43292e5c74197 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.26.3.sql +c1594ffeff663ea370dbbaeb272e10db ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.22.1.sql +e2dbebece1d49bea27f756895a663f86 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.16.sql +2b89f4c950e227e9313cf7418727f3de ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.26.0.sql +7c452e51249b26c7d6bc2651bd008680 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.21.2.sql +92d5871c239ea24a2bdd738e0776a750 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.28.0.sql +f96d352e85bbffb74ae0c6b354c76cac ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.24.2.sql +85c2f951462a9ca699af571910b2f5e7 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.21.0.sql +6f75164dc4ab8e6189ccc8a2f3a006e4 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.17.2.sql +8601c639ef779f73b37e00df75329bf0 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.13.sql +4466a07866e466e4a69a6986b2f1d0cb ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.23.1.sql +6314f20b3f02056792caf93944965fd8 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.23.0.sql +452cced335ec34b78b4d091b7901ffd5 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.21.1.sql +4ec7ea6a41ced9a48b5922f359a56b6b ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.19.4.sql +c75ceef3b6954b8a8047010bea8d6d4f ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.7.sql +5d46d42dd9f62cdaedd5190f05b0a618 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.24.0.sql +8388ea9b05577c775206dcfd5df72856 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.18.0.sql +bee064f205c14f5c20501e739ce80a1e ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.8.sql +990aade37fd26b6fa4ffdd3a13c48b24 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.19.1.sql +34d526653752e2ec9722b21a007d79e8 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.22.3.sql +e35625686e01f368b3f8f87359aaac7c ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.15.sql +9c82b2ea73453054f9a69c787ec3596b ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.22.0.sql +2f7281f19a02402c8a2b603143bc203d ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.12.sql +07f00f03f78eca783cfc115fcf1168aa ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.19.3.sql +83decad8946e51529e7f7bbc13c743cf ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.24.1.sql +795313d24e9c26b3557feb386df603c6 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.26.1.sql +be7fe21854b261df5b6b28d92ce0dad4 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.19.0.sql +2740f9a92352e7d91be18a67115be71d ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.20.1.sql +ee60615a820f97e43ebab88f173b9921 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.26.5.sql +5880f07d8c485d28a002e45a254c47a5 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.17.1.sql +b7468afae4c69e654a4c61feec101730 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.18.1.sql +9c0fc358cdc873030b0367d005f6b765 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.21.4.sql +fd4e7c581673c85f9734bfdf45337b99 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.23.2.sql +54464055410fdae4f296c00c963bdd4c ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.23.3.sql +dd2109c3b45b0243d92e21031b7a55e0 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.9.sql +6c09c69e9b66b83a0b8ef8f37f985ebc ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.21.3.sql +5983fcbe9f352433a8cdba6dadea4d5a ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-0.9.10.sql +e0651ab19ce94e12f2a05481d4847b52 ./distros/raspbian/tmp/usr/share/zoneminder/db/zm_update-1.26.2.sql +06031ab17a0397dcc824cf7e56610771 ./distros/raspbian/tmp/usr/share/zoneminder/ajax/status.php +c518c03f8783cfb822d3fab322c66bd7 ./distros/raspbian/tmp/usr/share/zoneminder/ajax/event.php +433c99927f1961f159562627f3c79800 ./distros/raspbian/tmp/usr/share/zoneminder/ajax/alarm.php +c65641a2edd9bac342684936c391d444 ./distros/raspbian/tmp/usr/share/zoneminder/ajax/control.php +bcf111c3a38a3a94d5600f33d89416eb ./distros/raspbian/tmp/usr/share/zoneminder/ajax/zone.php +74836750b8f89f54054ffb31cd67f135 ./distros/raspbian/tmp/usr/share/zoneminder/ajax/log.php +bf81f42111e73d054802f0aa72027c8e ./distros/raspbian/tmp/usr/share/zoneminder/ajax/stream.php +d108695d5815a3fd528df2403f3c50cd ./distros/raspbian/tmp/usr/share/zoneminder/index.php +6d1a5880671e67c0d6384a9d33143309 ./distros/raspbian/tmp/usr/share/zoneminder/js/logger.js +1eb33d67d6069ec8723920e59e602d31 ./distros/raspbian/tmp/usr/share/zoneminder/js/overlay.js +2f4357273ede74623cd7f3dbc210da7f ./distros/raspbian/tmp/usr/share/zoneminder/js/mootools.ext.js +861459718684608408e7427d85ad732d ./distros/raspbian/tmp/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-nc.js +d514b6d7bbe53cd04ec0558821146e1f ./distros/raspbian/tmp/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-yc.js +0c240ed4306c44e2cb6206b11919afa8 ./distros/raspbian/tmp/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-yc.js +0b90452e783f31a382c06155a8a3605a ./distros/raspbian/tmp/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-nc.js +567590c0a9aa08352375bc19ca34c449 ./distros/raspbian/tmp/usr/share/polkit-1/actions/com.zoneminder.systemctl.policy +176294d55f322804317befe0c8129348 ./distros/raspbian/tmp/usr/share/polkit-1/rules.d/com.zoneminder.systemctl.rules +a7a47418592df890d3846e479974d019 ./distros/raspbian/tmp/usr/lib/cgi-bin/zms +a7a47418592df890d3846e479974d019 ./distros/raspbian/tmp/usr/lib/cgi-bin/nph-zms +e73a0d5ac32d84894e6111a7d386989c ./distros/raspbian/tmp/usr/bin/zmaudit.pl +6dcdcf2fedd7141a9200f8c5f965a726 ./distros/raspbian/tmp/usr/bin/zmcamtool.pl +7d228dbdb071e161000473b32f796590 ./distros/raspbian/tmp/usr/bin/zmsystemctl.pl +a8a7ff2d987e9f694b4bd55bc8fd2868 ./distros/raspbian/tmp/usr/bin/zmvideo.pl +afde1ae4070bda8d48c4665e7e47343a ./distros/raspbian/tmp/usr/bin/zmf +6a3b69b9647a78e7c4f3256b45fa4b2b ./distros/raspbian/tmp/usr/bin/zmcontrol.pl +c56439aa4e9126c4b64bd3e9f3a4b00e ./distros/raspbian/tmp/usr/bin/zmwatch.pl +0a4c9ce5c058efe748f1776b6a83fa56 ./distros/raspbian/tmp/usr/bin/zmc +2d1f8febad357dd2bac9e9946e248c49 ./distros/raspbian/tmp/usr/bin/zmdc.pl +818dda5e2680bb3d7b3b9809b7a098a1 ./distros/raspbian/tmp/usr/bin/zmtrack.pl +64f6bd5d8e4f2c0a4d6248233bff266f ./distros/raspbian/tmp/usr/bin/zmstreamer +777fedf0edcdb13572149635a84b1e23 ./distros/raspbian/tmp/usr/bin/zmpkg.pl +527926beeaea4e9dfd0006d069b9684f ./distros/raspbian/tmp/usr/bin/zmupdate.pl +5f9130c14576356c48dc20c5aa3e917a ./distros/raspbian/tmp/usr/bin/zma +e1e265fb18764b8a0483e8f4372f08fb ./distros/raspbian/tmp/usr/bin/zmtrigger.pl +414f4912d096962faac65074125c29cd ./distros/raspbian/tmp/usr/bin/zmx10.pl +ed1f2d478be4ad7e423a63764f149413 ./distros/raspbian/tmp/usr/bin/zmu +2819a863d9385427caa75edb10fbbd5d ./distros/raspbian/tmp/usr/bin/zmfilter.pl +00537a51e40686957c8fa7b3e9b41d7b ./distros/raspbian/tmp/etc/zm/zm.conf +ca2948b662d2725d330e3218dafd7fa9 ./distros/raspbian/rules +327c45c200cd66e796ae059c709c0adb ./distros/raspbian/watch +69cc936a1777c53d3834d60d897526ce ./distros/raspbian/zoneminder.postrm.debhelper +a2fe5c93fab999b9e3ad065199b49fe1 ./distros/raspbian/autoreconf.after +afa0964211d98964d84ff8b938020e05 ./distros/raspbian/zoneminder.postinst.debhelper +c61ff5eb00ae97a633cde70f0dd86ef5 ./distros/raspbian/autoreconf.before +83f158b9cfd39180e8210a11849a5326 ./distros/raspbian/apache.conf +790dda95659d1be076f94ca8bae66654 ./distros/raspbian/zoneminder.substvars +e7266ba90319421311eae24c9009c9d2 ./distros/raspbian/preinst +4a04bb22fdc3f8feb204ac95d1626c79 ./distros/raspbian/zoneminder-dbg.debhelper.log +f7aae0b0a71c8ff213b12572eee88d38 ./distros/raspbian/zoneminder-dbg.substvars +ac036608c5c402f92926505d0f0ab0e4 ./distros/raspbian/docs +c97d936f197ff61af4cf1ff4411c1b87 ./distros/raspbian/postrm +145566735fa890c4ae69a40667530e1c ./distros/raspbian/postinst +0ec4bfedc78954e6c3c4d4423ce43805 ./distros/raspbian/changelog +a7389e0d1151b730d85b06c60840ab8b ./distros/raspbian/zoneminder.prerm.debhelper +45384403199eccd6476d1bf8d03f3b63 ./distros/debian8/zoneminder-core.config +112313e5183853584e6438f1e93b5d1c ./distros/debian8/zoneminder-ui-base.config +c4dc6c754dc0459e8fa55f936ac44fce ./distros/debian8/zoneminder-core.dirs +7c5aba41f53293b712fd86d08ed5b36e ./distros/debian8/compat +6b097e14fd6f6a41b162a326d47c3c0c ./distros/debian8/README.Debian +722ee23d6e76b10f1eae240ea1a49117 ./distros/debian8/copyright +74aaf1c7713607d0b7c61e57413bbed9 ./distros/debian8/zoneminder-core.links +108c6ab0bd6fb0b90e100b058c210bbb ./distros/debian8/zoneminder-database.templates +cf5c4ec672f574a27a00eb44352230ed ./distros/debian8/zoneminder-ui-base.postinst +621aa8fa874b7eff810ff1188d84f0e2 ./distros/debian8/control +501e3a58696c053794784b19d2a50f4d ./distros/debian8/rules +d261cd2b2faa4dac157335e1e4f46b9f ./distros/debian8/po/POTFILES.in +b58fa875bbbe10155ef03bbd2876cabc ./distros/debian8/po/templates.pot +64f325327eb820f669f1d2a712d72876 ./distros/debian8/po/fr.po +bb2acd3aac786d4c9acce222e1d57266 ./distros/debian8/zoneminder-core.zoneminder.tmpfile +15aeddec2ea55d4520a3dd0301352d44 ./distros/debian8/zoneminder-core.install +01230c86823e3435f6a3c3199aaf23d3 ./distros/debian8/zoneminder-ui-xml.install +4c4678a2118fbef1bd0a49850ef49f32 ./distros/debian8/zoneminder-ui-base.install +20eb5d0df8842df2df7e75d60330d3b9 ./distros/debian8/apache.conf +7d5984727b13f2413a808c0a49064666 ./distros/debian8/zoneminder-core.preinst +2ea8b5e539b9d3fef230d7a684fe4fd4 ./distros/debian8/zoneminder-ui-mobile.install +c22bccac94ac55e91dfd0cda85a501a0 ./distros/debian8/zoneminder-database.prerm +e1c77e20b631d23c141cf45206d1ba51 ./distros/debian8/zoneminder-core.templates +b00d28a06ea5bc8e71c7a7511d0f742e ./distros/debian8/zoneminder-core.postrm +abbc14575915f6d0482c2dc42c99d929 ./distros/debian8/zoneminder-core.postinst +9f2fa1326e1853f1667be70a7aa09018 ./distros/debian8/zoneminder-core.zoneminder.service +37ccc83bb75a9a07d3e6fdcfd3933761 ./distros/debian8/zoneminder-database.postrm +893c9cc302f18b3ea7748b4cce97b4b2 ./distros/debian8/libzoneminder-perl.install +38e25f9e02f0f724dad69c4e1a3dc1d5 ./distros/debian8/zoneminder-ui-base.templates +ac036608c5c402f92926505d0f0ab0e4 ./distros/debian8/docs +00d1f9796ead7022af0f475bad88a421 ./distros/debian8/zoneminder-database.install +c85387fb53ef02b1f00924e8b44201f6 ./distros/debian8/zoneminder-database.config +2ee1c3c6ce369d02b44e652fa22bde5c ./distros/debian8/zoneminder-ui-base.postrm +726518a41553bb4f6b3f9e7051d88f1b ./distros/debian8/zoneminder-ui-classic.install +1ab0f150b42784da2e07475029c7cde6 ./distros/debian8/zoneminder-database.postinst +d41d8cd98f00b204e9800998ecf8427e ./distros/debian8/patches/series +462b03b0667e79179d457a5e33f735d8 ./distros/debian8/zoneminder-ui-base.links +ac3e41e591a82f16e3929a4bade77669 ./distros/debian8/source/options +c5fc031a250b2d76fe051ac3621620ab ./distros/debian8/source/format +d41d8cd98f00b204e9800998ecf8427e ./distros/debian8/source/local-options +34a5614f084b1018b9934117e621e55d ./distros/debian8/zoneminder-database.dirs +4b0fe2db82df581575747360da1c692b ./distros/debian8/zoneminder-core.zoneminder.init +7d30a146264ca4002b6bc8259cb20329 ./distros/debian8/changelog +de4d710fb12cef9779e03aceb0500912 ./distros/opensuse/zoneminder.service +b3c301ed72694aa6b35f0710738ce1ac ./distros/opensuse/README.OpenSuse +fce681446608ce2604d79bdbe2720c9a ./distros/opensuse/zoneminder.tmpfiles +430610b251c76f3adc1adf9e9037c9e3 ./distros/opensuse/redalert.wav +2242b6d96b7046cb4ef0029c997fa6d5 ./distros/opensuse/zoneminder.conf +fcb5f383448605741bebb9c52c26f2a7 ./distros/opensuse/zoneminder.logrotate +a972653e3f63c7df60b78e6865102171 ./distros/opensuse/jscalendar.sh +11be72dd718dd2b235dc48d26eb15adb ./distros/opensuse/zoneminder.cmake.OS13.spec +95f2ef8c015487f2fde356b4a824b9ca ./distros/opensuse/zoneminder-1.26.5-opensuse.patch +c1aaede6aaeb157be24cd50328060f75 ./distros/opensuse/CMakeLists.txt +9072a65367b02191e3558347bbd8d68e ./distros/ubuntu1204/dirs +3962665e3c4cfeb59dff9bd195668eff ./distros/ubuntu1204/files +7c5aba41f53293b712fd86d08ed5b36e ./distros/ubuntu1204/compat +b5a54033efcc9ff3c29b8f56771b31e7 ./distros/ubuntu1204/init.d +480674678e8e3cbbf1bebb2dbbdb7e3c ./distros/ubuntu1204/zoneminder.debhelper.log +ebff2c7cf2c7bd2c7a85bd523f54bfbf ./distros/ubuntu1204/README.Debian +7a0613ca5cf517800a0d95fbed192202 ./distros/ubuntu1204/zoneminder-dbg/DEBIAN/md5sums +50b86aad87233a01e5223df01387e03d ./distros/ubuntu1204/zoneminder-dbg/DEBIAN/control +8caf64d984dc28203336dcdbf1b264f8 ./distros/ubuntu1204/zoneminder-dbg/usr/share/doc/zoneminder-dbg/changelog.Debian.gz +722ee23d6e76b10f1eae240ea1a49117 ./distros/ubuntu1204/zoneminder-dbg/usr/share/doc/zoneminder-dbg/copyright +9a148285e6c01e2c20da00b39586dba2 ./distros/ubuntu1204/zoneminder-dbg/usr/lib/debug/.build-id/3e/6f2b698616b23f39c52528e1ab0e1af5f0f9aa.debug +4a9659a705cf205444de0aa0c9c45c14 ./distros/ubuntu1204/zoneminder-dbg/usr/lib/debug/.build-id/2e/80abb922627fc7877fa286a6169bd21bdd809b.debug +0f991b9294c8e0eda99ddc5b7c728b68 ./distros/ubuntu1204/zoneminder-dbg/usr/lib/debug/.build-id/42/0d8bbbd7e1e9636a5dde9bfad5505f0a5657c3.debug +6fe6e70b646482cee0faede384b74bb7 ./distros/ubuntu1204/zoneminder-dbg/usr/lib/debug/.build-id/f2/aa85d98c2ba7952a11f9a0fbc16ee668553b5f.debug +743fb76b706d1e3cd9d30371d80e83a7 ./distros/ubuntu1204/zoneminder-dbg/usr/lib/debug/.build-id/f3/e403f6346eb195f65f0f3ffb67f95d10a6d2a0.debug +a5b3479277edf0ca93023631b03f1169 ./distros/ubuntu1204/zoneminder-dbg/usr/lib/debug/.build-id/59/f46300048ba00394c1822dd3ac906caa116f13.debug +95c60088357caeb21e0b9b6959e2d84a ./distros/ubuntu1204/zoneminder/DEBIAN/md5sums +9ba900c930d46738c5bcfe782736d02f ./distros/ubuntu1204/zoneminder/DEBIAN/control +2590c731ccf3fa2b872ca40a3d48e39f ./distros/ubuntu1204/zoneminder/DEBIAN/prerm +f8f4897acefb466933adb9629373f041 ./distros/ubuntu1204/zoneminder/DEBIAN/preinst +e129cb2e33074d1ee3f593a4ef55f779 ./distros/ubuntu1204/zoneminder/DEBIAN/conffiles +8b76e3f91fbe50be3b7d519845f8df13 ./distros/ubuntu1204/zoneminder/DEBIAN/postrm +30679cf22413b0e25d209652efacbee0 ./distros/ubuntu1204/zoneminder/DEBIAN/postinst +977a89f97201ad831a989740a1b77fec ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Logger.3pm.gz +214b514c252024d55a99f2cbd78db28e ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Database.3pm.gz +d42de6da6a816ce8e4b068db4e741e0e ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel::Serial.3pm.gz +6bcb87477afca04860f1847f23268b16 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::SkyIPCam7xx.3pm.gz +e33603e1ad00c476fc5613ecededad67 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Connection::Example.3pm.gz +bbadfcbc1ff205e9a66352b7e26423c7 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel::Inet.3pm.gz +83c339b6e44fc32250bbe59f67e97350 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::PelcoP.3pm.gz +979eb7c2795467cfcd5430affc6734d3 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel.3pm.gz +53a542a748c6dd42764d1baf611fc3a3 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::PelcoD.3pm.gz +deba69b1a35ea09a6d74a420a6a8e2d4 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::FI8908W.3pm.gz +dd8472223fc4d6333d61aafdfd64e4c7 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::TVIP862.3pm.gz +dd896145dea8a07b9cb555d1076bec56 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel::Spawning.3pm.gz +2a24e5bb888cbe1f8631f1a8f38ce45d ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::Wanscam.3pm.gz +fcd287e5a484ad7a9fb7154b2b56f911 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::General.3pm.gz +59e84c0789ea2888c79b935e53fa11a5 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder.3pm.gz +2e75e1852a1a0419ee2cffb30a0fee55 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel::Unix.3pm.gz +106cdd50e282b61bfec828fefa23ef34 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::FI8608W_Y2k.3pm.gz +7ea092e8d9d60178d0204218f6ce3510 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::FI9821W_Y2k.3pm.gz +e5ceb40bd6bd6ec34dc27f4e27b2b4a5 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::PanasonicIP.3pm.gz +2e5d73a9a580eabdb6b0df3bffd323ec ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Memory.3pm.gz +23ec68c5359273dd09374dd216ebff80 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel::Handle.3pm.gz +d0aa0457a3671dfe2e657e6b782a2e1a ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::Visca.3pm.gz +6980c2d2b0317e7f32be573c397b0003 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::mjpgStreamer.3pm.gz +fe172913180f2984db9ffb551ee3b251 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::ConfigAdmin.3pm.gz +284f443ed08ee3308ce266dc738909d7 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::M8640.3pm.gz +7610adb022963e1d672f18f5556558bd ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control.3pm.gz +6b7bbfd05abe1c19234eb87d50bd9398 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Config.3pm.gz +10608fb695435b6f7cf73e28d83d3b9e ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::ConfigData.3pm.gz +ae944c664da3cdf86647ea8d046f3dcb ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::Toshiba_IK_WB11A.3pm.gz +79e37a903fc2e1caecdb90ea6e199cf2 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Channel::File.3pm.gz +6be1d755606af08ece818bb381ac7cf0 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::3S.3pm.gz +abfad23352bf1c91fa0cb2b271bedf08 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Base.3pm.gz +c3f549c2220ecfe6a641cce341c38f73 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::FI8620_Y2k.3pm.gz +0cc9c74ede1812834714fb08bfa683c7 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Trigger::Connection.3pm.gz +adfd73fbd46835a02d339ef13d13cd35 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::AxisV2.3pm.gz +f7081f3685f8de57ac615febe8d47437 ./distros/ubuntu1204/zoneminder/usr/share/man/man3/ZoneMinder::Control::Ncs370.3pm.gz +4b3afb84b2b71ef56df09997a350bd04 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/graphics/spinner.gif +e07c0775523271d629035dc8921dffc7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/graphics/favicon.ico +a840cd88b33f95a014cd654e0a615fd9 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/graphics/transparent.gif +718d8596a14d123d83afb0d5d6d6fd96 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/includes/init.php +cf2a637c699c32648c715d2faec7c4de ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/includes/config.php +9355288fed99c00c68f8623a3e73280e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/includes/functions.php +96a21cecd35ed5d1b732bfe74b1535ef ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/views/actions.php +83f5492302df18de8c7090a9fa8ac3e7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/views/notfound.png +f487b23a0841587841fd3dd34306d677 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/views/console.php +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/views/none.php +33d9276165e48e85f9b76d96ceb72c43 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/xml/skin.php +67bdd7f59ebc311b9cd8954d57f68c2d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/css/skin.css +0814d7addb49c87b8cc29eaff5c8effc ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/includes/init.php +2e1176dc3923dd9a44b19754139a1555 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/includes/control_functions.php +3f1549ab15e953d0e1eb5ea978677e8d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/includes/config.php +5c15d51173b096e5597c329511ce7d74 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/includes/functions.php +d5b4372487f53fadf1da7397ae10c77b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/frame.php +224db60a7b9d89678e3ca4a5de5803fb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/filter.php +fcf239e684be46104251247cfc51265f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/login.php +63c88c56fe6c4104f811847f70fe7b6d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/watch.php +d52ac90fc23bfc97a3b9afe117c66642 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/event.php +5a61e2227587163542bebb4dfb77fe1f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/css/console.css +6d8509c58a57938eedadb498c9fd9961 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/error.php +e5c59543e4dce3d2719a2d9a8b52fa9c ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/state.php +c121ca1f9a8c4b693b3dcb4bd63d8e7e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/montage.php +1ad2154c2ab8d4e651087584ff533359 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/events.php +6ee5d2b987944284e0fd52e158d70c52 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/console.php +97f6771e6e530e0323c8a7455d4c087b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/devices.php +e9202a011a59bcb4f4e49a9811f56b03 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/eventdetails.php +4707ce2043a6964c6b0886f8404b37da ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/function.php +b42a65ca6f80ffe2ef69b1bf6d0dfd05 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/views/video.php +1ee43243aff2957f555b2025fe121ddb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/mobile/skin.php +b08bbad185d4f141f4e16a32961f7e10 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/point-o.gif +3aea4c08fe3d0882bbb50d6a880b9d3e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/center.gif +10481c373da9f2e33955f5f684701e35 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-ur.gif +4253a17d69f9c9f105864b57ef1da4ee ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-l-u.gif +2357c0f1dec549fb5866341acf2f8e64 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-dl.gif +b36b743446eb998574343b265fc2a327 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-dr.gif +de6d2a2b0bd54f72d5c8bde9fddfc56f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-ul.gif +93f79d7c400d1988e58791d692050380 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/point-g.gif +6a948184e447f61a38d54609194eb647 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-l-d.gif +e252c31fdb0b3a65a082069b37042a0f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/seq-u.gif +330f0709c7b846ed5b3e990a6b0b6839 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-u.gif +0c2b9346b65233183cca8dbaa6ee1db2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-s-d.gif +dad7467542959f7e571f12d0a4988c98 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-r.gif +2c0f5bb849832ea968cffc648d45381c ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-d.gif +2e743de572b45088c05f0471f63fb710 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/point-r.gif +98212c6b29fcd9a09e6d16607fe65909 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/seq-d.gif +269dca955356f221c9ea271f3e259763 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-l.gif +4b755122db75084dd39297fbc1822f27 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/graphics/arrow-s-u.gif +a65a3d23000bf34a8257cf56add8e9d4 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/control.css +10fb7830c2e3a07c7b090bbb224f89b7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/skin.css +b4659211b34992bc81bee822615181db ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/export.css +701f84f1ab430890e539cf373ed4292b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/frames.css +606388c643910afd47e6a53f591cc426 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/montage_freeform.css +3a91d2b400f3d27667a01a816f0f0a44 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/control.css +dc75d27b0aedaebc6364a226e1fac661 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/filter.css +25cb6e4f3459dbf8efb2307c3c8499f5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/timeline.css.php +668d0f83a81f352d9ab24202f66aaa28 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/controlcaps.css +b91fa88951c1033191f6a22bc485f907 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/event.css +e91fda984fe2ef3d8de2dbf57b5c7747 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/events.css +63c979e75fcdd523106982a6e5a2cb64 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/montage_3wide50enlarge.css +c627ab2a4a7567ca1b688a80343bcd1d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/groups.css +675d0499f9dc3fa5fdede504dfbb7ccc ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/console.css +27ceca5314be52f316ba52a0d94556c2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/video.css +7665779719b3f99ebaf1acfd42996ac0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/timeline.css +f972ae29776f4730b510502f44f03053 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/frame.css +352483a4610fdb2b44697b5a52c690c9 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/montage_4wide.css +902ce9db4ec62764557caaf4f44a0d74 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/devices.css +e95e93705b1af2c7005f54a8ebb23683 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/montage_2wide.css +4a039676d0d00483ed834ad1535209f6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/watch.css +a2154e46e8865c359caca5afcdf58a37 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/monitor.css +8d299e89fa8e9a088d1d9c747e8f7154 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/export.css +ef24eba3ca4d9e845858e47c3026e9c6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/stats.css +35d6f241d0377b3d6e69f3584d3cb091 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/montage_3wide.css +f6634ac163a6628078c5c54ef2d44011 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/zone.css +068f1341939d83560694256b4798f2fb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/options.css +54d0b4ce5f948e22fc05f8fbab171450 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/montage.css +6af44563df9975a6fb1e23d64421f486 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/classic/views/log.css +a65a3d23000bf34a8257cf56add8e9d4 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/control.css +2c1af3dbfc506bda7654f694cab293f6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/skin.css +b4659211b34992bc81bee822615181db ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/export.css +701f84f1ab430890e539cf373ed4292b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/frames.css +606388c643910afd47e6a53f591cc426 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/montage_freeform.css +a9072a66ee838729986b57c23416c8c6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/control.css +dc75d27b0aedaebc6364a226e1fac661 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/filter.css +25cb6e4f3459dbf8efb2307c3c8499f5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/timeline.css.php +668d0f83a81f352d9ab24202f66aaa28 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/controlcaps.css +7467b045f5b4e3a8cf2b42a47c3ab17d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/event.css +e91fda984fe2ef3d8de2dbf57b5c7747 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/events.css +63c979e75fcdd523106982a6e5a2cb64 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/montage_3wide50enlarge.css +c627ab2a4a7567ca1b688a80343bcd1d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/groups.css +d30679be000fa1b224f90fa082b19525 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/console.css +27ceca5314be52f316ba52a0d94556c2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/video.css +7665779719b3f99ebaf1acfd42996ac0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/timeline.css +f972ae29776f4730b510502f44f03053 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/frame.css +352483a4610fdb2b44697b5a52c690c9 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/montage_4wide.css +902ce9db4ec62764557caaf4f44a0d74 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/devices.css +e95e93705b1af2c7005f54a8ebb23683 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/montage_2wide.css +07a4cc55064ca258bebca6291846e00d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/watch.css +a2154e46e8865c359caca5afcdf58a37 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/monitor.css +8d299e89fa8e9a088d1d9c747e8f7154 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/export.css +ef24eba3ca4d9e845858e47c3026e9c6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/stats.css +35d6f241d0377b3d6e69f3584d3cb091 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/montage_3wide.css +f6634ac163a6628078c5c54ef2d44011 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/zone.css +068f1341939d83560694256b4798f2fb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/options.css +54d0b4ce5f948e22fc05f8fbab171450 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/montage.css +6af44563df9975a6fb1e23d64421f486 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/css/flat/views/log.css +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/includes/init.php +7c60f2ccaa5b4473b5f9a942c5fea373 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/includes/timeline_functions.php +b6787b20659ab4ae5b06cb9f9900330d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/includes/control_functions.php +5248a1135175c05b1860dac97cca5c0f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/includes/config.php +eff1e8ea2a5418ed47ce69386b4a3e61 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/includes/export_functions.php +1b3a274b77c824b4506765106205f598 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/includes/functions.php +4d1463e6bc5ed133ede23e6372bcbdbf ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/controlcaps.php +1b57a2fecd32647215f68998bffba25a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/controlpreset.php +d2032ed0e519c07e9d49b5c1cf9e247d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/monitor.php +c614ed7ac478bf5c9ef863900d89ea66 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/frame.php +21495b9af3361009cb8e77f0fec4a996 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/filter.php +1d675229155ceaa8982d2fc47d47d5f6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/options.php +8d0be05a8725ed889b056ab3d2acb505 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/frames.php +4ca1ad1cf9c24ab566ff570a8305306a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/status.php +b571e7b897a14ba6c0af756371fcd197 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/login.php +a15d4dcf6624f09cdfce31e48e2a0b42 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/Makefile.am +c942ee3fa4859956057ca8a17be36989 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/eventdetail.php +9dcd343147a4b8215917b8eaf9441ba8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/watch.php +35922ff1e4668805878c6343db3d2b18 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/optionhelp.php +3d10f253482dd12a0aaab55ce50f061e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/event.php +16d0a8a023a63797d1ea004e8ece32c6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/user.php +548571006c1c33eeaec9d288b7d21515 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/postlogin.php +fd250dfd1edcc92d496d00b6e2963c48 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/cycle.php +0a7f4b83bbca22a5061f3f8b3771b3d2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/donate.php +276b51cb4307b90a5cc3c1c44f86b005 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/version.php +ec4c3a85ce7b717945430d5379e5f5ff ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/device.php +379433cd368bd32608864eb304b02b64 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/groups.php +93a837f7db6bf5a045d3395e6c179718 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/error.php +d358cffe766ff93aafadc9f869c7a07e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/state.php +f675151b8785b307bf2c61efc3e2fa04 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/montage.php +f9c5481d113f67d002883034dddf385a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/blank.php +5139dfbe378e17b3178b4959b9bf20f7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/events.php +746ae2ce61073d614242cb3d6c082bce ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/settings.php +1d7491908b75a297519e740c5784e0f1 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/group.php +c3055c24489a3c952e31e105a711545e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/controlcap.php +abb35b5a54dda62386d3aa5abf9720f4 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/control.php +ff693078fbc15e321062d69c302c6aac ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/zones.php +3d9e4bcae9ec10838960e96cdc369fd7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/filtersave.php +9e4952365cf18248c57cc36ae304498b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/console.php +d95c44748df26ca2bec7d4afb079782d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/zone.php +b1e9b91a8618af638f3355002a126562 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/monitorprobe.php +189b2cb541386af6138ec96b96538026 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/devices.php +f85cbc69e7d95b4119311c726d9f672f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/monitorpreset.php +16064caa25b6c51360e10ee91210e8fe ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/state.js +c15861718da9974b057a4e6641759bad ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/group.js +de8db540180b86df8d0fc4724df3f12b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/user.js +59920201dfac5f9a4431f4f3a4e0364b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/version.js +017aafda61cee8bdf65f36eedcd91644 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/console.js +0dd3c64eb2002ffda9f7cb5a57d45457 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/donate.js +7a9e7f334a1c84d56850ac3b79cd5170 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/log.js +c32db9eb82496882262fbe62e228a396 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/Makefile.am +4628f8f6e13462b957e9ab7c267ded80 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/events.js.php +832e7495163a6ef5c842475f7d44962f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/video.js.php +3c5c231b378597e9696c2164dad2668b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/montage.js +63b5fb3cd5a7d7b5479804fac1a02ed8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/options.js.php +3a8b64c9424f1a9ce02973021f3f1014 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/login.js +437d1084299d1163d36bd83355178a5b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/events.js +f95f51f93a153403f28bec13da9f079e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitorpreset.js +c125327fce8e049519bb826cce5417f3 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/watch.js +56c208506cecd6a242e38d9c347558ba ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/state.js.php +59f48f29901bf0b1d2dcdbd0287a7243 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/video.js +6656671bba812476fb7964edab8ed7d5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/groups.js +8c5c9cc7e4961559e345220c9653aec8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/version.js.php +f9840e08f9ca3c9966315657cfdf47f5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitorprobe.js +03cd81247cc90a19db3cba077fd00b6e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/control.js +0f09e33012eee04a62ebdb2b05c7b03a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/cycle.js.php +8d99ac07dfdbf41cd357b0a3d2ee1f32 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/postlogin.js.php +925a1cf53b3191680541872b4c38b576 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/cycle.js +d80aeb3b09c3bb4db635aaab6a34dd69 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/timeline.js.php +2c9f71673c49866ef4dd2bae89658d72 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/filter.js.php +1ef503037a66111e5bde441ba8ce20cd ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/event.js +32ef30d8527086aa9ee63b73ac5df86d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/console.js.php +51f2f8a12c688c3c0e70f04929295c99 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/watch.js.php +cade1c87dd48210dcc61fbc2541e76a5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/filter.js +2da7d63e3e1a8b4a7ddc42506e714873 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/controlpreset.js.php +9dbbc338d288c7053ca08ade4be2a08e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/event.js.php +18f6033a5de91a16561626debedbd04f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/zone.js.php +f7ed288a9c1556499ff689b277091074 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/export.js +c66feb02c549f81b7910dd31c23964b1 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitor.js.php +0062d1966577b1a04e9b430adf20e441 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/controlpreset.js +99f2883fd66369e397c28730093e0039 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/montage.js.php +f95d23b81ff41694e0f61ba33f116eff ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/monitor.js +d446cdfa58d7a052b099e65e1417296e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/donate.js.php +9122fd4adc69210dd059f703878da027 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/timeline.js +2cdc936339c10744b45be5560eae9488 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/devices.js +98c7d638b7e90ddae6aabc103a3a197a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/zone.js +6a329d8f40a74659b1e1fc10763c6f6e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/js/export.js.php +f6db2543d3af0dd4f80a777a4dfc0c69 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/log.php +f142b8cf2d848d8277d605cc0bb5c7f0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/none.php +b5b778dd3c8bac8c57e4cefea824eebe ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/export.php +07233ba0c8343b441c0532979c56a411 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/function.php +e77abc6802a1da3e4fd62e646a023f46 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/stats.php +bcd5568ad30fbf43c37b1fb067f6fcba ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/video.php +1551da8d4beb70e03872bf2aadecafa8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/bandwidth.php +e4d9576ea7fc0d077e8f676ca3214510 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/logout.php +2bf800f3105556313be01bd3b4c42aca ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/views/timeline.php +1b5888dd1130c2624e3a89ec6914641e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/skin.php +1d4fc58a4fb06f37e330419e1de5ccc5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/js/skin.js.php +546dd00ad3f7f286d4d47e7ba1d3606f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/skins/classic/js/skin.js +8218a18edccf1204d7f6b5be75fd0d78 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/es_ar.php +589fbc097bf0eeaf0470127f7760ec1e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/pt_br.php +37850e5a2c5496828512b7e752d59ee8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/dk_dk.php +b194629ea544221b206616c18a0c148a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/hu_hu.php +b8015b85b9c032dcb061761731b084b8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/fr_fr.php +b5c7fe7fa19ab9532b4a30723e099881 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/pl_pl.php +5ddb50407c87162ef3bd88cc88a69de1 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/it_it.php +ff9185a540eda7598ce4607045cbfb95 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/se_se.php +0d46d10e46dbbfcdfa3be6ef5ffd0eeb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/nl_nl.php +bc88aced50114c408e703089ed2c58a1 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/ru_ru.php +6ee18a4395de40fb7e74876ca8725768 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/ro_ro.php +2ce9bebd55d946cf4ea9d0776df0cc7d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/en_us.php +321a20460bb594abb17b3b925f6c98f2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/cn_zh.php +c4555f9101c6d257b03cb409fae4529d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/big5_big5.php +cb3bc7a87a69793b4b7bf90f1737b6b4 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/et_ee.php +fc2bf1773c63c42f4da071ce417a7aec ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/ja_jp.php +86ed6db147aeb77e12b76f47bf3364b5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/cs_cz.php +b6e51396273585f0b1155ea66010796c ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/en_gb.php +c53b9bede29062c0e76271c91367a04a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/he_il.php +c777020c596cee7ceddc1646f19a3080 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/lang/de_de.php +f3a96b4e82b5e7d722d860b0371e92e2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/css/reset.css +d3f02477779fa8a2cddd1c1605583b96 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/css/overlay.css +a21186623f461fbdf94a1000fb081ee0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/css/spinner.css +09653a48b2b311109f26d5859d2bb5d6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/actions.php +ea76e136916631c564343e24df07de2b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/logger.php +8ae8d5b773c4cc9cda879f57aee04dfe ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/control_functions.php +742ad5a8e5eef1b9ce20f1beb5905aed ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/lang.php +bc4b84a1025b7fa5a1f9aefb388ac925 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/config.php +63bdb662ad9c56e1f39a856d67ae1432 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/database.php +ee485a94a311463df75d570bf23dce02 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/includes/functions.php +d9b8cc5ecc4a1f26e057df31675b55cd ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/views/file.php +90e3a0c17c6d5ac8b0b30e749c89a4ce ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/views/image.php +6dee62a0963ecdc4b7ccb353b7ae7424 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.27.0.sql +bd8b4735fee0bbb064a140819347df6d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.0.1.sql +632200d5a6238e256e7cf80de95156dd ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.19.2.sql +821f1c1d6c52f99dd47ac14d61fa5640 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.22.2.sql +1c9100b2e0c6da71bc3492d2d9ae3dfa ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_create.sql +8b07b11c7cad1914c3ea833b8ed5817b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.24.3.sql +3fca704937207aa222e77210aa0c25e0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.19.5.sql +97edc0c5579da47e346d42df1e545eb0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.20.0.sql +92d0e29600b0f23c3cabdc02ce6259e2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.11.sql +08d098374092ba16eb3459a1aa2a8229 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.24.4.sql +54f6c2d009ad16095cad89d9855c91c2 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.27.99.0.sql +4c5855feeaaf945c29c43292e5c74197 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.26.3.sql +c1594ffeff663ea370dbbaeb272e10db ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.22.1.sql +e2dbebece1d49bea27f756895a663f86 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.16.sql +2b89f4c950e227e9313cf7418727f3de ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.26.0.sql +7c452e51249b26c7d6bc2651bd008680 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.21.2.sql +92d5871c239ea24a2bdd738e0776a750 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.28.0.sql +f96d352e85bbffb74ae0c6b354c76cac ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.24.2.sql +85c2f951462a9ca699af571910b2f5e7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.21.0.sql +6f75164dc4ab8e6189ccc8a2f3a006e4 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.17.2.sql +8601c639ef779f73b37e00df75329bf0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.13.sql +4466a07866e466e4a69a6986b2f1d0cb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.23.1.sql +6314f20b3f02056792caf93944965fd8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.23.0.sql +452cced335ec34b78b4d091b7901ffd5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.21.1.sql +313214000c45d7e66bc09560985913bc ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.29.0.sql +4ec7ea6a41ced9a48b5922f359a56b6b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.19.4.sql +c75ceef3b6954b8a8047010bea8d6d4f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.7.sql +5d46d42dd9f62cdaedd5190f05b0a618 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.24.0.sql +8388ea9b05577c775206dcfd5df72856 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.18.0.sql +bee064f205c14f5c20501e739ce80a1e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.8.sql +990aade37fd26b6fa4ffdd3a13c48b24 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.19.1.sql +34d526653752e2ec9722b21a007d79e8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.22.3.sql +e35625686e01f368b3f8f87359aaac7c ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.15.sql +9c82b2ea73453054f9a69c787ec3596b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.22.0.sql +2f7281f19a02402c8a2b603143bc203d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.12.sql +07f00f03f78eca783cfc115fcf1168aa ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.19.3.sql +83decad8946e51529e7f7bbc13c743cf ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.24.1.sql +795313d24e9c26b3557feb386df603c6 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.26.1.sql +be7fe21854b261df5b6b28d92ce0dad4 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.19.0.sql +2740f9a92352e7d91be18a67115be71d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.20.1.sql +ee60615a820f97e43ebab88f173b9921 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.26.5.sql +5880f07d8c485d28a002e45a254c47a5 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.17.1.sql +b7468afae4c69e654a4c61feec101730 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.18.1.sql +9b4716630546a41cdfcd08e56faf647b ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.28.1.sql +9c0fc358cdc873030b0367d005f6b765 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.21.4.sql +fd4e7c581673c85f9734bfdf45337b99 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.23.2.sql +54464055410fdae4f296c00c963bdd4c ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.23.3.sql +dd2109c3b45b0243d92e21031b7a55e0 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.9.sql +6c09c69e9b66b83a0b8ef8f37f985ebc ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.21.3.sql +5983fcbe9f352433a8cdba6dadea4d5a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-0.9.10.sql +e0651ab19ce94e12f2a05481d4847b52 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/db/zm_update-1.26.2.sql +06031ab17a0397dcc824cf7e56610771 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/status.php +c518c03f8783cfb822d3fab322c66bd7 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/event.php +433c99927f1961f159562627f3c79800 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/alarm.php +c65641a2edd9bac342684936c391d444 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/control.php +bcf111c3a38a3a94d5600f33d89416eb ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/zone.php +74836750b8f89f54054ffb31cd67f135 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/log.php +bf81f42111e73d054802f0aa72027c8e ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/ajax/stream.php +d108695d5815a3fd528df2403f3c50cd ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/index.php +6d1a5880671e67c0d6384a9d33143309 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/js/logger.js +1eb33d67d6069ec8723920e59e602d31 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/js/overlay.js +2f4357273ede74623cd7f3dbc210da7f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/js/mootools.ext.js +861459718684608408e7427d85ad732d ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-nc.js +d514b6d7bbe53cd04ec0558821146e1f ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-yc.js +0c240ed4306c44e2cb6206b11919afa8 ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-yc.js +0b90452e783f31a382c06155a8a3605a ./distros/ubuntu1204/zoneminder/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-nc.js +567590c0a9aa08352375bc19ca34c449 ./distros/ubuntu1204/zoneminder/usr/share/polkit-1/actions/com.zoneminder.systemctl.policy +176294d55f322804317befe0c8129348 ./distros/ubuntu1204/zoneminder/usr/share/polkit-1/rules.d/com.zoneminder.systemctl.rules +9e5fe8a26925a0fa5412fcec401ee3c7 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Memory/Mapped.pm +a3b5d80f8e270b04341401a537d81e96 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Memory/Shared.pm +7271e9b3df2a956ea23868c972699c38 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Base.pm +855f56d67de3ad1fcdce0e629dc59686 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Logger.pm +6fb757ae2c544938c8a0dc8ba578fa9a ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/General.pm +5126afe929867a4d6490ebcb48a49052 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Memory.pm +1983b2a432d9b4c23d27bda668dfcf8d ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control.pm +39b83871c88d452d68cea948fe83b2e4 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Config.pm +4c5b2dd56f5fc8604d2bee7d9896b1d5 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/mjpgStreamer.pm +98bd34b8614625cb0fa0f14df0c4b122 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/M8640.pm +3b908c8286411c2ee2743329b516342d ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/PelcoP.pm +37b2053f17ecf97a398ae5b49dcb7e43 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/LoftekSentinel.pm +dbc009686162f84bd02879355910c1ee ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/Wanscam.pm +2f7bd90864a1a25c9229026f9bac3d41 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/FI8620_Y2k.pm +d66a2faf7390a6668e32a799658e8ae5 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/PanasonicIP.pm +803dc34fb23f239e2bb782b146db18fa ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/FI9821W_Y2k.pm +8fd0894552e6c8464be5bb34533cd4b6 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/FI8608W_Y2k.pm +f0c4a4c08f53620a30909c7816f6e3a7 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/Visca.pm +63a9924dc387192b53f54cbddbd53f60 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/3S.pm +5b33d25c49b10d08dc1e3ecde3c19337 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/AxisV2.pm +daf155e8390d082e1fbad7b3a4375bc9 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/TVIP862.pm +71c881b550c010cbdcbcea690f75584f ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/SkyIPCam7xx.pm +568b527e03f2ebcc99e93085d8d8eae5 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/Toshiba_IK_WB11A.pm +b28878a0cd796fad48c53b1643ed542a ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/PelcoD.pm +4b02c4c5a2b7593eedcddf5d5a8f2cac ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/Ncs370.pm +bc7d0ff4b13d61363d5dbdd7eb0a7a28 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Control/FI8908W.pm +543fde408bbddc4a584a358376105260 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/ConfigData.pm +bd0dbcf22d4ed15c64698d55d3f5948e ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/ConfigAdmin.pm +8333fef7d94f0fce5e82a671cb83c4ce ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Database.pm +e03d5a957ae0f04839cc8aed13c6e364 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Connection.pm +87445e5e683c1ad70f3db7195aa8913a ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Connection/Example.pm +10b9c55ecde4f59076c8ba20d9855300 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel.pm +19e7cbafa5171dcf849bd00b0d594354 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel/Serial.pm +eda3b7449611e8ebdcf30f97d87b2848 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel/File.pm +de33a8f665c7db9be8cc6f4cdf5ec962 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel/Inet.pm +47cc5f725d6fcc667e6363919e57658f ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel/Unix.pm +b33b640620e68290c44ec8fbf989a313 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel/Spawning.pm +63c6d6667ce2ce36f66bbdc235f73c76 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder/Trigger/Channel/Handle.pm +c9edfd935fb6133f806a91a216f341a7 ./distros/ubuntu1204/zoneminder/usr/share/perl5/ZoneMinder.pm +8caf64d984dc28203336dcdbf1b264f8 ./distros/ubuntu1204/zoneminder/usr/share/doc/zoneminder/changelog.Debian.gz +ebff2c7cf2c7bd2c7a85bd523f54bfbf ./distros/ubuntu1204/zoneminder/usr/share/doc/zoneminder/README.Debian +722ee23d6e76b10f1eae240ea1a49117 ./distros/ubuntu1204/zoneminder/usr/share/doc/zoneminder/copyright +bf234f8325eef492dfd31ccc1d044dbc ./distros/ubuntu1204/zoneminder/usr/share/doc/zoneminder/README.md.gz +1d752b838b3f90f6f5c07e70b34c44e8 ./distros/ubuntu1204/zoneminder/usr/lib/cgi-bin/zms +1d752b838b3f90f6f5c07e70b34c44e8 ./distros/ubuntu1204/zoneminder/usr/lib/cgi-bin/nph-zms +7855bc3fa3fc04a8724a971424c33a9b ./distros/ubuntu1204/zoneminder/usr/bin/zmaudit.pl +2066e1941df243cdc78b75d121d37298 ./distros/ubuntu1204/zoneminder/usr/bin/zmcamtool.pl +04f3955088b774686a78ce9c3ed6627d ./distros/ubuntu1204/zoneminder/usr/bin/zmsystemctl.pl +7cc423cfe906b4228e99569b5b92db5f ./distros/ubuntu1204/zoneminder/usr/bin/zmvideo.pl +1d2a8df9fb3373632ca40b3d3900ec11 ./distros/ubuntu1204/zoneminder/usr/bin/zmf +0f8bd6b5132047a4fdfa24eed51ad6c0 ./distros/ubuntu1204/zoneminder/usr/bin/zmcontrol.pl +e94fb224a65c3154db655bd0bc6e3978 ./distros/ubuntu1204/zoneminder/usr/bin/zmwatch.pl +335b0a8e5045bdeb60aae9924f76a4e3 ./distros/ubuntu1204/zoneminder/usr/bin/zmc +1ff341f2b46c3c3fd56abc77e2e31a50 ./distros/ubuntu1204/zoneminder/usr/bin/zmdc.pl +9c1f73f8208b4debf1935d1d8941160c ./distros/ubuntu1204/zoneminder/usr/bin/zmtrack.pl +c699489c2deb362e9e7ebf89574127c6 ./distros/ubuntu1204/zoneminder/usr/bin/zmstreamer +5fc21ef11e22a35732c93366f9c2cda8 ./distros/ubuntu1204/zoneminder/usr/bin/zmpkg.pl +67cd253eb83ea78e317641b884f558ee ./distros/ubuntu1204/zoneminder/usr/bin/zmupdate.pl +c3682b3ad090cb7a76bff9abb25c64a1 ./distros/ubuntu1204/zoneminder/usr/bin/zma +f45d18796848db83fe6c4a02e34bf8b5 ./distros/ubuntu1204/zoneminder/usr/bin/zmtrigger.pl +fea0e8713ff60829011f025c0a0e9a25 ./distros/ubuntu1204/zoneminder/usr/bin/zmx10.pl +3b7136d204d34acb916d9d5758726d7d ./distros/ubuntu1204/zoneminder/usr/bin/zmu +653ef81a4e89bc73eacddc45eeccdfa0 ./distros/ubuntu1204/zoneminder/usr/bin/zmfilter.pl +b5a54033efcc9ff3c29b8f56771b31e7 ./distros/ubuntu1204/zoneminder/etc/init.d/zoneminder +2d0b66c536ed365abc5986c6baa59f2d ./distros/ubuntu1204/zoneminder/etc/zm/zm.conf +20eb5d0df8842df2df7e75d60330d3b9 ./distros/ubuntu1204/zoneminder/etc/zm/apache.conf +722ee23d6e76b10f1eae240ea1a49117 ./distros/ubuntu1204/copyright +e10df8d26914c0a8aca15921248947f6 ./distros/ubuntu1204/control +c5b4f2e02924325d937177993b1b37f6 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Base.3pm +e8d797c5f09eba3ef38b10f6d3ec4807 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel::Serial.3pm +b2a9e020c3a3bd83d583a361defb522e ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::Visca.3pm +4715bc98d5245d82587f98c3a67a13cd ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Memory.3pm +c2e24062de108f90d0f38c6057d8feed ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::FI8908W.3pm +3ea71caa1df8e3491c56ff3ea0f429fb ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Logger.3pm +8583270411c15536de12bc3188099a5c ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::ConfigData.3pm +6e2fbe0511ea902b53a3efc09059c07a ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::General.3pm +575ea08af33874ee13d90e84bf6b0886 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel::File.3pm +bb1571a3dbcbd94e02460293eb7fbc9c ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::SkyIPCam7xx.3pm +3213eb011337aca2ccd4286714457132 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::ConfigAdmin.3pm +a2d49a762e2fd2efdcb34b7d37e2e34c ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::M8640.3pm +08cd134982e3c5d84068afd010d841dc ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::Wanscam.3pm +bae116e4928a2ab5268bba2e7a727d54 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Connection::Example.3pm +8418bcc2586c5a292c085fbed0422680 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::PelcoP.3pm +d1d9e774786ef5a83f84f02e92d7c70f ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::TVIP862.3pm +87109967ed8ab295bfe3c4f662742de7 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::FI8620_Y2k.3pm +1eb001f295c25ef219699fd09ab954a1 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Database.3pm +59949412bf54625d12e6a5283fcbc9a7 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control.3pm +52d15c4217e92ccc181a0b20e71793b5 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::3S.3pm +ecff76882bf145c5e2e0be0c81da72fe ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::Ncs370.3pm +c4108e6f14d8145c239489f33b36dd37 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::PelcoD.3pm +6acf2714f5556e311439260efae33cb1 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::FI9821W_Y2k.3pm +045ad985cd3b2b2bb5f01a8538a7f63f ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::Toshiba_IK_WB11A.3pm +adbc642989c1c0c103b91a7fa23f9919 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::mjpgStreamer.3pm +89faa73932fdd01f7198cfd92c4ad648 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel.3pm +d082127c64e7f4b30027ffd3dcbb97cb ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel::Inet.3pm +f0f88cbbb072ebf458d250f8a0b97af3 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder.3pm +a0bf0f459ee34817d9f9e53c4ef4650d ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::AxisV2.3pm +f4054d303a1bded762fe5711d79f8603 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::FI8608W_Y2k.3pm +919be3c156fd9a717d17d7d93cbb5e31 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel::Unix.3pm +691bfa214148229983f2c0d4b0199a0e ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Control::PanasonicIP.3pm +955f0fbf0a9d0669403fc46aa6c058c2 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Connection.3pm +c9304094e08d5d26e250d9467d43fdfc ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Config.3pm +143d07de53991de381c3987632d2a7e7 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel::Handle.3pm +2786c52c66a5ffeaa691841b22399496 ./distros/ubuntu1204/tmp/usr/share/man/man3/ZoneMinder::Trigger::Channel::Spawning.3pm +4b3afb84b2b71ef56df09997a350bd04 ./distros/ubuntu1204/tmp/usr/share/zoneminder/graphics/spinner.gif +e07c0775523271d629035dc8921dffc7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/graphics/favicon.ico +a840cd88b33f95a014cd654e0a615fd9 ./distros/ubuntu1204/tmp/usr/share/zoneminder/graphics/transparent.gif +718d8596a14d123d83afb0d5d6d6fd96 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/includes/init.php +cf2a637c699c32648c715d2faec7c4de ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/includes/config.php +9355288fed99c00c68f8623a3e73280e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/includes/functions.php +96a21cecd35ed5d1b732bfe74b1535ef ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/views/actions.php +83f5492302df18de8c7090a9fa8ac3e7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/views/notfound.png +f487b23a0841587841fd3dd34306d677 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/views/console.php +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/views/none.php +33d9276165e48e85f9b76d96ceb72c43 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/xml/skin.php +67bdd7f59ebc311b9cd8954d57f68c2d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/css/skin.css +0814d7addb49c87b8cc29eaff5c8effc ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/includes/init.php +2e1176dc3923dd9a44b19754139a1555 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/includes/control_functions.php +3f1549ab15e953d0e1eb5ea978677e8d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/includes/config.php +5c15d51173b096e5597c329511ce7d74 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/includes/functions.php +d5b4372487f53fadf1da7397ae10c77b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/frame.php +224db60a7b9d89678e3ca4a5de5803fb ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/filter.php +fcf239e684be46104251247cfc51265f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/login.php +63c88c56fe6c4104f811847f70fe7b6d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/watch.php +d52ac90fc23bfc97a3b9afe117c66642 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/event.php +5a61e2227587163542bebb4dfb77fe1f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/css/console.css +6d8509c58a57938eedadb498c9fd9961 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/error.php +e5c59543e4dce3d2719a2d9a8b52fa9c ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/state.php +c121ca1f9a8c4b693b3dcb4bd63d8e7e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/montage.php +1ad2154c2ab8d4e651087584ff533359 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/events.php +6ee5d2b987944284e0fd52e158d70c52 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/console.php +97f6771e6e530e0323c8a7455d4c087b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/devices.php +e9202a011a59bcb4f4e49a9811f56b03 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/eventdetails.php +4707ce2043a6964c6b0886f8404b37da ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/function.php +b42a65ca6f80ffe2ef69b1bf6d0dfd05 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/views/video.php +1ee43243aff2957f555b2025fe121ddb ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/mobile/skin.php +b08bbad185d4f141f4e16a32961f7e10 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/point-o.gif +3aea4c08fe3d0882bbb50d6a880b9d3e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/center.gif +10481c373da9f2e33955f5f684701e35 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-ur.gif +4253a17d69f9c9f105864b57ef1da4ee ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-l-u.gif +2357c0f1dec549fb5866341acf2f8e64 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-dl.gif +b36b743446eb998574343b265fc2a327 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-dr.gif +de6d2a2b0bd54f72d5c8bde9fddfc56f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-ul.gif +93f79d7c400d1988e58791d692050380 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/point-g.gif +6a948184e447f61a38d54609194eb647 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-l-d.gif +e252c31fdb0b3a65a082069b37042a0f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/seq-u.gif +330f0709c7b846ed5b3e990a6b0b6839 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-u.gif +0c2b9346b65233183cca8dbaa6ee1db2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-s-d.gif +dad7467542959f7e571f12d0a4988c98 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-r.gif +2c0f5bb849832ea968cffc648d45381c ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-d.gif +2e743de572b45088c05f0471f63fb710 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/point-r.gif +98212c6b29fcd9a09e6d16607fe65909 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/seq-d.gif +269dca955356f221c9ea271f3e259763 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-l.gif +4b755122db75084dd39297fbc1822f27 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/graphics/arrow-s-u.gif +a65a3d23000bf34a8257cf56add8e9d4 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/control.css +10fb7830c2e3a07c7b090bbb224f89b7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/skin.css +b4659211b34992bc81bee822615181db ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/export.css +701f84f1ab430890e539cf373ed4292b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/frames.css +606388c643910afd47e6a53f591cc426 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/montage_freeform.css +3a91d2b400f3d27667a01a816f0f0a44 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/control.css +dc75d27b0aedaebc6364a226e1fac661 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/filter.css +25cb6e4f3459dbf8efb2307c3c8499f5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/timeline.css.php +668d0f83a81f352d9ab24202f66aaa28 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/controlcaps.css +b91fa88951c1033191f6a22bc485f907 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/event.css +e91fda984fe2ef3d8de2dbf57b5c7747 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/events.css +63c979e75fcdd523106982a6e5a2cb64 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/montage_3wide50enlarge.css +c627ab2a4a7567ca1b688a80343bcd1d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/groups.css +675d0499f9dc3fa5fdede504dfbb7ccc ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/console.css +27ceca5314be52f316ba52a0d94556c2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/video.css +7665779719b3f99ebaf1acfd42996ac0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/timeline.css +f972ae29776f4730b510502f44f03053 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/frame.css +352483a4610fdb2b44697b5a52c690c9 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/montage_4wide.css +902ce9db4ec62764557caaf4f44a0d74 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/devices.css +e95e93705b1af2c7005f54a8ebb23683 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/montage_2wide.css +4a039676d0d00483ed834ad1535209f6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/watch.css +a2154e46e8865c359caca5afcdf58a37 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/monitor.css +8d299e89fa8e9a088d1d9c747e8f7154 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/export.css +ef24eba3ca4d9e845858e47c3026e9c6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/stats.css +35d6f241d0377b3d6e69f3584d3cb091 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/montage_3wide.css +f6634ac163a6628078c5c54ef2d44011 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/zone.css +068f1341939d83560694256b4798f2fb ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/options.css +54d0b4ce5f948e22fc05f8fbab171450 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/montage.css +6af44563df9975a6fb1e23d64421f486 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/classic/views/log.css +a65a3d23000bf34a8257cf56add8e9d4 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/control.css +2c1af3dbfc506bda7654f694cab293f6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/skin.css +b4659211b34992bc81bee822615181db ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/export.css +701f84f1ab430890e539cf373ed4292b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/frames.css +606388c643910afd47e6a53f591cc426 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/montage_freeform.css +a9072a66ee838729986b57c23416c8c6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/control.css +dc75d27b0aedaebc6364a226e1fac661 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/filter.css +25cb6e4f3459dbf8efb2307c3c8499f5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/timeline.css.php +668d0f83a81f352d9ab24202f66aaa28 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/controlcaps.css +7467b045f5b4e3a8cf2b42a47c3ab17d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/event.css +e91fda984fe2ef3d8de2dbf57b5c7747 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/events.css +63c979e75fcdd523106982a6e5a2cb64 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/montage_3wide50enlarge.css +c627ab2a4a7567ca1b688a80343bcd1d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/groups.css +d30679be000fa1b224f90fa082b19525 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/console.css +27ceca5314be52f316ba52a0d94556c2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/video.css +7665779719b3f99ebaf1acfd42996ac0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/timeline.css +f972ae29776f4730b510502f44f03053 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/frame.css +352483a4610fdb2b44697b5a52c690c9 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/montage_4wide.css +902ce9db4ec62764557caaf4f44a0d74 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/devices.css +e95e93705b1af2c7005f54a8ebb23683 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/montage_2wide.css +07a4cc55064ca258bebca6291846e00d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/watch.css +a2154e46e8865c359caca5afcdf58a37 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/monitor.css +8d299e89fa8e9a088d1d9c747e8f7154 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/export.css +ef24eba3ca4d9e845858e47c3026e9c6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/stats.css +35d6f241d0377b3d6e69f3584d3cb091 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/montage_3wide.css +f6634ac163a6628078c5c54ef2d44011 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/zone.css +068f1341939d83560694256b4798f2fb ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/options.css +54d0b4ce5f948e22fc05f8fbab171450 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/montage.css +6af44563df9975a6fb1e23d64421f486 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/css/flat/views/log.css +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/includes/init.php +7c60f2ccaa5b4473b5f9a942c5fea373 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/includes/timeline_functions.php +b6787b20659ab4ae5b06cb9f9900330d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/includes/control_functions.php +5248a1135175c05b1860dac97cca5c0f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/includes/config.php +eff1e8ea2a5418ed47ce69386b4a3e61 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/includes/export_functions.php +1b3a274b77c824b4506765106205f598 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/includes/functions.php +4d1463e6bc5ed133ede23e6372bcbdbf ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/controlcaps.php +1b57a2fecd32647215f68998bffba25a ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/controlpreset.php +d2032ed0e519c07e9d49b5c1cf9e247d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/monitor.php +c614ed7ac478bf5c9ef863900d89ea66 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/frame.php +21495b9af3361009cb8e77f0fec4a996 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/filter.php +1d675229155ceaa8982d2fc47d47d5f6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/options.php +8d0be05a8725ed889b056ab3d2acb505 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/frames.php +4ca1ad1cf9c24ab566ff570a8305306a ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/status.php +b571e7b897a14ba6c0af756371fcd197 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/login.php +a15d4dcf6624f09cdfce31e48e2a0b42 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/Makefile.am +c942ee3fa4859956057ca8a17be36989 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/eventdetail.php +9dcd343147a4b8215917b8eaf9441ba8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/watch.php +35922ff1e4668805878c6343db3d2b18 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/optionhelp.php +3d10f253482dd12a0aaab55ce50f061e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/event.php +16d0a8a023a63797d1ea004e8ece32c6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/user.php +548571006c1c33eeaec9d288b7d21515 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/postlogin.php +fd250dfd1edcc92d496d00b6e2963c48 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/cycle.php +0a7f4b83bbca22a5061f3f8b3771b3d2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/donate.php +276b51cb4307b90a5cc3c1c44f86b005 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/version.php +ec4c3a85ce7b717945430d5379e5f5ff ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/device.php +379433cd368bd32608864eb304b02b64 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/groups.php +93a837f7db6bf5a045d3395e6c179718 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/error.php +d358cffe766ff93aafadc9f869c7a07e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/state.php +f675151b8785b307bf2c61efc3e2fa04 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/montage.php +f9c5481d113f67d002883034dddf385a ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/blank.php +5139dfbe378e17b3178b4959b9bf20f7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/events.php +746ae2ce61073d614242cb3d6c082bce ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/settings.php +1d7491908b75a297519e740c5784e0f1 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/group.php +c3055c24489a3c952e31e105a711545e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/controlcap.php +abb35b5a54dda62386d3aa5abf9720f4 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/control.php +ff693078fbc15e321062d69c302c6aac ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/zones.php +3d9e4bcae9ec10838960e96cdc369fd7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/filtersave.php +9e4952365cf18248c57cc36ae304498b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/console.php +d95c44748df26ca2bec7d4afb079782d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/zone.php +b1e9b91a8618af638f3355002a126562 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/monitorprobe.php +189b2cb541386af6138ec96b96538026 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/devices.php +f85cbc69e7d95b4119311c726d9f672f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/monitorpreset.php +16064caa25b6c51360e10ee91210e8fe ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/state.js +c15861718da9974b057a4e6641759bad ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/group.js +de8db540180b86df8d0fc4724df3f12b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/user.js +59920201dfac5f9a4431f4f3a4e0364b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/version.js +017aafda61cee8bdf65f36eedcd91644 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/console.js +0dd3c64eb2002ffda9f7cb5a57d45457 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/donate.js +7a9e7f334a1c84d56850ac3b79cd5170 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/log.js +c32db9eb82496882262fbe62e228a396 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/Makefile.am +4628f8f6e13462b957e9ab7c267ded80 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/events.js.php +832e7495163a6ef5c842475f7d44962f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/video.js.php +3c5c231b378597e9696c2164dad2668b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/montage.js +63b5fb3cd5a7d7b5479804fac1a02ed8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/options.js.php +3a8b64c9424f1a9ce02973021f3f1014 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/login.js +437d1084299d1163d36bd83355178a5b ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/events.js +f95f51f93a153403f28bec13da9f079e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/monitorpreset.js +c125327fce8e049519bb826cce5417f3 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/watch.js +56c208506cecd6a242e38d9c347558ba ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/state.js.php +59f48f29901bf0b1d2dcdbd0287a7243 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/video.js +6656671bba812476fb7964edab8ed7d5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/groups.js +8c5c9cc7e4961559e345220c9653aec8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/version.js.php +f9840e08f9ca3c9966315657cfdf47f5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/monitorprobe.js +03cd81247cc90a19db3cba077fd00b6e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/control.js +0f09e33012eee04a62ebdb2b05c7b03a ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/cycle.js.php +8d99ac07dfdbf41cd357b0a3d2ee1f32 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/postlogin.js.php +925a1cf53b3191680541872b4c38b576 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/cycle.js +d80aeb3b09c3bb4db635aaab6a34dd69 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/timeline.js.php +2c9f71673c49866ef4dd2bae89658d72 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/filter.js.php +1ef503037a66111e5bde441ba8ce20cd ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/event.js +32ef30d8527086aa9ee63b73ac5df86d ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/console.js.php +51f2f8a12c688c3c0e70f04929295c99 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/watch.js.php +cade1c87dd48210dcc61fbc2541e76a5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/filter.js +2da7d63e3e1a8b4a7ddc42506e714873 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/controlpreset.js.php +9dbbc338d288c7053ca08ade4be2a08e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/event.js.php +18f6033a5de91a16561626debedbd04f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/zone.js.php +f7ed288a9c1556499ff689b277091074 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/export.js +c66feb02c549f81b7910dd31c23964b1 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/monitor.js.php +0062d1966577b1a04e9b430adf20e441 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/controlpreset.js +99f2883fd66369e397c28730093e0039 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/montage.js.php +f95d23b81ff41694e0f61ba33f116eff ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/monitor.js +d446cdfa58d7a052b099e65e1417296e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/donate.js.php +9122fd4adc69210dd059f703878da027 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/timeline.js +2cdc936339c10744b45be5560eae9488 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/devices.js +98c7d638b7e90ddae6aabc103a3a197a ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/zone.js +6a329d8f40a74659b1e1fc10763c6f6e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/js/export.js.php +f6db2543d3af0dd4f80a777a4dfc0c69 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/log.php +f142b8cf2d848d8277d605cc0bb5c7f0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/none.php +b5b778dd3c8bac8c57e4cefea824eebe ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/export.php +07233ba0c8343b441c0532979c56a411 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/function.php +e77abc6802a1da3e4fd62e646a023f46 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/stats.php +bcd5568ad30fbf43c37b1fb067f6fcba ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/video.php +1551da8d4beb70e03872bf2aadecafa8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/bandwidth.php +e4d9576ea7fc0d077e8f676ca3214510 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/logout.php +2bf800f3105556313be01bd3b4c42aca ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/views/timeline.php +1b5888dd1130c2624e3a89ec6914641e ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/skin.php +1d4fc58a4fb06f37e330419e1de5ccc5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/js/skin.js.php +546dd00ad3f7f286d4d47e7ba1d3606f ./distros/ubuntu1204/tmp/usr/share/zoneminder/skins/classic/js/skin.js +8218a18edccf1204d7f6b5be75fd0d78 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/es_ar.php +589fbc097bf0eeaf0470127f7760ec1e ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/pt_br.php +37850e5a2c5496828512b7e752d59ee8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/dk_dk.php +b194629ea544221b206616c18a0c148a ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/hu_hu.php +b8015b85b9c032dcb061761731b084b8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/fr_fr.php +b5c7fe7fa19ab9532b4a30723e099881 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/pl_pl.php +5ddb50407c87162ef3bd88cc88a69de1 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/it_it.php +ff9185a540eda7598ce4607045cbfb95 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/se_se.php +0d46d10e46dbbfcdfa3be6ef5ffd0eeb ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/nl_nl.php +bc88aced50114c408e703089ed2c58a1 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/ru_ru.php +6ee18a4395de40fb7e74876ca8725768 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/ro_ro.php +2ce9bebd55d946cf4ea9d0776df0cc7d ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/en_us.php +321a20460bb594abb17b3b925f6c98f2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/cn_zh.php +c4555f9101c6d257b03cb409fae4529d ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/big5_big5.php +cb3bc7a87a69793b4b7bf90f1737b6b4 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/et_ee.php +fc2bf1773c63c42f4da071ce417a7aec ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/ja_jp.php +86ed6db147aeb77e12b76f47bf3364b5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/cs_cz.php +b6e51396273585f0b1155ea66010796c ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/en_gb.php +c53b9bede29062c0e76271c91367a04a ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/he_il.php +c777020c596cee7ceddc1646f19a3080 ./distros/ubuntu1204/tmp/usr/share/zoneminder/lang/de_de.php +f3a96b4e82b5e7d722d860b0371e92e2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/css/reset.css +d3f02477779fa8a2cddd1c1605583b96 ./distros/ubuntu1204/tmp/usr/share/zoneminder/css/overlay.css +a21186623f461fbdf94a1000fb081ee0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/css/spinner.css +09653a48b2b311109f26d5859d2bb5d6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/actions.php +ea76e136916631c564343e24df07de2b ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/logger.php +8ae8d5b773c4cc9cda879f57aee04dfe ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/control_functions.php +742ad5a8e5eef1b9ce20f1beb5905aed ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/lang.php +bc4b84a1025b7fa5a1f9aefb388ac925 ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/config.php +63bdb662ad9c56e1f39a856d67ae1432 ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/database.php +ee485a94a311463df75d570bf23dce02 ./distros/ubuntu1204/tmp/usr/share/zoneminder/includes/functions.php +d9b8cc5ecc4a1f26e057df31675b55cd ./distros/ubuntu1204/tmp/usr/share/zoneminder/views/file.php +90e3a0c17c6d5ac8b0b30e749c89a4ce ./distros/ubuntu1204/tmp/usr/share/zoneminder/views/image.php +6dee62a0963ecdc4b7ccb353b7ae7424 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.27.0.sql +bd8b4735fee0bbb064a140819347df6d ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.0.1.sql +632200d5a6238e256e7cf80de95156dd ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.19.2.sql +821f1c1d6c52f99dd47ac14d61fa5640 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.22.2.sql +1c9100b2e0c6da71bc3492d2d9ae3dfa ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_create.sql +8b07b11c7cad1914c3ea833b8ed5817b ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.24.3.sql +3fca704937207aa222e77210aa0c25e0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.19.5.sql +97edc0c5579da47e346d42df1e545eb0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.20.0.sql +92d0e29600b0f23c3cabdc02ce6259e2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.11.sql +08d098374092ba16eb3459a1aa2a8229 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.24.4.sql +54f6c2d009ad16095cad89d9855c91c2 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.27.99.0.sql +4c5855feeaaf945c29c43292e5c74197 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.26.3.sql +c1594ffeff663ea370dbbaeb272e10db ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.22.1.sql +e2dbebece1d49bea27f756895a663f86 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.16.sql +2b89f4c950e227e9313cf7418727f3de ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.26.0.sql +7c452e51249b26c7d6bc2651bd008680 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.21.2.sql +92d5871c239ea24a2bdd738e0776a750 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.28.0.sql +f96d352e85bbffb74ae0c6b354c76cac ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.24.2.sql +85c2f951462a9ca699af571910b2f5e7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.21.0.sql +6f75164dc4ab8e6189ccc8a2f3a006e4 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.17.2.sql +8601c639ef779f73b37e00df75329bf0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.13.sql +4466a07866e466e4a69a6986b2f1d0cb ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.23.1.sql +6314f20b3f02056792caf93944965fd8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.23.0.sql +452cced335ec34b78b4d091b7901ffd5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.21.1.sql +313214000c45d7e66bc09560985913bc ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.29.0.sql +4ec7ea6a41ced9a48b5922f359a56b6b ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.19.4.sql +c75ceef3b6954b8a8047010bea8d6d4f ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.7.sql +5d46d42dd9f62cdaedd5190f05b0a618 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.24.0.sql +8388ea9b05577c775206dcfd5df72856 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.18.0.sql +bee064f205c14f5c20501e739ce80a1e ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.8.sql +990aade37fd26b6fa4ffdd3a13c48b24 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.19.1.sql +34d526653752e2ec9722b21a007d79e8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.22.3.sql +e35625686e01f368b3f8f87359aaac7c ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.15.sql +9c82b2ea73453054f9a69c787ec3596b ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.22.0.sql +2f7281f19a02402c8a2b603143bc203d ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.12.sql +07f00f03f78eca783cfc115fcf1168aa ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.19.3.sql +83decad8946e51529e7f7bbc13c743cf ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.24.1.sql +795313d24e9c26b3557feb386df603c6 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.26.1.sql +be7fe21854b261df5b6b28d92ce0dad4 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.19.0.sql +2740f9a92352e7d91be18a67115be71d ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.20.1.sql +ee60615a820f97e43ebab88f173b9921 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.26.5.sql +5880f07d8c485d28a002e45a254c47a5 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.17.1.sql +b7468afae4c69e654a4c61feec101730 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.18.1.sql +9b4716630546a41cdfcd08e56faf647b ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.28.1.sql +9c0fc358cdc873030b0367d005f6b765 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.21.4.sql +fd4e7c581673c85f9734bfdf45337b99 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.23.2.sql +54464055410fdae4f296c00c963bdd4c ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.23.3.sql +dd2109c3b45b0243d92e21031b7a55e0 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.9.sql +6c09c69e9b66b83a0b8ef8f37f985ebc ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.21.3.sql +5983fcbe9f352433a8cdba6dadea4d5a ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-0.9.10.sql +e0651ab19ce94e12f2a05481d4847b52 ./distros/ubuntu1204/tmp/usr/share/zoneminder/db/zm_update-1.26.2.sql +06031ab17a0397dcc824cf7e56610771 ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/status.php +c518c03f8783cfb822d3fab322c66bd7 ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/event.php +433c99927f1961f159562627f3c79800 ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/alarm.php +c65641a2edd9bac342684936c391d444 ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/control.php +bcf111c3a38a3a94d5600f33d89416eb ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/zone.php +74836750b8f89f54054ffb31cd67f135 ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/log.php +bf81f42111e73d054802f0aa72027c8e ./distros/ubuntu1204/tmp/usr/share/zoneminder/ajax/stream.php +d108695d5815a3fd528df2403f3c50cd ./distros/ubuntu1204/tmp/usr/share/zoneminder/index.php +6d1a5880671e67c0d6384a9d33143309 ./distros/ubuntu1204/tmp/usr/share/zoneminder/js/logger.js +1eb33d67d6069ec8723920e59e602d31 ./distros/ubuntu1204/tmp/usr/share/zoneminder/js/overlay.js +2f4357273ede74623cd7f3dbc210da7f ./distros/ubuntu1204/tmp/usr/share/zoneminder/js/mootools.ext.js +861459718684608408e7427d85ad732d ./distros/ubuntu1204/tmp/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-nc.js +d514b6d7bbe53cd04ec0558821146e1f ./distros/ubuntu1204/tmp/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-yc.js +0c240ed4306c44e2cb6206b11919afa8 ./distros/ubuntu1204/tmp/usr/share/zoneminder/tools/mootools/mootools-core-1.3.2-yc.js +0b90452e783f31a382c06155a8a3605a ./distros/ubuntu1204/tmp/usr/share/zoneminder/tools/mootools/mootools-more-1.3.2.1-nc.js +567590c0a9aa08352375bc19ca34c449 ./distros/ubuntu1204/tmp/usr/share/polkit-1/actions/com.zoneminder.systemctl.policy +176294d55f322804317befe0c8129348 ./distros/ubuntu1204/tmp/usr/share/polkit-1/rules.d/com.zoneminder.systemctl.rules +9e5fe8a26925a0fa5412fcec401ee3c7 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Memory/Mapped.pm +a3b5d80f8e270b04341401a537d81e96 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Memory/Shared.pm +7271e9b3df2a956ea23868c972699c38 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Base.pm +855f56d67de3ad1fcdce0e629dc59686 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Logger.pm +6fb757ae2c544938c8a0dc8ba578fa9a ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/General.pm +5126afe929867a4d6490ebcb48a49052 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Memory.pm +1983b2a432d9b4c23d27bda668dfcf8d ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control.pm +39b83871c88d452d68cea948fe83b2e4 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Config.pm +4c5b2dd56f5fc8604d2bee7d9896b1d5 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/mjpgStreamer.pm +98bd34b8614625cb0fa0f14df0c4b122 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/M8640.pm +3b908c8286411c2ee2743329b516342d ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/PelcoP.pm +37b2053f17ecf97a398ae5b49dcb7e43 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/LoftekSentinel.pm +dbc009686162f84bd02879355910c1ee ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/Wanscam.pm +2f7bd90864a1a25c9229026f9bac3d41 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/FI8620_Y2k.pm +d66a2faf7390a6668e32a799658e8ae5 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/PanasonicIP.pm +803dc34fb23f239e2bb782b146db18fa ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/FI9821W_Y2k.pm +8fd0894552e6c8464be5bb34533cd4b6 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/FI8608W_Y2k.pm +f0c4a4c08f53620a30909c7816f6e3a7 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/Visca.pm +63a9924dc387192b53f54cbddbd53f60 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/3S.pm +5b33d25c49b10d08dc1e3ecde3c19337 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/AxisV2.pm +daf155e8390d082e1fbad7b3a4375bc9 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/TVIP862.pm +71c881b550c010cbdcbcea690f75584f ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/SkyIPCam7xx.pm +568b527e03f2ebcc99e93085d8d8eae5 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/Toshiba_IK_WB11A.pm +b28878a0cd796fad48c53b1643ed542a ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/PelcoD.pm +4b02c4c5a2b7593eedcddf5d5a8f2cac ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/Ncs370.pm +bc7d0ff4b13d61363d5dbdd7eb0a7a28 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Control/FI8908W.pm +543fde408bbddc4a584a358376105260 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/ConfigData.pm +bd0dbcf22d4ed15c64698d55d3f5948e ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/ConfigAdmin.pm +8333fef7d94f0fce5e82a671cb83c4ce ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Database.pm +e03d5a957ae0f04839cc8aed13c6e364 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Connection.pm +87445e5e683c1ad70f3db7195aa8913a ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Connection/Example.pm +10b9c55ecde4f59076c8ba20d9855300 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel.pm +19e7cbafa5171dcf849bd00b0d594354 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel/Serial.pm +eda3b7449611e8ebdcf30f97d87b2848 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel/File.pm +de33a8f665c7db9be8cc6f4cdf5ec962 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel/Inet.pm +47cc5f725d6fcc667e6363919e57658f ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel/Unix.pm +b33b640620e68290c44ec8fbf989a313 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel/Spawning.pm +63c6d6667ce2ce36f66bbdc235f73c76 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder/Trigger/Channel/Handle.pm +c9edfd935fb6133f806a91a216f341a7 ./distros/ubuntu1204/tmp/usr/share/perl5/ZoneMinder.pm +59f5fab34b7803949cbe2a4e6c731f2d ./distros/ubuntu1204/tmp/usr/lib/cgi-bin/zms +59f5fab34b7803949cbe2a4e6c731f2d ./distros/ubuntu1204/tmp/usr/lib/cgi-bin/nph-zms +7855bc3fa3fc04a8724a971424c33a9b ./distros/ubuntu1204/tmp/usr/bin/zmaudit.pl +2066e1941df243cdc78b75d121d37298 ./distros/ubuntu1204/tmp/usr/bin/zmcamtool.pl +04f3955088b774686a78ce9c3ed6627d ./distros/ubuntu1204/tmp/usr/bin/zmsystemctl.pl +7cc423cfe906b4228e99569b5b92db5f ./distros/ubuntu1204/tmp/usr/bin/zmvideo.pl +d6aca7bf1f3749be87487c88d435fb11 ./distros/ubuntu1204/tmp/usr/bin/zmf +0f8bd6b5132047a4fdfa24eed51ad6c0 ./distros/ubuntu1204/tmp/usr/bin/zmcontrol.pl +e94fb224a65c3154db655bd0bc6e3978 ./distros/ubuntu1204/tmp/usr/bin/zmwatch.pl +9afe3968e31524fdf0e7dcc968612fa6 ./distros/ubuntu1204/tmp/usr/bin/zmc +1ff341f2b46c3c3fd56abc77e2e31a50 ./distros/ubuntu1204/tmp/usr/bin/zmdc.pl +9c1f73f8208b4debf1935d1d8941160c ./distros/ubuntu1204/tmp/usr/bin/zmtrack.pl +9b4a8596632157e138d0bd320663abb5 ./distros/ubuntu1204/tmp/usr/bin/zmstreamer +5fc21ef11e22a35732c93366f9c2cda8 ./distros/ubuntu1204/tmp/usr/bin/zmpkg.pl +67cd253eb83ea78e317641b884f558ee ./distros/ubuntu1204/tmp/usr/bin/zmupdate.pl +d47be574da2a9e578da54e69dd0ace9d ./distros/ubuntu1204/tmp/usr/bin/zma +f45d18796848db83fe6c4a02e34bf8b5 ./distros/ubuntu1204/tmp/usr/bin/zmtrigger.pl +fea0e8713ff60829011f025c0a0e9a25 ./distros/ubuntu1204/tmp/usr/bin/zmx10.pl +d91bacdd1a349b65bb90c30a81b974a8 ./distros/ubuntu1204/tmp/usr/bin/zmu +653ef81a4e89bc73eacddc45eeccdfa0 ./distros/ubuntu1204/tmp/usr/bin/zmfilter.pl +2d0b66c536ed365abc5986c6baa59f2d ./distros/ubuntu1204/tmp/etc/zm/zm.conf +1e144b99b784565606524038db44a583 ./distros/ubuntu1204/rules +327c45c200cd66e796ae059c709c0adb ./distros/ubuntu1204/watch +62bcc6a3d313ff213dc27c14326dd61e ./distros/ubuntu1204/links +e53d213d2368c924bbef374b47dc83e3 ./distros/ubuntu1204/zoneminder.postrm.debhelper +38ff8daab6eeb53c13d8ebdcec3e526c ./distros/ubuntu1204/autoreconf.after +38f30bec7001889b183ccdee141a46d1 ./distros/ubuntu1204/zoneminder.postinst.debhelper +81b4972b39355805b5cc19eec9af6150 ./distros/ubuntu1204/autoreconf.before +20eb5d0df8842df2df7e75d60330d3b9 ./distros/ubuntu1204/apache.conf +8cdf9309850bbbfdb6b8bf44089253a8 ./distros/ubuntu1204/zoneminder.substvars +e7266ba90319421311eae24c9009c9d2 ./distros/ubuntu1204/preinst +3295df67ccd495efd40c4070bc7db9fe ./distros/ubuntu1204/install +480674678e8e3cbbf1bebb2dbbdb7e3c ./distros/ubuntu1204/zoneminder-dbg.debhelper.log +f7aae0b0a71c8ff213b12572eee88d38 ./distros/ubuntu1204/zoneminder-dbg.substvars +ac036608c5c402f92926505d0f0ab0e4 ./distros/ubuntu1204/docs +d41d8cd98f00b204e9800998ecf8427e ./distros/ubuntu1204/patches/series +c97d936f197ff61af4cf1ff4411c1b87 ./distros/ubuntu1204/postrm +0a61e7c13cf765541dc9f971aaca3e9f ./distros/ubuntu1204/postinst +906c9d0f3643fe326f7cd8a7d7e05a96 ./distros/ubuntu1204/changelog +3be3712deda0e232f871d2441b67e3ec ./distros/ubuntu1204/zoneminder.prerm.debhelper +868d38d0ab2e6bf2bf91c75d94135fdb ./distros/redhat/zoneminder.el6.spec +0af0617a10e90f4b759594bec3818817 ./distros/redhat/zoneminder.el7.logrotate.in +afe9cd5e49a8b701ea247f45c3906cc0 ./distros/redhat/archive/zoneminder.el6.spec +41090db57553ecffce81645fc0c20faf ./distros/redhat/archive/zm-init +d758e9c7bc19cf3763159cfaf55e986a ./distros/redhat/archive/zoneminder-1.26.0-defaults.patch +dff3db013c22afeb7d6c9dc4eb105f43 ./distros/redhat/archive/zoneminder-1.28.0-defaults.patch +a21e15a67924471a631c004665711617 ./distros/redhat/archive/zoneminder-1.26.0-dbinstall.patch +9a739e4bfcbb66cdd7c7dec4c217470c ./distros/redhat/archive/zoneminder-runlevel.patch +0bdaf493efaadb4631c2f0fda6ddd120 ./distros/redhat/zoneminder.el7.conf.in +e33931b210cf292a6f1413ffc8d51a37 ./distros/redhat/local_zoneminder.te +ae35849ac3c5eb6203b2f00b646b4bab ./distros/redhat/zoneminder.el6.conf.in +80077b5c533b726aa14df2e99a478124 ./distros/redhat/zoneminder.sysvinit.in +53e73214dc9c49b47b3a338dfed941df ./distros/redhat/README.CentOS +843b68d3e61f38129922c838ae52259f ./distros/redhat/redalert.wav +a972653e3f63c7df60b78e6865102171 ./distros/redhat/jscalendar.sh +6c244e662fa9428ecba9fb463ac146a4 ./distros/redhat/zoneminder.tmpfiles.in +85b0013c94b408423210055c79f8b310 ./distros/redhat/zoneminder.service.in +541b54f11c12717b3263a14377195c61 ./distros/redhat/README.Centos7 +24287b30a09eb5d4413967a432d58e8f ./distros/redhat/zoneminder.el7.spec +2ba74ff367506a22e235d1b6c2f15899 ./distros/redhat/cambozola.sh +7b40e96098ee3df7182aa61c53fa23dd ./distros/redhat/zoneminder.el6.logrotate.in +bfe4c608d67b7df8e347e3453385edea ./distros/redhat/CMakeLists.txt +6e5fe73723cd40a28adc5b7b5650c8d1 ./install-sh +c3abfee6e349a06d0b14cd4b5a9de43e ./Dockerfile +77f4af03c9c1c094e567c099869dc159 ./BUGS +ad4e36de78531fcba1182e3c35cc1bef ./scripts/zmtrack.pl.in +e53f1fdad0ac6c5e181fca5c72ae8a01 ./scripts/zmwatch.pl.in +28854e2cee4b109ba2c7d46393d8584e ./scripts/zmupdate.pl.in +4b2bdbf93f4e33ab3ea039a6e6a4a671 ./scripts/Makefile.am +1a1be0fef8fde0fe0a2570d38c0ddf31 ./scripts/zmdbrestore.in +50edf3365462074be942ae7071665321 ./scripts/zmlogrotate.conf.in +f96141faf48ea2e92c001ada49c4d72c ./scripts/zmpkg.pl.in +13147590bfc6abc6b0db5cd0bd153185 ./scripts/zmdbbackup.in +9bec7be0102dffebc0797e74a8104ba0 ./scripts/ZoneMinder/t/ZoneMinder.t +2a8c4a4c924910d9f25b473846c1d376 ./scripts/ZoneMinder/lib/ZoneMinder/Memory/Mapped.pm +f1bc93190f0e0e101cc18c445c051625 ./scripts/ZoneMinder/lib/ZoneMinder/Memory/Shared.pm +cbdc04a1e76f8f53b6489fa7646a4432 ./scripts/ZoneMinder/lib/ZoneMinder/Logger.pm +c71d128ecfa2c2888bcedbd22bf7db6c ./scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +29129dcae091093a8f705b662de03b81 ./scripts/ZoneMinder/lib/ZoneMinder/General.pm +9a749f73fe6eab57983d064527dccf7a ./scripts/ZoneMinder/lib/ZoneMinder/Base.pm.in +e7fac2ef32d10538b559c5cfc2ab246f ./scripts/ZoneMinder/lib/ZoneMinder/Control.pm +ca2106f3fbcb6cd34c7e15d00b269eb7 ./scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in +b0baa717a7239653be568d1ca73a55e6 ./scripts/ZoneMinder/lib/ZoneMinder/Control/mjpgStreamer.pm +f6ef21aea163be37e3d72b5ec6dec17c ./scripts/ZoneMinder/lib/ZoneMinder/Control/M8640.pm +ee07b782ac2e790d82b9bc00540835bf ./scripts/ZoneMinder/lib/ZoneMinder/Control/PelcoP.pm +37b2053f17ecf97a398ae5b49dcb7e43 ./scripts/ZoneMinder/lib/ZoneMinder/Control/LoftekSentinel.pm +0a793251749dadf86b5ee68381cdd2c2 ./scripts/ZoneMinder/lib/ZoneMinder/Control/Wanscam.pm +19a1ab5b89f9e8989a176bbf08070c58 ./scripts/ZoneMinder/lib/ZoneMinder/Control/FI8620_Y2k.pm +d66a2faf7390a6668e32a799658e8ae5 ./scripts/ZoneMinder/lib/ZoneMinder/Control/PanasonicIP.pm +3c95537f3b24911244cd8c166f5bdfb1 ./scripts/ZoneMinder/lib/ZoneMinder/Control/FI9821W_Y2k.pm +20968374f9be0aecad08fe746a765863 ./scripts/ZoneMinder/lib/ZoneMinder/Control/FI8608W_Y2k.pm +f0c4a4c08f53620a30909c7816f6e3a7 ./scripts/ZoneMinder/lib/ZoneMinder/Control/Visca.pm +9cc2e3fa06f47cbdd4dc9728f42073d3 ./scripts/ZoneMinder/lib/ZoneMinder/Control/3S.pm +5b33d25c49b10d08dc1e3ecde3c19337 ./scripts/ZoneMinder/lib/ZoneMinder/Control/AxisV2.pm +1d0ae84d7bd9e71611bea845f79f02c7 ./scripts/ZoneMinder/lib/ZoneMinder/Control/TVIP862.pm +71c881b550c010cbdcbcea690f75584f ./scripts/ZoneMinder/lib/ZoneMinder/Control/SkyIPCam7xx.pm +ae94627d4dfb52f4ec93885555c0803f ./scripts/ZoneMinder/lib/ZoneMinder/Control/onvif.pm +568b527e03f2ebcc99e93085d8d8eae5 ./scripts/ZoneMinder/lib/ZoneMinder/Control/Toshiba_IK_WB11A.pm +b28878a0cd796fad48c53b1643ed542a ./scripts/ZoneMinder/lib/ZoneMinder/Control/PelcoD.pm +4b02c4c5a2b7593eedcddf5d5a8f2cac ./scripts/ZoneMinder/lib/ZoneMinder/Control/Ncs370.pm +469f80662f3f9397fc19c127b3429db4 ./scripts/ZoneMinder/lib/ZoneMinder/Control/FI8908W.pm +b1bf6c33d26863627fd956de45830413 ./scripts/ZoneMinder/lib/ZoneMinder/Memory.pm.in +d26840e36049a6b20a86116835766814 ./scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm +fad29ee7bab98373c9f837bba390134a ./scripts/ZoneMinder/lib/ZoneMinder/Database.pm +f71b1c4fb3aaadd94fc3a8679028a7e5 ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Connection.pm +9266185080bea9c7562977e93aadf73f ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Connection/Example.pm +8cd1b8057a2e3e45abb21b483800bfb4 ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel.pm +a6d796f873159d059c802cdfad7cfc07 ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Serial.pm +75794d19dae22b8e0d93a1004478838c ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/File.pm +b55c3cde5afe9438c4b3930e86ef380c ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Inet.pm +122129f9ee1444e7ce1f37ef20a5532c ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Unix.pm +3a4cf147dc5c25f03f417cbc9f4781ec ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Spawning.pm +8e2868f171a9dd76d5ed9aea1caed667 ./scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Handle.pm +e84d25345d7953c4ae06467f69dc2746 ./scripts/ZoneMinder/lib/ZoneMinder.pm +301bad1381987f4e3df8a123b0ac6b97 ./scripts/ZoneMinder/META.yml +5e414f9e2d04fd9e561f4b22f45be9bb ./scripts/ZoneMinder/README +14696f83caef8d03572ec1297174bceb ./scripts/ZoneMinder/MANIFEST.SKIP +ab79b6887d4259c304af63886d8ee5f8 ./scripts/ZoneMinder/Makefile.PL +c579d069e60fa17c7be4b4e29928b7b8 ./scripts/ZoneMinder/MANIFEST +0d6f709fb50d1676264dc4c59fd6cd47 ./scripts/ZoneMinder/Changes +14696f83caef8d03572ec1297174bceb ./scripts/ZoneMinder/INSTALL.SKIP +4645148f50e7a6a362fb46b1f30ce719 ./scripts/ZoneMinder/CMakeLists.txt +606a1010a8ee3a0a6ca30750e6d59794 ./scripts/zmeventdump.in +8b6a51399993c0bbd9c8275262477f7f ./scripts/zmtrigger.pl.in +51041db75d07319afabc4fcc2aa427cb ./scripts/zmcontrol.pl.in +9f3dfc648bccd6ef7199f231345449d0 ./scripts/zmdc.pl.in +ee86caeaaef76821049e568458e32bd8 ./scripts/zmaudit.pl.in +325b3ac2be6211ca90e5f910f530adee ./scripts/zm.in +93c82ba32bdd115e347e7f77a73a178f ./scripts/zmfilter.pl.in +2cab977e394b76a9b6d61332b1b29136 ./scripts/zmsystemctl.pl.in +ca4ad5b2b9481a747e413e4bca6a63c9 ./scripts/zmx10.pl.in +362f1f10511b260cda2d0de75896dea0 ./scripts/zmvideo.pl.in +a77bb90cfd60d41fc5d65eb43476d00b ./scripts/zmcamtool.pl.in +00e7a29ce2f0e69277800d003340a93b ./scripts/CMakeLists.txt +3cd0e665129e6c077b1e27eed251222b ./misc/logrotate.conf.in +647924e9e43b3625fefb81a8a7f40003 ./misc/Makefile.am +ec8277d9a64fad2f72b943c308f4b444 ./misc/apache.conf.in +9af6648e5833d4716b11dc3347477fcc ./misc/com.zoneminder.systemctl.rules.in +27f74a16095e73b5d3b74f2e51f18f93 ./misc/zoneminder.service.in +8e1836db3c03bb425931083c04533bba ./misc/com.zoneminder.systemctl.policy.in +2b258626528c88f36b87941a2dbb7148 ./misc/syslog.conf.in +440ef71e03f2f23f6202b00f1ed3d8d3 ./misc/zoneminder-tmpfiles.conf.in +76a9a299d6b1651f8ab22583e32c8bd8 ./misc/CMakeLists.txt +6afe490bc9be80daa397584b6285076b ./doc-pak/BUGS +57c5a10f8c5cf3c4cb14a7d38c8dffd9 ./doc-pak/INSTALL +d8955699b1ce919d5e2bf4e17aece604 ./doc-pak/README +94d55d512a9ba36caa9b7df079bae19f ./doc-pak/COPYING +013b58c625d771db0aa2022ecca67248 ./doc-pak/TODO +6afe490bc9be80daa397584b6285076b ./doc-pak/ChangeLog +d7995c7953be1d6cae059965282ddd66 ./doc-pak/AUTHORS +6afe490bc9be80daa397584b6285076b ./doc-pak/NEWS +edc230d4920185e0e55261a7c9fc46b6 ./Makefile.am +9a742191002c86c9d98dbb9b57dc2102 ./cmakecacheimport.sh +403e221e89bb6e8c30d92d7c07834e22 ./aclocal.m4 +6277d71b2125f2bd6390226a906f0b0c ./config.sub +18ec93e7356bf3aeda1a11573c0ab6c5 ./connect +e9df6bc73d723fd85234484a63347c63 ./INSTALL +96bdd8d083a7aef85a6118ebf9d31500 ./.travis.yml +1ad54e190e8322176a47a48621ad0887 ./missing +12fcbf6b4aa8bd2674b6b5a81c924a72 ./m4/ac_check_sendfile.m4 +5ed2e65b5af5b32da467acf2d4b64416 ./utils/travis.pl +0dead2f5ad7f18c7b9abb0a77675369b ./utils/zm-alarm.pl +49e4b2997d5eca16a5bd731316b73539 ./utils/docker/apache-vhost +ae01b4dbfb6ad338b7bb055ae74ac93f ./utils/docker/README.md +a047db93a815d2b580ebd22b5ba24e32 ./utils/docker/start.sh +6fdeb5eca9580a25e9b90c7a0e7c3a06 ./utils/bump-version.pl +73f229f8c2990a7b8df025756c396982 ./utils/travis/bootstrap-zm.sh +2d3a1b647478082f8fd48f5f4f3817df ./utils/travis/install-deps.sh +a7729239da9aaf4d7f9af6d3cdedc4dc ./utils/travis/run-tests.sh +171fc75aa4c3a00d3bcaaf85f7d21cd7 ./utils/travis/build-zm.sh +4316f86eb875c7304171b72ea4df95dc ./utils/travis/install-ffmpeg.sh +6d906dad8419f6277ae2b76749dabdb0 ./utils/zmeditconfigdata.sh +f675151b8785b307bf2c61efc3e2fa04 ./:wq +e514237c1809cb0819a8f549864a4e5a ./version +94d55d512a9ba36caa9b7df079bae19f ./COPYING +0fb81517303511f05a01b14f41cec2cf ./config.guess +3c842df6701d694518f05a4accce2f1c ./web/api/lib/Cake/bootstrap.php +21d9c6649f6586d2ff2a36f6e0404805 ./web/api/lib/Cake/LICENSE.txt +e89340d684b13283b59b05fee057a79e ./web/api/lib/Cake/Test/test_app/Lib/Cache/Engine/TestAppCacheEngine.php +47c6e8338a0c59b01e6202e7857df29d ./web/api/lib/Cake/Test/test_app/Lib/Log/Engine/TestAppLog.php +8ba4fc8412f6b556c02f5767a9463233 ./web/api/lib/Cake/Test/test_app/Lib/Utility/TestUtilityClass.php +f90bfa60462960ec50aaa07fe63b0cbb ./web/api/lib/Cake/Test/test_app/Lib/Library.php +29e90e9d0ab1a9b7d433ebcd5902b44a ./web/api/lib/Cake/Test/test_app/Vendor/sample/configure_test_vendor_sample.php +c56cc7e33359d57ce83b138aec492caf ./web/api/lib/Cake/Test/test_app/Vendor/Test/MyTest.php +03260e772ca3e938b828001abea811a6 ./web/api/lib/Cake/Test/test_app/Vendor/Test/hello.php +624b64d8facc8de34c4433376dad377b ./web/api/lib/Cake/Test/test_app/Vendor/welcome.php +f61236ec67ffdd793adb8739b4bdb8ae ./web/api/lib/Cake/Test/test_app/Vendor/img/test_2.JPG +f61236ec67ffdd793adb8739b4bdb8ae ./web/api/lib/Cake/Test/test_app/Vendor/img/test.jpg +fa26f7a3b3c18d46ed10ea234eaecdac ./web/api/lib/Cake/Test/test_app/Vendor/css/test_asset.css +fce05435ffaedf0b749f66e341f338d5 ./web/api/lib/Cake/Test/test_app/Vendor/somename/some.name.php +cc1578e4b2fb743d38fb62f48197892a ./web/api/lib/Cake/Test/test_app/Error/TestAppsExceptionRenderer.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/tmp/empty +a0a97dce0e1f8f79d56cec7bb3075d3c ./web/api/lib/Cake/Test/test_app/Model/Behavior/PersisterTwoBehaviorBehavior.php +8394e7de4c22cf504408ef2771f039a3 ./web/api/lib/Cake/Test/test_app/Model/Behavior/PersisterOneBehaviorBehavior.php +c7bf474929dde9b092d096bdd060da4c ./web/api/lib/Cake/Test/test_app/Model/PersisterOne.php +7b07ed28c32212df14b5ae844084480f ./web/api/lib/Cake/Test/test_app/Model/Extract.php +bb3170979ea70c222e74ff2e932420b5 ./web/api/lib/Cake/Test/test_app/Model/PersisterTwo.php +49ecbc5da4ec2b8b8f3f56eda4828e5a ./web/api/lib/Cake/Test/test_app/Model/Datasource/Database/TestLocalDriver.php +e585f3cadb2f7ee1a359abda70922be5 ./web/api/lib/Cake/Test/test_app/Model/Datasource/Test2OtherSource.php +4733f44a44e6de3a6ea55aeae8bb4504 ./web/api/lib/Cake/Test/test_app/Model/Datasource/Test2Source.php +a3368116f4081b433cac805a2dfb4b17 ./web/api/lib/Cake/Test/test_app/Model/Datasource/Session/TestAppLibSession.php +3bd04aac265b37dbed3499ffa51c0674 ./web/api/lib/Cake/Test/test_app/Model/Post.php +b6e7142b77437d3675df735fe742223a ./web/api/lib/Cake/Test/test_app/Model/Comment.php +785392a2eb6fe830093a2f39b247beab ./web/api/lib/Cake/Test/test_app/Model/AppModel.php +c51ccf5765b43cc5b8ad47146e47f0e0 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/TestPluginLibrary.php +fbb7db7e511708c02a0c35186b1b03f2 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Error/TestPluginExceptionRenderer.php +9c34f4fed9275051c7548fdff20af4fd ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Cache/Engine/TestPluginCacheEngine.php +cea01f5579ab7fc93b8adc3767ab7dd4 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/TestPluginOtherLibrary.php +9a6578b7c36ba5fe95e3478a3da0490b ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Log/Engine/TestPluginLog.php +1f9c2a20bfadb296aecd8b9d5d373787 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Custom/Package/CustomLibClass.php +187de632eed4d8dd961e32304f523915 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Routing/Route/TestRoute.php +41e89aa7bef400f1dda0d91dab88fc02 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Routing/Filter/TestDispatcherFilter.php +1da1ab6703cb711921145af63de8cdb9 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Lib/Routing/Filter/Test2DispatcherFilter.php +e6ad33fa50014530ff2de946ec646626 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Vendor/sample/sample_plugin.php +a761e47db96732c989cab76be0d0051b ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Vendor/welcome.php +0578c4b92736c763ff3034ee6242bdb6 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Vendor/Example/ExampleExample.php +fc0ee8b751b2643758955dd0753d1d3f ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Behavior/TestPluginPersisterTwoBehavior.php +7068d4329d30b701080db7016af2a23a ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Behavior/TestPluginPersisterOneBehavior.php +ca1afa97aded1d86970226ac07aee08a ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Datasource/TestSource.php +97a20334d6f79af8e574627245301a1c ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Datasource/Database/TestDriver.php +a53aa4ed29997e01af92ed0547557662 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Datasource/Database/DboDummy.php +06cb4922131227ca901edebd4f6c40e1 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Datasource/TestOtherSource.php +e9175c140ada96c982416a619a9ba260 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/Datasource/Session/TestPluginSession.php +41b0c1d49ce50b7273a50c7946fb2bda ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/TestPluginAppModel.php +b2e17d80efd8b68f38d7890bd092ad1a ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/TestPluginComment.php +ddeba991ff31eb0bad5f46eb21a63685 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/TestPluginPost.php +f7f9f830e64032863df73543d1aaab0c ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/TestPluginAuthors.php +ee3740aaf206279226a4e9a7acd6fee9 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Model/TestPluginAuthUser.php +74c32bdabfe905583fe3070a49448e89 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/bootstrap.php +19050fb49909398004725f2a58bb0895 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/routes.php +6a0b8e42eb095446cf318cd894bd366a ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/more.load.php +ada7fabf2136dbc936d25e75cf9528c7 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/custom_config.php +f9a2f4ba7504aa4cd3219f14d576358f ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/load.php +18467d0d6fda8baeb711c514f9ca9ba5 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/acl.ini.php +4bb463b312b9cd1354b731f65c948b06 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/nested.ini +8bb247ad8a5845d1e19f88bfdd672104 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Config/Schema/schema.php +fbe668f7530cddbad40b00a9c483238c ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Console/Command/ExampleShell.php +46e63c845d67cb31ce6d7f07a1525b39 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Console/Command/Task/OtherTaskTask.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Console/Templates/empty +126fa012915e90db50e73b7c041472e4 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/img/cake.icon.gif +175228bccb2be98154ae3e8a9e786895 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/css/test_plugin_asset.css +66d62847ea7f4a6aad369c594897b018 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/css/theme_one.htc +5224fa3ad5c5085afb2995fd4caab97c ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/css/unknown.extension +da0f681816d9e35e022987f0d4c0018f ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/flash/plugin_test.swf +74af2250ff94bdfe8d49b3469e777007 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/pdfs/plugin_test.pdf +a40cbfb32ad23728d30d7122f93eb9ef ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/js/test_plugin/test.js +41141f1b57abe01cc8e1e6705f48054e ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/webroot/root.js +04c91b008d6ed6397e0a31495aab7efc ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Utility/TestPluginEngine.php +54ac59451fe1a8fce5df39ab4b2015aa ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Locale/po/LC_MESSAGES/test_plugin.po +27da8e4bee4a237847907a7711005673 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Locale/po/LC_MONETARY/test_plugin.po +6aff9abc540e8936a6177e14d542b612 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Elements/plugin_element.ctp +90a4af93804c8e79541a37b35ceb950f ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Elements/test_plugin_element.ctp +48d63fb68118c8081261a784200129b3 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Elements/translate.ctp +00d924fb9e0e98e167e6709817c25705 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Elements/sub_dir/sub_element.ctp +fcd9ffbcf1d9b290e177a34ab6f26ca8 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Layouts/Emails/text/plug_default.ctp +cf6e2a1c890bd3d4e80904f08390b3f8 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Layouts/default.ctp +76a72eda4843bdc27a7a0a889d63749f ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Emails/text/test_plugin_tpl.ctp +2837c0ea23f9052da2fed5696a109524 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Helper/PluggedHelperHelper.php +99ca835b9b936b4dd479000620d894e2 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Helper/TestPluginAppHelper.php +b8e14cc749e59e128d38027625d76cbe ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Helper/OtherHelperHelper.php +bf07675e57dee8cff4bc2e1219cadae5 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Tests/scaffold.form.ctp +836cdeaec179d895d954683368453005 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/View/Tests/index.ctp +9732f7c2c06cc1bc10666c82d2ad2f9c ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/TestsController.php +bd328fa4ffc4bd487cc15587eaeb0075 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/Component/OtherComponent.php +076017644d95e10866e04123dce4b4ba ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/Component/TestPluginOtherComponent.php +680d51674af3d0ab20cbd0ebbe0416a7 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/Component/TestPluginComponent.php +783e830f54fd4907a11ce45e5657d3b2 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/Component/PluginsComponent.php +f3fdc11e192ab0fec75e8e4b46f3ffb2 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/TestPluginController.php +a7a3e83dde48a6546e66f7ffe3f5a6e1 ./web/api/lib/Cake/Test/test_app/Plugin/TestPlugin/Controller/TestPluginAppController.php +42a86a7baecb93a21e4d39eb593a7a15 ./web/api/lib/Cake/Test/test_app/Plugin/TestPluginTwo/Config/bootstrap.php +a156f9daf3fa1109d056f3655e882694 ./web/api/lib/Cake/Test/test_app/Plugin/TestPluginTwo/Console/Command/ExampleShell.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/Plugin/TestPluginTwo/Console/Command/Task/empty +d820b3f7f6fb5765711552fc91df3295 ./web/api/lib/Cake/Test/test_app/Plugin/TestPluginTwo/Console/Command/WelcomeShell.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/Plugin/TestPluginTwo/Console/Templates/empty +617c044f5f502df64dfe722590dea561 ./web/api/lib/Cake/Test/test_app/Plugin/TestPluginTwo/View/Layouts/Emails/text/default.ctp +b4acc78492a8bcb2505f3b0eef1ec8a3 ./web/api/lib/Cake/Test/test_app/Plugin/PluginJs/Config/bootstrap.php +daa3523ca33d79506846cf63dc7bfc14 ./web/api/lib/Cake/Test/test_app/Plugin/PluginJs/webroot/js/one/plugin_one.js +54a6b27fedd38a5513eb37da5afea5b1 ./web/api/lib/Cake/Test/test_app/Plugin/PluginJs/webroot/js/plugin_js.js +2313ee210abe3522925c1fe1b6755b32 ./web/api/lib/Cake/Test/test_app/Config/htmlhelper_tags.php +a932ddd6ccea470d55d59238eba77bb0 ./web/api/lib/Cake/Test/test_app/Config/var_test2.php +315ea0a65863393e54a368444bac0624 ./web/api/lib/Cake/Test/test_app/Config/acl.php +9eb1a3fdd5933c0904b7c1d179262793 ./web/api/lib/Cake/Test/test_app/Config/var_test.php +02945bddfe27ca58e70b00483f27a400 ./web/api/lib/Cake/Test/test_app/Config/empty.ini +a04fb405d9a0307631314689e96e0bbf ./web/api/lib/Cake/Test/test_app/Config/empty.php +39b02e6b017e271666714a9477e749c0 ./web/api/lib/Cake/Test/test_app/Config/routes.php +18467d0d6fda8baeb711c514f9ca9ba5 ./web/api/lib/Cake/Test/test_app/Config/acl.ini +d0c1722dcac74c5d4402cecce84114da ./web/api/lib/Cake/Test/test_app/Config/no_ini_extension +18467d0d6fda8baeb711c514f9ca9ba5 ./web/api/lib/Cake/Test/test_app/Config/acl.ini.php +11b9f8b609d755f28e6090b12b1b53f4 ./web/api/lib/Cake/Test/test_app/Config/htmlhelper_minimized.ini +3918705c13a59d53b4ddbe605606b3a7 ./web/api/lib/Cake/Test/test_app/Config/no_php_extension +ffd4e0a5e9b893491fbe8e7cd8b1f825 ./web/api/lib/Cake/Test/test_app/Config/no_section.ini +032eae36aa156ca201f07f35a51097eb ./web/api/lib/Cake/Test/test_app/Config/nested.ini +b44fd810deb59fe3aee54782cb081566 ./web/api/lib/Cake/Test/test_app/Console/Command/SampleShell.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/Console/Command/Task/empty +df4f7d990b3f380cc3cd48b016bd79ab ./web/api/lib/Cake/Test/test_app/Console/Templates/test/views/admin_edit.ctp +7c580b8455493fd6e726247e7c45e206 ./web/api/lib/Cake/Test/test_app/Console/Templates/test/classes/test_object.ctp +bb7e210a60f92e5458e347cf77177c5f ./web/api/lib/Cake/Test/test_app/webroot/img/cake.power.gif +bb7e210a60f92e5458e347cf77177c5f ./web/api/lib/Cake/Test/test_app/webroot/theme/test_theme/img/cake.power.gif +f61236ec67ffdd793adb8739b4bdb8ae ./web/api/lib/Cake/Test/test_app/webroot/theme/test_theme/img/test.jpg +9eda360be44eb192559520c90cc56d09 ./web/api/lib/Cake/Test/test_app/webroot/theme/test_theme/css/webroot_test.css +db961fa2871bc149703e2840e603d5ba ./web/api/lib/Cake/Test/test_app/webroot/theme/test_theme/css/theme_webroot.css +4045c74ce1810c81d0e5577849a51900 ./web/api/lib/Cake/Test/test_app/Utility/TestAppEngine.php +da402d69dc7a7f2a6d37ea2a0d46eb2d ./web/api/lib/Cake/Test/test_app/Locale/rule_9_mo/LC_MESSAGES/core.mo +5805d00a8f1b197b79cbf60843661c19 ./web/api/lib/Cake/Test/test_app/Locale/rule_9_mo/LC_MESSAGES/default.mo +f964fbd3c78fe0458164b079c614d731 ./web/api/lib/Cake/Test/test_app/Locale/rule_1_mo/LC_MESSAGES/core.mo +3a06ea1e56fb4e6dc031afd4f2c7f842 ./web/api/lib/Cake/Test/test_app/Locale/rule_1_mo/LC_MESSAGES/default.mo +2ffe8ee1d6850c85e8270f743a5ea3c8 ./web/api/lib/Cake/Test/test_app/Locale/rule_11_po/LC_MESSAGES/default.po +2caf5ed5fa6273282add9f6e4b462a45 ./web/api/lib/Cake/Test/test_app/Locale/rule_11_po/LC_MESSAGES/core.po +7a440d04278ced0f2797eda1ad225482 ./web/api/lib/Cake/Test/test_app/Locale/rule_9_po/LC_MESSAGES/default.po +996bdc4280d78159636949b6f46ae007 ./web/api/lib/Cake/Test/test_app/Locale/rule_9_po/LC_MESSAGES/core.po +136b54d0c992b60119276966380ac491 ./web/api/lib/Cake/Test/test_app/Locale/rule_13_mo/LC_MESSAGES/core.mo +bab887359f157785adc38ee4c015e0ef ./web/api/lib/Cake/Test/test_app/Locale/rule_13_mo/LC_MESSAGES/default.mo +8b2c395317a62e0b16051708ef60bef6 ./web/api/lib/Cake/Test/test_app/Locale/rule_7_po/LC_MESSAGES/default.po +8420328a38ccbd5c056dd8f16dfc823c ./web/api/lib/Cake/Test/test_app/Locale/rule_7_po/LC_MESSAGES/core.po +9add7ae20a4f3531f09de8ec5ea3a7ed ./web/api/lib/Cake/Test/test_app/Locale/rule_3_mo/LC_MESSAGES/core.mo +3066265513d2bece8e456a30c95453b1 ./web/api/lib/Cake/Test/test_app/Locale/rule_3_mo/LC_MESSAGES/default.mo +540cd463801903c03200ef2ad95bbc47 ./web/api/lib/Cake/Test/test_app/Locale/rule_4_po/LC_MESSAGES/default.po +8e3ecff80b7ada02af62886e88569f73 ./web/api/lib/Cake/Test/test_app/Locale/rule_4_po/LC_MESSAGES/core.po +51a2ad73868e4db488adb789d1560695 ./web/api/lib/Cake/Test/test_app/Locale/rule_3_po/LC_MESSAGES/default.po +cca38cbe76ad8bc027e28337e7e342e2 ./web/api/lib/Cake/Test/test_app/Locale/rule_3_po/LC_MESSAGES/core.po +1bfe3f96f2b1d76867358dbfd1b0056a ./web/api/lib/Cake/Test/test_app/Locale/nld/LC_TIME +c5223ea136d79ed2ce61eb5476dae474 ./web/api/lib/Cake/Test/test_app/Locale/rule_14_mo/LC_MESSAGES/core.mo +89b8c745fada1b29d7e1192fc19758fc ./web/api/lib/Cake/Test/test_app/Locale/rule_14_mo/LC_MESSAGES/default.mo +0ffbc87cb8a055b039888e84fcaa3527 ./web/api/lib/Cake/Test/test_app/Locale/rule_11_mo/LC_MESSAGES/core.mo +224a712052dbfde0fb5e8b6aab36244d ./web/api/lib/Cake/Test/test_app/Locale/rule_11_mo/LC_MESSAGES/default.mo +900a63e8dd5507caaed5108a29f12784 ./web/api/lib/Cake/Test/test_app/Locale/po/LC_MESSAGES/default.po +b39ee78cb6d6561c0cffb04984221d06 ./web/api/lib/Cake/Test/test_app/Locale/po/LC_TIME +0f038e9bc6a35895adc74f2535ce3a8f ./web/api/lib/Cake/Test/test_app/Locale/po/LC_MONETARY/default.po +ab2c9408009f922754f048fc4f1a9e0d ./web/api/lib/Cake/Test/test_app/Locale/rule_5_mo/LC_MESSAGES/core.mo +6be039e56e459cc595f4c18fc3910035 ./web/api/lib/Cake/Test/test_app/Locale/rule_5_mo/LC_MESSAGES/default.mo +91d7b8673026375f8e1c186fd219d72d ./web/api/lib/Cake/Test/test_app/Locale/rule_2_po/LC_MESSAGES/default.po +2d0698c684499541281bc134fe424ee8 ./web/api/lib/Cake/Test/test_app/Locale/rule_2_po/LC_MESSAGES/core.po +99309fd04aec751641cbb90e0bd1780e ./web/api/lib/Cake/Test/test_app/Locale/rule_6_po/LC_MESSAGES/default.po +9291931f0143a2b189abb88189555431 ./web/api/lib/Cake/Test/test_app/Locale/rule_6_po/LC_MESSAGES/core.po +5fb025a4536f442ec27e0ea331ad72e1 ./web/api/lib/Cake/Test/test_app/Locale/rule_0_po/LC_MESSAGES/default.po +628d7dc7ac5bd2e3b4edd616e63a83d6 ./web/api/lib/Cake/Test/test_app/Locale/rule_0_po/LC_MESSAGES/core.po +7549c3ca1e5aa2dfa560708ca0472d49 ./web/api/lib/Cake/Test/test_app/Locale/rule_12_po/LC_MESSAGES/default.po +d8e56525dc66a230180d8f938bd6da40 ./web/api/lib/Cake/Test/test_app/Locale/rule_12_po/LC_MESSAGES/core.po +ab0f43b461845c262f595ae3caa67e44 ./web/api/lib/Cake/Test/test_app/Locale/cache_test_po/LC_MESSAGES/default.po +e22cf600ab5cf562c1bb37abf24654c9 ./web/api/lib/Cake/Test/test_app/Locale/cache_test_po/LC_MESSAGES/dom2.po +69a2b46c8bba4ff50ae5547f2a2a3bad ./web/api/lib/Cake/Test/test_app/Locale/cache_test_po/LC_MESSAGES/dom1.po +9aa2e582e3a590a30e2dd9dcbacfb633 ./web/api/lib/Cake/Test/test_app/Locale/rule_1_po/LC_MESSAGES/default.po +fe5eee8290dde2a539431db39cb90d77 ./web/api/lib/Cake/Test/test_app/Locale/rule_1_po/LC_MESSAGES/core.po +bdbdae26db021dcdf0532334dccca80e ./web/api/lib/Cake/Test/test_app/Locale/rule_12_mo/LC_MESSAGES/core.mo +844f6afb9d331196fd13f72f6decf8ee ./web/api/lib/Cake/Test/test_app/Locale/rule_12_mo/LC_MESSAGES/default.mo +31614f46c6995be0ff115dac13ad62d8 ./web/api/lib/Cake/Test/test_app/Locale/rule_2_mo/LC_MESSAGES/core.mo +050ac570b1a1e296c5c8313a64d9dd46 ./web/api/lib/Cake/Test/test_app/Locale/rule_2_mo/LC_MESSAGES/default.mo +387f54438ea0958ce544313d97de526f ./web/api/lib/Cake/Test/test_app/Locale/eng/LC_MESSAGES/validation_messages.po +d6d1897815632fe51f65430263fc1a90 ./web/api/lib/Cake/Test/test_app/Locale/rule_14_po/LC_MESSAGES/default.po +2c8590db340684660d4fd0535f66b897 ./web/api/lib/Cake/Test/test_app/Locale/rule_14_po/LC_MESSAGES/core.po +3b7e881a60b5232a76379f3985b92754 ./web/api/lib/Cake/Test/test_app/Locale/rule_13_po/LC_MESSAGES/default.po +cf0b24859a92fd5755ee757b0363f53e ./web/api/lib/Cake/Test/test_app/Locale/rule_13_po/LC_MESSAGES/core.po +e1ea0ffb5b90098990692f7c59906951 ./web/api/lib/Cake/Test/test_app/Locale/rule_8_po/LC_MESSAGES/default.po +aa081c7a41a102f24353859ae5cd117e ./web/api/lib/Cake/Test/test_app/Locale/rule_8_po/LC_MESSAGES/core.po +9176355a072b069587b9f4bf00c077a1 ./web/api/lib/Cake/Test/test_app/Locale/time_test/LC_TIME +492fd41d9ce626ee100aa3bf01849ad0 ./web/api/lib/Cake/Test/test_app/Locale/rule_6_mo/LC_MESSAGES/core.mo +aa06af602fdd89cf6c4a92db53ac3e2f ./web/api/lib/Cake/Test/test_app/Locale/rule_6_mo/LC_MESSAGES/default.mo +cb27c995da384acdb19a86ac209c0e10 ./web/api/lib/Cake/Test/test_app/Locale/rule_5_po/LC_MESSAGES/default.po +50207b64dee9ebc4af6f1dfa91420475 ./web/api/lib/Cake/Test/test_app/Locale/rule_5_po/LC_MESSAGES/core.po +3d382ce185f9c7ed640eab765ea1f8fd ./web/api/lib/Cake/Test/test_app/Locale/ja_jp/LC_TIME +b4bb26b15a22eaaffe96bcc884cd1a6c ./web/api/lib/Cake/Test/test_app/Locale/rule_7_mo/LC_MESSAGES/core.mo +15fdc10427ae35fe6fdbd1547161b419 ./web/api/lib/Cake/Test/test_app/Locale/rule_7_mo/LC_MESSAGES/default.mo +a112cab9c0fbf47f87b270669eb6e5a3 ./web/api/lib/Cake/Test/test_app/Locale/rule_4_mo/LC_MESSAGES/core.mo +48df73613576dc7451362957e938499e ./web/api/lib/Cake/Test/test_app/Locale/rule_4_mo/LC_MESSAGES/default.mo +dd68c668526e667f69710a3138ec40dc ./web/api/lib/Cake/Test/test_app/Locale/rule_10_po/LC_MESSAGES/default.po +7bbfb9a27845e3045dae6b3c34ee70c2 ./web/api/lib/Cake/Test/test_app/Locale/rule_10_po/LC_MESSAGES/core.po +08b97b40730df4cf753bfbde9dcce57b ./web/api/lib/Cake/Test/test_app/Locale/rule_10_mo/LC_MESSAGES/core.mo +06d22b894b9dd82dd1ef34c7f1ff1022 ./web/api/lib/Cake/Test/test_app/Locale/rule_10_mo/LC_MESSAGES/default.mo +a36f13ceb47fdb2d6718d1740992062d ./web/api/lib/Cake/Test/test_app/Locale/rule_0_mo/LC_MESSAGES/core.mo +67074e9e64a70bbfb403e66edbdd57b2 ./web/api/lib/Cake/Test/test_app/Locale/rule_0_mo/LC_MESSAGES/default.mo +d770c48d7c7c324016e95d383655ab5d ./web/api/lib/Cake/Test/test_app/Locale/rule_8_mo/LC_MESSAGES/core.mo +982794001240c520b6ed5495b963edd9 ./web/api/lib/Cake/Test/test_app/Locale/rule_8_mo/LC_MESSAGES/default.mo +4ca1fbc35873d6fe2a14a0ad2c4829c8 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Elements/test_element.ctp +c269d96199ba690aa0722518f03557c3 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Layouts/default.ctp +9e2364d503c5408df15423227ba3868f ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Emails/text/themed.ctp +44b1fe8d638e10d9494cf85cd5f2c334 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Plugin/TestPlugin/Layouts/plugin_default.ctp +47bf09170b8ef0dce2d57af2079c084e ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Plugin/TestPlugin/Emails/text/test_plugin_tpl.ctp +24ed125d94d2afb7c87976a1573103f3 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Plugin/TestPlugin/Tests/index.ctp +bb7e210a60f92e5458e347cf77177c5f ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/img/cake.power.gif +f61236ec67ffdd793adb8739b4bdb8ae ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/img/test.jpg +fa26f7a3b3c18d46ed10ea234eaecdac ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/css/test_asset.css +6debc0fa891e49e8ffee039cb21fd385 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/css/theme_webroot.css +ff39cac4a90677d28a551fa2c16c6c0e ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/flash/theme_test.swf +fe9dd496502fe17d3e127e74e0aa5db3 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/pdfs/theme_test.pdf +204521033361d680b20e63e66ecbb55f ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/js/one/theme_one.js +079d4c3c9c26dd4284bd6d269bdd1831 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/js/theme.js +5e60f72428394dbe9c439eb594f879a5 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/webroot/space image.text +c8ea3581be0ea5da326a4e5094d892ea ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Posts/themed.ctp +865b8d890a355ce890e7c20afccc6915 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Posts/index.ctp +8bdfdc9e4c7031fd0b926273e7a0b761 ./web/api/lib/Cake/Test/test_app/View/Themed/TestTheme/Posts/scaffold.index.ctp +88bafcdc1c2cdfed0429ba640d68900e ./web/api/lib/Cake/Test/test_app/View/Elements/type_check.ctp +347f70c433525a755fb816de1765314b ./web/api/lib/Cake/Test/test_app/View/Elements/extended_missing_element.ctp +b3449fc1c8b9384554d588eba5dd60d6 ./web/api/lib/Cake/Test/test_app/View/Elements/html_call.ctp +e72c13a3b5f1b10c3522fd61c814f9ba ./web/api/lib/Cake/Test/test_app/View/Elements/nocache/sub1.ctp +870382478b16efcda9a574b396ae3e83 ./web/api/lib/Cake/Test/test_app/View/Elements/nocache/plain.ctp +e8531c2b9c19ba4f159a411dfc2b607c ./web/api/lib/Cake/Test/test_app/View/Elements/nocache/contains_nocache.ctp +e216a7739009eb1f4d60ac9df9a82009 ./web/api/lib/Cake/Test/test_app/View/Elements/nocache/sub2.ctp +b3f196c1346b1006267d0858549d8993 ./web/api/lib/Cake/Test/test_app/View/Elements/extended_element.ctp +0f0438a8c1908ee1ce4a22b3e0fb2a7e ./web/api/lib/Cake/Test/test_app/View/Elements/parent_element.ctp +144b160f5ab0dc19685cd061ca4b5c15 ./web/api/lib/Cake/Test/test_app/View/Elements/test_element.ctp +b9e496bd23f83b404490412ece24fc00 ./web/api/lib/Cake/Test/test_app/View/Elements/test_element.xml +c536a01e55dff6a38f2812c8cec449ec ./web/api/lib/Cake/Test/test_app/View/Elements/session_helper.ctp +5d72ec67f9756fd918e23ec46b287bc4 ./web/api/lib/Cake/Test/test_app/View/Layouts/ajax.ctp +755e6a4dc17bdde4ad4a0c801ca3cf8d ./web/api/lib/Cake/Test/test_app/View/Layouts/xml/default.ctp +ef070d9f2513b81916633a7dfdc6041b ./web/api/lib/Cake/Test/test_app/View/Layouts/Emails/html/default.ctp +5f2338e7f3490d8840de203f9a5376c9 ./web/api/lib/Cake/Test/test_app/View/Layouts/Emails/html/thin.ctp +b7b7db2ed6b3bbab374c6b7d1c8619fc ./web/api/lib/Cake/Test/test_app/View/Layouts/Emails/html/japanese.ctp +db1cae9ac68813a5ded0b2a5cc0e3121 ./web/api/lib/Cake/Test/test_app/View/Layouts/Emails/text/default.ctp +ff92ac857ddde8acb1c8047079162b52 ./web/api/lib/Cake/Test/test_app/View/Layouts/Emails/text/japanese.ctp +5886310fc3fcf1b64b15a2d9cbcb235e ./web/api/lib/Cake/Test/test_app/View/Layouts/default.ctp +3c907bd81df3c45fde6fa10fc659c523 ./web/api/lib/Cake/Test/test_app/View/Layouts/banana.ctp +43155c01608bc23eb506b93929779eb7 ./web/api/lib/Cake/Test/test_app/View/Layouts/cache_empty_sections.ctp +5de8cc5c3dae86311d4689f3d20311a8 ./web/api/lib/Cake/Test/test_app/View/Layouts/rss/default.ctp +b89ead4a9300a78d9711ca3c0cdbb40d ./web/api/lib/Cake/Test/test_app/View/Layouts/flash.ctp +cc53b22419c410f607547bcd2fdeaf7b ./web/api/lib/Cake/Test/test_app/View/Layouts/cache_layout.ctp +5d72ec67f9756fd918e23ec46b287bc4 ./web/api/lib/Cake/Test/test_app/View/Layouts/json/default.ctp +83320360cc6a5039c6be38b86ddc7f75 ./web/api/lib/Cake/Test/test_app/View/Layouts/js/default.ctp +8c7e75d2f77bbfaa89cdcbab6a8cc05b ./web/api/lib/Cake/Test/test_app/View/Layouts/ajax2.ctp +3304c9c592a1ccf1d01fe7cd03bd4a19 ./web/api/lib/Cake/Test/test_app/View/Layouts/multi_cache.ctp +b792584dcdc84e3a96efb61eb237ab20 ./web/api/lib/Cake/Test/test_app/View/Emails/html/nested_element.ctp +d75b3a570535dfc75f3e3dc35054722d ./web/api/lib/Cake/Test/test_app/View/Emails/html/default.ctp +085f401c2772d8e36397cc9a95fda2c5 ./web/api/lib/Cake/Test/test_app/View/Emails/html/japanese.ctp +1361c0f5dd3bdb055d0ddd4c74910160 ./web/api/lib/Cake/Test/test_app/View/Emails/html/image.ctp +d8c845506027140c3207a441a12d91ee ./web/api/lib/Cake/Test/test_app/View/Emails/html/custom.ctp +cdd28ff95999a66fe7a5559913edf27e ./web/api/lib/Cake/Test/test_app/View/Emails/html/html.ctp +84d74ec97404b933399e979ea40ca3b8 ./web/api/lib/Cake/Test/test_app/View/Emails/text/custom_helper.ctp +12e174e8a6b88657c966f5e3bd08525f ./web/api/lib/Cake/Test/test_app/View/Emails/text/default.ctp +c4f608f58cb630065aff8fee6d1cd8ad ./web/api/lib/Cake/Test/test_app/View/Emails/text/wide.ctp +00a65caf883f589c9475bc115211d58f ./web/api/lib/Cake/Test/test_app/View/Emails/text/japanese.ctp +76740a986125ddf79a8f42c0d7912cc5 ./web/api/lib/Cake/Test/test_app/View/Emails/text/custom.ctp +d6d0356d88c300cc2f56896d8977232c ./web/api/lib/Cake/Test/test_app/View/TestsApps/index.ctp +fc4ee4ac8a2bc82bbfa91e6ab83e7541 ./web/api/lib/Cake/Test/test_app/View/TestsApps/json/index.ctp +cd7f0bd9b8d9059cb8df82f17738b75f ./web/api/lib/Cake/Test/test_app/View/Errors/error500.ctp +069eaa7d83b9f52e4ab64773309a97a3 ./web/api/lib/Cake/Test/test_app/View/Errors/error400.ctp +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/View/Scaffolds/empty +90f722e2bc091046de9cbacba7994d8b ./web/api/lib/Cake/Test/test_app/View/Helper/BananaHelper.php +23b015392dea469c3e0fa39a15c4b792 ./web/api/lib/Cake/Test/test_app/View/Pages/home.ctp +84cab57490f43013b72c03b5acf85c15 ./web/api/lib/Cake/Test/test_app/View/Pages/page.home.ctp +9870ef15721e98459257b5906093454b ./web/api/lib/Cake/Test/test_app/View/Pages/extract.ctp +8dc8b0cae8de41fbabafc8d2fcc517b1 ./web/api/lib/Cake/Test/test_app/View/Posts/nested_extends.ctp +92f5678860a3aa6fdcb48af9d45023c7 ./web/api/lib/Cake/Test/test_app/View/Posts/alt_ext.alt +9f9b8cd47a7c233cffbca54654b6ac55 ./web/api/lib/Cake/Test/test_app/View/Posts/multiple_nocache.ctp +7aa5e11ffbf605a9ec1c4aab84addd24 ./web/api/lib/Cake/Test/test_app/View/Posts/scaffold.form.ctp +b6c69c443cae1bc597744d4b56eeb75c ./web/api/lib/Cake/Test/test_app/View/Posts/sequencial_nocache.ctp +ee6a9722ea0d7d8c45a18abfbc485ef0 ./web/api/lib/Cake/Test/test_app/View/Posts/extend_loop.ctp +3052d58cbc86124042af43b69bc99c4b ./web/api/lib/Cake/Test/test_app/View/Posts/xml/index.ctp +33ec7730728787e9c40f2e54006c8a1e ./web/api/lib/Cake/Test/test_app/View/Posts/nocache_multiple_element.ctp +a68ee1d4271d12ade4ec956d5797684a ./web/api/lib/Cake/Test/test_app/View/Posts/test_nocache_tags.ctp +212d2976e033cb0567757ab8c5126562 ./web/api/lib/Cake/Test/test_app/View/Posts/index.ctp +cdfcc709a9aaf8d0ad068553141c8ccb ./web/api/lib/Cake/Test/test_app/View/Posts/extend_with_element.ctp +c0780567cb119692b4dabcbd9f830195 ./web/api/lib/Cake/Test/test_app/View/Posts/parent_1.ctp +fc50d2a2357899eb0512a55b85403060 ./web/api/lib/Cake/Test/test_app/View/Posts/parent_2.ctp +79622adce420ff3a5805e0563483ceaa ./web/api/lib/Cake/Test/test_app/View/Posts/extend_self.ctp +1dd7179ff3be78f4b059a925e2bbc919 ./web/api/lib/Cake/Test/test_app/View/Posts/helper_overwrite.ctp +590e8ca74d11dc00ab4e79769b23f2ed ./web/api/lib/Cake/Test/test_app/View/Posts/extend_loop_inner.ctp +24262865c98e7919bc1885861b5194a0 ./web/api/lib/Cake/Test/test_app/View/Posts/cache_empty_sections.ctp +ed3114fbc73c637aa278918039b6ee1e ./web/api/lib/Cake/Test/test_app/View/Posts/extend_missing_element.ctp +58a0ea403e003c97408a8de7510fb0f4 ./web/api/lib/Cake/Test/test_app/View/Posts/json/index.ctp +19acbcb4bc29e8c9581213f6dcb99d66 ./web/api/lib/Cake/Test/test_app/View/Posts/open_block.ctp +81db227ea592d04342c74795a3ef4657 ./web/api/lib/Cake/Test/test_app/View/Posts/extend_element.ctp +b4e4c483521ec164ec5d4930dfc26c08 ./web/api/lib/Cake/Test/test_app/View/Posts/parent_view.ctp +2ec5bf884dc978279535586826d08d88 ./web/api/lib/Cake/Test/test_app/View/Posts/cache_form.ctp +2ea2bce3a4d33ba5bb31049d34817732 ./web/api/lib/Cake/Test/test_app/Controller/PagesController.php +9a9db6d0886a5c5d3df113b0ec05989c ./web/api/lib/Cake/Test/test_app/Controller/TestsAppsController.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Test/test_app/Controller/Component/empty +85c25879d0b68f1240f015c72d3d0500 ./web/api/lib/Cake/Test/test_app/Controller/TestConfigsController.php +131b49822b71956d80cefafe025eef67 ./web/api/lib/Cake/Test/test_app/Controller/TestAppsErrorController.php +fb572af6ad6eeec531775456b6a231db ./web/api/lib/Cake/Test/test_app/Controller/AppController.php +63dddac8102bd6ec6ebfabd08046ffa4 ./web/api/lib/Cake/Test/test_app/Controller/TestsAppsPostsController.php +be1573636e0e0242bfc119bfb108f402 ./web/api/lib/Cake/Test/Case/AllComponentsTest.php +118c9a2643ee399aa8222db107174278 ./web/api/lib/Cake/Test/Case/AllDbRelatedTest.php +4c8319b2706c1ddeb8525fa9c636a6f8 ./web/api/lib/Cake/Test/Case/AllControllerTest.php +2f2e3e49ff982f66b32329bcfff18c44 ./web/api/lib/Cake/Test/Case/AllTestsTest.php +2737e90b73f3be14e5a001a0179d6ae6 ./web/api/lib/Cake/Test/Case/AllBehaviorsTest.php +6a9341d4cf4ab2640984bdab673a2795 ./web/api/lib/Cake/Test/Case/AllNetworkTest.php +3c7575dd3cd8eb6c18a9b56bcadad23f ./web/api/lib/Cake/Test/Case/Error/ErrorHandlerTest.php +e61819cf9d9aeb92a9ccb99b1637ed54 ./web/api/lib/Cake/Test/Case/Error/ExceptionRendererTest.php +b2fe65443141e410d654be72806035d9 ./web/api/lib/Cake/Test/Case/TestSuite/CakeTestCaseTest.php +975f3fd4955d06bc6d6fb13507cf95c9 ./web/api/lib/Cake/Test/Case/TestSuite/ControllerTestCaseTest.php +c8d740ba21d937d16267b5bea0a07c36 ./web/api/lib/Cake/Test/Case/TestSuite/HtmlCoverageReportTest.php +8ba26ebce0a4754d2443c6a73bdaa05a ./web/api/lib/Cake/Test/Case/TestSuite/CakeTestFixtureTest.php +ab7b47689652dd2147b610ba491981ff ./web/api/lib/Cake/Test/Case/TestSuite/Fixture/CakeFixtureManagerTest.php +54e8c49b5693537ebffb95682da66d89 ./web/api/lib/Cake/Test/Case/TestSuite/CakeTestSuiteTest.php +04366129a2c58b0bc20f0198477a7c91 ./web/api/lib/Cake/Test/Case/Network/CakeRequestTest.php +fdfba9d0e0663263e7172799ebf0f9de ./web/api/lib/Cake/Test/Case/Network/CakeResponseTest.php +893e73d5309473ec62e743df1e5962e0 ./web/api/lib/Cake/Test/Case/Network/Http/BasicAuthenticationTest.php +7a0304e0d2dd35bf8baf47264e7374a4 ./web/api/lib/Cake/Test/Case/Network/Http/HttpResponseTest.php +fdf69a3204793b3a91565172c9f875ff ./web/api/lib/Cake/Test/Case/Network/Http/DigestAuthenticationTest.php +ce6be42856ba3b948d5ff8a5c41f9fce ./web/api/lib/Cake/Test/Case/Network/Http/HttpSocketTest.php +907b3fa00957472f206a14c319ed4abe ./web/api/lib/Cake/Test/Case/Network/CakeSocketTest.php +ab383823a82ec67afb7f87cb3e2421e3 ./web/api/lib/Cake/Test/Case/Network/Email/SmtpTransportTest.php +a799e1dc9ef1973789083caf216feff2 ./web/api/lib/Cake/Test/Case/Network/Email/CakeEmailTest.php +0a3eb20a988d338470fb4a6139a779a4 ./web/api/lib/Cake/Test/Case/Network/Email/MailTransportTest.php +23650fae068012f31983ee50754db69e ./web/api/lib/Cake/Test/Case/Network/Email/DebugTransportTest.php +2e58888aaffa41bd3ffb118a3d808902 ./web/api/lib/Cake/Test/Case/Cache/Engine/RedisEngineTest.php +99fb41088e0e4262349cc008353519b5 ./web/api/lib/Cake/Test/Case/Cache/Engine/XcacheEngineTest.php +eb895849083e7d4335329300abc9410b ./web/api/lib/Cake/Test/Case/Cache/Engine/WincacheEngineTest.php +bca00dc33de63cf3a41faffd69cc6f52 ./web/api/lib/Cake/Test/Case/Cache/Engine/ApcEngineTest.php +6ae020b7f248484a5346523d35472686 ./web/api/lib/Cake/Test/Case/Cache/Engine/FileEngineTest.php +a2ca33d0f35eb86cac5b792574cd5074 ./web/api/lib/Cake/Test/Case/Cache/Engine/MemcacheEngineTest.php +6358507932f151da0c0029519907ae4f ./web/api/lib/Cake/Test/Case/Cache/Engine/MemcachedEngineTest.php +d9c9de0cb72b336f8d8272561d5a9d8f ./web/api/lib/Cake/Test/Case/Cache/CacheTest.php +6b8cc56de39cf1c6d4b9fb5d8c0831e7 ./web/api/lib/Cake/Test/Case/AllRoutingTest.php +6422b913c51c48ef1cee7bf422c18336 ./web/api/lib/Cake/Test/Case/AllTestSuiteTest.php +1845f17b51ccadd3946f51a9d898fa4b ./web/api/lib/Cake/Test/Case/I18n/L10nTest.php +59d18aa447e9fb03197f3cfeb9732f1f ./web/api/lib/Cake/Test/Case/I18n/MultibyteTest.php +4853a45f9777e0e937a483e02cc823a7 ./web/api/lib/Cake/Test/Case/I18n/I18nTest.php +7151d595b51d6372ba97ad8d98df50b4 ./web/api/lib/Cake/Test/Case/AllCoreTest.php +77d3f81f53d8216a5390ca55dda71b3e ./web/api/lib/Cake/Test/Case/Model/Behavior/TreeBehaviorScopedTest.php +b778eebc214cc1be213b3837de71be11 ./web/api/lib/Cake/Test/Case/Model/Behavior/TreeBehaviorUuidTest.php +784ffe08543a812b1716fe51ded3e585 ./web/api/lib/Cake/Test/Case/Model/Behavior/ContainableBehaviorTest.php +df0e25c1f2488fd9be8d9b15d8007b59 ./web/api/lib/Cake/Test/Case/Model/Behavior/TreeBehaviorNumberTest.php +4395d470a0c75608a4831f99dceedb0c ./web/api/lib/Cake/Test/Case/Model/Behavior/AclBehaviorTest.php +09f61e2762aa422650226a1ac740f9b8 ./web/api/lib/Cake/Test/Case/Model/Behavior/TranslateBehaviorTest.php +d83a40fcd1a95017c9fb046539020676 ./web/api/lib/Cake/Test/Case/Model/Behavior/TreeBehaviorTest.php +b5cb2996df4ea9e784bcc17778861572 ./web/api/lib/Cake/Test/Case/Model/Behavior/TreeBehaviorAfterTest.php +1e104a84af840b38f31b364c87f0cd02 ./web/api/lib/Cake/Test/Case/Model/CakeSchemaTest.php +3619da1d72ae27bcb9e6c934aee41ba8 ./web/api/lib/Cake/Test/Case/Model/BehaviorCollectionTest.php +70615069aea29ec7b8e87081f7f48d8e ./web/api/lib/Cake/Test/Case/Model/ModelWriteTest.php +8083c2da79996af57511f32fd1a69fa3 ./web/api/lib/Cake/Test/Case/Model/Validator/CakeValidationSetTest.php +db11623f725052ca0b7eb6482f5995a1 ./web/api/lib/Cake/Test/Case/Model/Validator/CakeValidationRuleTest.php +a63b19740ca57b44a7d9efc8920f3759 ./web/api/lib/Cake/Test/Case/Model/Datasource/DataSourceTest.php +fb0b2a9685abe8c4e3f95d0e20d28faf ./web/api/lib/Cake/Test/Case/Model/Datasource/CakeSessionTest.php +d975c05e6c6b773dd291075b031557f2 ./web/api/lib/Cake/Test/Case/Model/Datasource/Database/SqliteTest.php +ac25ffb05c2e68b31abcb77d8c0c1f0e ./web/api/lib/Cake/Test/Case/Model/Datasource/Database/PostgresTest.php +1fcb69793cb3135928b434d7ff9c30ff ./web/api/lib/Cake/Test/Case/Model/Datasource/Database/SqlserverTest.php +4bea528eef8892a9e70b8a36a0c16338 ./web/api/lib/Cake/Test/Case/Model/Datasource/Database/MysqlTest.php +fbbecb94d54ccf60c3e21d2d1414853d ./web/api/lib/Cake/Test/Case/Model/Datasource/DboSourceTest.php +2004a15fcfe1bdb34a51cdea62ae8266 ./web/api/lib/Cake/Test/Case/Model/Datasource/Session/DatabaseSessionTest.php +5c8a031df19f434e1f662f0421343dfb ./web/api/lib/Cake/Test/Case/Model/Datasource/Session/CacheSessionTest.php +0dd88ac5952f5ccb1bb9c75690c72548 ./web/api/lib/Cake/Test/Case/Model/ModelTest.php +0c8c5016c5d4fb0d55ba13bcc8986686 ./web/api/lib/Cake/Test/Case/Model/ModelReadTest.php +34d4490b5f687f281137978096509ff3 ./web/api/lib/Cake/Test/Case/Model/ModelValidationTest.php +72b6fd0384a5ffe033b0901a285372f4 ./web/api/lib/Cake/Test/Case/Model/AclNodeTest.php +e0018e68f29971a37327a14d164141af ./web/api/lib/Cake/Test/Case/Model/ModelDeleteTest.php +877756cc6d86d97289036b3896190a9f ./web/api/lib/Cake/Test/Case/Model/ModelCrossSchemaHabtmTest.php +0c5daefdecac43fe091dee37d9a35d12 ./web/api/lib/Cake/Test/Case/Model/ModelIntegrationTest.php +50420df3009b437986443eb5e229ca70 ./web/api/lib/Cake/Test/Case/Model/ConnectionManagerTest.php +4724130672da2ff4936feceb735b7767 ./web/api/lib/Cake/Test/Case/Model/ModelTestBase.php +18dddbb112ec620b7a72d6be3e15e7b0 ./web/api/lib/Cake/Test/Case/Model/models.php +ae4efc1b80668dc80d5f094c1517f0ae ./web/api/lib/Cake/Test/Case/Event/CakeEventManagerTest.php +9f5eb69140bda3318a34bfcade559266 ./web/api/lib/Cake/Test/Case/Event/CakeEventTest.php +fd1b4603aa096b1c7417ee16e2ad0e4f ./web/api/lib/Cake/Test/Case/AllI18nTest.php +cb0c54b108ebc699e979f533332e7ec3 ./web/api/lib/Cake/Test/Case/Core/ObjectTest.php +b0ac72950f2d6037297f75e3e1cfa881 ./web/api/lib/Cake/Test/Case/Core/AppTest.php +e1d1166fa4f9746a0a723e4b6aa5361b ./web/api/lib/Cake/Test/Case/Core/CakePluginTest.php +af3f7954d189f438ba38e1bb8650464b ./web/api/lib/Cake/Test/Case/Core/ConfigureTest.php +99b1b29413fe321081f4e052f6d337ff ./web/api/lib/Cake/Test/Case/Console/AllShellsTest.php +6763d67ea4d420ae257bee07caa651ee ./web/api/lib/Cake/Test/Case/Console/ShellDispatcherTest.php +9036691bd3f8f7c76d3b4877dbfd9a46 ./web/api/lib/Cake/Test/Case/Console/TaskCollectionTest.php +5369f66c14f3e86d93e8381b110719a6 ./web/api/lib/Cake/Test/Case/Console/Command/Task/ModelTaskTest.php +480688c05bc3a58e8e351f035080cb7f ./web/api/lib/Cake/Test/Case/Console/Command/Task/TemplateTaskTest.php +0737e9efa17bad676cd5eedcfc0cef4f ./web/api/lib/Cake/Test/Case/Console/Command/Task/ExtractTaskTest.php +5b5370a46a1e6cae754f84b3acfb71ce ./web/api/lib/Cake/Test/Case/Console/Command/Task/DbConfigTaskTest.php +e3fb89115a3383f0ab2b806bd9b521a5 ./web/api/lib/Cake/Test/Case/Console/Command/Task/ProjectTaskTest.php +be4a97839a078e4933cd6a7aab6172dd ./web/api/lib/Cake/Test/Case/Console/Command/Task/CommandTaskTest.php +a576c31b5ba62c3d6ac152fdacf37d73 ./web/api/lib/Cake/Test/Case/Console/Command/Task/ViewTaskTest.php +805da7fd82648a23e03622249ab91855 ./web/api/lib/Cake/Test/Case/Console/Command/Task/ControllerTaskTest.php +bed854693337f4b6f3b9839eb84c643f ./web/api/lib/Cake/Test/Case/Console/Command/Task/PluginTaskTest.php +04d8b3e0a2bc29adbb12014fd2888e9b ./web/api/lib/Cake/Test/Case/Console/Command/Task/TestTaskTest.php +dfdac0b8eba01fccc855552acc7d78f9 ./web/api/lib/Cake/Test/Case/Console/Command/Task/FixtureTaskTest.php +3b727ca086d7d73b44a662b2bcfabc1c ./web/api/lib/Cake/Test/Case/Console/Command/CompletionShellTest.php +c8aa168ea69369dca5e5f6852ed3790a ./web/api/lib/Cake/Test/Case/Console/Command/AclShellTest.php +dcc2c7fb1964967d28a75eb1ce6f8854 ./web/api/lib/Cake/Test/Case/Console/Command/TestShellTest.php +c61adbba65a1f5d05e03e5393316eabd ./web/api/lib/Cake/Test/Case/Console/Command/ApiShellTest.php +e79e0dc5217d098e1ec344fe3ec3a829 ./web/api/lib/Cake/Test/Case/Console/Command/SchemaShellTest.php +086dd90c2420c2bdd246ea309a465a2d ./web/api/lib/Cake/Test/Case/Console/Command/BakeShellTest.php +edbc2d06b7b0588c486641ccefa6ae60 ./web/api/lib/Cake/Test/Case/Console/Command/CommandListShellTest.php +b23925778c9558cd9efe6a2f0bbd2e28 ./web/api/lib/Cake/Test/Case/Console/HelpFormatterTest.php +a0d6224686dfd1ce2cb31d4c585bfde8 ./web/api/lib/Cake/Test/Case/Console/ConsoleErrorHandlerTest.php +6b7cb3e458e8ea3d44626ec25a15452f ./web/api/lib/Cake/Test/Case/Console/AllConsoleTest.php +451d75024972c827283bc93bdcec4eb1 ./web/api/lib/Cake/Test/Case/Console/ShellTest.php +8702bd6801212b4d3d123c710ba10f7e ./web/api/lib/Cake/Test/Case/Console/ConsoleOptionParserTest.php +d9d17a1614c7637b9852c484a35d559a ./web/api/lib/Cake/Test/Case/Console/AllTasksTest.php +b5f58308eb5df751dfe9e15a1389fdcd ./web/api/lib/Cake/Test/Case/Console/ConsoleOutputTest.php +e50126d3e6308f213346bd2c98414aeb ./web/api/lib/Cake/Test/Case/Console/AllConsoleLibsTest.php +741437aee464a2dac560188226c78ba5 ./web/api/lib/Cake/Test/Case/AllLogTest.php +fa85ba3bffc4474cdc834ccafd1b5a73 ./web/api/lib/Cake/Test/Case/AllErrorTest.php +84b181c6f26c312e36e355606de5d209 ./web/api/lib/Cake/Test/Case/Log/Engine/ConsoleLogTest.php +16caa7e2dbcca5a83252cc987a20a9b5 ./web/api/lib/Cake/Test/Case/Log/Engine/SyslogLogTest.php +ded2dc6c887e47030d3d252f7b4575db ./web/api/lib/Cake/Test/Case/Log/Engine/FileLogTest.php +aef4c5c5911c96b44e700d5f26bc3b73 ./web/api/lib/Cake/Test/Case/Log/LogEngineCollectionTest.php +06026f95a1debb460e277a646e6ac43a ./web/api/lib/Cake/Test/Case/Log/CakeLogTest.php +0f00fdc571c93d612769062c4af70cbb ./web/api/lib/Cake/Test/Case/Utility/ValidationTest.php +59428ad65dbee5d4ab43f7f0131b3c96 ./web/api/lib/Cake/Test/Case/Utility/InflectorTest.php +d9b31a6bc69683a6964c009cd9e3e512 ./web/api/lib/Cake/Test/Case/Utility/ClassRegistryTest.php +1469fc1e22049f6cdc5caa386c2c22b8 ./web/api/lib/Cake/Test/Case/Utility/XmlTest.php +bf07727fc631fb417c6facf700bc8516 ./web/api/lib/Cake/Test/Case/Utility/CakeTimeTest.php +d46aed3d4420d5f6418381df533d0a5c ./web/api/lib/Cake/Test/Case/Utility/FolderTest.php +4dada229a77feac700a93e15ab28adf7 ./web/api/lib/Cake/Test/Case/Utility/HashTest.php +5713ed750827f0738f70c7457f41f3c5 ./web/api/lib/Cake/Test/Case/Utility/SetTest.php +e455a3952236dcb52b357236a84a584c ./web/api/lib/Cake/Test/Case/Utility/CakeNumberTest.php +748a78e801c7f9ba9956d9f73285f2e1 ./web/api/lib/Cake/Test/Case/Utility/ObjectCollectionTest.php +0f5438c0001b8a47e6b9b6350388ab03 ./web/api/lib/Cake/Test/Case/Utility/DebuggerTest.php +9a911c7aaa166d4906872e41ae16447b ./web/api/lib/Cake/Test/Case/Utility/StringTest.php +4ffbe291ac61634df88ef5bff48e0341 ./web/api/lib/Cake/Test/Case/Utility/SecurityTest.php +15c848b15f6e10e67764f0cc85c4648f ./web/api/lib/Cake/Test/Case/Utility/FileTest.php +2b94172aed32bdfa4b4798ee4e14cf85 ./web/api/lib/Cake/Test/Case/Utility/SanitizeTest.php +b32b712b6b86086c271c7e6d59ae5214 ./web/api/lib/Cake/Test/Case/AllConsoleTest.php +e056264fbb30c83042f6dade571096bb ./web/api/lib/Cake/Test/Case/BasicsTest.php +ba5784ecb7f6db474552216162c5c64c ./web/api/lib/Cake/Test/Case/AllHelpersTest.php +85621ce80da57b3c33f4e4f29c0b34f9 ./web/api/lib/Cake/Test/Case/Routing/RouterTest.php +8247c100a3ebc30b227e0c855e11ba4f ./web/api/lib/Cake/Test/Case/Routing/Route/CakeRouteTest.php +bf9110596787905b69616dcb97300283 ./web/api/lib/Cake/Test/Case/Routing/Route/RedirectRouteTest.php +d97e50ac96e09f798af1ec61e213aba3 ./web/api/lib/Cake/Test/Case/Routing/Route/PluginShortRouteTest.php +361aac035122f1f195c0f1edd76dcc11 ./web/api/lib/Cake/Test/Case/Routing/Filter/AssetDispatcherTest.php +bd234fc681ea8ecb49907939d86c85ca ./web/api/lib/Cake/Test/Case/Routing/DispatcherTest.php +c10f81e019bfa6a2fb827fbce10f2365 ./web/api/lib/Cake/Test/Case/Configure/IniReaderTest.php +bb5e333eeba2bb0bfa9dba7070524836 ./web/api/lib/Cake/Test/Case/Configure/PhpReaderTest.php +fcd2b55815712664e3e1bd0acbf732ed ./web/api/lib/Cake/Test/Case/AllUtilityTest.php +2fb28b1c37f97d08c0a235183eea60d2 ./web/api/lib/Cake/Test/Case/View/MediaViewTest.php +14a3f5df37c646f48bb52093677d545d ./web/api/lib/Cake/Test/Case/View/JsonViewTest.php +43ddc83f561182ce4fa0df29edb51bdd ./web/api/lib/Cake/Test/Case/View/XmlViewTest.php +9548acd7accd19abebabc6e94454348b ./web/api/lib/Cake/Test/Case/View/ViewTest.php +00544e1b6a5ae58de7d8759f0966778b ./web/api/lib/Cake/Test/Case/View/HelperTest.php +cab20749a645d5c7ef29205db7eeeb45 ./web/api/lib/Cake/Test/Case/View/ScaffoldViewTest.php +0f0e7f8ebb43458147a437e36f653657 ./web/api/lib/Cake/Test/Case/View/Helper/FormHelperTest.php +42fc2ae9e5eab5c81b9924c917352777 ./web/api/lib/Cake/Test/Case/View/Helper/RssHelperTest.php +d1dbc963f78f0fdcf1f64b4bc12c1a5c ./web/api/lib/Cake/Test/Case/View/Helper/TextHelperTest.php +909ba7efc0b1c5c0de3514eeab12f74f ./web/api/lib/Cake/Test/Case/View/Helper/PrototypeEngineHelperTest.php +1be2a643ce6a2c644864a1812b709256 ./web/api/lib/Cake/Test/Case/View/Helper/MootoolsEngineHelperTest.php +02f4cf47cae9f2e5209deb6ee410669c ./web/api/lib/Cake/Test/Case/View/Helper/PaginatorHelperTest.php +57c94d053bc289016a2ec2eb372fe451 ./web/api/lib/Cake/Test/Case/View/Helper/NumberHelperTest.php +6711a391a6a6967d39d5e282a6b1b3ba ./web/api/lib/Cake/Test/Case/View/Helper/JqueryEngineHelperTest.php +fb691f07021d5cc0b876a0379263a43a ./web/api/lib/Cake/Test/Case/View/Helper/HtmlHelperTest.php +77c868c09a275e66c2fa36f7dc3c7295 ./web/api/lib/Cake/Test/Case/View/Helper/TimeHelperTest.php +67c597a0f2c495490e8b22b9e5865a45 ./web/api/lib/Cake/Test/Case/View/Helper/JsHelperTest.php +4ef4f9191a7308e93641bbee4577e74c ./web/api/lib/Cake/Test/Case/View/Helper/SessionHelperTest.php +6a6a88f26df80152794c6f8c2c18b245 ./web/api/lib/Cake/Test/Case/View/Helper/CacheHelperTest.php +5e70417a2ec68dc2d81b8b74398c2c8b ./web/api/lib/Cake/Test/Case/View/HelperCollectionTest.php +4d047ad35fd4a94c1596f144d6c3540d ./web/api/lib/Cake/Test/Case/View/ThemeViewTest.php +e18ba68b37ff5a8884c5f45c6c6512dd ./web/api/lib/Cake/Test/Case/Controller/ControllerMergeVarsTest.php +f7ab7f77423dbaba944c45dcbbed7304 ./web/api/lib/Cake/Test/Case/Controller/ComponentCollectionTest.php +6cd71ead7609c35d239689508fbc90d6 ./web/api/lib/Cake/Test/Case/Controller/PagesControllerTest.php +3bd90230ac07728c7781cf957f49d762 ./web/api/lib/Cake/Test/Case/Controller/Component/SessionComponentTest.php +846a35959b07b8ce1112f2dc77f3315f ./web/api/lib/Cake/Test/Case/Controller/Component/AuthComponentTest.php +7b15e90d63d2dc071e4af85e284b74d3 ./web/api/lib/Cake/Test/Case/Controller/Component/Acl/IniAclTest.php +6c29a0495147d0d6e7be2527ad360937 ./web/api/lib/Cake/Test/Case/Controller/Component/Acl/DbAclTest.php +bcc3cbeee2a496b01da4c8c2b244d089 ./web/api/lib/Cake/Test/Case/Controller/Component/Acl/PhpAclTest.php +9e4020e1255839c74f47e2e8c6eabb3f ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/CrudAuthorizeTest.php +d86d20d2afdb108745581608cf96d467 ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/ActionsAuthorizeTest.php +4b62d63e7e20fab29d2e2777a0124a5c ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/ControllerAuthorizeTest.php +ed173a5521df995b730b7af8a1f4b8c0 ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/DigestAuthenticateTest.php +3864eeadaa484b8ac3212f93b595c61b ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/FormAuthenticateTest.php +5b8cc509e6854ad3cc2f791b2b74317d ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/BlowfishAuthenticateTest.php +54a15150727b20c275b91093ce07f155 ./web/api/lib/Cake/Test/Case/Controller/Component/Auth/BasicAuthenticateTest.php +e3edb9511319439ab385e842a352f3e2 ./web/api/lib/Cake/Test/Case/Controller/Component/PaginatorComponentTest.php +616216eb97660a90d5e5bc72c0ce7ba3 ./web/api/lib/Cake/Test/Case/Controller/Component/CookieComponentTest.php +2648749cc3237f44307650f014df3dc8 ./web/api/lib/Cake/Test/Case/Controller/Component/RequestHandlerComponentTest.php +a0eae0001fce47cd79034cc1dfb17cd2 ./web/api/lib/Cake/Test/Case/Controller/Component/AclComponentTest.php +612d5e310b95bdc8032a44080d262713 ./web/api/lib/Cake/Test/Case/Controller/Component/SecurityComponentTest.php +380c1ea650d8d1e0923b955546752afa ./web/api/lib/Cake/Test/Case/Controller/Component/EmailComponentTest.php +1c7c93121ecc81be38261a6b87c05a70 ./web/api/lib/Cake/Test/Case/Controller/ScaffoldTest.php +89e46db9812dc94698ae8f97a3fbf67d ./web/api/lib/Cake/Test/Case/Controller/ControllerTest.php +8079ea43d189969a4dee9e0a3f9d4ff0 ./web/api/lib/Cake/Test/Case/Controller/ComponentTest.php +c254b3c609067be03e4563f49cf8a92a ./web/api/lib/Cake/Test/Case/AllDatabaseTest.php +4cd612bc9a088980567a75ff8a2faaa0 ./web/api/lib/Cake/Test/Case/AllEventTest.php +d976d5c3bd792de9e8db624c0e40f486 ./web/api/lib/Cake/Test/Case/AllViewTest.php +5ce256ec762cea942b0b977b15f64757 ./web/api/lib/Cake/Test/Case/AllConfigureTest.php +be65c8f9fe2969a5d6ea57be085dde97 ./web/api/lib/Cake/Test/Case/AllCacheTest.php +0ed38722a188f88f15649a6859a0c633 ./web/api/lib/Cake/Test/bake_compare/Controller/ActionsUsingSessions.ctp +86f57fc1d339deeb0d79350481423785 ./web/api/lib/Cake/Test/bake_compare/Controller/Scaffold.ctp +d2a5178a1a5f2df4f58be28c73984b4b ./web/api/lib/Cake/Test/bake_compare/Controller/NoActions.ctp +fe60ba93d3437177903b7556a644bffd ./web/api/lib/Cake/Test/bake_compare/Controller/NoHelpersOrComponents.ctp +7b505ca9d7ffcd55594dd9a694e856f7 ./web/api/lib/Cake/Test/bake_compare/Controller/ActionsWithNoSessions.ctp +dc6dc833b97fa0697ce73e4c094a4091 ./web/api/lib/Cake/Test/Fixture/ArosAcoFixture.php +278510fc13ea5d7676dc552397f06d80 ./web/api/lib/Cake/Test/Fixture/MessageFixture.php +4eeb7d23080b38d5497db6b664ea0c53 ./web/api/lib/Cake/Test/Fixture/AdFixture.php +8228e632371ed816c8b1f8f90619a98e ./web/api/lib/Cake/Test/Fixture/DeviceTypeFixture.php +6b68c1e6da9192d37c52610d369e9f12 ./web/api/lib/Cake/Test/Fixture/MyProductFixture.php +c7e91e7ef25c23eaac72e5dd0fb7e291 ./web/api/lib/Cake/Test/Fixture/GroupUpdateAllFixture.php +f2246dda3d7d77bbd2f773773a7638ee ./web/api/lib/Cake/Test/Fixture/SampleFixture.php +5145b7ca50acd72b8493ab0d5a7c23e3 ./web/api/lib/Cake/Test/Fixture/BasketFixture.php +b0a3a3abacc5711b19efbddd7cd5a16c ./web/api/lib/Cake/Test/Fixture/JoinAFixture.php +f042690b0eebc207660670c11ba95ca9 ./web/api/lib/Cake/Test/Fixture/CallbackFixture.php +adebe303cbb9872f5d2c04c33a75b702 ./web/api/lib/Cake/Test/Fixture/NumberTreeTwoFixture.php +472f8121baffb5df68249aba2134836f ./web/api/lib/Cake/Test/Fixture/FeaturedFixture.php +79f04aa75d8e080f323496f368be1d4e ./web/api/lib/Cake/Test/Fixture/UuidFixture.php +87acd16e03a30b5c2200bd93d0fc041c ./web/api/lib/Cake/Test/Fixture/PrimaryModelFixture.php +530ebf9b7f62bbb9a0249b5785ca15bb ./web/api/lib/Cake/Test/Fixture/PersonFixture.php +8a4b7e6ba180b65662444b930c521219 ./web/api/lib/Cake/Test/Fixture/ThePaperMonkiesFixture.php +9c4d0c1d6d2661f816174859ae9c7686 ./web/api/lib/Cake/Test/Fixture/AuthorFixture.php +62d1cf71c351460b3bb5896e4c29e29e ./web/api/lib/Cake/Test/Fixture/BiddingFixture.php +60e4e9169f063a27c5abee4d9e018944 ./web/api/lib/Cake/Test/Fixture/TranslateWithPrefixFixture.php +80ba4f8a7515a17d4cbf4d0d48599548 ./web/api/lib/Cake/Test/Fixture/UnsignedFixture.php +e2e7e772319b3bf8406b3026cb5e99c3 ./web/api/lib/Cake/Test/Fixture/BidFixture.php +1ec8e943814ef4fb2adad25811384724 ./web/api/lib/Cake/Test/Fixture/MyUserFixture.php +c20f5c608940ed9f7f016c7fce19a010 ./web/api/lib/Cake/Test/Fixture/ProjectFixture.php +c4b0117ec96bbfd46b2bcf9016332aa9 ./web/api/lib/Cake/Test/Fixture/AnotherArticleFixture.php +19c5be9845abe940b97a2932ea9724be ./web/api/lib/Cake/Test/Fixture/HomeFixture.php +715f4cd05334d3a339744826dbba7beb ./web/api/lib/Cake/Test/Fixture/ArmorFixture.php +87c99fac19773a78bfd23d50510bcc14 ./web/api/lib/Cake/Test/Fixture/CategoryThreadFixture.php +8a8a49582a7ba72c8dedaf9abaec2e44 ./web/api/lib/Cake/Test/Fixture/NumericArticleFixture.php +45b4d54ba6780d59a96b5691bd36db1c ./web/api/lib/Cake/Test/Fixture/ArticleFeaturedsTagsFixture.php +4ab74207e32110ba25136dee54f02711 ./web/api/lib/Cake/Test/Fixture/NumberTreeFixture.php +b8532c2706e7cf2806da496579106736 ./web/api/lib/Cake/Test/Fixture/CounterCachePostFixture.php +ee907bc2b1b2d6f43b2545ce2488424f ./web/api/lib/Cake/Test/Fixture/UuiditemFixture.php +f27787038e90918007394c263e860618 ./web/api/lib/Cake/Test/Fixture/AuthUserFixture.php +cf5c6992308a78fbe0a61cf4c6855547 ./web/api/lib/Cake/Test/Fixture/UuidportfolioFixture.php +8bddadd60c56ca7f08d68d4e1bb08382 ./web/api/lib/Cake/Test/Fixture/CounterCachePostNonstandardPrimaryKeyFixture.php +1f175a3cdc6e2dd91fd2ae15a68d1e9a ./web/api/lib/Cake/Test/Fixture/CounterCacheUserNonstandardPrimaryKeyFixture.php +df9a5ca957b19f95e297faf6ad3d9b47 ./web/api/lib/Cake/Test/Fixture/BakeArticlesBakeTagFixture.php +285b29113806a0c3b955d1372819a4f5 ./web/api/lib/Cake/Test/Fixture/FlagTreeFixture.php +5781daa16875c7cb6275ab35057cd94f ./web/api/lib/Cake/Test/Fixture/ExteriorTypeCategoryFixture.php +77a55bb2fc37c9f60bfb1f37bd395fb6 ./web/api/lib/Cake/Test/Fixture/ContentAccountFixture.php +39195264a0986de72dcd662d7e06a1ff ./web/api/lib/Cake/Test/Fixture/TranslatedItemFixture.php +ae47fac8f9452f62982d4b2dd1091e00 ./web/api/lib/Cake/Test/Fixture/UuiditemsUuidportfolioFixture.php +ccfce097dc886b7f3abeaaea4788bf88 ./web/api/lib/Cake/Test/Fixture/UuidTagFixture.php +cb4501a88de69939691a4f10c123c33f ./web/api/lib/Cake/Test/Fixture/NodeFixture.php +9a08d164c4cb732b28bfa234f68e1ae7 ./web/api/lib/Cake/Test/Fixture/AuthUserCustomFieldFixture.php +24e6f7f0ebc99253ad7eecc23c8b6d5b ./web/api/lib/Cake/Test/Fixture/DeviceFixture.php +eb0d42d2679507960af3367c35ef0e4b ./web/api/lib/Cake/Test/Fixture/BakeArticleFixture.php +77140a26960fe6c8fa0f589b58212128 ./web/api/lib/Cake/Test/Fixture/BinaryTestFixture.php +11b25671f33fb3a0c3c8520ad392359b ./web/api/lib/Cake/Test/Fixture/TranslateTableFixture.php +3f7d12cfc6fcab6068d73cdd5374499f ./web/api/lib/Cake/Test/Fixture/TestPluginArticleFixture.php +590dce9c302ec8c87cb3847b39f891b0 ./web/api/lib/Cake/Test/Fixture/JoinACFixture.php +7a5a03dfaa122607ab52a8983ffd5cb8 ./web/api/lib/Cake/Test/Fixture/JoinCFixture.php +eb54f262646b09b9978335baf14ed380 ./web/api/lib/Cake/Test/Fixture/ArticleFeaturedFixture.php +ba8f89e2ab1f8fef607af09bb29fb7eb ./web/api/lib/Cake/Test/Fixture/GuildFixture.php +9e4450911bc70a83a382441a055ca997 ./web/api/lib/Cake/Test/Fixture/soap_response.xml +906e7df1f22969b819bc663c87d1c403 ./web/api/lib/Cake/Test/Fixture/JoinThingFixture.php +83209fad591c7ea8f29e9ec57be89fd8 ./web/api/lib/Cake/Test/Fixture/FruitFixture.php +2b4cc83baa787184ab8d1cd6b2b69817 ./web/api/lib/Cake/Test/Fixture/AroTwoFixture.php +70f20280785aaddedf3efa07b26b5917 ./web/api/lib/Cake/Test/Fixture/PostsTagFixture.php +3d3362d4aaa756c29db11c485f5d5e69 ./web/api/lib/Cake/Test/Fixture/FeatureSetFixture.php +6c73653b3bd3d9bc5297429cb559a5ee ./web/api/lib/Cake/Test/Fixture/ArosAcoTwoFixture.php +f57b9bb9df0f861adf86ac251eb0a79e ./web/api/lib/Cake/Test/Fixture/CategoryFixture.php +9a3efa03c8ae189effb8cca447c8362d ./web/api/lib/Cake/Test/Fixture/MyCategoriesMyProductsFixture.php +540bd81233cee5f2d08b888a3ecd2901 ./web/api/lib/Cake/Test/Fixture/DomainFixture.php +262fa46233ae6314bff6c5e27f75f875 ./web/api/lib/Cake/Test/Fixture/AdvertisementFixture.php +995f02ea1b9713c51c37c958adfd279d ./web/api/lib/Cake/Test/Fixture/ArmorsPlayerFixture.php +9f9442a0aeb721e5efd5c42b7c877749 ./web/api/lib/Cake/Test/Fixture/BiddingMessageFixture.php +076d343c29223f6f40be09b7cc9fe7a6 ./web/api/lib/Cake/Test/Fixture/PlayerFixture.php +f67f46b3794e6cd11a023cb8854fa5e3 ./web/api/lib/Cake/Test/Fixture/CakeSessionFixture.php +963ae52c2817bfce02dcb979ace44e7f ./web/api/lib/Cake/Test/Fixture/sample.xml +d4112bb617a9775effeea78481b546ac ./web/api/lib/Cake/Test/Fixture/AcoTwoFixture.php +3703a4c067a775d42c43c35e13e33d4e ./web/api/lib/Cake/Test/Fixture/UnderscoreFieldFixture.php +7927557c29837e187478640fece20d0e ./web/api/lib/Cake/Test/Fixture/MyCategoriesMyUsersFixture.php +90088c75b3493da077bb9d5d24f1c5a5 ./web/api/lib/Cake/Test/Fixture/PortfolioFixture.php +1979b836b31c09d3480d3cce09ad2752 ./web/api/lib/Cake/Test/Fixture/DeviceTypeCategoryFixture.php +004212ca4e69011b167b8fbdae475fe8 ./web/api/lib/Cake/Test/Fixture/UnconventionalTreeFixture.php +9a438055c6fdca4be89a8c416d82ccbe ./web/api/lib/Cake/Test/Fixture/UuidTreeFixture.php +aa75db7886ba4ac660f5c4ab81d4d86b ./web/api/lib/Cake/Test/Fixture/SomethingFixture.php +8863db37a8ecc2a955de86806b7881c8 ./web/api/lib/Cake/Test/Fixture/AssertTagsTestCase.php +b83465ef3a9cf185a72097380d3a57ce ./web/api/lib/Cake/Test/Fixture/JoinBFixture.php +731df31bcadcef69b4e561d478bbc9f5 ./web/api/lib/Cake/Test/Fixture/PrefixTestFixture.php +07b450df4578b566274d61c4480f96ff ./web/api/lib/Cake/Test/Fixture/DataTestFixture.php +8168b02aaf33dbd988b901d00ad09343 ./web/api/lib/Cake/Test/Fixture/TagFixture.php +4067293dd16c8f9452a0a5a745c6a962 ./web/api/lib/Cake/Test/Fixture/CounterCacheUserFixture.php +e6d92bb09defb35ce5276284d3596177 ./web/api/lib/Cake/Test/Fixture/ContentFixture.php +b65d5c71b10bb3f4f1b93e057b85ee97 ./web/api/lib/Cake/Test/Fixture/TranslateArticleFixture.php +8e5c0d35fdbb9ccf75574ae581f8d52f ./web/api/lib/Cake/Test/Fixture/AroFixture.php +f875ecbf0d89723bc009b9a19ef21516 ./web/api/lib/Cake/Test/Fixture/AccountFixture.php +e313f03752eb1189251853c82279c773 ./web/api/lib/Cake/Test/Fixture/SiteFixture.php +19951e2ebb90169fc4d4d6daaf82f7a1 ./web/api/lib/Cake/Test/Fixture/CacheTestModelFixture.php +a15ec2e3e7f5252107dff114089118c6 ./web/api/lib/Cake/Test/Fixture/UuiditemsUuidportfolioNumericidFixture.php +bb89e1729bfb1600b13d568494888913 ./web/api/lib/Cake/Test/Fixture/InnoFixture.php +6d2a933c69525e176a475b6320b9cf34 ./web/api/lib/Cake/Test/Fixture/FruitsUuidTagFixture.php +1acc6df94909ebabdcc2c2882a0d967c ./web/api/lib/Cake/Test/Fixture/ArticlesTagFixture.php +e8b3b841d6a2b21477f5353b5d36bc24 ./web/api/lib/Cake/Test/Fixture/BakeCommentFixture.php +6c3f280f50af9ea068b1a2298c694d45 ./web/api/lib/Cake/Test/Fixture/DocumentFixture.php +015a13bfabdca2c822255eb2cdb98c38 ./web/api/lib/Cake/Test/Fixture/MyCategoryFixture.php +4e78db291d8f42c81a35abbab14bbfbe ./web/api/lib/Cake/Test/Fixture/ProductFixture.php +49bee7b38b4c0b5663f77b7826a03d7e ./web/api/lib/Cake/Test/Fixture/DocumentDirectoryFixture.php +1797df1600ea0e1d0a9d4ecb46edcef3 ./web/api/lib/Cake/Test/Fixture/TestPluginCommentFixture.php +f0edcdc32f3eb2b41e1ea3e07dcd252e ./web/api/lib/Cake/Test/Fixture/SessionFixture.php +3fd558c1de79d6dea43757f2d69e3d22 ./web/api/lib/Cake/Test/Fixture/DomainsSiteFixture.php +6dd858396a015a3333faa7e6fab7ccb4 ./web/api/lib/Cake/Test/Fixture/CommentFixture.php +f739fae95d3abb3f425ee2c0bf70ba3b ./web/api/lib/Cake/Test/Fixture/BakeTagFixture.php +f42ac7827b377fa39b489a9e479e5f7c ./web/api/lib/Cake/Test/Fixture/AfterTreeFixture.php +d8328883d12d89912454750053b6940d ./web/api/lib/Cake/Test/Fixture/JoinABFixture.php +593f2f89910cf16974f6bbba35f09054 ./web/api/lib/Cake/Test/Fixture/TranslatedArticleFixture.php +b69fb89c548ca407b6fb4947fe423710 ./web/api/lib/Cake/Test/Fixture/PostFixture.php +bee241743d7e98ef841aac0918198a9b ./web/api/lib/Cake/Test/Fixture/StoriesTagFixture.php +d17347fe9a46447d329e36133d7006ef ./web/api/lib/Cake/Test/Fixture/CdFixture.php +d83461d561ea4cf96a5d034355424014 ./web/api/lib/Cake/Test/Fixture/AcoActionFixture.php +3f99ebe61ccc2998ee1a339c7dde8224 ./web/api/lib/Cake/Test/Fixture/AppleFixture.php +362a00e5b3766ec29b468de16c5489ad ./web/api/lib/Cake/Test/Fixture/DependencyFixture.php +16e91175cccdc2cfcaee1aa412d1343f ./web/api/lib/Cake/Test/Fixture/GuildsPlayerFixture.php +5b9d0be67c142cb2d814a7277c314b2a ./web/api/lib/Cake/Test/Fixture/StoryFixture.php +0273321b83f9e2f70c2e3452618b16e6 ./web/api/lib/Cake/Test/Fixture/UserFixture.php +e4ef0fd14fb2d7c806847710760ade36 ./web/api/lib/Cake/Test/Fixture/ItemsPortfolioFixture.php +d5c240a659c1f3928c0c13dea2c6e86c ./web/api/lib/Cake/Test/Fixture/ItemFixture.php +506ede950ce34abf0d3cf9d6af26b1d6 ./web/api/lib/Cake/Test/Fixture/ImageFixture.php +7982fecee52afd8f8e3c102c90e03ce3 ./web/api/lib/Cake/Test/Fixture/soap_request.xml +2154eb1e6fbdb1b67ab20077ee2aabc9 ./web/api/lib/Cake/Test/Fixture/SyfileFixture.php +74a327150ed33fc4d4483de68c30f30a ./web/api/lib/Cake/Test/Fixture/FilmFileFixture.php +dd008d649c11ed1cc6e1d19da4c4768b ./web/api/lib/Cake/Test/Fixture/ThreadFixture.php +18b2a33eb182d8c4e06e817b33852aca ./web/api/lib/Cake/Test/Fixture/OverallFavoriteFixture.php +4012cac8fe4eabfeb07953e74d6cba19 ./web/api/lib/Cake/Test/Fixture/BookFixture.php +a6baaa6bb53ca2be5269793609c9053e ./web/api/lib/Cake/Test/Fixture/AttachmentFixture.php +eca43d88bc97da58bd625013cda426e1 ./web/api/lib/Cake/Test/Fixture/TranslateFixture.php +9cd4473c5b1013c8b67179ef8b62b30a ./web/api/lib/Cake/Test/Fixture/ProductUpdateAllFixture.php +c458b058f7f3fa50347ff9c13578f47e ./web/api/lib/Cake/Test/Fixture/SecondaryModelFixture.php +369eb44f46af527bf980a33fa37048ee ./web/api/lib/Cake/Test/Fixture/AcoFixture.php +5e37cfe208a53428a3bd094bd87c36b2 ./web/api/lib/Cake/Test/Fixture/DatatypeFixture.php +1d3c77a57cdaab1661457bc1f4c96848 ./web/api/lib/Cake/Test/Fixture/rss.xml +547a81bc866b1882c48c39aa9975716e ./web/api/lib/Cake/Test/Fixture/CampaignFixture.php +440880a03e16c4eb86cc7bbe9f6a0573 ./web/api/lib/Cake/Test/Fixture/ArticleFixture.php +c9d3093e8718d1839837da87f4b2babc ./web/api/lib/Cake/Test/Fixture/FixturizedTestCase.php +4ad8d40e541e32ffc9e2dc35d85314c7 ./web/api/lib/Cake/Test/Fixture/SomethingElseFixture.php +4a38feb6a73a8a0155463ec5e6a85f6e ./web/api/lib/Cake/Error/exceptions.php +bd71ed49232d13f4be44b17ab0b2fa2e ./web/api/lib/Cake/Error/ExceptionRenderer.php +b82eb5bfc3668f82d30f1c083e9b244e ./web/api/lib/Cake/Error/ErrorHandler.php +88c632ad47f0c56fd86e61891ee6bab4 ./web/api/lib/Cake/TestSuite/Reporter/CakeBaseReporter.php +c41906d8fee45a4064b98512dc5e976f ./web/api/lib/Cake/TestSuite/Reporter/CakeTextReporter.php +868b078ba1b29af0dd299b0d9ef07f9a ./web/api/lib/Cake/TestSuite/Reporter/CakeHtmlReporter.php +55563451eb434be1e14b02a8e6aab94e ./web/api/lib/Cake/TestSuite/CakeTestRunner.php +4ae38de5c977a2f3f441d502e7ac9d52 ./web/api/lib/Cake/TestSuite/Coverage/HtmlCoverageReport.php +0fc8dc2aa6dc3bf381b442ee921d429f ./web/api/lib/Cake/TestSuite/Coverage/BaseCoverageReport.php +a20584fa04005f483f8d0f025599848f ./web/api/lib/Cake/TestSuite/Coverage/TextCoverageReport.php +2b061837dcdf03e63540a079da9115ea ./web/api/lib/Cake/TestSuite/ControllerTestCase.php +2b8ebcdc3c5fa8d049efbe5ebf1a64f6 ./web/api/lib/Cake/TestSuite/CakeTestLoader.php +1ccfe06071c94352a44db7133e69eb62 ./web/api/lib/Cake/TestSuite/CakeTestSuiteCommand.php +edb7053ef383388aa2114789a070f3a9 ./web/api/lib/Cake/TestSuite/CakeTestSuite.php +1982ef5ca129f1b024a0dd86d5c82401 ./web/api/lib/Cake/TestSuite/templates/missing_connection.php +d41f54ac975ae1345ef326ab31167939 ./web/api/lib/Cake/TestSuite/templates/xdebug.php +23ac136174030244e2b58b55635dbee7 ./web/api/lib/Cake/TestSuite/templates/phpunit.php +fc6b576548c9b026191a206dd559bd70 ./web/api/lib/Cake/TestSuite/templates/menu.php +30dc1267e894f4d5e8e13e3e3919552b ./web/api/lib/Cake/TestSuite/templates/header.php +602dafd8c9e26196031b5be3a28246e8 ./web/api/lib/Cake/TestSuite/templates/footer.php +65a18b914cac702b192dc52e427ad58f ./web/api/lib/Cake/TestSuite/CakeTestCase.php +6b7783fd17c7d5976201e86d64d2a5b6 ./web/api/lib/Cake/TestSuite/Fixture/CakeFixtureManager.php +d7395674ff2f6bde799de8779b967b3c ./web/api/lib/Cake/TestSuite/Fixture/CakeTestModel.php +e0bef14cf71f0c2a92578ada6afffabc ./web/api/lib/Cake/TestSuite/Fixture/CakeTestFixture.php +243f6398392e6fa2d7fee25989e634c4 ./web/api/lib/Cake/TestSuite/CakeTestSuiteDispatcher.php +7edc4c5ae2c90d6aca5bc8807f751a23 ./web/api/lib/Cake/Network/CakeRequest.php +ebb62ca45fb02b7a9abbe7f47d648fe6 ./web/api/lib/Cake/Network/CakeResponse.php +5eae9f2961fc222f60629c04ea5e25d1 ./web/api/lib/Cake/Network/Http/HttpResponse.php +8b1bad3320564f66ec6b5aca18a45c64 ./web/api/lib/Cake/Network/Http/BasicAuthentication.php +004736448eee71c796c32409d01ad38c ./web/api/lib/Cake/Network/Http/DigestAuthentication.php +09573174b73854f2ceb04bcbdd78311e ./web/api/lib/Cake/Network/Http/HttpSocketResponse.php +eda72b4aa86788e6dcc079d986184cf8 ./web/api/lib/Cake/Network/Http/HttpSocket.php +2427a07c96d22c96673c6ebeb02e2af4 ./web/api/lib/Cake/Network/Email/SmtpTransport.php +807417af9934e292788e4d85f5d29530 ./web/api/lib/Cake/Network/Email/DebugTransport.php +b1e60e0d2c583579e69f69cec8ab45ab ./web/api/lib/Cake/Network/Email/MailTransport.php +cb9f387a1e5984b4baff1da30bc67940 ./web/api/lib/Cake/Network/Email/AbstractTransport.php +fd54c2e07ddfa3b645bdbd16ce182533 ./web/api/lib/Cake/Network/Email/CakeEmail.php +794fb5b072e3f550cf3f2270bc045836 ./web/api/lib/Cake/Network/CakeSocket.php +e8ca2012fe9a5144431e6552cff381ba ./web/api/lib/Cake/Cache/Engine/MemcachedEngine.php +ec0cce858e3c28c809ab7b976169decf ./web/api/lib/Cake/Cache/Engine/WincacheEngine.php +63bceb1b3931d8331d0ede6773616ab7 ./web/api/lib/Cake/Cache/Engine/ApcEngine.php +71eb5a53d52455f43bcb65c0696077f9 ./web/api/lib/Cake/Cache/Engine/XcacheEngine.php +598abf48b1df8012f87d69b1dfe527e8 ./web/api/lib/Cake/Cache/Engine/FileEngine.php +6b839434f69a2d348c76cfd6ebcfb10b ./web/api/lib/Cake/Cache/Engine/MemcacheEngine.php +9e65ceac3036f05ea0607ec960a4ca86 ./web/api/lib/Cake/Cache/Engine/RedisEngine.php +4d2bf6cbad0743b64505196526998ffa ./web/api/lib/Cake/Cache/CacheEngine.php +6bb49835c9dd7b7fa45a9190df6c936e ./web/api/lib/Cake/Cache/Cache.php +ed092dd8cc080c1bb56189dac68f03ba ./web/api/lib/Cake/I18n/I18n.php +1b53dffb1d26e3123ccdd2c40ed274bb ./web/api/lib/Cake/I18n/L10n.php +3b2259d44ca571a7f85c9b773f6394ba ./web/api/lib/Cake/I18n/Multibyte.php +4c3ee35ff9ab5590c825a7e42c699185 ./web/api/lib/Cake/Model/Behavior/AclBehavior.php +f7a4193169cb1ba629352f1eb045308c ./web/api/lib/Cake/Model/Behavior/TreeBehavior.php +ff8e9512b56f43df2e0390a03d8011d5 ./web/api/lib/Cake/Model/Behavior/ContainableBehavior.php +5e5d65238ed9fcd34e5ee48cfb286b9f ./web/api/lib/Cake/Model/Behavior/TranslateBehavior.php +e3634e05e156154240e6a16c412d28e5 ./web/api/lib/Cake/Model/ModelValidator.php +c3d11c95ed8d548363b29150a5f61e60 ./web/api/lib/Cake/Model/ModelBehavior.php +ccd9c05b2d2769e85821d22644ff31e3 ./web/api/lib/Cake/Model/Validator/CakeValidationSet.php +b6bc87da6c2725b1b812427c6750fbf4 ./web/api/lib/Cake/Model/Validator/CakeValidationRule.php +ddda299af1f25c0d3401133a86719a23 ./web/api/lib/Cake/Model/ConnectionManager.php +36a15beafd3fc9b97bffdaa24f87c453 ./web/api/lib/Cake/Model/AcoAction.php +72ce1277383a5b3488a7856afea19e42 ./web/api/lib/Cake/Model/CakeSchema.php +430405827277c7ebaabb0b3d1198229a ./web/api/lib/Cake/Model/Datasource/Database/Postgres.php +9074dfd93621993ffe9fdea3e060791c ./web/api/lib/Cake/Model/Datasource/Database/Mysql.php +a9c232b819fc593f6213171ba8a22ac3 ./web/api/lib/Cake/Model/Datasource/Database/Sqlite.php +3ffb6fe6a6cd01beac83e98cf638c70a ./web/api/lib/Cake/Model/Datasource/Database/Sqlserver.php +95b7e8abe600bd371c14b713181e7196 ./web/api/lib/Cake/Model/Datasource/DataSource.php +f69749b609d36ee1d68f86433db422fe ./web/api/lib/Cake/Model/Datasource/CakeSession.php +65fe7920720ab7f338cec3ffa46212d1 ./web/api/lib/Cake/Model/Datasource/Session/CakeSessionHandlerInterface.php +98fd70694897f1637b9735ea56ae9620 ./web/api/lib/Cake/Model/Datasource/Session/DatabaseSession.php +4da30eb7a22db205de5c90689d2d57d7 ./web/api/lib/Cake/Model/Datasource/Session/CacheSession.php +f00b6053077554321772de44305a869c ./web/api/lib/Cake/Model/Datasource/DboSource.php +387e5990e0436415ab9f327c807b0a14 ./web/api/lib/Cake/Model/AclNode.php +91a48674d1d12ca504e32aaf39a2883e ./web/api/lib/Cake/Model/Aco.php +422ee03d05d16e00130d369eb4915ad7 ./web/api/lib/Cake/Model/Model.php +474ed127207b9608ca876702fc78da95 ./web/api/lib/Cake/Model/Permission.php +8f7f491d2b61ea533a4ecb0c3f571de0 ./web/api/lib/Cake/Model/I18nModel.php +7fa44c3e247f8cbe196f4ac41604e1f3 ./web/api/lib/Cake/Model/BehaviorCollection.php +70e803158136819c68abbc2dc8c33c5c ./web/api/lib/Cake/Model/Aro.php +499effa78232a90c3afd53ca30ba7e57 ./web/api/lib/Cake/Event/CakeEvent.php +939c440fa26a82fc5c1f6adf79803437 ./web/api/lib/Cake/Event/CakeEventListener.php +cf16742c2fc5aea2d4cdaaaed44f93c1 ./web/api/lib/Cake/Event/CakeEventManager.php +0fca7632e5453f5368f22327e7e37bc7 ./web/api/lib/Cake/Core/App.php +9628019de5a34f8c0e547c689414a7c3 ./web/api/lib/Cake/Core/Configure.php +d59383b46db9cb396e8aafb438538b9f ./web/api/lib/Cake/Core/CakePlugin.php +77bcc72bc6f6db70fbc30e1cefb6313c ./web/api/lib/Cake/Core/Object.php +0cbddf8b035f5f0c8314bba6381b2b39 ./web/api/lib/Cake/Config/cacert.pem +2097c4017a4f8956b2eccb1930269666 ./web/api/lib/Cake/Config/unicode/casefolding/0250_02af.php +4303f18902ee53bd3eb8c1fc2d942f29 ./web/api/lib/Cake/Config/unicode/casefolding/2c00_2c5f.php +6b2dcb8420fac67c2b2a81e01bfe3cf0 ./web/api/lib/Cake/Config/unicode/casefolding/ff00_ffef.php +1533c2421b14885abb49db63101e55c1 ./web/api/lib/Cake/Config/unicode/casefolding/0180_024F.php +1ece962ed1862f440edab69b6e043440 ./web/api/lib/Cake/Config/unicode/casefolding/2c60_2c7f.php +b4ac1644d9cb48efd7cab0039042cfe3 ./web/api/lib/Cake/Config/unicode/casefolding/0400_04ff.php +256c0f2ac7d213b078dbc9f067dba93a ./web/api/lib/Cake/Config/unicode/casefolding/2100_214f.php +d0e0dd24c25ef5fb088488296b55f571 ./web/api/lib/Cake/Config/unicode/casefolding/1e00_1eff.php +fa3a9210f22fb7851a58d80f3df43db1 ./web/api/lib/Cake/Config/unicode/casefolding/0100_017f.php +7254b3afe7363bd4dfe7a193f22f24a6 ./web/api/lib/Cake/Config/unicode/casefolding/0080_00ff.php +53e1d459db32b45a0f096643f085224e ./web/api/lib/Cake/Config/unicode/casefolding/0370_03ff.php +687035ab1d78ca77eca33b4e432e10da ./web/api/lib/Cake/Config/unicode/casefolding/0530_058f.php +221793028fdea8bc6518c818241258e6 ./web/api/lib/Cake/Config/unicode/casefolding/2460_24ff.php +5f249fe7785156d6919a8df50d39b6ce ./web/api/lib/Cake/Config/unicode/casefolding/2c80_2cff.php +a2fc552ce8362911614c0509e0b59e9a ./web/api/lib/Cake/Config/unicode/casefolding/1f00_1fff.php +5d4fcce28f00d8c8bfad719299cd8f70 ./web/api/lib/Cake/Config/unicode/casefolding/2150_218f.php +b2f97fabcf60ed7eb3de6f83f56ac1cc ./web/api/lib/Cake/Config/unicode/casefolding/0500_052f.php +fd0d10a4bc338f9b1a67f34862f23ae2 ./web/api/lib/Cake/Config/routes.php +9b4126954f567edf3701fb5d7db428b9 ./web/api/lib/Cake/Config/config.php +57433c55d465ea646dfcd4d36478467b ./web/api/lib/Cake/Console/ConsoleInputSubcommand.php +481ab826e6882e92ba7006dff2c296b2 ./web/api/lib/Cake/Console/TaskCollection.php +ef0e3f45c92a2bd85bcbb746fa0a4f21 ./web/api/lib/Cake/Console/ConsoleOutput.php +c43171402459d583cb356f45e950296d ./web/api/lib/Cake/Console/HelpFormatter.php +4d28017fdaf4c252e865a8925f202528 ./web/api/lib/Cake/Console/Command/AclShell.php +8f32e55c1217e0272aa49392b973e4c1 ./web/api/lib/Cake/Console/Command/ApiShell.php +7d987db285e926beccffcdebf1101e96 ./web/api/lib/Cake/Console/Command/TestsuiteShell.php +d0dd552d4f7123709d2cd73701eb8c3a ./web/api/lib/Cake/Console/Command/TestShell.php +1e91a799a208369b62a9f573d6bea9b9 ./web/api/lib/Cake/Console/Command/ServerShell.php +1b9c94a8b0f9902391d3cff5c775f88f ./web/api/lib/Cake/Console/Command/Task/DbConfigTask.php +c036e81a2a863234d9506e1ea1613827 ./web/api/lib/Cake/Console/Command/Task/ViewTask.php +e5682567f06c1e0bc7a9fe065aaad0ce ./web/api/lib/Cake/Console/Command/Task/PluginTask.php +a587c9aae29901803362974d3b1b75c9 ./web/api/lib/Cake/Console/Command/Task/FixtureTask.php +1fe50ded38809a46711523e74eb44a8f ./web/api/lib/Cake/Console/Command/Task/ProjectTask.php +be30c3129d3332710427d11e6e36ad28 ./web/api/lib/Cake/Console/Command/Task/CommandTask.php +50fb568afaca7c725842ec5b31433a6c ./web/api/lib/Cake/Console/Command/Task/TestTask.php +7e242ec6cfb6db9519323e0ccc4ba63d ./web/api/lib/Cake/Console/Command/Task/BakeTask.php +a4d27825bbd14bd204d4fb103550c130 ./web/api/lib/Cake/Console/Command/Task/TemplateTask.php +555b0952b6059794830e38e8cc0d2537 ./web/api/lib/Cake/Console/Command/Task/ControllerTask.php +635d5607b7735ea1f0d4971823d53726 ./web/api/lib/Cake/Console/Command/Task/ExtractTask.php +c58f695a6fb6590a5243782a8b81655b ./web/api/lib/Cake/Console/Command/Task/ModelTask.php +6fba33aaadf14bee189dbf1da6265606 ./web/api/lib/Cake/Console/Command/BakeShell.php +24bb86c949af73ba550d134c77c0124d ./web/api/lib/Cake/Console/Command/ConsoleShell.php +a07218b76c8184aa8c35cf5f35187aa3 ./web/api/lib/Cake/Console/Command/I18nShell.php +839e4eb6134881d8c4a146e91a602cb5 ./web/api/lib/Cake/Console/Command/CommandListShell.php +7a88eab2dc636bd9783b21b7400bf32b ./web/api/lib/Cake/Console/Command/SchemaShell.php +48f823759ab2dbf7d27900f6c0fe38c5 ./web/api/lib/Cake/Console/Command/UpgradeShell.php +36b29ca4ed8331df525f55bf33536758 ./web/api/lib/Cake/Console/Command/AppShell.php +6d1dcc289b5a2d0ba0dba30b4330e497 ./web/api/lib/Cake/Console/Command/CompletionShell.php +2efa0bf9527d62e501545521ea84d5b0 ./web/api/lib/Cake/Console/ConsoleOptionParser.php +b0a7f1f95560974ab767e44b5549df47 ./web/api/lib/Cake/Console/cake +6ac5a3d5d8ab7b6932c32cd8c6ec8b3f ./web/api/lib/Cake/Console/cake.bat +d232a935b84302ae1387073990869d19 ./web/api/lib/Cake/Console/cake.php +0aae4cec4c9cf43a012bd95a9d73820e ./web/api/lib/Cake/Console/Shell.php +f84f43f3d254ea2de8d268ae6e4472d6 ./web/api/lib/Cake/Console/ShellDispatcher.php +b5fc37604a04144318e3d51e0f9956e9 ./web/api/lib/Cake/Console/Templates/skel/Test/Case/AllTestsTest.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Test/Case/Model/Behavior/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Test/Case/View/Helper/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Test/Case/Controller/Component/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Test/Fixture/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Lib/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Vendor/empty +a2a9efe935decfd5f498bf0d83075574 ./web/api/lib/Cake/Console/Templates/skel/.htaccess +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Model/Behavior/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Model/Datasource/empty +f61e0f11e289494e01a9135974948fbc ./web/api/lib/Cake/Console/Templates/skel/Model/AppModel.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Plugin/empty +175d6594507b93fb84f40346fbe361b8 ./web/api/lib/Cake/Console/Templates/skel/Config/core.php +c8e4baf42d61d087b9b33c081d138a96 ./web/api/lib/Cake/Console/Templates/skel/Config/bootstrap.php +1966f76b86e822660914dfb2f81f2a3f ./web/api/lib/Cake/Console/Templates/skel/Config/acl.php +833a6bf57f730a33e3d78a45410e0b78 ./web/api/lib/Cake/Console/Templates/skel/Config/email.php.default +da8e5db6d3d8579bd465dd9546cdc51e ./web/api/lib/Cake/Console/Templates/skel/Config/routes.php +9a4bffc13eef7dfdf918b29ae35b3542 ./web/api/lib/Cake/Console/Templates/skel/Config/database.php.default +e77ea10804e4b268007d9941611f137e ./web/api/lib/Cake/Console/Templates/skel/Config/acl.ini.php +77a4ab064c8d796f32ee3d8b5193cc86 ./web/api/lib/Cake/Console/Templates/skel/Config/Schema/i18n.php +7b06760a9b74dc1cde66cdf413e3ae88 ./web/api/lib/Cake/Console/Templates/skel/Config/Schema/sessions.sql +40324da8d8ee60e5c205cff512ca448f ./web/api/lib/Cake/Console/Templates/skel/Config/Schema/sessions.php +fd69565dc23c3f3ccc981cc29a2abe5b ./web/api/lib/Cake/Console/Templates/skel/Config/Schema/i18n.sql +be1ae0bceba3274acc4a19a8022a8a6e ./web/api/lib/Cake/Console/Templates/skel/Config/Schema/db_acl.sql +6e1fed022cc3838e922d6f6c693e08e6 ./web/api/lib/Cake/Console/Templates/skel/Config/Schema/db_acl.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Console/Command/Task/empty +f88b951fde6a53787b0039cc6fa3ba24 ./web/api/lib/Cake/Console/Templates/skel/Console/Command/AppShell.php +5883c212c26f2573914c7fcfde18b871 ./web/api/lib/Cake/Console/Templates/skel/Console/cake +db414367df94544f6fc7f3edc25232b0 ./web/api/lib/Cake/Console/Templates/skel/Console/cake.bat +ce8005750e8bdf7ee1862d3128c60fa8 ./web/api/lib/Cake/Console/Templates/skel/Console/cake.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Console/Templates/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/webroot/files/empty +66b3119d379aee26ba668fef49188dd3 ./web/api/lib/Cake/Console/Templates/skel/webroot/favicon.ico +69e2dbff5ecae970e423450e93402f0e ./web/api/lib/Cake/Console/Templates/skel/webroot/.htaccess +7307ecf28dccc0e436a13caa5a38b38f ./web/api/lib/Cake/Console/Templates/skel/webroot/img/test-skip-icon.png +19190f09beb6039fa4153ee05079fb00 ./web/api/lib/Cake/Console/Templates/skel/webroot/img/test-fail-icon.png +bb7e210a60f92e5458e347cf77177c5f ./web/api/lib/Cake/Console/Templates/skel/webroot/img/cake.power.gif +f60716ed419e69f9974a49d8310933d0 ./web/api/lib/Cake/Console/Templates/skel/webroot/img/test-pass-icon.png +4a5504d3f7228af75f3fecbd3d449cf3 ./web/api/lib/Cake/Console/Templates/skel/webroot/img/test-error-icon.png +fc804821ffc3d23daa82885d6b6b0ce6 ./web/api/lib/Cake/Console/Templates/skel/webroot/img/cake.icon.png +f428350d2f7f639dd1f54c690621e5bb ./web/api/lib/Cake/Console/Templates/skel/webroot/css/cake.generic.css +1095745b8918b0f4223fb20145c8b942 ./web/api/lib/Cake/Console/Templates/skel/webroot/test.php +2e4362765b48e3adcf999143f1afc5ad ./web/api/lib/Cake/Console/Templates/skel/webroot/index.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/webroot/js/empty +de91beade885e04bcea74a4afcc0a91d ./web/api/lib/Cake/Console/Templates/skel/index.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Locale/eng/LC_MESSAGES/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/View/Elements/empty +dbee2ff0bea77dd60d3e4e37e1bd3440 ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/ajax.ctp +efdc0e2ffd35832bb57880f198b0c7db ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/xml/default.ctp +01bab2ee81d370ce0c512f2698eb49b4 ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/Emails/html/default.ctp +c8c03a34f7a28af5d4a6346e2145c068 ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/Emails/text/default.ctp +7a4c604e5fc6640a727ffccdbe1cdae4 ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/default.ctp +7a4c604e5fc6640a727ffccdbe1cdae4 ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/error.ctp +4e6a3470e5d073adbf9783c5db649abc ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/rss/default.ctp +a613d14ca6e5222dd6a85c187075e76f ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/flash.ctp +60253b23516039070b2d521bd9542622 ./web/api/lib/Cake/Console/Templates/skel/View/Layouts/js/default.ctp +9decb1a94a835d970191ae8abbd25bb9 ./web/api/lib/Cake/Console/Templates/skel/View/Emails/html/default.ctp +b79215b81e3901d3fa3cf452f296b196 ./web/api/lib/Cake/Console/Templates/skel/View/Emails/text/default.ctp +dbe7628a74af2bb331329a6770c408d7 ./web/api/lib/Cake/Console/Templates/skel/View/Errors/error500.ctp +28aaaf3c653b1ff92b824441794c5a53 ./web/api/lib/Cake/Console/Templates/skel/View/Errors/error400.ctp +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/View/Scaffolds/empty +10179919e12326a75d8d50f0faa87ecd ./web/api/lib/Cake/Console/Templates/skel/View/Helper/AppHelper.php +b3df7b179f1306e970bcf054b81f2703 ./web/api/lib/Cake/Console/Templates/skel/View/Pages/home.ctp +c22b42be1386899a3fecf3eb8dbcdaa0 ./web/api/lib/Cake/Console/Templates/skel/Controller/PagesController.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/lib/Cake/Console/Templates/skel/Controller/Component/empty +feb6faad5f8072dee80a3bd079b2755a ./web/api/lib/Cake/Console/Templates/skel/Controller/AppController.php +7cb7478e92234db38ee6d6e788ad09d9 ./web/api/lib/Cake/Console/Templates/default/actions/controller_actions.ctp +d42924a8e1256335426bd316af8463a1 ./web/api/lib/Cake/Console/Templates/default/views/form.ctp +60499430788341bdfabebc2c4b46b5b7 ./web/api/lib/Cake/Console/Templates/default/views/index.ctp +a771064211bed37adc84b8a4ac127e6c ./web/api/lib/Cake/Console/Templates/default/views/view.ctp +8b4a28247f7487987ab6e95266c5f7fb ./web/api/lib/Cake/Console/Templates/default/classes/test.ctp +6af3de5ad049512ef8c28bd7ccf1c0b2 ./web/api/lib/Cake/Console/Templates/default/classes/controller.ctp +2d4f2ad59d816067274308105d3a6066 ./web/api/lib/Cake/Console/Templates/default/classes/fixture.ctp +1ca0422b5036b4d745a4e18aecd54081 ./web/api/lib/Cake/Console/Templates/default/classes/model.ctp +b31577638faa1ddadd19a3f861814af2 ./web/api/lib/Cake/Console/ConsoleErrorHandler.php +755dfa3f634058042f127a3d26c8c24b ./web/api/lib/Cake/Console/ConsoleInputOption.php +e72d2616ab85ef9b3a21835fe97eac05 ./web/api/lib/Cake/Console/ConsoleInputArgument.php +57f049e3ced69a296f75753bdef6ce9b ./web/api/lib/Cake/Console/ConsoleInput.php +986c087ce60a23b5d2d6478c77653743 ./web/api/lib/Cake/basics.php +7cb23316256a9169727c5903f3a6fdbb ./web/api/lib/Cake/Log/Engine/ConsoleLog.php +b53d74aab2bcc858bae15b03a29a8f79 ./web/api/lib/Cake/Log/Engine/FileLog.php +b4cd3eecf9b85678d61d5e90274ce378 ./web/api/lib/Cake/Log/Engine/SyslogLog.php +9e14011cda1e6fe35cfab29187a04210 ./web/api/lib/Cake/Log/Engine/BaseLog.php +8dcb8ea5e5ce9ee6d48307fa34651632 ./web/api/lib/Cake/Log/CakeLogInterface.php +f28928e75c82cca50c08ae1283cd4b8e ./web/api/lib/Cake/Log/LogEngineCollection.php +c1fa5e766797a96fe381722b5c5ac2f6 ./web/api/lib/Cake/Log/CakeLog.php +8137c566d795f706668d05ef5c991db0 ./web/api/lib/Cake/Utility/CakeNumber.php +1c7b1114f44bec93dafaed0dffa62449 ./web/api/lib/Cake/Utility/ClassRegistry.php +a232afa92f4498879b0f6ca645d9f839 ./web/api/lib/Cake/Utility/Debugger.php +de9b060f76546fa9f5a9fb780dd7225e ./web/api/lib/Cake/Utility/Hash.php +36c06590910d31f23b992f38f218babc ./web/api/lib/Cake/Utility/Validation.php +f2525cb9f25559ec7bd96883d034cade ./web/api/lib/Cake/Utility/String.php +e1175cd6cca85959895251dbe50e020b ./web/api/lib/Cake/Utility/Security.php +0640b5083545da62ab5e2e5436d8f0a3 ./web/api/lib/Cake/Utility/Folder.php +b2a734061d2a447838ada645c47c9073 ./web/api/lib/Cake/Utility/Xml.php +a01fa7f035be0abbac0aa42af2cd046b ./web/api/lib/Cake/Utility/ObjectCollection.php +7f8a28d0b43ae8ff91248fec3b2ce21b ./web/api/lib/Cake/Utility/Set.php +7d60253c77df591c95ee2f554929c635 ./web/api/lib/Cake/Utility/File.php +240b48f7f94a0f8b18efd0fc70b2e508 ./web/api/lib/Cake/Utility/Inflector.php +ce9a9f53dfb52515d74714d8cb3ea867 ./web/api/lib/Cake/Utility/Sanitize.php +843fd12b333f818ded3d0ac986217cde ./web/api/lib/Cake/Utility/CakeTime.php +53195ed64d758ecdc08af14e0623980f ./web/api/lib/Cake/Routing/Route/CakeRoute.php +21a7d6c3b6fe58281f9f0e2152ca6e2b ./web/api/lib/Cake/Routing/Route/RedirectRoute.php +644b42f97503e108747334592151b330 ./web/api/lib/Cake/Routing/Route/PluginShortRoute.php +7062f236e3dc248bab2edd8d2ccf2b67 ./web/api/lib/Cake/Routing/Router.php +fe6c34aed51192f742056c43f44037fb ./web/api/lib/Cake/Routing/Filter/CacheDispatcher.php +d15388f8fbfc77cded931a4cb45d97e1 ./web/api/lib/Cake/Routing/Filter/AssetDispatcher.php +9ea2cd3fc0f8d34c3c457788d31e9618 ./web/api/lib/Cake/Routing/Dispatcher.php +7a8d1fdda5b9c45325395319311b1c53 ./web/api/lib/Cake/Routing/DispatcherFilter.php +f509b4633439c86abe596ef0830cca0c ./web/api/lib/Cake/Configure/PhpReader.php +3e56db31521024e844a0de4f6d818df0 ./web/api/lib/Cake/Configure/ConfigReaderInterface.php +bc62cc9eae431f3dbd9f3710c806d9d6 ./web/api/lib/Cake/Configure/IniReader.php +299a364842d38f8c12ea6037963b7fbb ./web/api/lib/Cake/View/ViewBlock.php +6123741d5edec070c01a9549f52ba76d ./web/api/lib/Cake/View/View.php +d5c1ea5457f76405d720d86b6df6da47 ./web/api/lib/Cake/View/MediaView.php +0a44a7e599961f02ec5e287e2610058a ./web/api/lib/Cake/View/Elements/sql_dump.ctp +4f80da79c92f402a5958a985088f0c11 ./web/api/lib/Cake/View/Elements/exception_stack_trace.ctp +b9dbd329c5307f9f6c25632513b8bb17 ./web/api/lib/Cake/View/XmlView.php +a7ba90f960629b48b467d71ac2048cab ./web/api/lib/Cake/View/ScaffoldView.php +a0dd0031f7d2533c254612b37ab949e8 ./web/api/lib/Cake/View/Errors/fatal_error.ctp +bfb2adbdd81b605402ec451245bb220a ./web/api/lib/Cake/View/Errors/missing_datasource_config.ctp +ecc6b31a399ba5b0db35616de3acc6f8 ./web/api/lib/Cake/View/Errors/missing_plugin.ctp +f658d67f21912b74ef33384b15a2cf05 ./web/api/lib/Cake/View/Errors/missing_controller.ctp +5f0b4f21682005a2f7b346d2042287a2 ./web/api/lib/Cake/View/Errors/missing_helper.ctp +7c302a950061d7ecc11ee9a782d9b523 ./web/api/lib/Cake/View/Errors/missing_connection.ctp +9f2489f97c95ce3fc6ea9cc31e80baf0 ./web/api/lib/Cake/View/Errors/missing_layout.ctp +ab3020055640a9a019cf9d750d3988e2 ./web/api/lib/Cake/View/Errors/missing_action.ctp +fd42a53cdafaaab45dafe467fe753266 ./web/api/lib/Cake/View/Errors/missing_view.ctp +b5b065a89a4436dd45ffd6196f6782ae ./web/api/lib/Cake/View/Errors/missing_table.ctp +c5b4810e33cd80dbfbabe2b55b292af5 ./web/api/lib/Cake/View/Errors/private_action.ctp +2b86a612e11dc80de1ec9fad2930b866 ./web/api/lib/Cake/View/Errors/pdo_error.ctp +bad3a6215b8ab912fdf8fe54f07bf3d6 ./web/api/lib/Cake/View/Errors/missing_behavior.ctp +2d7df36185a81815969e2b118629aeb3 ./web/api/lib/Cake/View/Errors/missing_datasource.ctp +fc95356b63a9938c874d778c6e540dcd ./web/api/lib/Cake/View/Errors/missing_component.ctp +44b8d02beb11ea5ff950066bfcb161fc ./web/api/lib/Cake/View/Errors/missing_database.ctp +6d14357c1fc303f128b7f3f86be67986 ./web/api/lib/Cake/View/Errors/scaffold_error.ctp +1877b403b3f5434eeeb9e3ffe89fd4e2 ./web/api/lib/Cake/View/Scaffolds/form.ctp +a3416bc82983b121e489f2b0591e51a4 ./web/api/lib/Cake/View/Scaffolds/index.ctp +178e1d482e9681636ce525943ec8ee40 ./web/api/lib/Cake/View/Scaffolds/view.ctp +f34956361673d044a7032df1ce185953 ./web/api/lib/Cake/View/HelperCollection.php +f12d01cbd2d411c1d2565e9ff4c56fc0 ./web/api/lib/Cake/View/Helper/JsHelper.php +c1adc2d9d1ace1aa549df8f244475d30 ./web/api/lib/Cake/View/Helper/TimeHelper.php +68aef6f414b92c5947f20b46a18a887f ./web/api/lib/Cake/View/Helper/CacheHelper.php +b7172335d34ea0338240fad00cf2ba0a ./web/api/lib/Cake/View/Helper/JqueryEngineHelper.php +e654eab21ea1d186cef90c4f75473df2 ./web/api/lib/Cake/View/Helper/NumberHelper.php +9e568c1d3505c33f8fa46c0f6a7f151f ./web/api/lib/Cake/View/Helper/RssHelper.php +578584482fb2af0f6ee954310ecbd231 ./web/api/lib/Cake/View/Helper/PrototypeEngineHelper.php +d2c96e9191577bfe76c01897c7179fbf ./web/api/lib/Cake/View/Helper/JsBaseEngineHelper.php +9cf812167d44cc5839d64952702ab2e8 ./web/api/lib/Cake/View/Helper/PaginatorHelper.php +0a701d28f2da12ce7c9f72654ff0157f ./web/api/lib/Cake/View/Helper/FormHelper.php +dbda6bed533c57ce4019d7c38525db73 ./web/api/lib/Cake/View/Helper/HtmlHelper.php +b94930e797b585f424ebc2150b06553f ./web/api/lib/Cake/View/Helper/SessionHelper.php +4aacaa7c6df280a0f2807a87405ae684 ./web/api/lib/Cake/View/Helper/TextHelper.php +fc1c44f23ac9a49821d3ea1e8130e775 ./web/api/lib/Cake/View/Helper/MootoolsEngineHelper.php +df24b51cf0d48f8aecb74762dca1b034 ./web/api/lib/Cake/View/JsonView.php +12e25abf73466b91198f6ad116b906b2 ./web/api/lib/Cake/View/ThemeView.php +9a83838dfa7e29a115255ddac3440408 ./web/api/lib/Cake/View/Helper.php +706e266d9800beb79c8e8ada62ff08a3 ./web/api/lib/Cake/Controller/Scaffold.php +751575e0e908407f4e27acf4b105907c ./web/api/lib/Cake/Controller/ComponentCollection.php +7842c667d0ef2ead888e8b558718ebd8 ./web/api/lib/Cake/Controller/CakeErrorController.php +d995d6e85da0e4d812c73ee04b37f1c4 ./web/api/lib/Cake/Controller/Component/AclComponent.php +65317b1b574dbbfe08f5c868099db323 ./web/api/lib/Cake/Controller/Component/SecurityComponent.php +60bb07907bce1db2eecdae1c57276eff ./web/api/lib/Cake/Controller/Component/AuthComponent.php +65e5698cb0a7f57b0694d46be01d4810 ./web/api/lib/Cake/Controller/Component/EmailComponent.php +80730d5678c43361f51c2fc117bb349c ./web/api/lib/Cake/Controller/Component/SessionComponent.php +a8226c3c10f8c4dc7ede5866a45bca1b ./web/api/lib/Cake/Controller/Component/Acl/AclInterface.php +9ec2de177f28bb56cd8a348884b49dbc ./web/api/lib/Cake/Controller/Component/Acl/IniAcl.php +0f7bcc4a0bb72a4b3bc278e204552790 ./web/api/lib/Cake/Controller/Component/Acl/PhpAcl.php +7e60042fb8c13ae17320391f59e6d6eb ./web/api/lib/Cake/Controller/Component/Acl/DbAcl.php +ee4c0102e75bc14b9d87509678e69987 ./web/api/lib/Cake/Controller/Component/RequestHandlerComponent.php +d37c7b314a939c2f8ed10b1aa07baf95 ./web/api/lib/Cake/Controller/Component/Auth/AbstractPasswordHasher.php +8708c45bec3ef35430c8f2019e6d5d7e ./web/api/lib/Cake/Controller/Component/Auth/ActionsAuthorize.php +e4338dbbff1a0033ba9eeb8087374079 ./web/api/lib/Cake/Controller/Component/Auth/FormAuthenticate.php +8273007498c659e2c81b9e5676e95d5f ./web/api/lib/Cake/Controller/Component/Auth/SimplePasswordHasher.php +237ad702af86881216b64034219d2c13 ./web/api/lib/Cake/Controller/Component/Auth/BlowfishAuthenticate.php +0ffeb602aa1b0b90b75936d03a7b0a0f ./web/api/lib/Cake/Controller/Component/Auth/BaseAuthorize.php +caf2e032b3e8a7f3c53b207237f62b25 ./web/api/lib/Cake/Controller/Component/Auth/BaseAuthenticate.php +da72b502fd7ed70c75a0ada78b596d75 ./web/api/lib/Cake/Controller/Component/Auth/DigestAuthenticate.php +c4fa9df3aea0258f06295b51db032943 ./web/api/lib/Cake/Controller/Component/Auth/CrudAuthorize.php +91a585aefd8a0463f7d6c121a1de78c2 ./web/api/lib/Cake/Controller/Component/Auth/ControllerAuthorize.php +d48fb9ace14978eb09ea9887397f90cf ./web/api/lib/Cake/Controller/Component/Auth/BlowfishPasswordHasher.php +1f91cbaf9bca8a96757bb1d7f321dfc6 ./web/api/lib/Cake/Controller/Component/Auth/BasicAuthenticate.php +0169ce46b0068863551ba37a46706a61 ./web/api/lib/Cake/Controller/Component/CookieComponent.php +d214f5382dae1e781787c34d9cd3a1fe ./web/api/lib/Cake/Controller/Component/PaginatorComponent.php +5bec6a78243b42524b8486067a6841c1 ./web/api/lib/Cake/Controller/Component.php +9eae962752c2c6de8f6556f451ea1472 ./web/api/lib/Cake/Controller/Controller.php +cf534fc38920d3a34855ee631f71f925 ./web/api/lib/Cake/VERSION.txt +a1fb48cc1eb9816312eb22b9afc6c5a0 ./web/api/.htaccess +dc3b625f2bc45960040458659f3c3e46 ./web/api/build.properties +879d31ddac6c358aad6a6f1d10204986 ./web/api/README.md +36769423770016b983891573a6524a9d ./web/api/.gitignore +52440fcefe6f4a3f7e565496f036641e ./web/api/index.php +b7c403fb4c5a883250c3b97d5ac7b80c ./web/api/composer.json +5b7cfe44d18b28983e29b2d838e6a414 ./web/api/build.xml +14f618fd1c8d08a9fc1b2b900ccaed93 ./web/api/.gitattributes +d87e4b50aa600f3a6b36b2e54cfb15b1 ./web/api/CONTRIBUTING.md +fb02cef58318a74bbbbda3e63e7d97e1 ./web/api/.editorconfig +a2be02342dea3466dbc7dad5f5490b41 ./web/api/CMakeLists.txt +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Test/Case/Model/Behavior/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Test/Case/View/Helper/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Test/Case/Controller/Component/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Test/Fixture/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Lib/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Vendor/empty +a2a9efe935decfd5f498bf0d83075574 ./web/api/app/.htaccess +abcc77ec4f808a149429557d9aaccf6d ./web/api/app/Model/Monitor.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Model/Behavior/empty +0047164bb6dfa21ae17121b991dc5aa9 ./web/api/app/Model/Zone.php +b9fe07fbd59be62e4eb2e5f3dbb322e6 ./web/api/app/Model/ZonePreset.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Model/Datasource/empty +5c36f91a812cb4a34abdbf6043066bd2 ./web/api/app/Model/Event.php +f4335cce9745db787e4d4a18ff5fc927 ./web/api/app/Model/AppModel.php +f0f04798d1b60a2664ab76b04ecf45c7 ./web/api/app/Model/Log.php +2289a30f3f0239366076b3ad31eabb0c ./web/api/app/Model/Config.php +a4be1003c8b18d55b95293199fba34c0 ./web/api/app/Model/State.php +bf91a4c7888f00adf3526e2711ff853b ./web/api/app/Model/Frame.php +404b1552fc8e90ecf5bc49b96cbe5814 ./web/api/app/Model/Host.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Plugin/empty +a08c07141e4c36516fecb74f73f537c3 ./web/api/app/Config/bootstrap.php +68671846a8b9348ea072a5071063fe36 ./web/api/app/Config/acl.php +49a3e546eff41b03e213f8f7133bb8d8 ./web/api/app/Config/email.php.default +a3ea909114f9e4ebbb7d5d359a61ecb3 ./web/api/app/Config/routes.php +d7e696d6244cebc9bb6086532510fc93 ./web/api/app/Config/database.php.default +3185ea5b0d576842e1898912071eb29e ./web/api/app/Config/core.php.default +ec8d4e18d23cb06cf5c863de2f07f0d5 ./web/api/app/Config/acl.ini.php +a5d9bbc6c52390aad154bc9197a86f87 ./web/api/app/Config/Schema/i18n.php +7b06760a9b74dc1cde66cdf413e3ae88 ./web/api/app/Config/Schema/sessions.sql +4986c84c1e5eb9ad81faae98edcb9504 ./web/api/app/Config/Schema/sessions.php +fd69565dc23c3f3ccc981cc29a2abe5b ./web/api/app/Config/Schema/i18n.sql +be1ae0bceba3274acc4a19a8022a8a6e ./web/api/app/Config/Schema/db_acl.sql +ca6ed35255d94b3d836935d030515633 ./web/api/app/Config/Schema/db_acl.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Console/Command/Task/empty +36b29ca4ed8331df525f55bf33536758 ./web/api/app/Console/Command/AppShell.php +5883c212c26f2573914c7fcfde18b871 ./web/api/app/Console/cake +7a1dd61c57a6dccb5649cc0c92b23ad3 ./web/api/app/Console/cake.bat +66e5a115a52a914b6280555d4488ab97 ./web/api/app/Console/cake.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Console/Templates/empty +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/webroot/files/empty +66b3119d379aee26ba668fef49188dd3 ./web/api/app/webroot/favicon.ico +69e2dbff5ecae970e423450e93402f0e ./web/api/app/webroot/.htaccess +7307ecf28dccc0e436a13caa5a38b38f ./web/api/app/webroot/img/test-skip-icon.png +19190f09beb6039fa4153ee05079fb00 ./web/api/app/webroot/img/test-fail-icon.png +bb7e210a60f92e5458e347cf77177c5f ./web/api/app/webroot/img/cake.power.gif +f60716ed419e69f9974a49d8310933d0 ./web/api/app/webroot/img/test-pass-icon.png +4a5504d3f7228af75f3fecbd3d449cf3 ./web/api/app/webroot/img/test-error-icon.png +fc804821ffc3d23daa82885d6b6b0ce6 ./web/api/app/webroot/img/cake.icon.png +332f7cc25a41d0022e19ca45c2868dc8 ./web/api/app/webroot/css/cake.generic.css +6a8aa27502bab380c6b4d58486675671 ./web/api/app/webroot/test.php +b27e846b96551d4e72c44040667671b2 ./web/api/app/webroot/index.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/webroot/js/empty +32f7ef8d62a60725e277af92b1fc836e ./web/api/app/index.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Locale/eng/LC_MESSAGES/empty +ae9efcdfba944864d05bd25cc4c2fcf3 ./web/api/app/View/Logs/json/index.ctp +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/View/Elements/empty +e4e541cad879f8f1a3e3c83394af7e89 ./web/api/app/View/Layouts/ajax.ctp +efdc0e2ffd35832bb57880f198b0c7db ./web/api/app/View/Layouts/xml/default.ctp +6240086124e4df9ed9c1c51cf9cf715c ./web/api/app/View/Layouts/Emails/html/default.ctp +c8c03a34f7a28af5d4a6346e2145c068 ./web/api/app/View/Layouts/Emails/text/default.ctp +87196d4cf0167870cf85d7f178a2f3b6 ./web/api/app/View/Layouts/default.ctp +168b2de50862a0ed2dca931b3e7b35f7 ./web/api/app/View/Layouts/error.ctp +9e941e2b71ddf84b84a8f61e87cd6fc4 ./web/api/app/View/Layouts/rss/default.ctp +95d5749d34c9561555bb8a02e737b756 ./web/api/app/View/Layouts/flash.ctp +60253b23516039070b2d521bd9542622 ./web/api/app/View/Layouts/js/default.ctp +9decb1a94a835d970191ae8abbd25bb9 ./web/api/app/View/Emails/html/default.ctp +b79215b81e3901d3fa3cf452f296b196 ./web/api/app/View/Emails/text/default.ctp +62b95a58ca86c6becaa673fba272d22c ./web/api/app/View/Events/xml/index.ctp +1885123c50a612cf5d5afd38844b204d ./web/api/app/View/Events/xml/view.ctp +1cbf201c46d3664f9ac49c11f8b7811d ./web/api/app/View/Events/json/index.ctp +aa0ddf5298aeb40355608bc06d8627b8 ./web/api/app/View/Events/json/view.ctp +51c4ec3708eb4f0bdbc754c67bccaa61 ./web/api/app/View/Errors/error500.ctp +5a77845c39a0841997f212267f2e3826 ./web/api/app/View/Errors/error400.ctp +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/View/Scaffolds/empty +ea95455171ab4065b42534bd15fb7aef ./web/api/app/View/Helper/AppHelper.php +95aea1cca8bf9d21ce9635420ab933e1 ./web/api/app/View/Configs/xml/index.ctp +873c849e394789bcbdf2c5e54c1dc6ee ./web/api/app/View/Configs/xml/view.ctp +e28615a667b68c75c14eec60ff325c0e ./web/api/app/View/Configs/json/index.ctp +ee93ce25a02026e2e7f83a95da92b5f7 ./web/api/app/View/Configs/json/edit.ctp +ee93ce25a02026e2e7f83a95da92b5f7 ./web/api/app/View/Configs/json/view.ctp +9448baed95f3c917e1c81ce09e943568 ./web/api/app/View/Monitors/xml/index.ctp +e1c9b7a56de31ba5f9c47ab60be7f08c ./web/api/app/View/Monitors/xml/edit.ctp +a5d712e7dcf0f023dff13e88ab01cc04 ./web/api/app/View/Monitors/xml/view.ctp +82d1806fbb9e4e194ffccf0fd7abfac9 ./web/api/app/View/Monitors/json/index.ctp +f4f2a7867614242fcbcc60ede4bdc58f ./web/api/app/View/Monitors/json/edit.ctp +2f47685bec690f0efda0a91f56c33a16 ./web/api/app/View/Monitors/json/view.ctp +b3df7b179f1306e970bcf054b81f2703 ./web/api/app/View/Pages/home.ctp +b87ed1acb6b83144b355c07784757e22 ./web/api/app/Controller/PagesController.php +6456a68e3e0f51e8e083c6b9fa6b9846 ./web/api/app/Controller/MonitorsController.php +6e1b9667fedda9974fafd7b00c912b98 ./web/api/app/Controller/HostController.php +0acd67c90d279a1473c265fdbf7cf8cc ./web/api/app/Controller/Component/FilterComponent.php +0b71452d2b43ac6597a33e6345f88574 ./web/api/app/Controller/Component/ConfigParserComponent.php +d41d8cd98f00b204e9800998ecf8427e ./web/api/app/Controller/Component/empty +debf11e03d3d1fea2c0fb8b0ae713f88 ./web/api/app/Controller/Component/ImageComponent.php +4a961b2841dcff990ef059c03cb5888d ./web/api/app/Controller/Component/ScalerComponent.php +02a80011deb909b32e3e5bfa623c9f59 ./web/api/app/Controller/FramesController.php +7a1483dd473b9bd8f4b80060b98ba3e7 ./web/api/app/Controller/StatesController.php +d53f96e5e2a8375d7e32e88d9f03ab4b ./web/api/app/Controller/ConfigsController.php +ceccce2d0737ea5c08304a2f294a80a0 ./web/api/app/Controller/ZonesController.php +c58ae9218be820a17de1a7954cc65469 ./web/api/app/Controller/LogsController.php +95fe23a3e2127f966c276539da9b8582 ./web/api/app/Controller/AppController.php +a566f2dc92c60dc293deee12a1399238 ./web/api/app/Controller/ZonePresetsController.php +36f3b63e908a633f702e0b69a890c672 ./web/api/app/Controller/EventsController.php +4f4dfe411ccd1fb2827362e70367bb35 ./web/scripts/retag.sh +fe9fadd115a7b707a3cf9b8e404a088d ./web/scripts/swap.pl +4b3afb84b2b71ef56df09997a350bd04 ./web/graphics/spinner.gif +e07c0775523271d629035dc8921dffc7 ./web/graphics/favicon.ico +ea13c7f599b803a67d8ab260ef35184e ./web/graphics/Makefile.am +a840cd88b33f95a014cd654e0a615fd9 ./web/graphics/transparent.gif +7fa0c702fd5d8c954f6523e4ca5bc327 ./web/Makefile.am +133b39a5ae708eb554ac0e170be2434f ./web/skins/Makefile.am +b15a4bb8695a0ab5c22defdcf4629494 ./web/skins/xml/Makefile.am +718d8596a14d123d83afb0d5d6d6fd96 ./web/skins/xml/includes/init.php +8b2b943583b2246c89ef65ae42bd4ff4 ./web/skins/xml/includes/Makefile.am +93ae79dd0774a44eb9002556d47de1bd ./web/skins/xml/includes/config.php +9355288fed99c00c68f8623a3e73280e ./web/skins/xml/includes/functions.php +044458ee1051e746b2da95482b2ea5b9 ./web/skins/xml/views/Makefile.am +96a21cecd35ed5d1b732bfe74b1535ef ./web/skins/xml/views/actions.php +83f5492302df18de8c7090a9fa8ac3e7 ./web/skins/xml/views/notfound.png +98b7bfd5ae1dd98c66770b2e0759fb04 ./web/skins/xml/views/console.php +d41d8cd98f00b204e9800998ecf8427e ./web/skins/xml/views/none.php +33d9276165e48e85f9b76d96ceb72c43 ./web/skins/xml/skin.php +676b97cfc2f2f52ab7015aba99c80461 ./web/skins/mobile/graphics/Makefile.am +8d106f245c197a3c9c0aadd7f55eff48 ./web/skins/mobile/Makefile.am +4ec6947778d22cd166d2dc02a0bea134 ./web/skins/mobile/lang/Makefile.am +53d5d9e290d4f60cc7dcf9052619cbd2 ./web/skins/mobile/css/Makefile.am +67bdd7f59ebc311b9cd8954d57f68c2d ./web/skins/mobile/css/skin.css +0814d7addb49c87b8cc29eaff5c8effc ./web/skins/mobile/includes/init.php +d81f5664253d9d1dfa2c0de193d2d8cf ./web/skins/mobile/includes/Makefile.am +1a1bfa354bc9738db22f241983e719e5 ./web/skins/mobile/includes/control_functions.php +cbe8eeac1a8e40f45f9b1c876f3412c8 ./web/skins/mobile/includes/config.php +5c15d51173b096e5597c329511ce7d74 ./web/skins/mobile/includes/functions.php +82a065fe144b7be4d9ba9d9c34a402a8 ./web/skins/mobile/views/frame.php +79e37c6a2c5e570005d2a73868a04cd8 ./web/skins/mobile/views/filter.php +e674fef9d3431fe19c72ad257377eda9 ./web/skins/mobile/views/login.php +97f92e8421bb5143f4bd5c812aaed3b3 ./web/skins/mobile/views/Makefile.am +635e3defdaee0d2c338db1dd0adf64d4 ./web/skins/mobile/views/watch.php +e98bf08b3a2d992a67f804a54e5f687f ./web/skins/mobile/views/event.php +cdccdbfd83e385b6d85c9a3bafcb66d3 ./web/skins/mobile/views/css/Makefile.am +5a61e2227587163542bebb4dfb77fe1f ./web/skins/mobile/views/css/console.css +148559cc9c8d6c653f59390ed38451b6 ./web/skins/mobile/views/error.php +ffcf2b1eb8b01c7465d24fdfcdc96f79 ./web/skins/mobile/views/state.php +caa91a4d945746bf22cb0d7aabcabe6d ./web/skins/mobile/views/montage.php +d6509e5d0b1458c1b3ef85222d1af2c1 ./web/skins/mobile/views/events.php +572e23c6d748ac9946c94d68ebbb499f ./web/skins/mobile/views/console.php +608ea6b2db525311c296678a52900f60 ./web/skins/mobile/views/devices.php +37010990d98a4a087fcbdd4af5697542 ./web/skins/mobile/views/eventdetails.php +a80ffe8b92314db2b251bddefb53d604 ./web/skins/mobile/views/function.php +084569b4ac87deb3cedb8762badfdd80 ./web/skins/mobile/views/video.php +6c2c9c3fd56fd8cc97605657a86adc93 ./web/skins/mobile/ajax/Makefile.am +1ee43243aff2957f555b2025fe121ddb ./web/skins/mobile/skin.php +b08bbad185d4f141f4e16a32961f7e10 ./web/skins/classic/graphics/point-o.gif +3aea4c08fe3d0882bbb50d6a880b9d3e ./web/skins/classic/graphics/center.gif +10481c373da9f2e33955f5f684701e35 ./web/skins/classic/graphics/arrow-ur.gif +4253a17d69f9c9f105864b57ef1da4ee ./web/skins/classic/graphics/arrow-l-u.gif +2357c0f1dec549fb5866341acf2f8e64 ./web/skins/classic/graphics/arrow-dl.gif +b36b743446eb998574343b265fc2a327 ./web/skins/classic/graphics/arrow-dr.gif +bf33071fa7b7ef64ad586ff90003fb9a ./web/skins/classic/graphics/Makefile.am +de6d2a2b0bd54f72d5c8bde9fddfc56f ./web/skins/classic/graphics/arrow-ul.gif +93f79d7c400d1988e58791d692050380 ./web/skins/classic/graphics/point-g.gif +6a948184e447f61a38d54609194eb647 ./web/skins/classic/graphics/arrow-l-d.gif +e252c31fdb0b3a65a082069b37042a0f ./web/skins/classic/graphics/seq-u.gif +330f0709c7b846ed5b3e990a6b0b6839 ./web/skins/classic/graphics/arrow-u.gif +0c2b9346b65233183cca8dbaa6ee1db2 ./web/skins/classic/graphics/arrow-s-d.gif +dad7467542959f7e571f12d0a4988c98 ./web/skins/classic/graphics/arrow-r.gif +2c0f5bb849832ea968cffc648d45381c ./web/skins/classic/graphics/arrow-d.gif +2e743de572b45088c05f0471f63fb710 ./web/skins/classic/graphics/point-r.gif +98212c6b29fcd9a09e6d16607fe65909 ./web/skins/classic/graphics/seq-d.gif +269dca955356f221c9ea271f3e259763 ./web/skins/classic/graphics/arrow-l.gif +4b755122db75084dd39297fbc1822f27 ./web/skins/classic/graphics/arrow-s-u.gif +73574931d96de1bb4e40fe28c75bc6d8 ./web/skins/classic/Makefile.am +5c315d65c081405e300d30176d5483f9 ./web/skins/classic/lang/Makefile.am +88f828f9f626a1d1690c2498d02b5b83 ./web/skins/classic/css/Makefile.am +6a2808353ef61abb2a1bec4647054b5d ./web/skins/classic/css/classic/control.css +a63c51b72f04acf19299b36c18960204 ./web/skins/classic/css/classic/Makefile.am +10fb7830c2e3a07c7b090bbb224f89b7 ./web/skins/classic/css/classic/skin.css +b4659211b34992bc81bee822615181db ./web/skins/classic/css/classic/export.css +701f84f1ab430890e539cf373ed4292b ./web/skins/classic/css/classic/views/frames.css +606388c643910afd47e6a53f591cc426 ./web/skins/classic/css/classic/views/montage_freeform.css +3a91d2b400f3d27667a01a816f0f0a44 ./web/skins/classic/css/classic/views/control.css +dc75d27b0aedaebc6364a226e1fac661 ./web/skins/classic/css/classic/views/filter.css +25cb6e4f3459dbf8efb2307c3c8499f5 ./web/skins/classic/css/classic/views/timeline.css.php +668d0f83a81f352d9ab24202f66aaa28 ./web/skins/classic/css/classic/views/controlcaps.css +8a44eac074df2a5b3ac8376e6445db52 ./web/skins/classic/css/classic/views/Makefile.am +b91fa88951c1033191f6a22bc485f907 ./web/skins/classic/css/classic/views/event.css +e91fda984fe2ef3d8de2dbf57b5c7747 ./web/skins/classic/css/classic/views/events.css +63c979e75fcdd523106982a6e5a2cb64 ./web/skins/classic/css/classic/views/montage_3wide50enlarge.css +edcbe038a83cffcc3c725c570ca7d1aa ./web/skins/classic/css/classic/views/plugin.css +c627ab2a4a7567ca1b688a80343bcd1d ./web/skins/classic/css/classic/views/groups.css +675d0499f9dc3fa5fdede504dfbb7ccc ./web/skins/classic/css/classic/views/console.css +27ceca5314be52f316ba52a0d94556c2 ./web/skins/classic/css/classic/views/video.css +7665779719b3f99ebaf1acfd42996ac0 ./web/skins/classic/css/classic/views/timeline.css +f972ae29776f4730b510502f44f03053 ./web/skins/classic/css/classic/views/frame.css +352483a4610fdb2b44697b5a52c690c9 ./web/skins/classic/css/classic/views/montage_4wide.css +902ce9db4ec62764557caaf4f44a0d74 ./web/skins/classic/css/classic/views/devices.css +e95e93705b1af2c7005f54a8ebb23683 ./web/skins/classic/css/classic/views/montage_2wide.css +4a039676d0d00483ed834ad1535209f6 ./web/skins/classic/css/classic/views/watch.css +a2154e46e8865c359caca5afcdf58a37 ./web/skins/classic/css/classic/views/monitor.css +8d299e89fa8e9a088d1d9c747e8f7154 ./web/skins/classic/css/classic/views/export.css +ef24eba3ca4d9e845858e47c3026e9c6 ./web/skins/classic/css/classic/views/stats.css +35d6f241d0377b3d6e69f3584d3cb091 ./web/skins/classic/css/classic/views/montage_3wide.css +f21f80b954ead611f2aa073d0f87df6a ./web/skins/classic/css/classic/views/zone.css +068f1341939d83560694256b4798f2fb ./web/skins/classic/css/classic/views/options.css +54d0b4ce5f948e22fc05f8fbab171450 ./web/skins/classic/css/classic/views/montage.css +6af44563df9975a6fb1e23d64421f486 ./web/skins/classic/css/classic/views/log.css +6a2808353ef61abb2a1bec4647054b5d ./web/skins/classic/css/flat/control.css +01d374edd94bfd3414847036fb02f084 ./web/skins/classic/css/flat/Makefile.am +3eacba38a91948d4fee36527c3397e30 ./web/skins/classic/css/flat/skin.css +b4659211b34992bc81bee822615181db ./web/skins/classic/css/flat/export.css +701f84f1ab430890e539cf373ed4292b ./web/skins/classic/css/flat/views/frames.css +606388c643910afd47e6a53f591cc426 ./web/skins/classic/css/flat/views/montage_freeform.css +3a91d2b400f3d27667a01a816f0f0a44 ./web/skins/classic/css/flat/views/control.css +dc75d27b0aedaebc6364a226e1fac661 ./web/skins/classic/css/flat/views/filter.css +25cb6e4f3459dbf8efb2307c3c8499f5 ./web/skins/classic/css/flat/views/timeline.css.php +668d0f83a81f352d9ab24202f66aaa28 ./web/skins/classic/css/flat/views/controlcaps.css +0a6f44e198bc3d2ca20ad0fcffbad58e ./web/skins/classic/css/flat/views/Makefile.am +86cb6b9aef7d237288eef65baaced2dd ./web/skins/classic/css/flat/views/event.css +e91fda984fe2ef3d8de2dbf57b5c7747 ./web/skins/classic/css/flat/views/events.css +63c979e75fcdd523106982a6e5a2cb64 ./web/skins/classic/css/flat/views/montage_3wide50enlarge.css +edcbe038a83cffcc3c725c570ca7d1aa ./web/skins/classic/css/flat/views/plugin.css +c627ab2a4a7567ca1b688a80343bcd1d ./web/skins/classic/css/flat/views/groups.css +d30679be000fa1b224f90fa082b19525 ./web/skins/classic/css/flat/views/console.css +27ceca5314be52f316ba52a0d94556c2 ./web/skins/classic/css/flat/views/video.css +7665779719b3f99ebaf1acfd42996ac0 ./web/skins/classic/css/flat/views/timeline.css +f972ae29776f4730b510502f44f03053 ./web/skins/classic/css/flat/views/frame.css +352483a4610fdb2b44697b5a52c690c9 ./web/skins/classic/css/flat/views/montage_4wide.css +902ce9db4ec62764557caaf4f44a0d74 ./web/skins/classic/css/flat/views/devices.css +e95e93705b1af2c7005f54a8ebb23683 ./web/skins/classic/css/flat/views/montage_2wide.css +4564289485853aa21049d59c7a5fa1fd ./web/skins/classic/css/flat/views/watch.css +a2154e46e8865c359caca5afcdf58a37 ./web/skins/classic/css/flat/views/monitor.css +8d299e89fa8e9a088d1d9c747e8f7154 ./web/skins/classic/css/flat/views/export.css +ef24eba3ca4d9e845858e47c3026e9c6 ./web/skins/classic/css/flat/views/stats.css +35d6f241d0377b3d6e69f3584d3cb091 ./web/skins/classic/css/flat/views/montage_3wide.css +f21f80b954ead611f2aa073d0f87df6a ./web/skins/classic/css/flat/views/zone.css +068f1341939d83560694256b4798f2fb ./web/skins/classic/css/flat/views/options.css +54d0b4ce5f948e22fc05f8fbab171450 ./web/skins/classic/css/flat/views/montage.css +6af44563df9975a6fb1e23d64421f486 ./web/skins/classic/css/flat/views/log.css +d41d8cd98f00b204e9800998ecf8427e ./web/skins/classic/includes/init.php +d84bfeacde7fb2855fcacb0371fcac86 ./web/skins/classic/includes/Makefile.am +7c60f2ccaa5b4473b5f9a942c5fea373 ./web/skins/classic/includes/timeline_functions.php +365cb40eb95d28c8429e2377f4636a41 ./web/skins/classic/includes/control_functions.php +9799bfa4da3e18ad38d3fc95a5534220 ./web/skins/classic/includes/config.php +367385e878fc60c3157a111f3b1da10e ./web/skins/classic/includes/export_functions.php +57d1e6011e48974b87b1f8a724e98a47 ./web/skins/classic/includes/functions.php +a2450e779db31e605e1380d05c8e141b ./web/skins/classic/views/controlcaps.php +02657131271319e0dddba4ce7086f790 ./web/skins/classic/views/controlpreset.php +fa3f03ae35f62093d5945ccde3e98c48 ./web/skins/classic/views/monitor.php +9bafbc31051b95fb9bf570ddf5a38c1a ./web/skins/classic/views/frame.php +8bbcf712737b1e36855f200d2385fd5b ./web/skins/classic/views/filter.php +01f5be0d074906c65741c27fa2cca20b ./web/skins/classic/views/options.php +9820236a20ed50a1cdd2d15f3f8d92d1 ./web/skins/classic/views/frames.php +44ca223900b9177e11ab4e48ba0e7044 ./web/skins/classic/views/status.php +219bf517199545f69252a0af7b5768ff ./web/skins/classic/views/login.php +cc6a31182fde7213ccd9f4d7a2dbe109 ./web/skins/classic/views/Makefile.am +c5104b258f47540755a020d75206beee ./web/skins/classic/views/eventdetail.php +deda87ed9bddf8f7f9d44849190cd1d6 ./web/skins/classic/views/watch.php +f2c680642fc74574fc3eafd3e618be01 ./web/skins/classic/views/optionhelp.php +5ea34c066ca78051598f5370ba42e154 ./web/skins/classic/views/event.php +8c8a7610522a5d854cced9493756e5c3 ./web/skins/classic/views/user.php +1c4f2fb837f1b3b5e5b14c3800122d13 ./web/skins/classic/views/postlogin.php +9d6448c2922d043c9bddd127fcfcfee9 ./web/skins/classic/views/cycle.php +d34482b6326c45313f0f55097113799c ./web/skins/classic/views/donate.php +20704d69d5523b155703c0ead3c1c11d ./web/skins/classic/views/version.php +110bf52261101da20c79d09b6d54d683 ./web/skins/classic/views/device.php +c88aa8dfb96cc3007b472908fec36bab ./web/skins/classic/views/groups.php +50f196a0b596c0f35bc09bce38ac0481 ./web/skins/classic/views/css/Makefile.in +5e4cb2c3a9b665e572e51d209c342d56 ./web/skins/classic/views/error.php +b25ce723f9cc7a5256ef5f6326c5cc68 ./web/skins/classic/views/api.php +32774e515f3e4631d74c8fe889b6c08b ./web/skins/classic/views/state.php +6dfca5d5a59da996cfd196471bcdf3e2 ./web/skins/classic/views/montage.php +f9c5481d113f67d002883034dddf385a ./web/skins/classic/views/blank.php +f85a926a12857d2daf6ebbff3e3d2345 ./web/skins/classic/views/events.php +0486239528f623afdd5427a28b6ccdee ./web/skins/classic/views/settings.php +9bb8ccefa0a11f77a1824923b538dcd8 ./web/skins/classic/views/group.php +a1f75cc5773eabdfd71d88be0fdf5606 ./web/skins/classic/views/onvifprobe.php +e4581c0bc26038a8ddd502cc2412a86b ./web/skins/classic/views/plugin.php +8b6012456fb4aae0729edc4ee9ac7bdc ./web/skins/classic/views/controlcap.php +caaf69ad7ea4dd007271078f107d6b20 ./web/skins/classic/views/control.php +227d5e8e39d82f618e41477eb60ff60c ./web/skins/classic/views/zones.php +b6624c853f1313db2dc12d996b9e06bb ./web/skins/classic/views/filtersave.php +62e03ba2219b4f0f14573eb173e00048 ./web/skins/classic/views/console.php +48c5643ab5f6664fa3335b959e53d9cb ./web/skins/classic/views/zone.php +5e50b838b9e99ee33705980d90d172e3 ./web/skins/classic/views/monitorprobe.php +8942090f8e270435be16af8bff6683e4 ./web/skins/classic/views/devices.php +4d0cb5ee8a1ba82a2c456110a1302799 ./web/skins/classic/views/monitorpreset.php +16064caa25b6c51360e10ee91210e8fe ./web/skins/classic/views/js/state.js +c15861718da9974b057a4e6641759bad ./web/skins/classic/views/js/group.js +de8db540180b86df8d0fc4724df3f12b ./web/skins/classic/views/js/user.js +59920201dfac5f9a4431f4f3a4e0364b ./web/skins/classic/views/js/version.js +017aafda61cee8bdf65f36eedcd91644 ./web/skins/classic/views/js/console.js +0dd3c64eb2002ffda9f7cb5a57d45457 ./web/skins/classic/views/js/donate.js +7a9e7f334a1c84d56850ac3b79cd5170 ./web/skins/classic/views/js/log.js +acd524f854058f342f34d0afafbb6075 ./web/skins/classic/views/js/Makefile.am +7e9cfda600b1bb488936894c9eff5cb9 ./web/skins/classic/views/js/events.js.php +699f68aeaed1c6a4c04befd46bf43ebf ./web/skins/classic/views/js/video.js.php +5cc3fc883beec9e3d1b2a9134a09a72e ./web/skins/classic/views/js/montage.js +1cdb9cdae3f827b5cc3fc67ce02b59ec ./web/skins/classic/views/js/options.js.php +7456a616bf361566b88f90d78ecbea23 ./web/skins/classic/views/js/plugin.js +3a8b64c9424f1a9ce02973021f3f1014 ./web/skins/classic/views/js/login.js +437d1084299d1163d36bd83355178a5b ./web/skins/classic/views/js/events.js +d41d8cd98f00b204e9800998ecf8427e ./web/skins/classic/views/js/plugin.js.php +f95f51f93a153403f28bec13da9f079e ./web/skins/classic/views/js/monitorpreset.js +c125327fce8e049519bb826cce5417f3 ./web/skins/classic/views/js/watch.js +56c208506cecd6a242e38d9c347558ba ./web/skins/classic/views/js/state.js.php +59f48f29901bf0b1d2dcdbd0287a7243 ./web/skins/classic/views/js/video.js +6656671bba812476fb7964edab8ed7d5 ./web/skins/classic/views/js/groups.js +8c5c9cc7e4961559e345220c9653aec8 ./web/skins/classic/views/js/version.js.php +f9840e08f9ca3c9966315657cfdf47f5 ./web/skins/classic/views/js/monitorprobe.js +03cd81247cc90a19db3cba077fd00b6e ./web/skins/classic/views/js/control.js +0f09e33012eee04a62ebdb2b05c7b03a ./web/skins/classic/views/js/cycle.js.php +8d99ac07dfdbf41cd357b0a3d2ee1f32 ./web/skins/classic/views/js/postlogin.js.php +925a1cf53b3191680541872b4c38b576 ./web/skins/classic/views/js/cycle.js +59d56ffa472788c766e64cac4b9e7c7c ./web/skins/classic/views/js/timeline.js.php +5a712d579121c24102fbb26f3c782c8c ./web/skins/classic/views/js/filter.js.php +1dbe98cc5c03f1234e14d1fb059fafe7 ./web/skins/classic/views/js/event.js +32ef30d8527086aa9ee63b73ac5df86d ./web/skins/classic/views/js/console.js.php +70292effe84d3885af9327270eb41d83 ./web/skins/classic/views/js/watch.js.php +cade1c87dd48210dcc61fbc2541e76a5 ./web/skins/classic/views/js/filter.js +2da7d63e3e1a8b4a7ddc42506e714873 ./web/skins/classic/views/js/controlpreset.js.php +fa19dd2b4162ac24b8dcdd5e4d61ad8d ./web/skins/classic/views/js/event.js.php +a33f83eff36ab8a9eb498a4ad88e3e55 ./web/skins/classic/views/js/zone.js.php +f7ed288a9c1556499ff689b277091074 ./web/skins/classic/views/js/export.js +8978326666696ec75c928e0220df27f6 ./web/skins/classic/views/js/monitor.js.php +0062d1966577b1a04e9b430adf20e441 ./web/skins/classic/views/js/controlpreset.js +eb5887badd6d2a2a7604977935d6aa11 ./web/skins/classic/views/js/montage.js.php +f95d23b81ff41694e0f61ba33f116eff ./web/skins/classic/views/js/monitor.js +d446cdfa58d7a052b099e65e1417296e ./web/skins/classic/views/js/donate.js.php +f60b3455365eefbab38be495608e216f ./web/skins/classic/views/js/timeline.js +2cdc936339c10744b45be5560eae9488 ./web/skins/classic/views/js/devices.js +31f13ff731711df12ec5d01ff8dee18a ./web/skins/classic/views/js/onvifprobe.js +98c7d638b7e90ddae6aabc103a3a197a ./web/skins/classic/views/js/zone.js +68121c732935ad0c53d9d58af2e7f2a7 ./web/skins/classic/views/js/export.js.php +2cf108bd3b04ede46bee2429f071262d ./web/skins/classic/views/log.php +f142b8cf2d848d8277d605cc0bb5c7f0 ./web/skins/classic/views/none.php +49ea5b8face2a2028be5cb3bdbf1bb7a ./web/skins/classic/views/export.php +0c6c51a1b114ffbb16d58fba7c89524c ./web/skins/classic/views/function.php +d710ca3b522166d665e369809e8a2d25 ./web/skins/classic/views/stats.php +39a039889adf0e47c76c901c33ce5049 ./web/skins/classic/views/video.php +5409f465a588c95cdba44eec090d810c ./web/skins/classic/views/bandwidth.php +3c5176cac1f73c0a88384ce444766280 ./web/skins/classic/views/logout.php +2dcafab9b2be01606fcb51e4dbfc20f6 ./web/skins/classic/views/timeline.php +b76780ad252d2ce849d39e3caa047c58 ./web/skins/classic/ajax/Makefile.am +1b5888dd1130c2624e3a89ec6914641e ./web/skins/classic/skin.php +1d4fc58a4fb06f37e330419e1de5ccc5 ./web/skins/classic/js/skin.js.php +805aef41bad373c6ee01d4ad53e8ff1a ./web/skins/classic/js/Makefile.am +bef654370e444df42810de7da6c4a70e ./web/skins/classic/js/jquery.url +6e955eb64f82afa9096420be1618a29b ./web/skins/classic/js/classic.js +af693f9aea7dae36fb3bef4c9b6e56fb ./web/skins/classic/js/jquery-1.7.2.js +71f061bed29e28271c08cd854e199c74 ./web/skins/classic/js/skin.js +7ab39f8deb773cb790a61ec84e88ee9c ./web/skins/classic/js/flat.js +df99ab07213af7e34d3be30577164872 ./web/skins/flat/graphics/Makefile.in +7879d860176b29029fa4c7f28b727025 ./web/skins/flat/lang/Makefile.in +480557e820c7b6e6038e4176a2af2ea2 ./web/skins/flat/css/Makefile.in +5aa28a91ca72e57dd75b2d4a8f5fc6d7 ./web/skins/flat/includes/Makefile.in +cdc64496eb48632cbd2bc7bafef9d64a ./web/skins/flat/Makefile.in +c98e1b668dd757aaa2746005d4b4a938 ./web/skins/flat/views/css/Makefile.in +c4e176e6e965b87f69a63420cab4af53 ./web/skins/flat/views/Makefile.in +d8d1c4f17f5d939ecf46f57c16ac3e2a ./web/skins/flat/views/js/Makefile.in +b5627a8169f685a642289fcbe4b639d0 ./web/skins/flat/ajax/Makefile.in +7cb6bf5845900a87dfed6d84e5ac96bd ./web/skins/flat/js/Makefile.in +99931ad9ae489e68acad0c95103456e5 ./web/lang/Makefile.am +fe3ba6910955f7e59c533edde6e76a2d ./web/lang/es_ar.php +4743f791f12d81b443ab0ca1b85ec6af ./web/lang/pt_br.php +7c9070b7b65fabfb72306738baff537e ./web/lang/dk_dk.php +17c2b6e5decc55731b31a51991d91f3b ./web/lang/hu_hu.php +78997dd632c038d732fbf8bc3374a4cb ./web/lang/fr_fr.php +c9793bdd2bfeb5a6856bb6a0afc91218 ./web/lang/pl_pl.php +2ef22ef8d1c7513497fdf5c846054604 ./web/lang/it_it.php +5fffc8958d950c22e8f357b0bda62685 ./web/lang/se_se.php +0138607989f815c640317c2e47f1c7e9 ./web/lang/nl_nl.php +a3a33207a6ad4c8ff5d27683bad3b743 ./web/lang/ru_ru.php +dde8f3570d03669b78ef6691f06e5221 ./web/lang/ro_ro.php +2ce9bebd55d946cf4ea9d0776df0cc7d ./web/lang/en_us.php +0e8eb309725d33a89c14f0d49c83af61 ./web/lang/cn_zh.php +654428cc802856a13a2405566215a1dc ./web/lang/big5_big5.php +5626605831d76d6538f3785e7f671e26 ./web/lang/et_ee.php +cef9b67a57871a6aa310a492b89f9346 ./web/lang/ja_jp.php +53f8d546d131f453190b5587dc9b29a0 ./web/lang/es_es.php +3f77da221e921f1b6faee44f136b7719 ./web/lang/cs_cz.php +09c01075773025ea56737e21faa1b452 ./web/lang/en_gb.php +b9e39e59e0acc3f159650fdb3caa4c67 ./web/lang/updateLangs.php +0cca7400eed1e884b95bd7e62e751763 ./web/lang/he_il.php +6d6dd4ea05509030405271f717337016 ./web/lang/de_de.php +ddb682a54052f1df8bc3a1bf16e723ef ./web/.htaccess +8ccf4da96000c488cc79b5a20a381d48 ./web/.travis.yml +07d8a9af2283aa45437519a2266c0cd4 ./web/css/control.css +560a8a8a1cdb268d9d267ed05b03d557 ./web/css/Makefile.am +f3a96b4e82b5e7d722d860b0371e92e2 ./web/css/reset.css +d3f02477779fa8a2cddd1c1605583b96 ./web/css/overlay.css +9a6de3128e9d12e1e18967f4087d8b10 ./web/css/bootstrap.css +a21186623f461fbdf94a1000fb081ee0 ./web/css/spinner.css +fb2c0e57d4b268d07ea1d8594735cdc2 ./web/css/skin.css +b4659211b34992bc81bee822615181db ./web/css/export.css +9aab9ae739c7003ba1ee35e4f515c282 ./web/css/datetimepicker.css +cdf4928cfc8373086f75dac1d6688feb ./web/includes/Makefile.am +5dae654caa50798391cecd6e67a49efc ./web/includes/actions.php +ea76e136916631c564343e24df07de2b ./web/includes/logger.php +8ae8d5b773c4cc9cda879f57aee04dfe ./web/includes/control_functions.php +a6cebf42a247bc0cd8eaa88d1c15c74c ./web/includes/config.php.in +6ae297c50ade8fb1e40c3bdd2ea7e8f7 ./web/includes/lang.php +63bdb662ad9c56e1f39a856d67ae1432 ./web/includes/database.php +eb49b82b5dd26d03c79b7ae8985e61ae ./web/includes/functions.php +e49d52e74b7689a0727def99da31f3eb ./web/fonts/glyphicons-halflings-regular.ttf +ff423a4251cf2986555523dfe315c42b ./web/fonts/glyphicons-halflings-regular.svg +7ad17c6085dee9a33787bac28fb23d46 ./web/fonts/glyphicons-halflings-regular.eot +68ed1dac06bf0409c18ae7bc62889170 ./web/fonts/glyphicons-halflings-regular.woff +9c6f2be756539dee534a8791687ec288 ./web/README.md +5c28504ecaa3418232e8c802739d2095 ./web/views/controlcaps.php +32ca6aedaee9eacdc26a28de7b1a5871 ./web/views/controlpreset.php +eed41b2d802cbd25c03249a000925b33 ./web/views/frame.php +045dff5f5a8e0c5eb064a488f6834298 ./web/views/filter.php +2915790cec005e0d6ac6325e33181766 ./web/views/monitor.detail.timestamps.html +5d4bd0616707b6836d7339182fa61d4d ./web/views/options/options.mail.html +fbd7564d3c6eb93500291e67c246508f ./web/views/options/options.highband.html +011104e40061f0cbc295ddc31ac32f52 ./web/views/options/options.x10.html +11437296a09d3d3500919731507b7612 ./web/views/options/options.phoneband.html +1df8b9ac443a7769b49b2ecac303f09f ./web/views/options/options.html +4dcb39d17c2b7f7bdbb9684aa07c1fc6 ./web/views/options/options.system.html +fbda31d8d3800bfd8e11d5383156a482 ./web/views/options/options.paths.html +4b0b36400c93029bfdc2ef260b0aaa25 ./web/views/options/options.upload.html +a020fa284c7614f0a663bb9098e3e163 ./web/views/options/options.medband.html +aaf3246613f5fea19de3a551b83dda3a ./web/views/options/options.eyezm.html +a3c783b4293bfbb1739b8590ca985e9a ./web/views/options/options.network.html +bb3f4f7a8f8c14edf99ff7231383fd3e ./web/views/options/options.dynamic.html +22f5e21a84951d346ee9ce741ab6f4bc ./web/views/options/options.config.html +fc11981d217be6c0294a6960341a2e60 ./web/views/options/options.lowband.html +02306e4fb1dd900d1cc84d53f5367221 ./web/views/options/options.images.html +a2ef6e3253a7045c34563065479fef29 ./web/views/options/options.web.html +24c1b7d4c94da4b1acde1793704bb437 ./web/views/options/options.logging.html +102b87276f7c3261ad3563de318541bf ./web/views/frames.php +602186f3b05e2c3c3e6c028ea644f5c1 ./web/views/monitor.html +b6fe00d9376db3c510c189076c65dec3 ./web/views/status.php +7decf004224bc90b967cfe77467ef2e6 ./web/views/login.php +637a1f2dab3a1b6dc6dfa53793c9e620 ./web/views/events_search.html +f9e77a631bd57cd8a2c02f29481cc11d ./web/views/Makefile.am +492711327bcbae3fdb6906ad491e2bdf ./web/views/eventdetail.php +4bd9283191d330bedf1d5ffbc01927ca ./web/views/optionhelp.php +221f952bf26c49436349d834a8d2bf0b ./web/views/state.html +62fc64e470ef60bd639d77fd216c47e9 ./web/views/event.html +a55961bd579dfa76bfb46ee73cbf5b7c ./web/views/zones.html +a83fea5d315d6d1abfdc495ef3e2a840 ./web/views/event-frames-stills.html +36be43b9b753bb30828ea1f10f24ed16 ./web/views/monitor.detail.general.html +8a5034fd7ce8e54016523c4710237bce ./web/views/tab-monitor-file.html +a877333a7bcdd240e2eb8a8cb222ab82 ./web/views/user.php +399cc3c6e2db43ab6fc6eba4a745f9e8 ./web/views/log.html +ecb2a87b8f8c27bff59fb8b95c6334c9 ./web/views/events.html +cf251eedd2a5492f2cbdd2f5032d00ee ./web/views/postlogin.php +4af5785f39864642b064916bc1269091 ./web/views/zones.edit.html +54c011fe978879ac50fa60763d1d9b0d ./web/views/cycle.php +d98aa588ffbb3da94218cd6c80e9a437 ./web/views/donate.php +202bbee66dc131e51069128717cc35fb ./web/views/version.php +d9b8cc5ecc4a1f26e057df31675b55cd ./web/views/file.php +89635fa6da493dd28076352b746ee694 ./web/views/device.php +d1b9a111d15c6a59ab23e612ad73ba54 ./web/views/groups.php +40c485df068b84eda28d463c529bec63 ./web/views/error.php +60ebaac1dfda3f134e6bad12acdf2592 ./web/views/monitor.detail.misc.html +43e6f16bbb4a979587529aefe874a83e ./web/views/montage.php +ea18641fe75bed8bfd77610d71b0efef ./web/views/watch.html +f9c5481d113f67d002883034dddf385a ./web/views/blank.php +90e3a0c17c6d5ac8b0b30e749c89a4ce ./web/views/image.php +163a1994462eb77b3080c12f1210df62 ./web/views/monitor.list.html +fa1e08a1ad72597dae3a53cf0a802cc2 ./web/views/tab-monitor-x10.html +c192c4a3f5d1d754ff497bef573f211b ./web/views/settings.php +886ea3e85e567b3447e1b54a3d012037 ./web/views/group.php +dfc67f4d269ea3cf852521ca517df604 ./web/views/monitor.detail.control.html +0005f14f8e6d64a7500c673db57ff683 ./web/views/plugin.php +01f5b5efd628e3fae542affcfda8c245 ./web/views/controlcap.php +947f67e7d557f07c72349887a9f6de77 ./web/views/tab-monitor-local.html +8d2315eded56f1f4986c55185eb47b51 ./web/views/control.php +71be3b8d1b7a4bde88ae29755c41ebaa ./web/views/monitor.detail.buffers.html +70d2f61fca97b452223068b7b616ba8c ./web/views/zones.php +987bbbd3240d2510421a026f3d7f9420 ./web/views/filtersave.php +759eb533f4b497a185686ba89aa32728 ./web/views/tab-monitor-remote.html +587db92490e72fc6863efeb438e26d84 ./web/views/tab-monitor-curl.html +88a14ce26f06e74bb1837c36457f94cd ./web/views/zone.php +6629bceea4a1bb6bb7e2091fa91e3153 ./web/views/console.html +5b22d14c21f96c1cb48e165aa9246085 ./web/views/monitorprobe.php +ecbb5724335df714a29b2b18a308a9c7 ./web/views/tab-monitor-ffmpeg-vlc.html +1f1682b6f8308d6fce80909c3f39069d ./web/views/devices.php +3c9f10db9aeaa3970228a501d42f32f3 ./web/views/monitor.detail.html +d0f88e70ed51cd720b850a4b982460f3 ./web/views/monitorpreset.php +8ce2fdbb3aa4397d4a11af871a719924 ./web/views/none.php +2b0bc6055f377109b2a0d9bda475931e ./web/views/host.html +b267bda2c730cad238548a8b9de914a2 ./web/views/export.php +9d59c889002f95097c3e17be1e2e551d ./web/views/function.php +474014d053d6f4a7d279340aba8ae0e9 ./web/views/stats.php +6a6f9b185db980953e0fe248de3165e7 ./web/views/video.php +dedd3647a0e774ce56f87bde4067c8f6 ./web/views/header.html +b27a82fa4bb243490085182a53107861 ./web/views/footer.php +995619cd3f75bf6b1c6fa36e01a52283 ./web/views/monitor.detail.source.html +227b7033ec137e4033ca856ba18955c0 ./web/views/bandwidth.php +aa2e969762e6c6aa74b0428fa84741c0 ./web/views/logout.php +db51f0c21c975f495a3fcee330f6c7fe ./web/views/timeline.php +4cd077d289b92cd13ad3a8d898254d42 ./web/.gitignore +40056b993e0781a7a0d88e6612d98f6d ./web/index.html +b14cc5d7abdf0ab50ae275f1672cbd7b ./web/ajax/status.php +44ba564f3694f7602087039b7f09b920 ./web/ajax/Makefile.am +cfe1544bd92a9ce449a68253ce9059b5 ./web/ajax/event.php +433c99927f1961f159562627f3c79800 ./web/ajax/alarm.php +c65641a2edd9bac342684936c391d444 ./web/ajax/control.php +bcf111c3a38a3a94d5600f33d89416eb ./web/ajax/zone.php +a0f631c46373897a0f29b0519cea9180 ./web/ajax/log.php +bf81f42111e73d054802f0aa72027c8e ./web/ajax/stream.php +83e6f36baf560c80368e9286c08039e4 ./web/index.php +23d17767dd2ae7102b59a66aecc30fe6 ./web/js/skin.js.php +29d4011ab1647beeeabfb47b80338f5b ./web/js/Chart.min.js +08bc160f68803fd089b6f449a4541b81 ./web/js/dirPagination.tpl.html +fb96f29b406f3992ef14e02195a8642d ./web/js/Makefile.am +85e5d41eb9c451c16d4e784aec13d948 ./web/js/moment.min.js +6d1a5880671e67c0d6384a9d33143309 ./web/js/logger.js +e40ec2161fe7993196f23c8a07346306 ./web/js/jquery-2.1.1.min.js +10092eee563dec2dca82b77d2cf5a1ae ./web/js/jquery-1.4.2.min.js +281cd50dd9f58c5550620fc148a7bc39 ./web/js/bootstrap.min.js +1eb33d67d6069ec8723920e59e602d31 ./web/js/overlay.js +2f4357273ede74623cd7f3dbc210da7f ./web/js/mootools.ext.js +ccb7f3909e30b1eb8f65a24393c6e12b ./web/js/npm.js +546dd00ad3f7f286d4d47e7ba1d3606f ./web/js/skin.js +1193a7ab041f6faeecec05368b433faf ./web/js/tc-angular-chartjs.min.js +aba3cb16b1d9006ac2e3aa297b80b070 ./web/js/datetimepicker.js +15c42fe2132ec1e21db611ff7f322c28 ./web/js/ui-bootstrap-tpls-0.12.0.min.js +5f05d08fd0c10320a3ba7fbc4601b420 ./web/js/app.js +83f32131b638a8686a43510fbd645b1b ./web/js/angular-ui-router.min.js +2250783fc1bf3f4646afd1f41ea6fdc4 ./web/js/dirPagination.js +b855b5b835ed6dacccdf6d1e63a892dd ./web/js/controllers.js +90ffbe9673e75574043744713d433408 ./web/tools/Makefile.am +7a5e35461ad1590c9456cb4e1e4f500b ./web/tools/mootools/Makefile.am +cc6d0a32fb1a4eb7327eca35e563a986 ./web/tools/mootools/mootools-core-1.4.5-compat.js +cc6aa0bbc633f3f16b409a8246ef7fe6 ./web/tools/mootools/mootools-more-1.5.1.js +18df3add56b5a4a0ac65d0477b489955 ./web/tools/mootools/CMakeLists.txt +fb02cef58318a74bbbbda3e63e7d97e1 ./web/.editorconfig +3b03f53ce0e574d257729618fb260692 ./web/CMakeLists.txt +f4aafb270c2f983f35b365aad5fe8870 ./depcomp +895e5504621928102995cd7173795fcf ./cmake/cmake_uninstall.cmake.in +fd9602db874aa96abcb81fa752f052e5 ./cmake/Modules/GNUInstallDirs.cmake +7e3b14603191ee6db1b1cb4856183995 ./cmake/Modules/CheckPrototypeDefinition.cmake +1cbf66db90ebd39028d5a915d9963be3 ./cmake/Modules/FindPolkit.cmake +a4b8c794fca18dd0586a94f1019c3938 ./cmake/Modules/CheckSendfile.cmake +03de44e31bf404cb1a793f4a3669e4c5 ./cmake/Modules/CheckPrototypeDefinition_fixed.cmake +9c11ab6b4ebefa57ed7251371ae2d1e3 ./cmake/Modules/FindGLIB2.cmake +8ebcd5a892b09bcb888f976f8123874b ./cmake/Modules/CheckPrototypeDefinition.c.in +6b664380d86bf813637735378c718f5a ./cmake/Modules/FindPerlModules.cmake +6744acb8bd2f057d679e46d31545e933 ./zoneminder-config.cmake +186f16116659448d29b389ebe8c86726 ./README.md +c213a3abcef1bb69378cf40a9fdad0a7 ./configure.ac +ddff1d125d68ddcad8b122cfb66078a2 ./TODO +9569c533d6f801eee60e44986c602c98 ./.gitignore +afcdc0f70291d81543c17a3705129dc2 ./description-pak +94d55d512a9ba36caa9b7df079bae19f ./LICENSE +a34da615af2780e339e41fbf7f7cfdc8 ./ChangeLog +6dee62a0963ecdc4b7ccb353b7ae7424 ./db/zm_update-1.27.0.sql +bd8b4735fee0bbb064a140819347df6d ./db/zm_update-0.0.1.sql +632200d5a6238e256e7cf80de95156dd ./db/zm_update-1.19.2.sql +821f1c1d6c52f99dd47ac14d61fa5640 ./db/zm_update-1.22.2.sql +8b07b11c7cad1914c3ea833b8ed5817b ./db/zm_update-1.24.3.sql +3fca704937207aa222e77210aa0c25e0 ./db/zm_update-1.19.5.sql +97edc0c5579da47e346d42df1e545eb0 ./db/zm_update-1.20.0.sql +5135114cbe3852fbbb7e84eacb110b5a ./db/Makefile.am +92d0e29600b0f23c3cabdc02ce6259e2 ./db/zm_update-0.9.11.sql +91bd3c0279e5ea0eaf387404d0ae2439 ./db/zm_create.sql.in +08d098374092ba16eb3459a1aa2a8229 ./db/zm_update-1.24.4.sql +54f6c2d009ad16095cad89d9855c91c2 ./db/zm_update-1.27.99.0.sql +4c5855feeaaf945c29c43292e5c74197 ./db/zm_update-1.26.3.sql +c1594ffeff663ea370dbbaeb272e10db ./db/zm_update-1.22.1.sql +e2dbebece1d49bea27f756895a663f86 ./db/zm_update-0.9.16.sql +2b89f4c950e227e9313cf7418727f3de ./db/zm_update-1.26.0.sql +d6a52309d5b656f0ea799bdaf723f123 ./db/zm_update-1.28.99.sql +3cbc94a85b32ab891b98ce675b8ec8a5 ./db/test.monitor.sql +7c452e51249b26c7d6bc2651bd008680 ./db/zm_update-1.21.2.sql +92d5871c239ea24a2bdd738e0776a750 ./db/zm_update-1.28.0.sql +f96d352e85bbffb74ae0c6b354c76cac ./db/zm_update-1.24.2.sql +85c2f951462a9ca699af571910b2f5e7 ./db/zm_update-1.21.0.sql +6f75164dc4ab8e6189ccc8a2f3a006e4 ./db/zm_update-1.17.2.sql +8601c639ef779f73b37e00df75329bf0 ./db/zm_update-0.9.13.sql +4466a07866e466e4a69a6986b2f1d0cb ./db/zm_update-1.23.1.sql +6314f20b3f02056792caf93944965fd8 ./db/zm_update-1.23.0.sql +452cced335ec34b78b4d091b7901ffd5 ./db/zm_update-1.21.1.sql +313214000c45d7e66bc09560985913bc ./db/zm_update-1.29.0.sql +4ec7ea6a41ced9a48b5922f359a56b6b ./db/zm_update-1.19.4.sql +c75ceef3b6954b8a8047010bea8d6d4f ./db/zm_update-0.9.7.sql +5d46d42dd9f62cdaedd5190f05b0a618 ./db/zm_update-1.24.0.sql +8388ea9b05577c775206dcfd5df72856 ./db/zm_update-1.18.0.sql +bee064f205c14f5c20501e739ce80a1e ./db/zm_update-0.9.8.sql +990aade37fd26b6fa4ffdd3a13c48b24 ./db/zm_update-1.19.1.sql +34d526653752e2ec9722b21a007d79e8 ./db/zm_update-1.22.3.sql +e35625686e01f368b3f8f87359aaac7c ./db/zm_update-0.9.15.sql +9c82b2ea73453054f9a69c787ec3596b ./db/zm_update-1.22.0.sql +2f7281f19a02402c8a2b603143bc203d ./db/zm_update-0.9.12.sql +07f00f03f78eca783cfc115fcf1168aa ./db/zm_update-1.19.3.sql +83decad8946e51529e7f7bbc13c743cf ./db/zm_update-1.24.1.sql +795313d24e9c26b3557feb386df603c6 ./db/zm_update-1.26.1.sql +be7fe21854b261df5b6b28d92ce0dad4 ./db/zm_update-1.19.0.sql +2740f9a92352e7d91be18a67115be71d ./db/zm_update-1.20.1.sql +ee60615a820f97e43ebab88f173b9921 ./db/zm_update-1.26.5.sql +5880f07d8c485d28a002e45a254c47a5 ./db/zm_update-1.17.1.sql +b7468afae4c69e654a4c61feec101730 ./db/zm_update-1.18.1.sql +9b4716630546a41cdfcd08e56faf647b ./db/zm_update-1.28.1.sql +9c0fc358cdc873030b0367d005f6b765 ./db/zm_update-1.21.4.sql +fd4e7c581673c85f9734bfdf45337b99 ./db/zm_update-1.23.2.sql +54464055410fdae4f296c00c963bdd4c ./db/zm_update-1.23.3.sql +dd2109c3b45b0243d92e21031b7a55e0 ./db/zm_update-0.9.9.sql +6c09c69e9b66b83a0b8ef8f37f985ebc ./db/zm_update-1.21.3.sql +5983fcbe9f352433a8cdba6dadea4d5a ./db/zm_update-0.9.10.sql +e0651ab19ce94e12f2a05481d4847b52 ./db/zm_update-1.26.2.sql +9be46cd2ccadfeb576c9fce5fd2e9ca7 ./db/CMakeLists.txt +06c60404f44a05db99d3a0dc9bd251cc ./zmlinkcontent.sh.in +0c8b042f99995c11aeb81bccc23c4c05 ./compile +48623631d09efa1923eae6e302c2549a ./onvif/scripts/Makefile.am +ec8c2a6c5a332e4c90b582df84b5c4b5 ./onvif/scripts/zmonvif-probe.pl +59538680ee1be0e5303ac91dec06c126 ./onvif/scripts/CMakeLists.txt +df443523e9109cf628048134eef2dbaa ./onvif/Makefile.am +53caa4e1ce32e10d2e8c311b1c6489d0 ./onvif/wsdl/wsdl.xsd +4f6db00a741593b2de979fcd48d2bdf8 ./onvif/wsdl/media.wsdl +2c2aa8b4930319f0e0db8f29e4c61ff1 ./onvif/wsdl/b-2.xsd +91e8db6455bc44f6d8bd273dd4d612c9 ./onvif/wsdl/wsdd-discovery-1.1-schema-os.xsd +193da3940e7d18e82f211137320199be ./onvif/wsdl/wsdl11soap12.xsd +a2368b556ef9a2a261e0a2fbc11d41dc ./onvif/wsdl/xmlmime.xsd +bbbd64652db5e56659fc09265ce2b674 ./onvif/wsdl/onvif-local.xsd +dffb0c405f3d91c5c1deeac626d1b0b8 ./onvif/wsdl/devicemgmt.wsdl +5a89a3cd58cfbf09b372b9c790dbb022 ./onvif/wsdl/wsdiscovery-udp.wsdl +894d9caf0376d371ade68d26a62b8f7f ./onvif/wsdl/bf-2.xsd +035feb254f9224ca3987d38d2e6768bb ./onvif/wsdl/xop-include.xsd +fab4aa3bc10fe3020538e90252e9b8f3 ./onvif/wsdl/soap-envelop.xsd +8df4dac1fddca23d309bdac0907d8dc6 ./onvif/wsdl/wsdd-discovery-1.1-wsdl-os.wsdl +465f9fbd2c51bf21bae6bf5ac3303367 ./onvif/wsdl/t-1.xsd +770230040d83f556fc80f3296652b10c ./onvif/wsdl/ptz.wsdl +362eb12f8bdc1808ac887402928bb410 ./onvif/wsdl/onvif.xsd +387e638d836010297f28605826f0f295 ./onvif/proxy/lib/ONVIF/Media/Elements/GetStreamUri.pm +b7e7dbf60d5323a5b6cc74aaf06e4f54 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveVideoAnalyticsConfiguration.pm +8313945c5b11a77f5e74d10a18427ca3 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoAnalyticsConfigurationResponse.pm +63779f27852b53f778abd26486efcf96 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioSourceConfigurations.pm +e0c212c6219189679d02c8c11bb9602f ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveMetadataConfigurationResponse.pm +8419ab2878b6557a64182778d834c80b ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceConfigurationOptionsResponse.pm +d53f9fed74c7f0000d49a078beb9bc6e ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoEncoderConfiguration.pm +77266fe9bc98cd78db2741af46078337 ./onvif/proxy/lib/ONVIF/Media/Elements/GetServiceCapabilitiesResponse.pm +f344a31007fad2f788b4ef1217d928b9 ./onvif/proxy/lib/ONVIF/Media/Elements/Polygon.pm +e962cbc89ca4dde5ec22775eb0683170 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveMetadataConfiguration.pm +5cfc990f5f39cb5b5d5cf28cfad6e61a ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioOutputConfigurationResponse.pm +f39a236ea6f340f553a5a368841b3927 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveVideoSourceConfiguration.pm +dff6fb95ff0d6b6f47de924f0ede9189 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioEncoderConfiguration.pm +e69217719613c72c769ee6fea62514fe ./onvif/proxy/lib/ONVIF/Media/Elements/GetGuaranteedNumberOfVideoEncoderInstancesResponse.pm +044717fa7c7b77b5d30e46f7f1aa64d5 ./onvif/proxy/lib/ONVIF/Media/Elements/MetadataConfiguration.pm +93845c26f6cdfab23415b54277611e4f ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoEncoderConfigurationOptions.pm +f9f8f0d4f77d73ce2cf0b1b649c2ce7b ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourceConfigurations.pm +4329467dcb83bcc7d08d8d882fdf82f3 ./onvif/proxy/lib/ONVIF/Media/Elements/RemovePTZConfiguration.pm +fa11179744e28794765eeec9712c64cf ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourceConfigurationResponse.pm +00ce1d25e94758e4bb5fe7c44b9f1f18 ./onvif/proxy/lib/ONVIF/Media/Elements/GetProfile.pm +85953c4f73fafe546257bc910e9957a5 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioEncoderConfigurations.pm +a69c7ceb183269d6714f1c05d278292b ./onvif/proxy/lib/ONVIF/Media/Elements/VideoSourceConfiguration.pm +1fa2fa7a837b743d9954d1197d163832 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputsResponse.pm +457461465210f9abfa0632a0c2dcf2d5 ./onvif/proxy/lib/ONVIF/Media/Elements/DeleteProfile.pm +0603f2d3f112e7669c02a7f36d740bf1 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveVideoEncoderConfigurationResponse.pm +cf7def0af9b8fd8a0f738a728efcf58a ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourcesResponse.pm +0013bf7a9e069d44d4f97c83e2d1d15c ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioEncoderConfiguration.pm +4019a2068a4cb414a6c327b08cf8a1ff ./onvif/proxy/lib/ONVIF/Media/Elements/SetOSDResponse.pm +b46fc5b5a0f3441861913353a2ef6eb4 ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoSourceMode.pm +243a5ac9f88e6f5647eadff506c1d6e7 ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioSourceConfigurationResponse.pm +afbdc87fa66a54eb3074ca6327ea4350 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioOutputConfigurationResponse.pm +91cb1f35896bd826af7f3d5cfe22123d ./onvif/proxy/lib/ONVIF/Media/Elements/StartMulticastStreamingResponse.pm +f91593e45d31c484bc6322c9ddf463dc ./onvif/proxy/lib/ONVIF/Media/Elements/SetOSD.pm +14451377f8168a2cb661e4b963320e59 ./onvif/proxy/lib/ONVIF/Media/Elements/GetMetadataConfigurationOptionsResponse.pm +e3d1bb87a3e71bf1f0c48cde20595047 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioOutputConfigurationsResponse.pm +d1ce504818a2d5201b9184e5b82a6211 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoEncoderConfigurationResponse.pm +2351ce46b414f12bcbbf19625cb43a88 ./onvif/proxy/lib/ONVIF/Media/Elements/GetMetadataConfigurationResponse.pm +f5f2a4880617079ce7ce6408af69e960 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioEncoderConfiguration.pm +5c9879a616251afa4e35ee54c8b5f82a ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleVideoSourceConfigurationsResponse.pm +4f4f6a4a2e70c769a9e6e2809d129f17 ./onvif/proxy/lib/ONVIF/Media/Elements/GetOSDs.pm +177ea25af6bd1b55e12292cb78e5f651 ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoAnalyticsConfiguration.pm +b6e03eb13cf00a8cbde1c77f9540236b ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputConfigurationOptions.pm +83f1f486d753bf23317963b413241672 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioEncoderConfigurationOptionsResponse.pm +5ae9c7af46bef8947aa38b4a11a05eb6 ./onvif/proxy/lib/ONVIF/Media/Elements/StartMulticastStreaming.pm +f793e539a230d7e8644a10f48a9070c3 ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoAnalyticsConfigurationResponse.pm +1eeb71c8bb90df2b045fa473a65d7af7 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioOutputConfigurationResponse.pm +e48fae47a8ae6abd12112f2c4374c756 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveVideoSourceConfigurationResponse.pm +9095019a727aa89a7ff64e84b6f39423 ./onvif/proxy/lib/ONVIF/Media/Elements/AddVideoSourceConfigurationResponse.pm +c9eb4e884054fc32f412c1ec4adcc8bf ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputConfiguration.pm +e90a21734b405d50a60544eb1462c800 ./onvif/proxy/lib/ONVIF/Media/Elements/AudioOutputConfiguration.pm +1949ed741095fb6ef46bb6a73b7fee52 ./onvif/proxy/lib/ONVIF/Media/Elements/SetSynchronizationPointResponse.pm +e50ed4874b0fe8986c935b991aa976c7 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleVideoEncoderConfigurationsResponse.pm +43433a8bcfc1cbd856287f243a4b5a34 ./onvif/proxy/lib/ONVIF/Media/Elements/AudioDecoderConfiguration.pm +0a7420755af026cc9dc23991a0b50e00 ./onvif/proxy/lib/ONVIF/Media/Elements/DeleteOSD.pm +faa68bc2d3b6437718b05c68f60e6a57 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceConfigurations.pm +df734961653e69d9c4c0a02603d9fb95 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioEncoderConfigurationOptions.pm +f4b3f92c5ea2c60c0f50dbba961297bb ./onvif/proxy/lib/ONVIF/Media/Elements/AddMetadataConfigurationResponse.pm +faa3e0a5e2355e92d9f53b8cee23d9b3 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioDecoderConfiguration.pm +7b4ab26a222d06d77329b39c3378fb04 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioEncoderConfigurations.pm +9f9b5ca6efd97e3e680638b3dcbd2c58 ./onvif/proxy/lib/ONVIF/Media/Elements/VideoEncoderConfiguration.pm +083d6a9fda4aeec044a785792da78055 ./onvif/proxy/lib/ONVIF/Media/Elements/Message.pm +e20cb8dca27edd8696376d798ecbf1d7 ./onvif/proxy/lib/ONVIF/Media/Elements/AddPTZConfiguration.pm +01f0317621ee0a5038593863f5e680d9 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoAnalyticsConfigurationsResponse.pm +6f4ebe846c9dd55fa5e275dbac0bad02 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioSourceConfigurationResponse.pm +00fe01922b2a918a5fcf41fc6fe8b28b ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceModes.pm +92f022bdc8eadc723edaa082a07aaf5e ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourceConfigurationOptionsResponse.pm +81f5a6a9281fbc239b248c0434cb5c42 ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioDecoderConfigurationResponse.pm +0817c5c45cce00e86af65c99a0d53058 ./onvif/proxy/lib/ONVIF/Media/Elements/SetMetadataConfigurationResponse.pm +efeb091669356641fde1fb00bffb7ae7 ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoSourceConfigurationResponse.pm +3bea014be1e47eb9fe06d420037531b3 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioDecoderConfiguration.pm +786e43a423574dc02530838e3ff5db65 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioEncoderConfigurationResponse.pm +41dba16dd1df15395fa4ddbf8d798860 ./onvif/proxy/lib/ONVIF/Media/Elements/GetProfiles.pm +871aa22e40ea4180e188830c4153f903 ./onvif/proxy/lib/ONVIF/Media/Elements/AudioEncoderConfiguration.pm +bb753804d1f1e273cb93e51c08cbecfb ./onvif/proxy/lib/ONVIF/Media/Elements/GetMetadataConfigurationOptions.pm +08f0c776ae06ec01af7bf6667bdaf218 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioDecoderConfigurationOptionsResponse.pm +6dc05385cff389d54cedfdc131d04b5b ./onvif/proxy/lib/ONVIF/Media/Elements/GetMetadataConfigurationsResponse.pm +8dd13bb70681861783cf380bd8944458 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputConfigurationOptionsResponse.pm +74fdc5e823618b6e6451d63919146552 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleMetadataConfigurations.pm +9bbc945aeaab52755f4f2334272a9bc8 ./onvif/proxy/lib/ONVIF/Media/Elements/RemovePTZConfigurationResponse.pm +00f2f2bef50715c584f2ed14504987e7 ./onvif/proxy/lib/ONVIF/Media/Elements/AddVideoAnalyticsConfigurationResponse.pm +75e6ec543ee88ebab6ec1d2ecf481c41 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioEncoderConfigurationResponse.pm +9d0b0a0b567aa26a27cb65c14a73213f ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourceConfigurationsResponse.pm +a8ad70e2d0879de1509b42f2701e14e1 ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoSourceModeResponse.pm +c8d6d649c78856ab35ee7ab9290ccd26 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputs.pm +7a2852477f1598447c5b847f8adfcbdc ./onvif/proxy/lib/ONVIF/Media/Elements/GetOSD.pm +ee3c4ddbec74003681c5ac6eec548088 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioEncoderConfigurationsResponse.pm +80a2d8619e0d2abf1d19e57104e0b25c ./onvif/proxy/lib/ONVIF/Media/Elements/AddPTZConfigurationResponse.pm +461d170075781b876e7ba38c1473db82 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioEncoderConfigurationsResponse.pm +465bcd3a096422c939378d95d9a509e3 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSources.pm +4c1b3abedaba7f27a33500d462b471e6 ./onvif/proxy/lib/ONVIF/Media/Elements/Fault.pm +0c71ff96e6f64697a360977521696f60 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourceConfigurationOptions.pm +66fd28fcdccebb213b9c66ecf4209a69 ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioOutputConfiguration.pm +5db4826d70061d026cffa04eb47fa8c4 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioOutputConfiguration.pm +eecfcfac19c1dc109ab9154166537259 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioDecoderConfiguration.pm +068c72a1884e47cb85a95f2d18fc69aa ./onvif/proxy/lib/ONVIF/Media/Elements/SetMetadataConfiguration.pm +72fe8a7a181ee0deb28d242835622f06 ./onvif/proxy/lib/ONVIF/Media/Elements/DeleteOSDResponse.pm +482d7879d46b9b5a2cea4b2969852c10 ./onvif/proxy/lib/ONVIF/Media/Elements/GetSnapshotUriResponse.pm +f9b50837bca51a9a77d1a9effff16ab4 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioDecoderConfigurationsResponse.pm +e3d6dea9e4211553c6efe2fc53697faf ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoSourceConfiguration.pm +035737b18cb6d332cacd2ab8ac6ebb8f ./onvif/proxy/lib/ONVIF/Media/Elements/GetOSDsResponse.pm +c84f58eb5ff8c6c20177f25b7f187bb7 ./onvif/proxy/lib/ONVIF/Media/Elements/SetSynchronizationPoint.pm +09f2c3e02c8c27796cdc77c03cfc4324 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveVideoEncoderConfiguration.pm +9ee89d084955bd5c42bca1b9e7a58818 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputConfigurationResponse.pm +26930516e29685f662a0fc856908b116 ./onvif/proxy/lib/ONVIF/Media/Elements/GetOSDOptionsResponse.pm +5b9ebbeb93eb2f8900bb322304fc1dfe ./onvif/proxy/lib/ONVIF/Media/Elements/GetServiceCapabilities.pm +21d7c78c5475f8fba7037e698a74efe0 ./onvif/proxy/lib/ONVIF/Media/Elements/GetMetadataConfigurations.pm +822aee43f2cbea4ca5013354dd06a4e0 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveVideoAnalyticsConfigurationResponse.pm +b31849fb21b511619c76631aaa6aeb99 ./onvif/proxy/lib/ONVIF/Media/Elements/AddVideoEncoderConfiguration.pm +e7061acbb618ecc978e33f01e649ecc8 ./onvif/proxy/lib/ONVIF/Media/Elements/CreateOSDResponse.pm +653a05f5096b4b0b33c55aed87d8d7ac ./onvif/proxy/lib/ONVIF/Media/Elements/AddVideoEncoderConfigurationResponse.pm +991867f3498c481b8cdaabb22f375e60 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceConfigurationsResponse.pm +9e7db7764f421455718c84df06fb03c1 ./onvif/proxy/lib/ONVIF/Media/Elements/AddVideoSourceConfiguration.pm +fab80c5bcdbe222615d376b4a885d630 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoAnalyticsConfiguration.pm +56fbf78695eff277e45e6396e932b179 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleVideoEncoderConfigurations.pm +9f2a8feb8b2766c3567ddef2537c55e6 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoEncoderConfiguration.pm +3d5ab3c87afbe3b90e737bf08365e5df ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioSourceConfigurationsResponse.pm +e660374b09e80883119ce7e0bc1eabd1 ./onvif/proxy/lib/ONVIF/Media/Elements/DeleteProfileResponse.pm +6f8c4854f92448b0887f3395d7e36bfd ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioEncoderConfiguration.pm +5f7f1243e1695c931df90c382d210dd4 ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioDecoderConfigurationResponse.pm +5bc22297fb1a0142fbe46f0945ca29cf ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioDecoderConfigurationOptions.pm +ad24a0e7a35c72ce28903c6c4fd0b5ca ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioSourceConfiguration.pm +12f0be61d515de41ec1ba11ff14d32f4 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourcesResponse.pm +fa435db49e0ea761b16844814feadd94 ./onvif/proxy/lib/ONVIF/Media/Elements/MetadataStream.pm +5154c698133763f656b750bf9bb8813d ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioEncoderConfigurationResponse.pm +4fc0417e9e2f88da0f7fd13adc831ada ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioEncoderConfigurationResponse.pm +0965b641bdb2941cb7c2604377d96d0a ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioSourceConfiguration.pm +b74d18f4a98e25cd9eae1ff2de43a0fe ./onvif/proxy/lib/ONVIF/Media/Elements/CreateProfile.pm +fff7afe0a52b69fb9a8d6a7ae20589b6 ./onvif/proxy/lib/ONVIF/Media/Elements/GetOSDOptions.pm +1a1ea57188cd4bf522aeca4579edd02a ./onvif/proxy/lib/ONVIF/Media/Elements/Polyline.pm +8db2e6c1506dcb4d19f100ba13cfe35a ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioOutputConfigurations.pm +5abe47e1987e5939b5f817a8b7efe91a ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioDecoderConfigurations.pm +1f48d7b96faa9f637af4939c00202577 ./onvif/proxy/lib/ONVIF/Media/Elements/SetVideoEncoderConfigurationResponse.pm +5aba278b818251fab38983fa20fe46cb ./onvif/proxy/lib/ONVIF/Media/Elements/GetMetadataConfiguration.pm +591957807f549822383f80b83332296e ./onvif/proxy/lib/ONVIF/Media/Elements/AudioSourceConfiguration.pm +30f2a48f9a56ee110c7d25916f39d314 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleVideoAnalyticsConfigurations.pm +bb90b83072b4721e8bf7155938056628 ./onvif/proxy/lib/ONVIF/Media/Elements/Header.pm +a0e6c1208e8e3ae105db78d2662b8467 ./onvif/proxy/lib/ONVIF/Media/Elements/StopMulticastStreamingResponse.pm +7458eec96281b3f27092c1e23db287ee ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioDecoderConfigurationsResponse.pm +75ade1b0e5ea5966580ec19549c50bfd ./onvif/proxy/lib/ONVIF/Media/Elements/Include.pm +a69ca2c15d8b7347bc04cb9900eb09b1 ./onvif/proxy/lib/ONVIF/Media/Elements/Capabilities.pm +f0a795f19e7378c0e1bef8405c212873 ./onvif/proxy/lib/ONVIF/Media/Elements/PTZConfiguration.pm +47d7e0c54df985e97b63f5eb23f32d58 ./onvif/proxy/lib/ONVIF/Media/Elements/GetProfilesResponse.pm +c3d773cfdb8f1ca9d0d065c606c61374 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputConfigurationsResponse.pm +4b98abdcc2127016ab90f03cc7e43407 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioDecoderConfigurationResponse.pm +183a84379b2a6847127af6877197eafb ./onvif/proxy/lib/ONVIF/Media/Elements/GetGuaranteedNumberOfVideoEncoderInstances.pm +ab122283605ef7a305c276294dc60513 ./onvif/proxy/lib/ONVIF/Media/Elements/CreateProfileResponse.pm +2fa7a1d349b14dc0af4bf6a561b284f8 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioOutputConfiguration.pm +bc6f48aa4bbd11613356fdaf0a07180a ./onvif/proxy/lib/ONVIF/Media/Elements/GetOSDResponse.pm +be4be26a47d9e475cebaf257c0e737f2 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleVideoSourceConfigurations.pm +0de7fad634a5ed2e4e23a317c18bf5e1 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoEncoderConfigurations.pm +0315a8cc7b92fa0e13d09e7316002eb9 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceConfigurationOptions.pm +93ef9632da5930f00ea47d553dd7a897 ./onvif/proxy/lib/ONVIF/Media/Elements/GetProfileResponse.pm +771d0d02904ef8f0c1e022d84b8ffb23 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoEncoderConfigurationOptionsResponse.pm +f95abcf3883e924c7f33f3d75794d3bd ./onvif/proxy/lib/ONVIF/Media/Elements/GetSnapshotUri.pm +e329f4aec2e4d95dc4c9d51bf4f3ea64 ./onvif/proxy/lib/ONVIF/Media/Elements/AddVideoAnalyticsConfiguration.pm +2c02a07d5424f0d304caeb62ae14622e ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioDecoderConfiguration.pm +edd21d90af7509a2afe67dc5572e1f3c ./onvif/proxy/lib/ONVIF/Media/Elements/RemoveAudioSourceConfiguration.pm +663c0c62eab278b4da35e2189abba4ea ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioOutputConfigurations.pm +cbdf58bd3f3cc1b9f1ea9cb138f30856 ./onvif/proxy/lib/ONVIF/Media/Elements/SetAudioSourceConfiguration.pm +90f7fafb69bb40215eeff90e64ef2402 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleAudioDecoderConfigurations.pm +e533af910241ecb28ffb68afe55300d7 ./onvif/proxy/lib/ONVIF/Media/Elements/VideoAnalyticsConfiguration.pm +5c3399f60f3881b01fd3f954c4eb37b1 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSources.pm +2d2c2e02f8664db5d01b988c0d0940d1 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleMetadataConfigurationsResponse.pm +bf67478977754bf3e42ccdc6f2cb8439 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceModesResponse.pm +e756b3ee2aa6b3b82dd97d18d6ade9bd ./onvif/proxy/lib/ONVIF/Media/Elements/CreateOSD.pm +e20c30697d9b6c779bf8317dd24407c9 ./onvif/proxy/lib/ONVIF/Media/Elements/GetCompatibleVideoAnalyticsConfigurationsResponse.pm +7f4ee475a53d47845beeb0b5214194d9 ./onvif/proxy/lib/ONVIF/Media/Elements/Body.pm +c0f1d23b778cdacc886089b03ce295e1 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceConfigurationResponse.pm +129df682ffa7e8f0397f3ae565f08545 ./onvif/proxy/lib/ONVIF/Media/Elements/GetAudioDecoderConfigurationResponse.pm +88d5022aec9b5497bc0d7b7fc1974252 ./onvif/proxy/lib/ONVIF/Media/Elements/AddMetadataConfiguration.pm +85d01161d0ec080deab97b2c13ef03cb ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoSourceConfiguration.pm +141c25c527a132c7bd57bbd297060d83 ./onvif/proxy/lib/ONVIF/Media/Elements/GetStreamUriResponse.pm +a100d8e483613a3df25646e2047c1dc8 ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoAnalyticsConfigurations.pm +0cb28b08876b1f284c910477b654eff3 ./onvif/proxy/lib/ONVIF/Media/Elements/AddAudioSourceConfigurationResponse.pm +2a8cd0b817450c7d9e8c83bb6bf5c77b ./onvif/proxy/lib/ONVIF/Media/Elements/GetVideoEncoderConfigurationsResponse.pm +e4e71f9294dd31c3cecb5d44a9a31993 ./onvif/proxy/lib/ONVIF/Media/Elements/StopMulticastStreaming.pm +7d894c75478079649f177cac20eff48d ./onvif/proxy/lib/ONVIF/Media/Elements/Envelope.pm +f70f5830ae37632191d8bcc5012fe022 ./onvif/proxy/lib/ONVIF/Media/Attributes/contentType.pm +f132cd09d07be143adcb32c3d3e9684b ./onvif/proxy/lib/ONVIF/Media/Attributes/actor.pm +48e3026cbdae44a9c954b9f2ae9aa06d ./onvif/proxy/lib/ONVIF/Media/Attributes/encodingStyle.pm +8ae309028b605f803963cf73d3b0d203 ./onvif/proxy/lib/ONVIF/Media/Attributes/expectedContentTypes.pm +2e13bc9d9625949f8fb53e61c868085a ./onvif/proxy/lib/ONVIF/Media/Attributes/mustUnderstand.pm +bf4b4cf8b1724d516a6533c9c0375a1a ./onvif/proxy/lib/ONVIF/Media/Interfaces/Media/MediaPort.pm +53b0935765797c21916ff8f130d81a1b ./onvif/proxy/lib/ONVIF/Media/Typemaps/Media.pm +568365df5fd89b36c829af447d667ecc ./onvif/proxy/lib/ONVIF/Media/Types/VideoRateControl.pm +171cc6115cadef0f716eff939e376e19 ./onvif/proxy/lib/ONVIF/Media/Types/PTZStatusFilterOptionsExtension.pm +845096ad91c8c88d7c5f30c022ad5ca6 ./onvif/proxy/lib/ONVIF/Media/Types/MessageDescription.pm +3ddded3c9ee5e7050d37ce5110382194 ./onvif/proxy/lib/ONVIF/Media/Types/DisplayCapabilities.pm +fb4984118d96bf91b76b84791595ff52 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingSourceInformation.pm +ed82562f0a55f3c3ac846632cac7a6eb ./onvif/proxy/lib/ONVIF/Media/Types/detail.pm +c3725442bdd23572df169def0addff28 ./onvif/proxy/lib/ONVIF/Media/Types/NTPInformation.pm +f05ad4119b2de64726051b1ff355da0c ./onvif/proxy/lib/ONVIF/Media/Types/ScopeDefinition.pm +8ce926156f9338e72c90003f86343220 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkHostExtension.pm +15507ed9896648ad15067ec1b94475f4 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkCapabilities.pm +e47a96505f159c7c23d23ac3a4be82ae ./onvif/proxy/lib/ONVIF/Media/Types/ImagingSettings.pm +5c65f007a18c7a1ff6c1632415d3fd87 ./onvif/proxy/lib/ONVIF/Media/Types/AudioClassDescriptorExtension.pm +78df65b0aa565cd4a5342720e7bbc9ee ./onvif/proxy/lib/ONVIF/Media/Types/ExposureOptions20.pm +26e551516d3dfcaf98a3e3313167a95d ./onvif/proxy/lib/ONVIF/Media/Types/SetDateTimeType.pm +d7f8469eb74ba20d1ffd4de26d91e59a ./onvif/proxy/lib/ONVIF/Media/Types/EFlip.pm +37f03e77a0ca0427f44b3547eef1cd7c ./onvif/proxy/lib/ONVIF/Media/Types/RelativeFocusOptions.pm +bc16b54099845289548ac87287e29d7b ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalanceMode.pm +04bffaba7722ea519bf9ae453d6bf54e ./onvif/proxy/lib/ONVIF/Media/Types/SupportedRulesExtension.pm +f812f79e817e532070e4ffc133a47579 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingOptions20Extension.pm +f5c7e09e55836a7848c8e7ee94fc495b ./onvif/proxy/lib/ONVIF/Media/Types/FrameExtension2.pm +483b864b2fb8515f8840bfe765bb3c66 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11Capabilities.pm +7d8f5aa161670b79435ccb0e5a0b7f96 ./onvif/proxy/lib/ONVIF/Media/Types/VideoDecoderConfigurationOptions.pm +1c1c9bda1067700b44f2368e8ffd8de5 ./onvif/proxy/lib/ONVIF/Media/Types/GetTracksResponseItem.pm +ea7d02d32b027be7cc286cef55d74e1b ./onvif/proxy/lib/ONVIF/Media/Types/WideDynamicRangeOptions20.pm +adbf3bad936cd7fc0cc2fbed6190c99c ./onvif/proxy/lib/ONVIF/Media/Types/ImagingCapabilities.pm +10521f624556f99b3d92c2e46d98cab3 ./onvif/proxy/lib/ONVIF/Media/Types/Name.pm +c2bd079ef0fe2aa53a523e50c6935c8a ./onvif/proxy/lib/ONVIF/Media/Types/NetworkHost.pm +f9e0da33e8eaf9658819411652f945d7 ./onvif/proxy/lib/ONVIF/Media/Types/ObjectTree.pm +d59fb75e787a2b38d3c6cd614c4d5115 ./onvif/proxy/lib/ONVIF/Media/Types/RelayIdleState.pm +f63166acb3051201eca5b25aed76940b ./onvif/proxy/lib/ONVIF/Media/Types/MetadataStreamExtension2.pm +40812609ba0b2f2a0d1deacf8c9ae3cd ./onvif/proxy/lib/ONVIF/Media/Types/Polygon.pm +a94e6f5ce78a5594ea5ce78e7876c92b ./onvif/proxy/lib/ONVIF/Media/Types/OSDImgOptions.pm +14a28f5796e232a455bbf19608d4e9ee ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSpotExtension.pm +50da3de0e9a8ad7a8126b093e772b7b6 ./onvif/proxy/lib/ONVIF/Media/Types/ZoomLimits.pm +e8d76062d93feff513069cdaed27a065 ./onvif/proxy/lib/ONVIF/Media/Types/Mpeg4Options2.pm +6a70041c9e18327807d789936ff814e0 ./onvif/proxy/lib/ONVIF/Media/Types/PTZSpaces.pm +8fad4c20b935104a91d19523df3de511 ./onvif/proxy/lib/ONVIF/Media/Types/PTControlDirectionOptionsExtension.pm +5bfd3241860138a92c4e7c826ba1493b ./onvif/proxy/lib/ONVIF/Media/Types/FloatList.pm +5d15da0783eeb8e3c3bbb2600a4eecb1 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceExtension.pm +be16285c3391330206285b2eb2679bd4 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11SecurityMode.pm +ff2f0e2075f6273c254c8a71ffb03464 ./onvif/proxy/lib/ONVIF/Media/Types/TopicNamespaceType.pm +99f8e39df380bf7850447d63df9b4440 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11PSKPassphrase.pm +9a72dec45d955ad7fdfee27a48dfae2d ./onvif/proxy/lib/ONVIF/Media/Types/Dot11SecurityConfigurationExtension.pm +177d6fb5ff9a74cd9dc39de91a6a7214 ./onvif/proxy/lib/ONVIF/Media/Types/AbsoluteFocusOptions.pm +5b0be5cf895ec420a68be9b0f7a0bf79 ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalance20.pm +f9ca59cbd20a2a4c8b5158752234eb3b ./onvif/proxy/lib/ONVIF/Media/Types/ImageStabilizationOptions.pm +3d97e176fa38f9aadcb9f5d9989a858f ./onvif/proxy/lib/ONVIF/Media/Types/AudioSourceOptionsExtension.pm +34c26bc6b5ca8496ae865335128fbd0f ./onvif/proxy/lib/ONVIF/Media/Types/MetadataConfiguration.pm +378f56976cbcc7a03472b1e397096771 ./onvif/proxy/lib/ONVIF/Media/Types/BacklightCompensation20.pm +bd159334385a6770e94f6aa1f97b350a ./onvif/proxy/lib/ONVIF/Media/Types/IPv4NetworkInterfaceSetConfiguration.pm +b7c481a0d197c7e580580ac97c193450 ./onvif/proxy/lib/ONVIF/Media/Types/RelayLogicalState.pm +ab14d52fc5c9dc8ec1ff0f4ecbd15513 ./onvif/proxy/lib/ONVIF/Media/Types/PresetTour.pm +b0ffb7b7ac665bc876c7f3245d6fd19b ./onvif/proxy/lib/ONVIF/Media/Types/QueryExpressionType.pm +5424e117cfad6141f5cbf55e28c58ad7 ./onvif/proxy/lib/ONVIF/Media/Types/OSDConfigurationOptionsExtension.pm +1552335da7e8f58179daf68529325993 ./onvif/proxy/lib/ONVIF/Media/Types/PanTiltLimits.pm +e47cf969318a869546b5a833937a6946 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingReference.pm +aca92480ef8b830af3360ac99fa6bdfd ./onvif/proxy/lib/ONVIF/Media/Types/MoveStatus.pm +e0c7453d6d0f120114a98ce22c72123b ./onvif/proxy/lib/ONVIF/Media/Types/GetTracksResponseList.pm +32188cdf274c02a437424bd196837014 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceExtension.pm +b9879149c2ee764fcbd6d1d554a8e594 ./onvif/proxy/lib/ONVIF/Media/Types/EventStreamExtension.pm +a4ecbb88506f81b6b4673ba31a3e1eb3 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobSource.pm +345194d78357a42e530a819232253baf ./onvif/proxy/lib/ONVIF/Media/Types/SystemLogUri.pm +e7d23c8c0044706574c88ec12aae7355 ./onvif/proxy/lib/ONVIF/Media/Types/CodingCapabilities.pm +aad9d2cd6c005bb818067872e96ca655 ./onvif/proxy/lib/ONVIF/Media/Types/Transport.pm +35ed6b2080d015947aa23a39f6a67e7a ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobReference.pm +0b1880669c9ea8dfcbf0a3b5acfac8de ./onvif/proxy/lib/ONVIF/Media/Types/AACDecOptions.pm +951414ff22bef1c2392df356955ff8eb ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceConfiguration.pm +b06a858b02fb4bf64f57ebdf14de209b ./onvif/proxy/lib/ONVIF/Media/Types/IPAddressFilterType.pm +945020e3c37b08f44f5fefc344122596 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStartingConditionExtension.pm +f1a2e651e304d6db24ddee65d34c9e91 ./onvif/proxy/lib/ONVIF/Media/Types/ImageStabilization.pm +8d4279f52ed81d384c93eef5ace30fc3 ./onvif/proxy/lib/ONVIF/Media/Types/DeviceCapabilities.pm +01e785a581d88d82f958727c42e3703a ./onvif/proxy/lib/ONVIF/Media/Types/NetworkProtocol.pm +e650e829ec647f4738dc48730fa252ac ./onvif/proxy/lib/ONVIF/Media/Types/Layout.pm +eafbbae32cf7a6f697f16d65b97b1c37 ./onvif/proxy/lib/ONVIF/Media/Types/Split.pm +7a9dcc7d306404b76035b7b9259c7fd4 ./onvif/proxy/lib/ONVIF/Media/Types/CapabilitiesExtension2.pm +aad7b74960bd647b6e1e14324d219c51 ./onvif/proxy/lib/ONVIF/Media/Types/MediaAttributes.pm +2a126cb37f6ecf4202aa8082ef4443d0 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceConfigurationExtension2.pm +466da4a5cda3398a77ad13001175f147 ./onvif/proxy/lib/ONVIF/Media/Types/TrackConfiguration.pm +ab8901b5eca431eea0430f707aa70aaa ./onvif/proxy/lib/ONVIF/Media/Types/ImagingSettingsExtension.pm +a7be05482b023006743622e5cb3c5d86 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11SecurityConfiguration.pm +4f3f5ed6e48d4775eced582aac7e3158 ./onvif/proxy/lib/ONVIF/Media/Types/SearchState.pm +6b2236887f108544e60eee8e7ed68fca ./onvif/proxy/lib/ONVIF/Media/Types/Frame.pm +87d40ff77fd82cea4951b61ddc64c413 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngineInputInfoExtension.pm +e5e60e268ccaafb74c84e7970c48a37a ./onvif/proxy/lib/ONVIF/Media/Types/DateTimeRange.pm +1b99bf495b9f5b04d382e786055cc3ec ./onvif/proxy/lib/ONVIF/Media/Types/CapabilityCategory.pm +6dd946506ba7df9448c0739bbc75e47c ./onvif/proxy/lib/ONVIF/Media/Types/SupportedAnalyticsModulesExtension.pm +244d86a764b7c513cf1669d55b7110cd ./onvif/proxy/lib/ONVIF/Media/Types/Dot11SSIDType.pm +c054436fdfacafb7bfb043005e340e0e ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalance.pm +27ee28b4286aebd49c34ef70726d3352 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceConnectionSetting.pm +29b5f4da2a303fc8da455170485f88bb ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourPresetDetailOptions.pm +f3fc90d83297a128ce812f574d468607 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngineConfigurationExtension.pm +1f7fd40ca8ab73652f81807f03bcdd82 ./onvif/proxy/lib/ONVIF/Media/Types/EFlipOptionsExtension.pm +91ecd0ed7dbe8cd0a2a9070ec889a25c ./onvif/proxy/lib/ONVIF/Media/Types/AudioOutputConfigurationOptions.pm +f1ac87446754a00ab60c005aba6def3c ./onvif/proxy/lib/ONVIF/Media/Types/SupportedRules.pm +cc048af6315d535d02d1de1d2fbf7014 ./onvif/proxy/lib/ONVIF/Media/Types/GenericEapPwdConfigurationExtension.pm +404cd79848f4b4e44e904882d33e5eb8 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11PSK.pm +2ad0b7940f18f33319e780a6590380ea ./onvif/proxy/lib/ONVIF/Media/Types/MetadataInput.pm +8e1e701cbb0ca5c20ac1c1dbbd99988d ./onvif/proxy/lib/ONVIF/Media/Types/OnvifVersion.pm +fbb1748aed53e2dcb27642bf78e9acfe ./onvif/proxy/lib/ONVIF/Media/Types/VideoOutputConfiguration.pm +710f928dc51e9e75580d1329b09f09c2 ./onvif/proxy/lib/ONVIF/Media/Types/RelativeFocusOptions20.pm +f7364aa9e8a0241dd82b41e7823fef05 ./onvif/proxy/lib/ONVIF/Media/Types/MaximumNumberOfOSDs.pm +2cf16a7d1bba0a208435a13815c25140 ./onvif/proxy/lib/ONVIF/Media/Types/VideoEncoderOptionsExtension.pm +e3b3e1dd86a742c86594d8d784f22274 ./onvif/proxy/lib/ONVIF/Media/Types/Time.pm +548df315622d344e755b7cd6dd53a592 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceConfigurationOptionsExtension2.pm +2376cd4e0ecc0cb1354ff0a1f8f4c21c ./onvif/proxy/lib/ONVIF/Media/Types/IntAttrList.pm +b96917efeefa76f819da1bd8efbe6142 ./onvif/proxy/lib/ONVIF/Media/Types/EventSubscription.pm +7d3f30694b5c9e6caa5015ee0181c30c ./onvif/proxy/lib/ONVIF/Media/Types/Dot11PSKSetExtension.pm +c967d9b51d7c83f05c647129ad0fa3c3 ./onvif/proxy/lib/ONVIF/Media/Types/EventCapabilities.pm +29c6383bec395c1c94e148e3d6082a62 ./onvif/proxy/lib/ONVIF/Media/Types/TrackReference.pm +b2cffa8662c3753efc48683f348859a9 ./onvif/proxy/lib/ONVIF/Media/Types/ShapeDescriptorExtension.pm +58cf54db85917fe92875939892db2553 ./onvif/proxy/lib/ONVIF/Media/Types/FindMetadataResultList.pm +e6d79ce6cbf0874c92d5f01b6878508f ./onvif/proxy/lib/ONVIF/Media/Types/IPv6DHCPConfiguration.pm +6b1b33bbd29fc5bbe9f3b4c75a3c9d76 ./onvif/proxy/lib/ONVIF/Media/Types/Rename.pm +8a7a9f6ca1609cd4bfd18c1ddfa42fa1 ./onvif/proxy/lib/ONVIF/Media/Types/MetadataFilter.pm +97e8ec896271f6e4d014943a4168f384 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourTypeExtension.pm +0b1cabd97bb4ed0c0f30026065d82fea ./onvif/proxy/lib/ONVIF/Media/Types/AudioEncoderConfigurationOptions.pm +31304eaec203616dac7d6f00a6f7bb84 ./onvif/proxy/lib/ONVIF/Media/Types/WideDynamicMode.pm +cd52f32a0f8deb72e869db2f83ec82c9 ./onvif/proxy/lib/ONVIF/Media/Types/Transformation.pm +3126c19f13c86639d47cb5726fc53dd6 ./onvif/proxy/lib/ONVIF/Media/Types/IrCutFilterMode.pm +2fb50cbe734b6449a353ff6c1c0a8e2e ./onvif/proxy/lib/ONVIF/Media/Types/Dot11SignalStrength.pm +669ce4064ae988f94716ad19feac32bb ./onvif/proxy/lib/ONVIF/Media/Types/ExtensibleDocumented.pm +435b6504087e8e5a8db55562e35ac5d4 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourPresetDetailOptionsExtension.pm +b7245ecddd7673194324fbeafb79a337 ./onvif/proxy/lib/ONVIF/Media/Types/RotateOptionsExtension.pm +5f8555ca55deee18f06f6fe4ece55afc ./onvif/proxy/lib/ONVIF/Media/Types/ImagingStatus20Extension.pm +1758af42d51f9ae778df6f4506d24e76 ./onvif/proxy/lib/ONVIF/Media/Types/FocusConfiguration.pm +5e166cd0c882b7c203328fc4c2159682 ./onvif/proxy/lib/ONVIF/Media/Types/VideoEncoding.pm +0df156ff87ba8422d89d4f3c8e53cf0a ./onvif/proxy/lib/ONVIF/Media/Types/Mpeg4DecOptions.pm +79410b51be192ab8069964dbf940e447 ./onvif/proxy/lib/ONVIF/Media/Types/ReceiverReference.pm +9ecd6a05ef781c480855611ec64c1b07 ./onvif/proxy/lib/ONVIF/Media/Types/IPv6Address.pm +2d53b432cc5395007726466d2e10c647 ./onvif/proxy/lib/ONVIF/Media/Types/OSDPosConfigurationExtension.pm +6cb1b3360b82969c4b5cefd91c4050b3 ./onvif/proxy/lib/ONVIF/Media/Types/DeviceIOCapabilities.pm +8c6e22d2000533421fc921cd69c4940f ./onvif/proxy/lib/ONVIF/Media/Types/ReceiverStateInformation.pm +c669a8fd587c6e473a13da4efc2b3466 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceConfigurationExtension.pm +888ee9911cfb79a5be01587e74156728 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceSetConfigurationExtension2.pm +f6849bb91e79a2fd60b7d79a77b2a817 ./onvif/proxy/lib/ONVIF/Media/Types/TransportProtocol.pm +9adb62f436de0b4d38b936b3adeb2dc3 ./onvif/proxy/lib/ONVIF/Media/Types/Direction.pm +b0ecbc0308bc8f695cf63b7c6b75124b ./onvif/proxy/lib/ONVIF/Media/Types/IrCutFilterAutoAdjustmentOptions.pm +81b73020ee8901964c32fa7b0109e84b ./onvif/proxy/lib/ONVIF/Media/Types/IrCutFilterAutoAdjustmentExtension.pm +5349d51ce2fa3aa716073566f3bada17 ./onvif/proxy/lib/ONVIF/Media/Types/ConfigDescription.pm +343d2877f1a1f407fe883c6c1e259c79 ./onvif/proxy/lib/ONVIF/Media/Types/AttributedUnsignedLongType.pm +30c4326d6f1dc6a23b0aab92e3c1e826 ./onvif/proxy/lib/ONVIF/Media/Types/PTZStream.pm +698937c39876c92b007b5cc253e2c0fb ./onvif/proxy/lib/ONVIF/Media/Types/BehaviourExtension.pm +28f192cafd6aeec7fabb5c1114c92829 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11AvailableNetworksExtension.pm +3c2fd0ccf039b407b62eacb091fd64b9 ./onvif/proxy/lib/ONVIF/Media/Types/Enabled.pm +69f0417dcce33ecacddcb022fa235420 ./onvif/proxy/lib/ONVIF/Media/Types/DurationRange.pm +4bcfbd001fa752baa2e566cc3af2d34d ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterface.pm +f3185eb55c977b4465f988039a822246 ./onvif/proxy/lib/ONVIF/Media/Types/XPathExpression.pm +9ecf76bc097ad0beb7e5c6ca98f89ae6 ./onvif/proxy/lib/ONVIF/Media/Types/IPType.pm +30f9385cc37d5d001e1d5aa9fe880dc0 ./onvif/proxy/lib/ONVIF/Media/Types/ConfigurationEntity.pm +1066f22ad088f408adffebdb457116c4 ./onvif/proxy/lib/ONVIF/Media/Types/SystemLogType.pm +bfce72d146ad11a782b6c97d1f8925b9 ./onvif/proxy/lib/ONVIF/Media/Types/ReverseOptionsExtension.pm +293eb2cb419c725d2ebcc2cc233f6df5 ./onvif/proxy/lib/ONVIF/Media/Types/ReverseMode.pm +2872374748bfa043d32b8c00c4c1cba8 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceSetConfigurationExtension.pm +003294a81f3bab1a1e92352973d19e3e ./onvif/proxy/lib/ONVIF/Media/Types/TrackType.pm +d519244cf72e97ef818d28577eab6fdb ./onvif/proxy/lib/ONVIF/Media/Types/PTZSpeed.pm +ff63e5f9c1a6065b2b2c25b8e738208e ./onvif/proxy/lib/ONVIF/Media/Types/ReferenceParametersType.pm +f5f95afeacf9b887c8b463cb349014df ./onvif/proxy/lib/ONVIF/Media/Types/SearchCapabilities.pm +3385bdebdd5d2e7609b20d0b41366297 ./onvif/proxy/lib/ONVIF/Media/Types/StreamSetup.pm +5e8f31b41ec5575c262d8ce957f7b778 ./onvif/proxy/lib/ONVIF/Media/Types/DateTime.pm +a1d59d716d5b633b31238af4369d24ee ./onvif/proxy/lib/ONVIF/Media/Types/AuxiliaryData.pm +28d8e0c981861ac60ec80cecf38c05f2 ./onvif/proxy/lib/ONVIF/Media/Types/OSDImgConfiguration.pm +a220837ac19c7650ab2417e13ecd94f2 ./onvif/proxy/lib/ONVIF/Media/Types/encodingStyle.pm +5225ba4eef81976f17e0489f2bfc4c12 ./onvif/proxy/lib/ONVIF/Media/Types/RotateOptions.pm +1431e5fe89ccceed05ae25d6a267367f ./onvif/proxy/lib/ONVIF/Media/Types/Date.pm +5f612d9903372991423ed5f5577d3385 ./onvif/proxy/lib/ONVIF/Media/Types/StreamingCapabilities.pm +d8d4469c6ee0c2056f608b391fc83994 ./onvif/proxy/lib/ONVIF/Media/Types/MessageDescriptionExtension.pm +39ba59802bc9da525fe6a02eac24174b ./onvif/proxy/lib/ONVIF/Media/Types/CertificateInformation.pm +7fc3cefa7b20484221c4531d581b7280 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSpotOptions.pm +2b4668b35a57edb6fdb5fa3eb4600096 ./onvif/proxy/lib/ONVIF/Media/Types/ActionEngineEventPayload.pm +37406bed9565f95cc879a77162c57f3f ./onvif/proxy/lib/ONVIF/Media/Types/MoveOptions.pm +4724db6e7aea945d176bdf338942805a ./onvif/proxy/lib/ONVIF/Media/Types/SystemDateTime.pm +4d5f35afec35754937b5333ab90d26d5 ./onvif/proxy/lib/ONVIF/Media/Types/RelationshipType.pm +ab2c4eb706aab15407e8148c934245e5 ./onvif/proxy/lib/ONVIF/Media/Types/H264Options.pm +046eb65f4da50c8d7dc75cc2e178b75a ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalanceOptions.pm +7cbc2dc4f3df68ab48136131333e971a ./onvif/proxy/lib/ONVIF/Media/Types/FocusOptions20Extension.pm +6f9ddc65111ee67fdd367955247076f8 ./onvif/proxy/lib/ONVIF/Media/Types/ClassDescriptorExtension.pm +c04442e1fbe561c7797e9f6fd9a45398 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobConfigurationExtension.pm +7e953b1586d6d866099e40447efc0e84 ./onvif/proxy/lib/ONVIF/Media/Types/MotionExpression.pm +51a841a7be381bbb1feaf3f3931a423f ./onvif/proxy/lib/ONVIF/Media/Types/H264Profile.pm +6f3934d30b69dd35d5de319dd0b5c5c0 ./onvif/proxy/lib/ONVIF/Media/Types/CertificateGenerationParametersExtension.pm +46cffc065d43fb4ebf406b94fdeaa75e ./onvif/proxy/lib/ONVIF/Media/Types/AudioClassType.pm +a8643434e50ac2a67995746dd6909678 ./onvif/proxy/lib/ONVIF/Media/Types/OSDConfigurationOptions.pm +8a7c965687bc8ffcd0ada0b303c12711 ./onvif/proxy/lib/ONVIF/Media/Types/OSDTextConfiguration.pm +3ccb5876bc217915ed9d23a60ab5dce4 ./onvif/proxy/lib/ONVIF/Media/Types/AbsoluteFocus.pm +d4bec6705b265bb51abf1b07e0bc4701 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingInformation.pm +e2c5f45d9a9629bb940329ac1ab8923d ./onvif/proxy/lib/ONVIF/Media/Types/AudioOutputConfiguration.pm +6004d377d4c8428034c30a52df382caa ./onvif/proxy/lib/ONVIF/Media/Types/AttributedURIType.pm +98b108214ed53a89fae3f51e546181c2 ./onvif/proxy/lib/ONVIF/Media/Types/PaneLayout.pm +2b33c08a9afa133818817aba51d4b1fc ./onvif/proxy/lib/ONVIF/Media/Types/AudioDecoderConfiguration.pm +9cb54f48691b029df7b9c851217680b1 ./onvif/proxy/lib/ONVIF/Media/Types/AudioDecoderConfigurationOptionsExtension.pm +937c46eaf4f66d8832b2b1a243d811e0 ./onvif/proxy/lib/ONVIF/Media/Types/AudioSourceConfigurationOptions.pm +c698985d5c02f48dd2ecd7e90eb7c274 ./onvif/proxy/lib/ONVIF/Media/Types/OSDTextConfigurationExtension.pm +a4cfcb1dd326532604a2df5af2359c6f ./onvif/proxy/lib/ONVIF/Media/Types/ProfileExtension2.pm +d7c5be9685776ddf5620982ff086b74f ./onvif/proxy/lib/ONVIF/Media/Types/AudioClassCandidate.pm +fcb3401a78ee519623a4d9461904b1fe ./onvif/proxy/lib/ONVIF/Media/Types/FocusStatus.pm +9a392574b956813ddb8ae8ab9421e5f1 ./onvif/proxy/lib/ONVIF/Media/Types/DNSInformationExtension.pm +4a9ccdb6fc4dfbf64cacc8b125178bba ./onvif/proxy/lib/ONVIF/Media/Types/SecurityCapabilities.pm +ca9b8346fe11202e9b78b8a5229f4965 ./onvif/proxy/lib/ONVIF/Media/Types/VideoEncoderConfiguration.pm +c7aaa1a79362125f10a9c194fa80b919 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11StationMode.pm +0592daf5f9dcf509ed82cf5cc7f917fb ./onvif/proxy/lib/ONVIF/Media/Types/DynamicDNSInformation.pm +86dca0febbe7b8d432beacbf518bd0aa ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobSourceExtension.pm +af39d9905bda616c0c8030ab7eb8b741 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobStateInformationExtension.pm +abc7362f83c130106464f9be0012bb6e ./onvif/proxy/lib/ONVIF/Media/Types/ReplayCapabilities.pm +89c6b43d4cbaf775660f0a0bfa201809 ./onvif/proxy/lib/ONVIF/Media/Types/OSDColorOptions.pm +79f7e0eec2163599421c17300348b8dc ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceSetConfiguration.pm +078813980ac9206067b36165ebd6a631 ./onvif/proxy/lib/ONVIF/Media/Types/IrCutFilterAutoAdjustment.pm +29d077d381c0e204eaa1f9cd073e8b7b ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngineConfiguration.pm +66d1c51ddbd4934d3311f0f8c803142d ./onvif/proxy/lib/ONVIF/Media/Types/Vector1D.pm +65b924a439302c7a5d8fde8f1b7bb919 ./onvif/proxy/lib/ONVIF/Media/Types/GetRecordingJobsResponseItem.pm +bac7f313522cdda42f7bcabf1771ef0f ./onvif/proxy/lib/ONVIF/Media/Types/FaultCodesType.pm +abcf2c569d947763947bd94fa3b701ee ./onvif/proxy/lib/ONVIF/Media/Types/OSDReference.pm +0f87cf4255f8c6d45f2e159b4e1b35fc ./onvif/proxy/lib/ONVIF/Media/Types/VideoOutput.pm +0276852dd13bfc740bd8d36d2e929696 ./onvif/proxy/lib/ONVIF/Media/Types/BacklightCompensationOptions20.pm +d76360deb0bd0ae0840d29042ed2ef46 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSpot.pm +f46daceee9cad1fb30e5419c307c53fe ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsDeviceEngineConfigurationExtension.pm +ffd90e846b7bf34a24573440f027907a ./onvif/proxy/lib/ONVIF/Media/Types/SearchScope.pm +c3a0e883ec74f5b14fc3e0799908760d ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalanceOptions20Extension.pm +e53c71ff36fbafc5e6061717b9dee872 ./onvif/proxy/lib/ONVIF/Media/Types/Duplex.pm +34404d20e7c64f33e78ebb3badc18fdb ./onvif/proxy/lib/ONVIF/Media/Types/HwAddress.pm +a975ac908eb555fbeaacb7bd6488286e ./onvif/proxy/lib/ONVIF/Media/Types/FindRecordingResultList.pm +66fa6758f189ed800e56a112091f8e44 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingConfiguration.pm +787fdee63a730c613b6b52546ce6e984 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobStateTracks.pm +a16a7cc7ef78a3e5048d859365ccd5b9 ./onvif/proxy/lib/ONVIF/Media/Types/AudioEncoderConfiguration.pm +9a050d0ce396fe717ca9618e804d1210 ./onvif/proxy/lib/ONVIF/Media/Types/IPv4Address.pm +3daafdb54c6acf53f7be30f19990f432 ./onvif/proxy/lib/ONVIF/Media/Types/AutoFocusMode.pm +e2e1932752f7079267a8c02cb7bd4be4 ./onvif/proxy/lib/ONVIF/Media/Types/H264Configuration.pm +e642a6d00396ed7525750391335cbb47 ./onvif/proxy/lib/ONVIF/Media/Types/IrCutFilterAutoBoundaryType.pm +8843c3d99959c5112e959cc92cc12208 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceInfo.pm +14ec634101719adb034b44d18d0b23b6 ./onvif/proxy/lib/ONVIF/Media/Types/PTZCapabilities.pm +be96b997f90ab7c4763a73229172bcbb ./onvif/proxy/lib/ONVIF/Media/Types/Space1DDescription.pm +0000f0a8401e05f1228471ed0c879c1c ./onvif/proxy/lib/ONVIF/Media/Types/JpegOptions2.pm +c107505adb75155b0f4a6e569ee511e1 ./onvif/proxy/lib/ONVIF/Media/Types/UserLevel.pm +a88855a953aa66d77f5b5b17a6c563ff ./onvif/proxy/lib/ONVIF/Media/Types/PTControlDirectionOptions.pm +b3d6ef46df495b91da68be26b517894f ./onvif/proxy/lib/ONVIF/Media/Types/AttributedQNameType.pm +806a062b6824285ade38add5a5f4f671 ./onvif/proxy/lib/ONVIF/Media/Types/BacklightCompensation.pm +a6544a043c560be83aca90f915b81b8a ./onvif/proxy/lib/ONVIF/Media/Types/Rectangle.pm +05ae0ab5ea7dee329e6f39f21aa665f9 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingOptions20.pm +edfadae3889fae92b91ff21e2b22beea ./onvif/proxy/lib/ONVIF/Media/Types/ReceiverCapabilities.pm +6fd872e50264145e84864f67df6632fb ./onvif/proxy/lib/ONVIF/Media/Types/BacklightCompensationMode.pm +9761341a7cf6258f38df8c6995a97684 ./onvif/proxy/lib/ONVIF/Media/Types/PTZMoveStatus.pm +c148d344ff0d02a928cbd861cddb402b ./onvif/proxy/lib/ONVIF/Media/Types/ImagingOptions20Extension3.pm +9cdfc535071d5454333e88e8147a20a4 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourPresetDetail.pm +c7e99da91ea087f3b226a93bf1c874ed ./onvif/proxy/lib/ONVIF/Media/Types/VideoOutputConfigurationOptions.pm +2cacda4381308b1aacc49e5690c55b99 ./onvif/proxy/lib/ONVIF/Media/Types/ColorspaceRange.pm +7ec217a0df19561eea289f7f2cc681b5 ./onvif/proxy/lib/ONVIF/Media/Types/Domain.pm +c7651bda08acd36960b9071bb3f40d4d ./onvif/proxy/lib/ONVIF/Media/Types/OSDConfiguration.pm +578eb9a2c2390bbd83c54e8f20222ae2 ./onvif/proxy/lib/ONVIF/Media/Types/FocusConfiguration20Extension.pm +381bc42b1a03bc05c957d26c13468361 ./onvif/proxy/lib/ONVIF/Media/Types/FloatAttrList.pm +c27e85f61e7104020df25df604e981f2 ./onvif/proxy/lib/ONVIF/Media/Types/TimeZone.pm +a36e5dc4972889cdace4f5fdf8031b57 ./onvif/proxy/lib/ONVIF/Media/Types/IPv6NetworkInterface.pm +0dd236d0bb85ed46823b949ea4236f30 ./onvif/proxy/lib/ONVIF/Media/Types/DeviceCapabilitiesExtension.pm +af19e28a7578b3590ab5a29f9318dba3 ./onvif/proxy/lib/ONVIF/Media/Types/TrackAttributesExtension.pm +b43afc5438cfd9b6dd632158699bc736 ./onvif/proxy/lib/ONVIF/Media/Types/AttributedAnyType.pm +ea3faa4a1f93cf89ad10e2a97cd8159c ./onvif/proxy/lib/ONVIF/Media/Types/FocusOptions20.pm +3efa100992d10d5b0391b602bbcb880d ./onvif/proxy/lib/ONVIF/Media/Types/Config.pm +c2eb1c96650df9f4387ca62aaf449908 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourExtension.pm +4de0c3862ab501ebfad0771ce7249494 ./onvif/proxy/lib/ONVIF/Media/Types/AudioDecoderConfigurationOptions.pm +fa0f23b323cd375c3714716af1e22c40 ./onvif/proxy/lib/ONVIF/Media/Types/ImageStabilizationExtension.pm +e334e00d51e95f88d14d00c6536fe7fe ./onvif/proxy/lib/ONVIF/Media/Types/IntRange.pm +970676ec93dd38ce8e24508fcb822d22 ./onvif/proxy/lib/ONVIF/Media/Types/IntRectangleRange.pm +07da8fd123ce4ebe4436c1c1c04cfe95 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingOptions20Extension2.pm +115d4e69fba82c872279a7b4e0c07541 ./onvif/proxy/lib/ONVIF/Media/Types/PrefixedIPv6Address.pm +88a87db0c21a00c53cb0e08a35f968b1 ./onvif/proxy/lib/ONVIF/Media/Types/PTZStatusFilterOptions.pm +af549d1e1372ef37978dcda5bc46537a ./onvif/proxy/lib/ONVIF/Media/Types/IPv6ConfigurationExtension.pm +d120e2af17a3693e1f293775786a6dfb ./onvif/proxy/lib/ONVIF/Media/Types/PTZStreamExtension.pm +dde2c863faa60930f7aa28377d754d82 ./onvif/proxy/lib/ONVIF/Media/Types/VideoResolution.pm +73567d216deb0c754f1ad0f206fd4695 ./onvif/proxy/lib/ONVIF/Media/Types/Behaviour.pm +5c89326af5fc363c4f7e4fccfc6d6daf ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSupported.pm +c121dec455ea623823f7e7ce5e0a853b ./onvif/proxy/lib/ONVIF/Media/Types/RotateExtension.pm +3d1c86d9cc17bc42023e20fd03ac724c ./onvif/proxy/lib/ONVIF/Media/Types/SourceReference.pm +2ef97e6aaf8e53612dbdd77effa25f7d ./onvif/proxy/lib/ONVIF/Media/Types/RotateMode.pm +7e1fc757eae489fdc281827dcb3dc658 ./onvif/proxy/lib/ONVIF/Media/Types/AudioAnalyticsStreamExtension.pm +726bb970b4c198e99f085796177051dc ./onvif/proxy/lib/ONVIF/Media/Types/Fault.pm +034ae8a107305c6e934d795ff01199a4 ./onvif/proxy/lib/ONVIF/Media/Types/VideoAnalyticsStream.pm +a47544bf5317fd13d6c417e7066f11bb ./onvif/proxy/lib/ONVIF/Media/Types/PaneOptionExtension.pm +a96060243109bac6dc04824efbdba5ff ./onvif/proxy/lib/ONVIF/Media/Types/User.pm +021d9437135f37ddd0986f227f0ba77b ./onvif/proxy/lib/ONVIF/Media/Types/Mpeg4Options.pm +d189cc907e65a805fabadf8a78ba84f2 ./onvif/proxy/lib/ONVIF/Media/Types/Merge.pm +47a12f899b6886e553b951c1fe2b5548 ./onvif/proxy/lib/ONVIF/Media/Types/WideDynamicRangeOptions.pm +876c6d4f67152751ca0f23b3e336b1de ./onvif/proxy/lib/ONVIF/Media/Types/FocusMove.pm +5da16f664bd0bec11f32f1ec18dfa967 ./onvif/proxy/lib/ONVIF/Media/Types/MetadataConfigurationOptions.pm +11900f3870c0d6c98fa4473c3be3d4f0 ./onvif/proxy/lib/ONVIF/Media/Types/ColorDescriptor.pm +8f625a9ddd7282f12075ed529d25f241 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkProtocolExtension.pm +bb70c9f29a7cb3547320c3e7e6a22349 ./onvif/proxy/lib/ONVIF/Media/Types/MessageExtension.pm +baa1287f514e09f51c56cef6b7fe90c0 ./onvif/proxy/lib/ONVIF/Media/Types/EFlipMode.pm +944e4248bd992fcb6a91fd0a97d867ed ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourState.pm +405ab6d3e66b52df719ae9bd161a2f75 ./onvif/proxy/lib/ONVIF/Media/Types/PTZFilter.pm +9403c8ad54b4ff6b7cb49de90d4433b6 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobStateInformation.pm +fced31cee3ed258c6783599614d697cd ./onvif/proxy/lib/ONVIF/Media/Types/IPv4NetworkInterface.pm +580fbf08b7c21996f0ef129b343b2fd0 ./onvif/proxy/lib/ONVIF/Media/Types/HostnameInformation.pm +d76f8b6ee08faf876059911e54585ca7 ./onvif/proxy/lib/ONVIF/Media/Types/RuleEngineConfigurationExtension.pm +319647a6c88009b8230e82a3ab32a4c8 ./onvif/proxy/lib/ONVIF/Media/Types/TopicNamespaceLocation.pm +b241532ce6c74d30efb5e2243b49cce9 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11AuthAndMangementSuite.pm +98902f35aa1155a4473a186615350931 ./onvif/proxy/lib/ONVIF/Media/Types/SystemLogUriList.pm +23466fc71778cff1a0486f04bb3b5e1b ./onvif/proxy/lib/ONVIF/Media/Types/VideoEncoderOptionsExtension2.pm +7b9105f7635dd21c74aa964c309a4804 ./onvif/proxy/lib/ONVIF/Media/Types/BackupFile.pm +b2836e09a605e8f27aacb42d8baa1eeb ./onvif/proxy/lib/ONVIF/Media/Types/NetworkZeroConfiguration.pm +a580946226633f8cedad9535d2aca22d ./onvif/proxy/lib/ONVIF/Media/Types/PolylineArray.pm +dd2db04a61e463726195e11c50406094 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11PSKSet.pm +9d983194f5e1944bade0cac51f6caa39 ./onvif/proxy/lib/ONVIF/Media/Types/LayoutOptionsExtension.pm +89dcc24e641a38a7448b3201bc74eb63 ./onvif/proxy/lib/ONVIF/Media/Types/Receiver.pm +b3c9bba6ffc14c0e56056399dfec0c45 ./onvif/proxy/lib/ONVIF/Media/Types/SecurityCapabilitiesExtension.pm +484fa05d45aadf3a417815a685747d2f ./onvif/proxy/lib/ONVIF/Media/Types/ImagingSettingsExtension202.pm +26cda653b185b0f53774ea92c5ba0c44 ./onvif/proxy/lib/ONVIF/Media/Types/MetadataType.pm +ac1b38e4afafe3caa75ec92bb1550e51 ./onvif/proxy/lib/ONVIF/Media/Types/EngineConfiguration.pm +55e8a7ec2de7bdfd50bfe97a566554da ./onvif/proxy/lib/ONVIF/Media/Types/SystemCapabilities.pm +1fb7b546e2b90b752af443af5d4cb82c ./onvif/proxy/lib/ONVIF/Media/Types/IntRectangle.pm +e92297a24a446b83ad504f47b45d710a ./onvif/proxy/lib/ONVIF/Media/Types/ClassType.pm +a40218abb4a9b91ed9eab9ebab37109b ./onvif/proxy/lib/ONVIF/Media/Types/NetworkZeroConfigurationExtension2.pm +addff69e644752e5b1f2783837e1d730 ./onvif/proxy/lib/ONVIF/Media/Types/FocusConfiguration20.pm +f088447142343cbe639b5087e5ba5720 ./onvif/proxy/lib/ONVIF/Media/Types/PTZConfigurationOptions2.pm +043762082ce5b30aaaeb61cd14a7737f ./onvif/proxy/lib/ONVIF/Media/Types/MetadataInputExtension.pm +3c4b6af7d0508e744654028be8e5ccd8 ./onvif/proxy/lib/ONVIF/Media/Types/CertificateUsage.pm +493c430f5e1ccc79631ceb31da67f798 ./onvif/proxy/lib/ONVIF/Media/Types/AudioEncoding.pm +913da20720c806b29e27e238b491b7f5 ./onvif/proxy/lib/ONVIF/Media/Types/PTZConfigurationOptions.pm +c03f9567e5207a18421a8c5191c40b45 ./onvif/proxy/lib/ONVIF/Media/Types/AudioOutput.pm +4e978cfeae2bf7c780eaa75b52ab06d2 ./onvif/proxy/lib/ONVIF/Media/Types/AppearanceExtension.pm +44720cd769b995b2a4f73182060e7bf0 ./onvif/proxy/lib/ONVIF/Media/Types/ColorOptions.pm +e5284674f29637b7dc72b33a3020f67c ./onvif/proxy/lib/ONVIF/Media/Types/PTZNodeExtension2.pm +848573350a3def42cfabc272624e66fb ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalanceOptions20.pm +9702712898cd4ea32154ae28773cf54d ./onvif/proxy/lib/ONVIF/Media/Types/CertificateWithPrivateKey.pm +0db20b757afecd35024e01f0e26dc0e6 ./onvif/proxy/lib/ONVIF/Media/Types/VideoOutputExtension.pm +428f70e39edf83254922cfb00a5cd024 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingSettings20.pm +a00dd4fda6a0bd1f6bf4c297b4af4914 ./onvif/proxy/lib/ONVIF/Media/Types/RealTimeStreamingCapabilities.pm +fa8bf200485dba2e7a7e35be656856b3 ./onvif/proxy/lib/ONVIF/Media/Types/ClassDescriptor.pm +86ec9121c36cc82edb44a792d199fc33 ./onvif/proxy/lib/ONVIF/Media/Types/PTZConfigurationExtension2.pm +bc9fcdcb799a33c94db90a10944a8ad6 ./onvif/proxy/lib/ONVIF/Media/Types/TLSConfiguration.pm +296483ce8efbf2835c7657e06219620d ./onvif/proxy/lib/ONVIF/Media/Types/Dot1XConfiguration.pm +ce6cd75309859cc76cd4731e815d8656 ./onvif/proxy/lib/ONVIF/Media/Types/PTZNode.pm +f4e3f8248ecf21049d1ebd6bbbbe7837 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSource.pm +52896e098be980dde4f1b8e7ba010951 ./onvif/proxy/lib/ONVIF/Media/Types/SystemDateTimeExtension.pm +1ab3d77f13aeaef11cc88a3acd377844 ./onvif/proxy/lib/ONVIF/Media/Types/RealTimeStreamingCapabilitiesExtension.pm +8911f44903f34c2efdaffb8cd7f025b4 ./onvif/proxy/lib/ONVIF/Media/Types/ExposureOptions.pm +29df64bd800a4a4fb8ce94038a2ea45f ./onvif/proxy/lib/ONVIF/Media/Types/FindEventResultList.pm +b70388a12b0b0b0f105c618f5b9a984a ./onvif/proxy/lib/ONVIF/Media/Types/VideoAttributes.pm +140bf83860db30f6d4fc16c7cef17975 ./onvif/proxy/lib/ONVIF/Media/Types/ImageStabilizationOptionsExtension.pm +83b3e6254fd52d1caf1f2e2aaa22127d ./onvif/proxy/lib/ONVIF/Media/Types/SystemCapabilitiesExtension.pm +73d2e2ff8e1404b86c9a606629ee0052 ./onvif/proxy/lib/ONVIF/Media/Types/OSDConfigurationExtension.pm +fc25867cc51bada2e162790a6de6e611 ./onvif/proxy/lib/ONVIF/Media/Types/Vector2D.pm +8ef1c8ea0288c7ed7364f06fc28db00f ./onvif/proxy/lib/ONVIF/Media/Types/VideoEncoderConfigurationOptions.pm +d0a5dc8264433a2c067a0d3caa031fd6 ./onvif/proxy/lib/ONVIF/Media/Types/IrCutFilterAutoAdjustmentOptionsExtension.pm +1331aa67e253406e0b1281a642938ece ./onvif/proxy/lib/ONVIF/Media/Types/CertificateInformationExtension.pm +64b81d59ac95592607829ab8f54823ac ./onvif/proxy/lib/ONVIF/Media/Types/ConfigDescriptionExtension.pm +afbb354e7c210715a972b7b2abd6140a ./onvif/proxy/lib/ONVIF/Media/Types/DigitalInput.pm +c271303f7aa2cd7ab117a5b22d6cfd20 ./onvif/proxy/lib/ONVIF/Media/Types/SourceIdentification.pm +418e077db6634d40f6346dd65963386f ./onvif/proxy/lib/ONVIF/Media/Types/IANA_IfTypes.pm +d63369232fcbc3119823fdd26856a88c ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceLink.pm +4966881bd2b08cd908625dd183025c3f ./onvif/proxy/lib/ONVIF/Media/Types/PaneConfiguration.pm +855b5d359d624fef9dcb918c8b629f94 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11AvailableNetworks.pm +96bbe2507d0c656e5309929a2a8b5ae3 ./onvif/proxy/lib/ONVIF/Media/Types/IPAddressFilter.pm +0e333c458335cbef0bfe7fa510d89916 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobState.pm +0575e1299d967e80746f9bed94062cbc ./onvif/proxy/lib/ONVIF/Media/Types/Profile.pm +70d9a4fc7d7711e997c00b703a74f283 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPositionFilter.pm +96a3c77226068c66655ff0d44bbb057b ./onvif/proxy/lib/ONVIF/Media/Types/RuleEngineConfiguration.pm +617e7cd596a70b8e3d0b64a6a10f1032 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceConfigPriority.pm +9db1165e560496eb5282c96d60cc856a ./onvif/proxy/lib/ONVIF/Media/Types/SourceIdentificationExtension.pm +0a4a071cbfa9afa709e9545af783aa50 ./onvif/proxy/lib/ONVIF/Media/Types/Documentation.pm +dfa154b538ff8ad9c899b33814fb1b3e ./onvif/proxy/lib/ONVIF/Media/Types/OSDTextOptions.pm +b1c8534b9250656f69ba1fee9defc777 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceModeExtension.pm +6f106c24ffea01b2507ab4fc6927dccf ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceConfigurationOptionsExtension.pm +b2d1fdefd31284006ea7d767cc6702e9 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsStateInformation.pm +2231c18e368e8e318d5b4dbe8914b526 ./onvif/proxy/lib/ONVIF/Media/Types/ClassDescriptorExtension2.pm +b871e336cf55c121da28fae1c94717e0 ./onvif/proxy/lib/ONVIF/Media/Types/ExposureMode.pm +0b521352a081146b6670db062b2d3df3 ./onvif/proxy/lib/ONVIF/Media/Types/ReceiverMode.pm +dcf5d3c2765649a93208e50356fd9284 ./onvif/proxy/lib/ONVIF/Media/Types/ReplayConfiguration.pm +31e9af0cbf4b472b3322c5d798d4cb6a ./onvif/proxy/lib/ONVIF/Media/Types/ContinuousFocus.pm +03417f6533b31758ae0d8418fb8f5095 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStartingCondition.pm +b4ab0844b221f7ffec25e17a91f91346 ./onvif/proxy/lib/ONVIF/Media/Types/ShapeDescriptor.pm +75f882996e833113c48b754b7a715082 ./onvif/proxy/lib/ONVIF/Media/Types/OSDImgConfigurationExtension.pm +6393c5d802de00e0b2812b333298b641 ./onvif/proxy/lib/ONVIF/Media/Types/OSDPosConfiguration.pm +7cf341037c8dfe50f2b4e690a7ca6f0d ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStartingConditionOptionsExtension.pm +66b6b9f7a7fe945d043f80fd020c7881 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingSummary.pm +e27bffafa1093f8e2118c39d438d599c ./onvif/proxy/lib/ONVIF/Media/Types/ModeOfOperation.pm +de46cf78735d43d6ad05ba157431512f ./onvif/proxy/lib/ONVIF/Media/Types/BacklightCompensationOptions.pm +4d0e80778ba52fc0955e72ab64daa75a ./onvif/proxy/lib/ONVIF/Media/Types/Appearance.pm +00944b67ea5d4054d6da584ce6c2b4a3 ./onvif/proxy/lib/ONVIF/Media/Types/ItemList.pm +d5b1724985c69e69e2c6225bc4787739 ./onvif/proxy/lib/ONVIF/Media/Types/DNSName.pm +103069a59c5dc97d84e70202b7ac16ed ./onvif/proxy/lib/ONVIF/Media/Types/H264DecOptions.pm +f1e5d2bbaa6422308007664d8dfe2154 ./onvif/proxy/lib/ONVIF/Media/Types/EncodingTypes.pm +5844f1d93e9125e5aa6fc40778aa38aa ./onvif/proxy/lib/ONVIF/Media/Types/FrameExtension.pm +67d768d7382be84b2ef08d46b034a9c8 ./onvif/proxy/lib/ONVIF/Media/Types/WideDynamicRange.pm +f03998bb3618baeb911e771f40b9b8d1 ./onvif/proxy/lib/ONVIF/Media/Types/IPv6Configuration.pm +e98aab07be1a288fb41def71cde105fd ./onvif/proxy/lib/ONVIF/Media/Types/ColorCovariance.pm +bd8a84a7cb7c7dfa19c0ef140810538f ./onvif/proxy/lib/ONVIF/Media/Types/OSDColorOptionsExtension.pm +db24a3778940bc6739233040f0638ce0 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStartingConditionOptions.pm +8deee4e5a786ae22343bcb5ed056cd36 ./onvif/proxy/lib/ONVIF/Media/Types/NTPInformationExtension.pm +cf2bb4e41b2af895cf4e350b9af43871 ./onvif/proxy/lib/ONVIF/Media/Types/AudioSource.pm +c97b7db339f6bec9c838c70f6cf5f257 ./onvif/proxy/lib/ONVIF/Media/Types/PolygonConfiguration.pm +3d39909fa464b58587b5b603b012a5fa ./onvif/proxy/lib/ONVIF/Media/Types/G711DecOptions.pm +6fff0db9d0fa71fcbacf158820de94f2 ./onvif/proxy/lib/ONVIF/Media/Types/IPv6NetworkInterfaceSetConfiguration.pm +5edae7776579c890312293ec6f3ef700 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11Status.pm +68c2d308281b1d1cc7608a39bccf04cb ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourDirection.pm +c31f385893be61a35411fc280d76ae4e ./onvif/proxy/lib/ONVIF/Media/Types/Dot1XConfigurationExtension.pm +cd79586e2bb5fdbdb46246ee193bcfae ./onvif/proxy/lib/ONVIF/Media/Types/DNSInformation.pm +68f5e84fb1b378b5689163a7b88f34b2 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStatus.pm +05a1d329e07788b9f009dfbb80ef049f ./onvif/proxy/lib/ONVIF/Media/Types/ReverseOptions.pm +69adea2362e042ab1b08d150121a1745 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingCapabilities.pm +0f098b2c2ed0dbdd9a9071fca2a43da2 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngineInputInfo.pm +f6cfb85ac2094279926f711eeaf74048 ./onvif/proxy/lib/ONVIF/Media/Types/SystemLog.pm +3abe1dc89dcfa003f91d74c8f5c27d14 ./onvif/proxy/lib/ONVIF/Media/Types/HostnameInformationExtension.pm +4706f7d11ef19aea8969c72e791d7350 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobTrack.pm +f2c2c3a7e312488288b7431fba836f0c ./onvif/proxy/lib/ONVIF/Media/Types/FindMetadataResult.pm +8827f85743a98865aabb07d6ba57e68f ./onvif/proxy/lib/ONVIF/Media/Types/FloatRange.pm +8e77f106bf4c5994cdd9b58aa181d7d2 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingOptions.pm +da6b5538daa137e04cb7de3081ef5c5c ./onvif/proxy/lib/ONVIF/Media/Types/Mpeg4Profile.pm +cb89a21daf9334d7f6f546026c1c37a8 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingSettingsExtension203.pm +f3fe71d3944eb9f73a2bf30a93fbd3b4 ./onvif/proxy/lib/ONVIF/Media/Types/ImageStabilizationMode.pm +57a620a803be358a1f7d1f0d62b6cb5b ./onvif/proxy/lib/ONVIF/Media/Types/FaultCodesOpenEnumType.pm +695e84a5d7ae2d623692a013fa6aee56 ./onvif/proxy/lib/ONVIF/Media/Types/RelayOutputSettings.pm +54f72711388487a28fc2b1129d8ba78d ./onvif/proxy/lib/ONVIF/Media/Types/FocusOptions.pm +5117e4b3a1333934b5e3779d5040c64b ./onvif/proxy/lib/ONVIF/Media/Types/FindPTZPositionResultList.pm +2e3b63804658c761dcd83a388e1a542f ./onvif/proxy/lib/ONVIF/Media/Types/DynamicDNSType.pm +3cca7ddce18064c16323cf8fa3306927 ./onvif/proxy/lib/ONVIF/Media/Types/PropertyOperation.pm +d9173c5b21b592d644d41c05e0750ff1 ./onvif/proxy/lib/ONVIF/Media/Types/MetadataStream.pm +3d4a7aca63dcb77fa51f98bbb5c696d5 ./onvif/proxy/lib/ONVIF/Media/Types/MetadataStreamExtension.pm +b5d3b0706da3ed670e4f142805819133 ./onvif/proxy/lib/ONVIF/Media/Types/Dot3Configuration.pm +d4f5595f51dfa2a4c42732e3eda7cc2e ./onvif/proxy/lib/ONVIF/Media/Types/ImagingStatus.pm +23110d8479cb75ff700c825b9725e532 ./onvif/proxy/lib/ONVIF/Media/Types/RelationshipTypeOpenEnum.pm +35005393f6fc0f35e5dfb78488533b7a ./onvif/proxy/lib/ONVIF/Media/Types/ObjectExtension.pm +7cc3443283d7ae1d590a7c6afd0bacc8 ./onvif/proxy/lib/ONVIF/Media/Types/Polyline.pm +68c320d13fb3b6c2c08ffb770062acc1 ./onvif/proxy/lib/ONVIF/Media/Types/GetRecordingsResponseItem.pm +2a1099526ef2a1c1195126908ce7800a ./onvif/proxy/lib/ONVIF/Media/Types/StreamType.pm +e444f0491d4719bd22f1ab079d0d70a9 ./onvif/proxy/lib/ONVIF/Media/Types/FindEventResult.pm +de82e86f18426b7b9212c5c0d3d97f45 ./onvif/proxy/lib/ONVIF/Media/Types/LayoutExtension.pm +409fe2b9536bbdb074621d63ff774aa4 ./onvif/proxy/lib/ONVIF/Media/Types/PaneLayoutOptions.pm +9df82234671e90122461a311e58765a2 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsState.pm +632729599db68170c085ca137602c4e6 ./onvif/proxy/lib/ONVIF/Media/Types/EAPMethodConfiguration.pm +0236f0f5732ba92727c8472bfcbdef93 ./onvif/proxy/lib/ONVIF/Media/Types/TrackAttributes.pm +eb80d02fb1aacb140010c6a69fcc1359 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsDeviceEngineConfiguration.pm +521dd34a9dd690cd03c126380b18e87a ./onvif/proxy/lib/ONVIF/Media/Types/MediaCapabilities.pm +ca11533a4fe69c34abd1f387950e02a3 ./onvif/proxy/lib/ONVIF/Media/Types/Object.pm +e9ab8cb8d03f840fd44da58489b8c331 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkCapabilitiesExtension.pm +3539a5e0228c802ea241513cc56708ec ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourStatusExtension.pm +11bfaa9f6e50bc02b62b05e5666f6ef4 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourOptions.pm +edd38f9a18537274b95e5db36be760ca ./onvif/proxy/lib/ONVIF/Media/Types/ProfileCapabilities.pm +1c884103f3325a83b9307ee7b80dcb6a ./onvif/proxy/lib/ONVIF/Media/Types/AudioSourceConfiguration.pm +c4127b589346cf44b1448f916470e0b8 ./onvif/proxy/lib/ONVIF/Media/Types/FactoryDefaultType.pm +10d5e1efa80ce74652d1b62025e5fd98 ./onvif/proxy/lib/ONVIF/Media/Types/PTControlDirectionExtension.pm +e3735a7d1b21960a81421084eb4a7999 ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourSupportedExtension.pm +d54981e960aa0ef9d3a90d12f9b509d7 ./onvif/proxy/lib/ONVIF/Media/Types/OSDType.pm +2e934526436025d04a27fad18b4aefcd ./onvif/proxy/lib/ONVIF/Media/Types/CertificateStatus.pm +5f9d40d87a5516bfe10bfab1282cd48f ./onvif/proxy/lib/ONVIF/Media/Types/Header.pm +9fca56ea0602379100a39c274e2f34f0 ./onvif/proxy/lib/ONVIF/Media/Types/PrefixedIPv4Address.pm +96cd153495459894f654f86d1eca0ad4 ./onvif/proxy/lib/ONVIF/Media/Types/BaseFaultType.pm +0da55ec0937bc1b5682f9ec821ba93ae ./onvif/proxy/lib/ONVIF/Media/Types/IOCapabilitiesExtension2.pm +31296f70f15500add0ce2f4dd07b09d9 ./onvif/proxy/lib/ONVIF/Media/Types/DiscoveryMode.pm +7f8c04f2a9550a615c8c4055009370d0 ./onvif/proxy/lib/ONVIF/Media/Types/SearchScopeExtension.pm +7f73d692663817d2c21633ff731d8aeb ./onvif/proxy/lib/ONVIF/Media/Types/OSDTextOptionsExtension.pm +602259913163fead3cd7813aab2bd6bd ./onvif/proxy/lib/ONVIF/Media/Types/ProblemActionType.pm +7913619ecab060075f165919c0ce5204 ./onvif/proxy/lib/ONVIF/Media/Types/Color.pm +c66c6164226df9646ca2bd8c66fad86c ./onvif/proxy/lib/ONVIF/Media/Types/OtherType.pm +ceffb772f89559de45cf800ffd2eba30 ./onvif/proxy/lib/ONVIF/Media/Types/AudioDescriptor.pm +8ae494cba304b235a53a01fd53f48c96 ./onvif/proxy/lib/ONVIF/Media/Types/base64Binary.pm +d324f341fcee83f2877fdabb9c3a8ce9 ./onvif/proxy/lib/ONVIF/Media/Types/IOCapabilitiesExtension.pm +91cf67e97241bb16082a08e2761f4695 ./onvif/proxy/lib/ONVIF/Media/Types/H264Options2.pm +0fd6de2428cbf91d31468a3f692962ba ./onvif/proxy/lib/ONVIF/Media/Types/PolylineArrayConfiguration.pm +f41dae89c254c42e257d302b6a886abb ./onvif/proxy/lib/ONVIF/Media/Types/ContinuousFocusOptions.pm +cd3bdb3734cda2632111342d50bd01f3 ./onvif/proxy/lib/ONVIF/Media/Types/G726DecOptions.pm +130f9fc915b670d515b16985251d858f ./onvif/proxy/lib/ONVIF/Media/Types/WhiteBalance20Extension.pm +79b015c91c0cd9bf3f3eb17e4d81da77 ./onvif/proxy/lib/ONVIF/Media/Types/FocusStatus20.pm +cd76fe5dfe6e044215aa202e1b7023c5 ./onvif/proxy/lib/ONVIF/Media/Types/IOCapabilities.pm +7c4ff7f54b2492767061cb63c587a1c0 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkProtocolType.pm +4f5a7c03be9daeff3bba10c58c1f8145 ./onvif/proxy/lib/ONVIF/Media/Types/Include.pm +4fbe03efb0cf2e199d896b56c5bb12a7 ./onvif/proxy/lib/ONVIF/Media/Types/ItemListDescription.pm +2bd4e1040b53fe757a7e7043d4827cb0 ./onvif/proxy/lib/ONVIF/Media/Types/ImagingStatus20.pm +250f01d31f1d47990ed41e46fdb8b190 ./onvif/proxy/lib/ONVIF/Media/Types/MulticastConfiguration.pm +c2e5a9e96acc1813b9b989a58cc8d71a ./onvif/proxy/lib/ONVIF/Media/Types/MetadataConfigurationExtension.pm +55618a07a2ad59c31142b519cf87a485 ./onvif/proxy/lib/ONVIF/Media/Types/ActionEngineEventPayloadExtension.pm +872310fedb8a95475e739382326727de ./onvif/proxy/lib/ONVIF/Media/Types/MediaUri.pm +8344e6b716dc0031a5524879e141e703 ./onvif/proxy/lib/ONVIF/Media/Types/PTZVector.pm +6554286391f67966ca551dc93ec24ecc ./onvif/proxy/lib/ONVIF/Media/Types/MoveOptions20.pm +3a584e52c7a35587d77c22d73c0df8cc ./onvif/proxy/lib/ONVIF/Media/Types/RelatesToType.pm +1a1004c23c8d271876fcfedd1ee39eb0 ./onvif/proxy/lib/ONVIF/Media/Types/PolylineArrayExtension.pm +5a16d9af66a0cf7d88f85c65922db927 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingStatus.pm +fc0c5792e710bac5d122fe11c62e634c ./onvif/proxy/lib/ONVIF/Media/Types/IntList.pm +58d0a561fe755dfcab8d99edc87f0436 ./onvif/proxy/lib/ONVIF/Media/Types/Capabilities.pm +09099e34acc3d41000e5b140f6013201 ./onvif/proxy/lib/ONVIF/Media/Types/PTZConfiguration.pm +c4c662f1cb227b142c34dedd7ce10245 ./onvif/proxy/lib/ONVIF/Media/Types/Certificate.pm +058bac05abaab99bb771f4109f4dd7c6 ./onvif/proxy/lib/ONVIF/Media/Types/AttachmentData.pm +74b9587d80c9f10f502d45592990e401 ./onvif/proxy/lib/ONVIF/Media/Types/ReferenceToken.pm +16494eae25a36e07053df33eec8cd163 ./onvif/proxy/lib/ONVIF/Media/Types/AnyHolder.pm +305c00151032568f10942ccae8bbe567 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobConfiguration.pm +d70b46b2fd2af6d3a00453e7eefd7789 ./onvif/proxy/lib/ONVIF/Media/Types/RelayMode.pm +4dc960edcf10204aac32d1d42cd5aced ./onvif/proxy/lib/ONVIF/Media/Types/ImagingSettingsExtension20.pm +a03335dfd662ee40ab79c21df7828ca3 ./onvif/proxy/lib/ONVIF/Media/Types/UserExtension.pm +566124b49402bb9e2b5653cc7b0ea9d0 ./onvif/proxy/lib/ONVIF/Media/Types/IPv4Configuration.pm +c97a6447df7728722fda866c7cc0cb84 ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsDeviceExtension.pm +822cc4389a139c980444ea5c9f6b5ff3 ./onvif/proxy/lib/ONVIF/Media/Types/SystemCapabilitiesExtension2.pm +93a11487cfd33db264e68a74a27df3f2 ./onvif/proxy/lib/ONVIF/Media/Types/IPAddress.pm +8da6c4f84a9db327fde4b686e1f4fb83 ./onvif/proxy/lib/ONVIF/Media/Types/CapabilitiesExtension.pm +724541f9f75b022503c1687f903ec99f ./onvif/proxy/lib/ONVIF/Media/Types/TrackInformation.pm +a33cd3cec373d04addd394f9f9ae7f44 ./onvif/proxy/lib/ONVIF/Media/Types/SecurityCapabilitiesExtension2.pm +4ea9197374924b535813496916e88771 ./onvif/proxy/lib/ONVIF/Media/Types/CellLayout.pm +8aa8a21fb0d5597c9c6e2dbe351b8b48 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceMode.pm +260e6d66690c7904e538409f697f979b ./onvif/proxy/lib/ONVIF/Media/Types/PTZStatus.pm +c0468bbadeeb24a2bffb718aa00d65b2 ./onvif/proxy/lib/ONVIF/Media/Types/FocusStatus20Extension.pm +3dc5236b16749709b0137b1a1066854e ./onvif/proxy/lib/ONVIF/Media/Types/VideoDecoderConfigurationOptionsExtension.pm +08b95a5f23769e9be86a0e028ed8e86e ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsCapabilities.pm +88314e2e70af6cb51572b14e29150ed6 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkGateway.pm +54a48ed99d8dda5588320d525d81e213 ./onvif/proxy/lib/ONVIF/Media/Types/ProfileExtension.pm +f5fe1f4dc3455bec637e01fb1185f6f1 ./onvif/proxy/lib/ONVIF/Media/Types/BinaryData.pm +8a0b3f96014a6e55f895eabd036a3e0e ./onvif/proxy/lib/ONVIF/Media/Types/AudioAttributes.pm +0d56406a27a986bb0aa3089b5b7ddca1 ./onvif/proxy/lib/ONVIF/Media/Types/EndpointReferenceType.pm +0df24e037f9152ffe497d46d5f148abf ./onvif/proxy/lib/ONVIF/Media/Types/ReceiverState.pm +f142ee5a1540aadf8895e1374e1b6db5 ./onvif/proxy/lib/ONVIF/Media/Types/TransformationExtension.pm +81f2b49cf7322bc628b07bbd3424eb22 ./onvif/proxy/lib/ONVIF/Media/Types/hexBinary.pm +2043fed8543a78267f86e708eb66558d ./onvif/proxy/lib/ONVIF/Media/Types/Exposure.pm +52240b43020aa9c5bcfcaa21c705b5ba ./onvif/proxy/lib/ONVIF/Media/Types/ExposurePriority.pm +83c3041730b830c358837491029f5440 ./onvif/proxy/lib/ONVIF/Media/Types/EFlipOptions.pm +6b70303b8ddfcb04d5aea9ec54e0b2eb ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsDeviceCapabilities.pm +1fac08fdb8dbd472d36c4b1704545b6e ./onvif/proxy/lib/ONVIF/Media/Types/FindPTZPositionResult.pm +92fea2038e98caf87740fe9f1c2c708e ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngineControl.pm +3ec2fb59d64d39d9929f743865ca2bdc ./onvif/proxy/lib/ONVIF/Media/Types/LayoutOptions.pm +d9c67fa7919e1fec6f2571b8187dd654 ./onvif/proxy/lib/ONVIF/Media/Types/ColorDescriptorExtension.pm +b223a4e5de6856a472dbaebbf6eb2231 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkCapabilitiesExtension2.pm +490385883d46c311577e93b0bef7a9ee ./onvif/proxy/lib/ONVIF/Media/Types/RelayOutput.pm +8641518ded1521d5998de378449d1f4f ./onvif/proxy/lib/ONVIF/Media/Types/PTZPresetTourOperation.pm +9c5bb93e98e6562bce23d02181dbd16b ./onvif/proxy/lib/ONVIF/Media/Types/NetworkInterfaceExtension2.pm +5fff5d4826f757157ab02ce130e4cb43 ./onvif/proxy/lib/ONVIF/Media/Types/PTZNodeExtension.pm +dd72ff2227e4b70ff4ae1daef8d1e5f1 ./onvif/proxy/lib/ONVIF/Media/Types/JpegOptions.pm +bac5ae708583e5df69ab9efb057b251a ./onvif/proxy/lib/ONVIF/Media/Types/NetworkHostType.pm +38d6cd4a449c6965f231b6dfcf65d0a5 ./onvif/proxy/lib/ONVIF/Media/Types/DynamicDNSInformationExtension.pm +bf63b129d24ced009055ea6cbbef4bb5 ./onvif/proxy/lib/ONVIF/Media/Types/CertificateGenerationParameters.pm +413a1ee8378cf2738f88fe74c66e3b3f ./onvif/proxy/lib/ONVIF/Media/Types/ObjectTreeExtension.pm +954392315177092def3e5decb7c0374a ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngine.pm +f92acdc6294360a15d50e11ea31f44ee ./onvif/proxy/lib/ONVIF/Media/Types/MotionInCells.pm +8fdbb84cd39f4f13477f4e020021777b ./onvif/proxy/lib/ONVIF/Media/Types/Rotate.pm +d982af823a179893c75d245168e5bc19 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobMode.pm +a3aedc9ac922f8b19ce7066edd36bddd ./onvif/proxy/lib/ONVIF/Media/Types/RemoteUser.pm +21d6653e1cdf9fd68b65605e4f365f9f ./onvif/proxy/lib/ONVIF/Media/Types/PTControlDirection.pm +899c54519619de9e3d644f3a1dd0ffab ./onvif/proxy/lib/ONVIF/Media/Types/Reverse.pm +51a9f095c23a0bc111bca8ef2deb4892 ./onvif/proxy/lib/ONVIF/Media/Types/PTZConfigurationExtension.pm +9a2b051e51aaf9db828281a958574ec4 ./onvif/proxy/lib/ONVIF/Media/Types/AudioEncoderConfigurationOption.pm +aa22d644cf7a19370188ad35224bdb4c ./onvif/proxy/lib/ONVIF/Media/Types/VideoAnalyticsStreamExtension.pm +957406f55483dd2b85c50b14c097fa97 ./onvif/proxy/lib/ONVIF/Media/Types/RelativeFocus.pm +75ecd4ab8b860755dfb8644e4116a79e ./onvif/proxy/lib/ONVIF/Media/Types/Mpeg4Configuration.pm +17d31ab1562764f915a38eaedfc63341 ./onvif/proxy/lib/ONVIF/Media/Types/ObjectId.pm +0606defe1599dc490330d72e987603f2 ./onvif/proxy/lib/ONVIF/Media/Types/DeviceEntity.pm +815f35328311a46757d428056ebf68cd ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobStateSource.pm +f40ce480fa02de7b07ea1dc40a9ff725 ./onvif/proxy/lib/ONVIF/Media/Types/VideoAnalyticsConfiguration.pm +b5e453524fef746237b24b02e3cada7c ./onvif/proxy/lib/ONVIF/Media/Types/IPAddressFilterExtension.pm +8fbc67ad9d3f8e33493578d189e60afd ./onvif/proxy/lib/ONVIF/Media/Types/JobToken.pm +688570e8e40abc65d51922892cd7371b ./onvif/proxy/lib/ONVIF/Media/Types/MetadataAttributes.pm +ac774c24a9eef042aa48555ce90062f1 ./onvif/proxy/lib/ONVIF/Media/Types/Body.pm +306177cf43cf383d99016166344f9488 ./onvif/proxy/lib/ONVIF/Media/Types/AudioAnalyticsStream.pm +cbbd89dd08cc67d7893a6d35c8f0d94e ./onvif/proxy/lib/ONVIF/Media/Types/AnalyticsEngineInput.pm +7a346853fbe5249eb1783c97c43f297f ./onvif/proxy/lib/ONVIF/Media/Types/MotionExpressionConfiguration.pm +15a1768d0a1db4931b6d208a407794cd ./onvif/proxy/lib/ONVIF/Media/Types/JpegDecOptions.pm +cd2f686c611f8869b3aabb5f6abb6ce0 ./onvif/proxy/lib/ONVIF/Media/Types/ItemListDescriptionExtension.pm +3775c8d2f93ee21c90829196688c5253 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceExtension2.pm +d61ae316feb2303290a23b4e518c9e26 ./onvif/proxy/lib/ONVIF/Media/Types/PTZSpacesExtension.pm +5855d33852af0db59dbdcea673a24284 ./onvif/proxy/lib/ONVIF/Media/Types/Exposure20.pm +68bd323bf722a66cf118ba24e83ed499 ./onvif/proxy/lib/ONVIF/Media/Types/Description.pm +95ecce350b511d4cab6aaab7ea4bccd8 ./onvif/proxy/lib/ONVIF/Media/Types/Vector.pm +821226fb8c9debe6b521a6f2e4e71acc ./onvif/proxy/lib/ONVIF/Media/Types/EapMethodExtension.pm +ecc06d9b8bd153697876ab48fa06d10d ./onvif/proxy/lib/ONVIF/Media/Types/WideDynamicRange20.pm +018f3bf2e40dda728610863130c65565 ./onvif/proxy/lib/ONVIF/Media/Types/OSDImgOptionsExtension.pm +d9cad54eb6e3f99e895d69d9c8b065ce ./onvif/proxy/lib/ONVIF/Media/Types/ItemListExtension.pm +77f0f28745495494cfdcd1a33aa8ec58 ./onvif/proxy/lib/ONVIF/Media/Types/RecordingJobStateTrack.pm +e6f572461fc87bbd9378e77815337041 ./onvif/proxy/lib/ONVIF/Media/Types/Dot11Cipher.pm +2570d6a2fbcf84681582921437bb1f73 ./onvif/proxy/lib/ONVIF/Media/Types/MediaCapabilitiesExtension.pm +70593458016301e2eb79bd7d297347ed ./onvif/proxy/lib/ONVIF/Media/Types/Envelope.pm +ac6f12f0876d3195fafaefa6522db2d7 ./onvif/proxy/lib/ONVIF/Media/Types/SupportInformation.pm +de6a9a2fb23c45f7510b5ed2d9a952eb ./onvif/proxy/lib/ONVIF/Media/Types/ReceiverConfiguration.pm +6a6407d096b63b29ec259673df0cc807 ./onvif/proxy/lib/ONVIF/Media/Types/VideoSourceConfigurationOptions.pm +8d7cc79e482f1bea7436a1a7a6425062 ./onvif/proxy/lib/ONVIF/Media/Types/Scope.pm +d3aeebf350f368f8b1a624cda46fe8af ./onvif/proxy/lib/ONVIF/Media/Types/PTZPreset.pm +387e56f582117503941da40dbebcce3f ./onvif/proxy/lib/ONVIF/Media/Types/AudioClassDescriptor.pm +2bbbcfabb555ec8cf167a93e3890a16e ./onvif/proxy/lib/ONVIF/Media/Types/Space2DDescription.pm +3109fb439402a5158ea93c1c8542e743 ./onvif/proxy/lib/ONVIF/Media/Types/StringAttrList.pm +a28c3de50c03c83c40c71ad548bf854e ./onvif/proxy/lib/ONVIF/Media/Types/Dot11Configuration.pm +bb46025404097af4be61c385a6494982 ./onvif/proxy/lib/ONVIF/Media/Types/NetworkZeroConfigurationExtension.pm +9a2817940ebf6b0b9d8f3d6d1850ab25 ./onvif/proxy/lib/ONVIF/Media/Types/OSDColor.pm +06097eb720277e95c9198c626ba26ef8 ./onvif/proxy/lib/ONVIF/Media/Types/SupportedAnalyticsModules.pm +514d610f60385e00b47e997a3b8e4994 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTours.pm +5b9691ab231bc11f392eaa5b46768c4b ./onvif/proxy/lib/ONVIF/PTZ/Elements/AbsoluteMove.pm +3260d832824d042fff124c4eee1dcf78 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetServiceCapabilitiesResponse.pm +3dc68e3e2f3df91e9d0048793e529c8a ./onvif/proxy/lib/ONVIF/PTZ/Elements/Polygon.pm +d7e1b1ff67492512e9f5d600d5e91396 ./onvif/proxy/lib/ONVIF/PTZ/Elements/SetConfigurationResponse.pm +36084a4a67afb6730271bea5bb573f00 ./onvif/proxy/lib/ONVIF/PTZ/Elements/RelativeMoveResponse.pm +1b4388342f4b8ea8dd1bdaf8948b6c46 ./onvif/proxy/lib/ONVIF/PTZ/Elements/MetadataConfiguration.pm +e9ba03b519257de932d3f26bbc46f90a ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetNodesResponse.pm +cb290a6a7fef4b994b53d616de060e27 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GotoHomePosition.pm +7754e3cf6bdf9219907f3b21d66f8218 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetCompatibleConfigurationsResponse.pm +f1ccb0bc0805070bb007ac06834a6f46 ./onvif/proxy/lib/ONVIF/PTZ/Elements/VideoSourceConfiguration.pm +207e64a01e993ee6a73f88515fc9658c ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetToursResponse.pm +308cdaeefffb079ee4a4aca456f8e401 ./onvif/proxy/lib/ONVIF/PTZ/Elements/OperatePresetTourResponse.pm +ded8455ade6ade110bcd86f64aa4d1da ./onvif/proxy/lib/ONVIF/PTZ/Elements/RemovePresetResponse.pm +5319471e1c440ab353c3909adec935fd ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetConfigurationOptions.pm +fe7cbe5ae6eebce1ea979047b3bade23 ./onvif/proxy/lib/ONVIF/PTZ/Elements/CreatePresetTour.pm +2db1edb06dad3abb69c5923186fd7543 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetNodes.pm +eca59b8d32f8eb22d1e577cb6b60557c ./onvif/proxy/lib/ONVIF/PTZ/Elements/SetHomePositionResponse.pm +b000608c32f58903f15b50b782e74a6d ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetConfigurationOptionsResponse.pm +b6c6dc7e31c6b68b62c7bd1310d476c9 ./onvif/proxy/lib/ONVIF/PTZ/Elements/ContinuousMoveResponse.pm +081d99d4c9a3540a04149ab606f8fe6e ./onvif/proxy/lib/ONVIF/PTZ/Elements/AudioOutputConfiguration.pm +9ae4e486dbe0335eacd1a9cfb8156537 ./onvif/proxy/lib/ONVIF/PTZ/Elements/AudioDecoderConfiguration.pm +6e979126151c43d5cb0cc1f7f7ded500 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTourOptions.pm +6221cf8d88e2d126aebb8bd72b3a3cee ./onvif/proxy/lib/ONVIF/PTZ/Elements/CreatePresetTourResponse.pm +9b4f1db250909c60399f3e7cea05a6b3 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GotoPresetResponse.pm +b6674983dd64abf9a47a7a96b85fa2ed ./onvif/proxy/lib/ONVIF/PTZ/Elements/VideoEncoderConfiguration.pm +13225981448843e294b734afe73255c0 ./onvif/proxy/lib/ONVIF/PTZ/Elements/Message.pm +bde71565c9686133540b40eb67f5967e ./onvif/proxy/lib/ONVIF/PTZ/Elements/RelativeMove.pm +20b9b2360c4347e17a54d0ad00be2920 ./onvif/proxy/lib/ONVIF/PTZ/Elements/RemovePresetTourResponse.pm +cd9da445af4837dbfb6e771a7bfb2d0b ./onvif/proxy/lib/ONVIF/PTZ/Elements/AbsoluteMoveResponse.pm +6783301b7867c39014e0963be433f840 ./onvif/proxy/lib/ONVIF/PTZ/Elements/AudioEncoderConfiguration.pm +ddeaa0ca8fccb57389fbe13ddfed2f27 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetNode.pm +b90f793765e161ea3ccd3959e5457347 ./onvif/proxy/lib/ONVIF/PTZ/Elements/SetPresetResponse.pm +863ede9ea57d371771142f924a8d1770 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetConfigurations.pm +4104335bf568e03cf6d01519b271a54b ./onvif/proxy/lib/ONVIF/PTZ/Elements/SetHomePosition.pm +3ee1eefaea7454a6ab7fb14b1ef048b8 ./onvif/proxy/lib/ONVIF/PTZ/Elements/Fault.pm +17488494353348ab6e60a4d505594c25 ./onvif/proxy/lib/ONVIF/PTZ/Elements/ModifyPresetTourResponse.pm +435110ac5c6761465921552627a15172 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTour.pm +ebde95b0a3820f4ed27ca0b91b85b4ca ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetCompatibleConfigurations.pm +ac0f89195f37fe11cc4d1c39290d7203 ./onvif/proxy/lib/ONVIF/PTZ/Elements/RemovePreset.pm +dc07a2a4409f36c0c4968ecfd3f201c3 ./onvif/proxy/lib/ONVIF/PTZ/Elements/SetPreset.pm +846af87f4d9fbdc3f053e5fc4440f563 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetServiceCapabilities.pm +21d2f39e51ee6698cb7aaa5b0a814e68 ./onvif/proxy/lib/ONVIF/PTZ/Elements/SendAuxiliaryCommand.pm +ca7b3607fba700ffbff61f6552ed0bb5 ./onvif/proxy/lib/ONVIF/PTZ/Elements/SetConfiguration.pm +ea088206692bfbe11cef86bebad059c2 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GotoPreset.pm +2b0f41d38733d650e6ae53d915930e3b ./onvif/proxy/lib/ONVIF/PTZ/Elements/MetadataStream.pm +86b78c263a3f2c73d8f704b7da117220 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetNodeResponse.pm +65a825c5b5ebdb76d839ba22e8f4ab9a ./onvif/proxy/lib/ONVIF/PTZ/Elements/Polyline.pm +5a6669cf7b66685c5407484ff8cc59f9 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetConfigurationsResponse.pm +deeedc3d2f63ca3d557df5fa1fa71d2b ./onvif/proxy/lib/ONVIF/PTZ/Elements/AudioSourceConfiguration.pm +0b1c2afe1970705620badd2080796216 ./onvif/proxy/lib/ONVIF/PTZ/Elements/Header.pm +bfe4c2115ac7a195cad8945367bb8325 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetConfiguration.pm +50fff84196f6f13e2c6a7dbaea360bcc ./onvif/proxy/lib/ONVIF/PTZ/Elements/StopResponse.pm +71527852ddbbf921c8f33535c5931795 ./onvif/proxy/lib/ONVIF/PTZ/Elements/OperatePresetTour.pm +2f0afca28d52385580d742bf09d25483 ./onvif/proxy/lib/ONVIF/PTZ/Elements/Include.pm +4535de594aa45cec71a7be1abae45d84 ./onvif/proxy/lib/ONVIF/PTZ/Elements/Stop.pm +1a34431497220983aa726933da930d8c ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetStatusResponse.pm +c571fe17d1943b6db86df78b58b59211 ./onvif/proxy/lib/ONVIF/PTZ/Elements/Capabilities.pm +8e3d3feacaf6ace407ad96b5fc4b50ba ./onvif/proxy/lib/ONVIF/PTZ/Elements/GotoHomePositionResponse.pm +76a0e1f8b0f998737b30ac7eb5a979dd ./onvif/proxy/lib/ONVIF/PTZ/Elements/PTZConfiguration.pm +41276740a27301a3365b6243b5fa692f ./onvif/proxy/lib/ONVIF/PTZ/Elements/RemovePresetTour.pm +6994c74d08fd41ae1763470e89c25405 ./onvif/proxy/lib/ONVIF/PTZ/Elements/ModifyPresetTour.pm +832bfa460b630bb4db721af1a0e63f2e ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetConfigurationResponse.pm +6d4a732bfe22335c58ef35258729c072 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTourOptionsResponse.pm +84474f79d501fe38116d3552550001a6 ./onvif/proxy/lib/ONVIF/PTZ/Elements/SendAuxiliaryCommandResponse.pm +314c40335910e408d8965eb038211be0 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetsResponse.pm +531276ab467c2ba2723a1ac3f73fb004 ./onvif/proxy/lib/ONVIF/PTZ/Elements/ContinuousMove.pm +151f859d73ae3ac1b11ec9d17cdcbf60 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresets.pm +147cbdee334523d0c5ab540d823aa90c ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetPresetTourResponse.pm +e1c5200fe84a6a555b0807056446eb22 ./onvif/proxy/lib/ONVIF/PTZ/Elements/VideoAnalyticsConfiguration.pm +1529bc348d2f494f9e6d28ee6855eaed ./onvif/proxy/lib/ONVIF/PTZ/Elements/Body.pm +506744cca794adcd1270d08fbb342556 ./onvif/proxy/lib/ONVIF/PTZ/Elements/GetStatus.pm +015a17172aabc906e033224ecfab57dd ./onvif/proxy/lib/ONVIF/PTZ/Elements/Envelope.pm +5fa47f03dbd1ed9bae71e7a13b9fa077 ./onvif/proxy/lib/ONVIF/PTZ/Attributes/contentType.pm +e096647a6a57c7e33b05dbe2f29e9e51 ./onvif/proxy/lib/ONVIF/PTZ/Attributes/actor.pm +13e861f4a653a2565d461ab2afdb9ec6 ./onvif/proxy/lib/ONVIF/PTZ/Attributes/encodingStyle.pm +f415d62564dd0d3576021cab7de9e2e0 ./onvif/proxy/lib/ONVIF/PTZ/Attributes/expectedContentTypes.pm +e268ceda0aa55fed48cce9824caaf221 ./onvif/proxy/lib/ONVIF/PTZ/Attributes/mustUnderstand.pm +04e3b13a9c3dc9fbbfc9d9e39ac5ab7f ./onvif/proxy/lib/ONVIF/PTZ/Interfaces/PTZ/PTZPort.pm +99214e2f01f8bacc0873c27b6fb33aa2 ./onvif/proxy/lib/ONVIF/PTZ/Typemaps/PTZ.pm +da70ab3c7b5992e2cdfc6f4063fbca38 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoRateControl.pm +0a96330bda35fa99da716d1f7e4021f9 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZStatusFilterOptionsExtension.pm +4492ec354f92e9f2f76f050f1445d090 ./onvif/proxy/lib/ONVIF/PTZ/Types/MessageDescription.pm +b20d2b97999357eef0519bf76a8b99a6 ./onvif/proxy/lib/ONVIF/PTZ/Types/DisplayCapabilities.pm +2f048e4dea13a52de2d1e66309402400 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingSourceInformation.pm +258dd7c0c9905400c4661f441db81097 ./onvif/proxy/lib/ONVIF/PTZ/Types/detail.pm +408b7902e189b9f55ddb506c833153fd ./onvif/proxy/lib/ONVIF/PTZ/Types/NTPInformation.pm +88e129192c4625ee21ae68f3893fa7b5 ./onvif/proxy/lib/ONVIF/PTZ/Types/ScopeDefinition.pm +c410abf4f80f67bf124c5af093be9790 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkHostExtension.pm +71d2d65deb4d6a8563944fe450cf041c ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkCapabilities.pm +57e9bf6e061e3b7448d2b49615aa0996 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingSettings.pm +b8e6418fe707dacbf0ca99d6e3fc9c3b ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioClassDescriptorExtension.pm +77bfc4da7f8711920b38c78503aa5786 ./onvif/proxy/lib/ONVIF/PTZ/Types/ExposureOptions20.pm +1e37a544e964142be3f2a2ea4af61f50 ./onvif/proxy/lib/ONVIF/PTZ/Types/SetDateTimeType.pm +b2558cbcf39f66d2853530488f54fc90 ./onvif/proxy/lib/ONVIF/PTZ/Types/EFlip.pm +c27933241fad5f86224a868cb8939e76 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelativeFocusOptions.pm +557d576acd52d08e3df553eda8bafe9b ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalanceMode.pm +5ef868eaefd77028b2dffd4e846e35b8 ./onvif/proxy/lib/ONVIF/PTZ/Types/SupportedRulesExtension.pm +ab9fb38a8497078143b4a3a5ba665a3b ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingOptions20Extension.pm +8fc3b452a0247ca85ea0e9fb3007cd10 ./onvif/proxy/lib/ONVIF/PTZ/Types/FrameExtension2.pm +50f6d5c1095d7db99f0708df3597978c ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11Capabilities.pm +0b776decbc1e8d5ea177cbbd3a4a0c21 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoDecoderConfigurationOptions.pm +657fef039485d1360b5807e0ecd27372 ./onvif/proxy/lib/ONVIF/PTZ/Types/GetTracksResponseItem.pm +87962d3d5943ccc08e2f5ed085e1ee8c ./onvif/proxy/lib/ONVIF/PTZ/Types/WideDynamicRangeOptions20.pm +146d5094e70fc6dc15423313ac2e2ad6 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingCapabilities.pm +ac662594bdc12efeb95c5117501579ce ./onvif/proxy/lib/ONVIF/PTZ/Types/Name.pm +bd4dd8a8bc6aa7a4ee83dae905fe1ef8 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkHost.pm +4a805a029e05874cb7d60ee35cdc5935 ./onvif/proxy/lib/ONVIF/PTZ/Types/ObjectTree.pm +1d7d03132a4b46b668cda756a850403f ./onvif/proxy/lib/ONVIF/PTZ/Types/RelayIdleState.pm +502dbbac70e996943520fe6b02dd04ff ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataStreamExtension2.pm +0d2d8339c50fa9620eade9ef8cb2af50 ./onvif/proxy/lib/ONVIF/PTZ/Types/Polygon.pm +8e8da1040501408b8c7d05b4612c78f3 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDImgOptions.pm +4ad6d97fe00af1cc600cc4eadfb5a091 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSpotExtension.pm +6fc8f4a49cf203dc7e05fad46de551b5 ./onvif/proxy/lib/ONVIF/PTZ/Types/ZoomLimits.pm +e31b57e6a9c91759043aea3ea7fd2be1 ./onvif/proxy/lib/ONVIF/PTZ/Types/Mpeg4Options2.pm +6a6c727cd986b77560692c5fe2f9260d ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZSpaces.pm +d900950adf074289197942708d38c521 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTControlDirectionOptionsExtension.pm +ca1f6faeee23571439c58eeb57ff4a6e ./onvif/proxy/lib/ONVIF/PTZ/Types/FloatList.pm +65c10d771220c0a102d7247bc8fba969 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceExtension.pm +17e8beb23c584d47b06be0752c5fbcef ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11SecurityMode.pm +4cfbac18ff92032585c1c375cd6a0884 ./onvif/proxy/lib/ONVIF/PTZ/Types/TopicNamespaceType.pm +6247122d0e60f8174ecfb6e77fbe79a7 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11PSKPassphrase.pm +f83aacaaec9b513880003403d1c2acd2 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11SecurityConfigurationExtension.pm +7b2bd77b210c0741c8ff5182b146aca3 ./onvif/proxy/lib/ONVIF/PTZ/Types/AbsoluteFocusOptions.pm +72418592bfa3d7b82b6993bd33f79e06 ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalance20.pm +aeb7a3d208b75f64ea54898b708d1ecd ./onvif/proxy/lib/ONVIF/PTZ/Types/ImageStabilizationOptions.pm +f355df09a9f3b71fcbf3069f9b7cc28b ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioSourceOptionsExtension.pm +b540351945006581e7bfa62a51db32e2 ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataConfiguration.pm +3b22949d35c86cb9f5e780e62c124ea6 ./onvif/proxy/lib/ONVIF/PTZ/Types/BacklightCompensation20.pm +d8acea398fcc1c0f1f3e7ee02cfffde4 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv4NetworkInterfaceSetConfiguration.pm +cefab5c8865f04bd3e74442f611c2e5d ./onvif/proxy/lib/ONVIF/PTZ/Types/RelayLogicalState.pm +4f14c0203982ea3bc71901bac9b52e8b ./onvif/proxy/lib/ONVIF/PTZ/Types/PresetTour.pm +b2d2f6569b481488ca7c750acc67cb7e ./onvif/proxy/lib/ONVIF/PTZ/Types/QueryExpressionType.pm +12441188a58bf4b8c7f9ce87ad715221 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfigurationOptionsExtension.pm +47045a2cc9df64c183b232dda6f658fb ./onvif/proxy/lib/ONVIF/PTZ/Types/PanTiltLimits.pm +3ed8bc7b9bb2d433eaf777ef93cea976 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingReference.pm +68b3b636c83e7b893c44090c2a147853 ./onvif/proxy/lib/ONVIF/PTZ/Types/MoveStatus.pm +cae139f5d8f4aa0ba301a2101e37a0fb ./onvif/proxy/lib/ONVIF/PTZ/Types/GetTracksResponseList.pm +aba4c68127bc4d84a5959ed1ccdffe70 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceExtension.pm +9e12cd20e997fbda67ed785c1e9088cf ./onvif/proxy/lib/ONVIF/PTZ/Types/EventStreamExtension.pm +70e6bccba5e7b635e140a997a7b6207c ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobSource.pm +e5c0c5ee645672930a5d0c375859fbc4 ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemLogUri.pm +471e78b7c41c67c040b3003b605d081d ./onvif/proxy/lib/ONVIF/PTZ/Types/CodingCapabilities.pm +7a3d5171b514685db701ec2882015d11 ./onvif/proxy/lib/ONVIF/PTZ/Types/Transport.pm +98f3548a24d8edc270bf1cb596837b68 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobReference.pm +e1c7b66a260e81336f281d82626dc75d ./onvif/proxy/lib/ONVIF/PTZ/Types/AACDecOptions.pm +0c3b294233d38e82eff7e0a7bb765547 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceConfiguration.pm +20345daf4b62b8e455945844291d622b ./onvif/proxy/lib/ONVIF/PTZ/Types/IPAddressFilterType.pm +6d39295eb2eefb53343c50ff924534d1 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStartingConditionExtension.pm +e8fa4c6808ded7f820cdab826003a481 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImageStabilization.pm +3c3f86ac579ef8a7e781fa2d9e9d3886 ./onvif/proxy/lib/ONVIF/PTZ/Types/DeviceCapabilities.pm +aec2456bfd18b67a567fc43ea51c20e0 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkProtocol.pm +b4096d9f7ea3460577a68065bc6466cc ./onvif/proxy/lib/ONVIF/PTZ/Types/Layout.pm +728b7bbb57a670b5a5b93b2b40b878e0 ./onvif/proxy/lib/ONVIF/PTZ/Types/Split.pm +a981e183e8fc2a81da0ae475afbf9fa4 ./onvif/proxy/lib/ONVIF/PTZ/Types/CapabilitiesExtension2.pm +6a587b02056f7beac4a1a7f852384410 ./onvif/proxy/lib/ONVIF/PTZ/Types/MediaAttributes.pm +cb45c43a76490d07e9c5166c20d1997e ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceConfigurationExtension2.pm +009976b9a6125e644791a31a51fe84ab ./onvif/proxy/lib/ONVIF/PTZ/Types/TrackConfiguration.pm +39c57e79f14b65eac9141111ea2dfde0 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingSettingsExtension.pm +da62bc34e7e1b8c5e1ccc9673fa8e9f5 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11SecurityConfiguration.pm +b5b5026569dd23f0176a392941020e36 ./onvif/proxy/lib/ONVIF/PTZ/Types/SearchState.pm +172bfeeace1e4d9ebf3bae4986766a3b ./onvif/proxy/lib/ONVIF/PTZ/Types/Frame.pm +5d84c271a6d4b65db10126cb0d12ed79 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngineInputInfoExtension.pm +2076414109e59882ad572dadac5fcb82 ./onvif/proxy/lib/ONVIF/PTZ/Types/DateTimeRange.pm +5052debc36ec7c85fe24038f264a5fb3 ./onvif/proxy/lib/ONVIF/PTZ/Types/CapabilityCategory.pm +da85de6f1645dda5c448abe34d467f59 ./onvif/proxy/lib/ONVIF/PTZ/Types/SupportedAnalyticsModulesExtension.pm +70e96a4279de27e0317eef0ed0e806c3 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11SSIDType.pm +127fec43602574c764c53b39ff5906fb ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalance.pm +194edd41fb3c30de083e9e2b23d080f7 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceConnectionSetting.pm +382c8f4a5a2b4fe518484b289d863d17 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourPresetDetailOptions.pm +2cda07ef30812f75d4a0fcb63d6fe71a ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngineConfigurationExtension.pm +e1c25503d54447b4519ac7960bffd21d ./onvif/proxy/lib/ONVIF/PTZ/Types/EFlipOptionsExtension.pm +69e7b4c1ba6cdb15ae7bfcc85488a87c ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioOutputConfigurationOptions.pm +f75a70aa5539ec13003541c1fdec739c ./onvif/proxy/lib/ONVIF/PTZ/Types/SupportedRules.pm +529c5d66a5b842fd4a533fbdfb7c4728 ./onvif/proxy/lib/ONVIF/PTZ/Types/GenericEapPwdConfigurationExtension.pm +02c8fc685bf70db8ddd2e7352971462c ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11PSK.pm +43854a19e416a6a7e6adfd19fcf79fa9 ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataInput.pm +aef55f852533a97d7c49f70b27b44f9c ./onvif/proxy/lib/ONVIF/PTZ/Types/OnvifVersion.pm +350db209268dff096cfb2c69591ee130 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoOutputConfiguration.pm +cb9559902024e08cf28fb5807018faa0 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelativeFocusOptions20.pm +e4396d0c3c10e429e8eebe48f514ca19 ./onvif/proxy/lib/ONVIF/PTZ/Types/MaximumNumberOfOSDs.pm +196dc970621f06a407ac5e4deafb10cc ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoEncoderOptionsExtension.pm +24d8afeb67d0b5db683b7542d1dd3f57 ./onvif/proxy/lib/ONVIF/PTZ/Types/Time.pm +afc39e0be5d36ca338edc385be9e2b2f ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceConfigurationOptionsExtension2.pm +e3abb631075cbc60245e03f8f5520e8c ./onvif/proxy/lib/ONVIF/PTZ/Types/IntAttrList.pm +b201197c73d352546c2423b8345d4f50 ./onvif/proxy/lib/ONVIF/PTZ/Types/EventSubscription.pm +c1f2502dfe029eed03e76204946b5a29 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11PSKSetExtension.pm +ac1186a25fc13231b8f2f8451930d877 ./onvif/proxy/lib/ONVIF/PTZ/Types/EventCapabilities.pm +5eec1141655251ebd943e80feff804b7 ./onvif/proxy/lib/ONVIF/PTZ/Types/TrackReference.pm +a588ac1b440d9213535cf211e07bf64c ./onvif/proxy/lib/ONVIF/PTZ/Types/ShapeDescriptorExtension.pm +14bcf2c257c30fa392281fee5c0913bf ./onvif/proxy/lib/ONVIF/PTZ/Types/FindMetadataResultList.pm +5df4e9e6e22e0e031943c80fac2c5964 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv6DHCPConfiguration.pm +eed1fe337b385e7802b71deb1caeb666 ./onvif/proxy/lib/ONVIF/PTZ/Types/Rename.pm +e656e08b80d63c00b0ce44d5a2caa6ea ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataFilter.pm +deccc17ef8d8214b6fc8e9b6efcd7342 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourTypeExtension.pm +a72c9487fcc14ed0da9f3d7a713b7356 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioEncoderConfigurationOptions.pm +f61db1acbd3d854a972be94ee77ba14a ./onvif/proxy/lib/ONVIF/PTZ/Types/WideDynamicMode.pm +8ce4438a6d4816d36eb47db804c488cd ./onvif/proxy/lib/ONVIF/PTZ/Types/Transformation.pm +257f39ef25ae84d438140ef0eaafc875 ./onvif/proxy/lib/ONVIF/PTZ/Types/IrCutFilterMode.pm +d6bb5c8723eaffeb9a7ec16b2493a496 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11SignalStrength.pm +285cf3fd0debde89c0e61658210cf899 ./onvif/proxy/lib/ONVIF/PTZ/Types/ExtensibleDocumented.pm +4d3c4e8df86dc093fcb687b4ba013f49 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourPresetDetailOptionsExtension.pm +1447d08960f21493d0df2202520213d8 ./onvif/proxy/lib/ONVIF/PTZ/Types/RotateOptionsExtension.pm +bd4f52e3417007e0d5544bfa230aa8a5 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingStatus20Extension.pm +1a03053aeed274abfb9a49da723e36a4 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusConfiguration.pm +cd528678a4899f74a0217ed0af8120ce ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoEncoding.pm +0e8c689bdbd05cfe7b426070c98fc853 ./onvif/proxy/lib/ONVIF/PTZ/Types/Mpeg4DecOptions.pm +b32f119d006eb8bf62c40875dc596976 ./onvif/proxy/lib/ONVIF/PTZ/Types/ReceiverReference.pm +a8ca623a07089a109ef271d61e0d0c2d ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv6Address.pm +0e3708e5f156e586a32617082ae0260e ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDPosConfigurationExtension.pm +faa1a6b38df956a7acdfa0dc167e4eb6 ./onvif/proxy/lib/ONVIF/PTZ/Types/DeviceIOCapabilities.pm +c0886d8380cc8eefe441b18cd28eee0b ./onvif/proxy/lib/ONVIF/PTZ/Types/ReceiverStateInformation.pm +892747fb8321c0197a1ae673192bd5d8 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceConfigurationExtension.pm +af540aeae5ec7c73f5d8ad1da2551126 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceSetConfigurationExtension2.pm +5c176f38c4f4d51aebd569c2a72f83f0 ./onvif/proxy/lib/ONVIF/PTZ/Types/TransportProtocol.pm +e869aff20e7935548b5fa4d1d2f46ac9 ./onvif/proxy/lib/ONVIF/PTZ/Types/Direction.pm +dc076e3a3dc855c1f9d7b45afd91e5b4 ./onvif/proxy/lib/ONVIF/PTZ/Types/IrCutFilterAutoAdjustmentOptions.pm +57db3c29a6941ac32e728e7417290dd5 ./onvif/proxy/lib/ONVIF/PTZ/Types/IrCutFilterAutoAdjustmentExtension.pm +1ae2ffed287c9a12fdb8ec663cf8df1d ./onvif/proxy/lib/ONVIF/PTZ/Types/ConfigDescription.pm +7056b2a70c7e9ec78f4a1d2c1a623ec9 ./onvif/proxy/lib/ONVIF/PTZ/Types/AttributedUnsignedLongType.pm +3c9e0e8206005ec8c0a01f8fef42f46b ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZStream.pm +fc352bc67cc9392ffa97bdec6f59175e ./onvif/proxy/lib/ONVIF/PTZ/Types/BehaviourExtension.pm +f4338d0112c64cf4669f190b13a575ca ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11AvailableNetworksExtension.pm +a587bfed81369e52e51e700dc1764f11 ./onvif/proxy/lib/ONVIF/PTZ/Types/Enabled.pm +3a0b7bc941a49e62b663eed3bdc118cf ./onvif/proxy/lib/ONVIF/PTZ/Types/DurationRange.pm +35bdeddbf65d732d7cb1943def3b7459 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterface.pm +35a9863f14394723ffc9dd1417b3ad59 ./onvif/proxy/lib/ONVIF/PTZ/Types/XPathExpression.pm +0621c32e0e96e4fabc502fb45da9d109 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPType.pm +4dd4f0a9ad6740ab0fd459a8b57551ec ./onvif/proxy/lib/ONVIF/PTZ/Types/ConfigurationEntity.pm +d8b74edbaac99bffa0eeab841c7d25b2 ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemLogType.pm +2e95f61c7245c6b7ccbfe82f14afba02 ./onvif/proxy/lib/ONVIF/PTZ/Types/ReverseOptionsExtension.pm +b48371d9d993bcd7fb587f4ecef75a2c ./onvif/proxy/lib/ONVIF/PTZ/Types/ReverseMode.pm +95d73a03588f026b2e20a594b0a9fad5 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceSetConfigurationExtension.pm +1f397e2acf4cf7122d05e9ac35f1a1bd ./onvif/proxy/lib/ONVIF/PTZ/Types/TrackType.pm +f365fcc1635b1328a5f965b0a970e52d ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZSpeed.pm +7c69e698b3d3e67189033fbcc4f6d6de ./onvif/proxy/lib/ONVIF/PTZ/Types/ReferenceParametersType.pm +26f1fd9e382a63e205a101106e04b19b ./onvif/proxy/lib/ONVIF/PTZ/Types/SearchCapabilities.pm +951beb6ce3f3126bdf1431d3b9412f2e ./onvif/proxy/lib/ONVIF/PTZ/Types/StreamSetup.pm +68c8097f6740a2ca3917fbad20df5403 ./onvif/proxy/lib/ONVIF/PTZ/Types/DateTime.pm +9aa8b7559fc3e98e8b1a064635e3cb8d ./onvif/proxy/lib/ONVIF/PTZ/Types/AuxiliaryData.pm +00a5554d0c7cf6a922efa55ea017f768 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDImgConfiguration.pm +b6517889225bddf9d2a762a2760918f5 ./onvif/proxy/lib/ONVIF/PTZ/Types/encodingStyle.pm +7f2dfddd238657ca217fe20a11b05f32 ./onvif/proxy/lib/ONVIF/PTZ/Types/RotateOptions.pm +07522921601bcaeb9444611efdeed051 ./onvif/proxy/lib/ONVIF/PTZ/Types/Date.pm +8fc4bfbe1edac86227d9e2d5fde66464 ./onvif/proxy/lib/ONVIF/PTZ/Types/MessageDescriptionExtension.pm +e8949c017ab49886fed65ae7b660590d ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateInformation.pm +e3d13cb9f11294f20eaa57fb045005dd ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSpotOptions.pm +b9452d4347aa5a900c6fa84a4a02d15b ./onvif/proxy/lib/ONVIF/PTZ/Types/ActionEngineEventPayload.pm +aa7f078b0558e82d95ee3e924daee5e4 ./onvif/proxy/lib/ONVIF/PTZ/Types/MoveOptions.pm +513109d7fd712962eb99ed1f96ca36f8 ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemDateTime.pm +6336c21619559ce89b97dcf659016ec8 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelationshipType.pm +1fface4bcd6396e06e4519e60e4bd49e ./onvif/proxy/lib/ONVIF/PTZ/Types/H264Options.pm +62869f7f93785e99b007e4af2e9a0a52 ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalanceOptions.pm +b81a4013c8e21b5bd7200498b3bc1a5e ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusOptions20Extension.pm +a2e3521636e4e22d1a700b71f6de021a ./onvif/proxy/lib/ONVIF/PTZ/Types/ClassDescriptorExtension.pm +6e349fb7c73e23cf1052c9f3897c50f7 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobConfigurationExtension.pm +3974cda032d24fc034fe6956bcbe27ec ./onvif/proxy/lib/ONVIF/PTZ/Types/MotionExpression.pm +9f581f2fb9136c2d3f3c7fcaa9c6c50e ./onvif/proxy/lib/ONVIF/PTZ/Types/H264Profile.pm +29df973cfcc32254810d08b77179a932 ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateGenerationParametersExtension.pm +ec24a81f3d8394188ec7d905320eb557 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioClassType.pm +de015eabe462ae9be40df7e57a9183a6 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfigurationOptions.pm +eab371c7c199cba15e08a6c2ab5f1dbe ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextConfiguration.pm +d7cb1753681b67319fab53cb525e029d ./onvif/proxy/lib/ONVIF/PTZ/Types/AbsoluteFocus.pm +c3d3b6a0a7ae70cbab3b38e7eb04b512 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingInformation.pm +d70554efc44d55cc788cb344166fc5c5 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioOutputConfiguration.pm +20f7adb7da0b7688602cc28f2f5b8ac3 ./onvif/proxy/lib/ONVIF/PTZ/Types/AttributedURIType.pm +fe6e924c820524bc65c6a4e44273bbcb ./onvif/proxy/lib/ONVIF/PTZ/Types/PaneLayout.pm +035f6ddf4be91431a1a8e9f2fc7ba683 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioDecoderConfiguration.pm +18a8ba3da9265e93bbf4484e49e5fd1e ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioDecoderConfigurationOptionsExtension.pm +b0039f0e7fd29116ede0d1950835b475 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioSourceConfigurationOptions.pm +9d73ce28382cee2b4078f54a5ae9d9c2 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextConfigurationExtension.pm +50ebc090b2462a2503a14c37132743f5 ./onvif/proxy/lib/ONVIF/PTZ/Types/ProfileExtension2.pm +33ebea0e7b81e27db5dd1bcd5d749f72 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioClassCandidate.pm +fc04f6cc81e7dfdaeef191e85980fb6f ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusStatus.pm +23c65e774e00a62a378ef7ada4a0aed5 ./onvif/proxy/lib/ONVIF/PTZ/Types/DNSInformationExtension.pm +0624b721c40126bc8992f6457667c980 ./onvif/proxy/lib/ONVIF/PTZ/Types/SecurityCapabilities.pm +e458bf342d2a79f3120530b37f1ebccc ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoEncoderConfiguration.pm +8994558b8b34cdfa1668337b80f3442e ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11StationMode.pm +e82d283e80b3ef013adf57e58b1b6f08 ./onvif/proxy/lib/ONVIF/PTZ/Types/DynamicDNSInformation.pm +3301e461f772e7d67be1230de08b0068 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobSourceExtension.pm +09b4d3f2b017b5a397dfa60c8498e6b6 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobStateInformationExtension.pm +41af241402ada565ffe9f506f19aef06 ./onvif/proxy/lib/ONVIF/PTZ/Types/ReplayCapabilities.pm +b1fba1b5ea9f66b75547a2a105b40992 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDColorOptions.pm +d8f77b3120cce193977e28175b4fad55 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceSetConfiguration.pm +b45f844788152c2a27daa273e7ee61c1 ./onvif/proxy/lib/ONVIF/PTZ/Types/IrCutFilterAutoAdjustment.pm +bd183fc8a27b043ec53a9f52eb4a54c8 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngineConfiguration.pm +26622a26defad1b69c32928e5625800d ./onvif/proxy/lib/ONVIF/PTZ/Types/Vector1D.pm +d05e675840ffbd6bb636beafa96fc714 ./onvif/proxy/lib/ONVIF/PTZ/Types/GetRecordingJobsResponseItem.pm +b9bd141db0b3ce4faf04f4bc8927eaad ./onvif/proxy/lib/ONVIF/PTZ/Types/FaultCodesType.pm +4a4a983eb559906893bad343bc5ca8ef ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDReference.pm +e3dc14af1e448a963daaf395f9bee84d ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoOutput.pm +4ad6eda5b2924a43a899e8d4ffabc787 ./onvif/proxy/lib/ONVIF/PTZ/Types/BacklightCompensationOptions20.pm +6e01f38201cf2c989f5fda04ce6df80a ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSpot.pm +92a11c4110f6ed66a5fbbea21b4e9612 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsDeviceEngineConfigurationExtension.pm +9a9cf1d258d649a2bc814bf31180660b ./onvif/proxy/lib/ONVIF/PTZ/Types/SearchScope.pm +fcb2a3cf1572a8ffd0fed0bc62ddac8a ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalanceOptions20Extension.pm +f6865792804122c3ca81027e1a8325a1 ./onvif/proxy/lib/ONVIF/PTZ/Types/Duplex.pm +8989b9364ff5a12df49873c8f3fc3571 ./onvif/proxy/lib/ONVIF/PTZ/Types/HwAddress.pm +9922b961dc2e6dbc1fb8db91d47953f3 ./onvif/proxy/lib/ONVIF/PTZ/Types/FindRecordingResultList.pm +bec695b81722dc6c4744de210d0a98d8 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingConfiguration.pm +ddbd696d91ecb5e46ae51727efd39984 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobStateTracks.pm +8f8e1f02b231d2bcc1d2b9d4a08ad6ae ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioEncoderConfiguration.pm +705dbf3204a9223e56f59c9ae98bb199 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv4Address.pm +4935d82bf2c2090e6a576a5d2baa878a ./onvif/proxy/lib/ONVIF/PTZ/Types/AutoFocusMode.pm +158f5875c591bd643cdee7a0368038a7 ./onvif/proxy/lib/ONVIF/PTZ/Types/H264Configuration.pm +784fae5a09a9e6796ce2a29c8f25ca4d ./onvif/proxy/lib/ONVIF/PTZ/Types/IrCutFilterAutoBoundaryType.pm +5725c2dd6f2597be8fba7a5ca0811606 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceInfo.pm +c90f3ddd4ee1298bcff0470fd7bdb06f ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZCapabilities.pm +d566e5270ba68ccec57716a0c5c23397 ./onvif/proxy/lib/ONVIF/PTZ/Types/Space1DDescription.pm +b4ec43ca8b18c6d5f018a0fffc81359a ./onvif/proxy/lib/ONVIF/PTZ/Types/JpegOptions2.pm +acdb46761cce74b318dc7da3bf2b3936 ./onvif/proxy/lib/ONVIF/PTZ/Types/UserLevel.pm +2bfaee3061ef5a63576d8b250a839693 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTControlDirectionOptions.pm +70b598b79b063f5d5bfed7fad81767e8 ./onvif/proxy/lib/ONVIF/PTZ/Types/AttributedQNameType.pm +2faf66e74e8aad641998c0eaf48b4c74 ./onvif/proxy/lib/ONVIF/PTZ/Types/BacklightCompensation.pm +a2db152aaa71a01058e13cb008ef2891 ./onvif/proxy/lib/ONVIF/PTZ/Types/Rectangle.pm +bdaf02a1bbed231794e9c49bbab71d16 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingOptions20.pm +72f183a80c092267b7b64948ab7c8be5 ./onvif/proxy/lib/ONVIF/PTZ/Types/ReceiverCapabilities.pm +cb71080c5838466879347db19c7fb619 ./onvif/proxy/lib/ONVIF/PTZ/Types/BacklightCompensationMode.pm +117031f6dfeb9eb827bf9145e5745075 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZMoveStatus.pm +9541b44f03816069e414558dc313d0c8 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingOptions20Extension3.pm +8aec43ef87b3ca3b703eada0f518717c ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourPresetDetail.pm +059c8e36f6a9b9cb1e8afa9fee217a36 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoOutputConfigurationOptions.pm +ddf689567943e26399515e4c50278bdd ./onvif/proxy/lib/ONVIF/PTZ/Types/ColorspaceRange.pm +af569a07c6039ee4c349414c7dd761b2 ./onvif/proxy/lib/ONVIF/PTZ/Types/Domain.pm +30583a27a3e051078d893ecb193f8257 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfiguration.pm +63c56d56516f4ad9144bec4f5a077ea1 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusConfiguration20Extension.pm +39d2e71682c2db45ef60a7baf30be5f2 ./onvif/proxy/lib/ONVIF/PTZ/Types/FloatAttrList.pm +69e7c54f59f6b0e050cc323461a332c9 ./onvif/proxy/lib/ONVIF/PTZ/Types/TimeZone.pm +d930a0adc487ab2dad91f1b2472de3bf ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv6NetworkInterface.pm +e3c3c07ae5254acf30cbf4ba161501e3 ./onvif/proxy/lib/ONVIF/PTZ/Types/DeviceCapabilitiesExtension.pm +cbcf034509f71f62f3913e7ae46b77cf ./onvif/proxy/lib/ONVIF/PTZ/Types/TrackAttributesExtension.pm +de32dd237f8fd8ffc08884d3b5cf7030 ./onvif/proxy/lib/ONVIF/PTZ/Types/AttributedAnyType.pm +3444da58a9d1fe42a17f14d6d3243866 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusOptions20.pm +a19ccb86eb38efe3c5fd496e17ac178a ./onvif/proxy/lib/ONVIF/PTZ/Types/Config.pm +b4eb2711a60c10381132f518894aca53 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourExtension.pm +dc0444716e9a65b8813df83c87a5e792 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioDecoderConfigurationOptions.pm +62eb426693f84c588fdd90aae5106656 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImageStabilizationExtension.pm +3636730d682ed1240b23184f6aa9baed ./onvif/proxy/lib/ONVIF/PTZ/Types/IntRange.pm +f12be7f5fdefc44c4e60a78e9b2c88bc ./onvif/proxy/lib/ONVIF/PTZ/Types/IntRectangleRange.pm +708a26e66a28316bcf8db1fbbfe7f14b ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingOptions20Extension2.pm +24aaeaceac8056895566888f3e480f4a ./onvif/proxy/lib/ONVIF/PTZ/Types/PrefixedIPv6Address.pm +7ff85363188183d52b9a9ef1cd9a3952 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZStatusFilterOptions.pm +d866a9df35b0d91965178362c3c46c4a ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv6ConfigurationExtension.pm +9425f4d6bbbd522a0d4f138d227c0ca3 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZStreamExtension.pm +7657892f34d84206e6b274eb93bdf87a ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoResolution.pm +f68ea442cfde8ce4e65dab8320747b9d ./onvif/proxy/lib/ONVIF/PTZ/Types/Behaviour.pm +555b6eb3a4ea7bfabdde894b6caff3b0 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSupported.pm +919f8840203d2f51774b16dab01e33a7 ./onvif/proxy/lib/ONVIF/PTZ/Types/RotateExtension.pm +d6a457cd4dca0dd209579ce8e632c415 ./onvif/proxy/lib/ONVIF/PTZ/Types/SourceReference.pm +8a1b877acca2ea2a6c28ca0d97191332 ./onvif/proxy/lib/ONVIF/PTZ/Types/RotateMode.pm +8d285f3ced32b368e75d2ad275055f34 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioAnalyticsStreamExtension.pm +84072968a2873935ee3bcf4d6438cf11 ./onvif/proxy/lib/ONVIF/PTZ/Types/Fault.pm +803eac72a19a0532d5dc514de6feccea ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoAnalyticsStream.pm +42fd23fc1a07b298abfc5c63de42bf14 ./onvif/proxy/lib/ONVIF/PTZ/Types/PaneOptionExtension.pm +b68011084502eff7fbabee02ac087704 ./onvif/proxy/lib/ONVIF/PTZ/Types/User.pm +3d1f310f86f50a119550b1d0901c9597 ./onvif/proxy/lib/ONVIF/PTZ/Types/Mpeg4Options.pm +04a796af14dd01c7d7f60f6eeeb8818d ./onvif/proxy/lib/ONVIF/PTZ/Types/Merge.pm +ebcf1da91bb25af71903c82d318f0952 ./onvif/proxy/lib/ONVIF/PTZ/Types/WideDynamicRangeOptions.pm +9e6fd3e5c5c7200fb488920351a34231 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusMove.pm +4c9beca975166e3e8f7900a1a29054cd ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataConfigurationOptions.pm +4805642774fa3f6e95376afaa1ea008a ./onvif/proxy/lib/ONVIF/PTZ/Types/ColorDescriptor.pm +1e4a8458ea08047e752a2ec06c70022b ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkProtocolExtension.pm +53a7531053e4e3464c0ddfda6ad22331 ./onvif/proxy/lib/ONVIF/PTZ/Types/MessageExtension.pm +edc760d026509b2bbc91fbbba3f1289e ./onvif/proxy/lib/ONVIF/PTZ/Types/EFlipMode.pm +e4ad7fca0796cd299e15bc298bed273c ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourState.pm +00f08361412fb8f4e558b97c0154020d ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZFilter.pm +29e0d9ab2f41324be4df7f79b5217433 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobStateInformation.pm +a653fc3f752d996732d99add69b2f080 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv4NetworkInterface.pm +97f06dcbb56ddd46f270f4db56c84f70 ./onvif/proxy/lib/ONVIF/PTZ/Types/HostnameInformation.pm +f602fd349673bb4575047e09940e3510 ./onvif/proxy/lib/ONVIF/PTZ/Types/RuleEngineConfigurationExtension.pm +3eff909ec0609f2188f069342721480e ./onvif/proxy/lib/ONVIF/PTZ/Types/TopicNamespaceLocation.pm +9fd189d2fd071bae4039e9c60d0e0c9f ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11AuthAndMangementSuite.pm +86043e8d44540663bd1c970368767a7c ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemLogUriList.pm +d598588f401bc345693cd00b395f8140 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoEncoderOptionsExtension2.pm +682bf5d47f036127d5b886422eb0e88e ./onvif/proxy/lib/ONVIF/PTZ/Types/BackupFile.pm +5dbcd5d20f246d286f397ceed3d27554 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkZeroConfiguration.pm +e68bd5190c27a0a6470fb3661b780347 ./onvif/proxy/lib/ONVIF/PTZ/Types/PolylineArray.pm +ff7595d0df821323b24d25c2da2a3deb ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11PSKSet.pm +ebec4ecea9ed94413eb15546a10a19d5 ./onvif/proxy/lib/ONVIF/PTZ/Types/LayoutOptionsExtension.pm +24716b0e4d64c60661c9c0034750bcbb ./onvif/proxy/lib/ONVIF/PTZ/Types/Receiver.pm +22bf5714b2ac78cf5a0564bdc765748d ./onvif/proxy/lib/ONVIF/PTZ/Types/SecurityCapabilitiesExtension.pm +a8a09a1e45540d49fd3aa709f7f6a634 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingSettingsExtension202.pm +92bf512a82589b2b4b4d36c2b7fa9d19 ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataType.pm +53faeb737ec48b25f6e48eb97d1ee3fd ./onvif/proxy/lib/ONVIF/PTZ/Types/EngineConfiguration.pm +d3c1f325d3ea1445281b879a9382c00d ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemCapabilities.pm +3ed4f4102b95c0ace6e2eb7b988069da ./onvif/proxy/lib/ONVIF/PTZ/Types/IntRectangle.pm +2ac671b8924817e740b8c4f8896d272d ./onvif/proxy/lib/ONVIF/PTZ/Types/ClassType.pm +0e420e8b2a6a333c6b921783d36bcbdf ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkZeroConfigurationExtension2.pm +5404a867b87cff1b94a19eb5b4ec6d37 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusConfiguration20.pm +9c101eeefb668dfd7ffab20564c5a3ab ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZConfigurationOptions2.pm +1e11f99a70e614ae78fe72fa4f029dd0 ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataInputExtension.pm +d9ed082be6dcb120ccf970afa4a3ffdf ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateUsage.pm +e226c1f280e88c0b7ca5c8b4a22310e8 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioEncoding.pm +7911e56fc0f09e79829d45174cde6d44 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZConfigurationOptions.pm +c422aeb9eb38fa12bf161368767149dc ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioOutput.pm +ca397482d4463c168219f1ea51b74204 ./onvif/proxy/lib/ONVIF/PTZ/Types/AppearanceExtension.pm +b8e03fc3882bf331216ed58f6f5660db ./onvif/proxy/lib/ONVIF/PTZ/Types/ColorOptions.pm +f0739bd020ca634794073d6f3b97b9f6 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZNodeExtension2.pm +999c0ce2fa5ddd5694e79b89300e1315 ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalanceOptions20.pm +0477c4f873e38acb20e059c883d3e170 ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateWithPrivateKey.pm +a1078017b1b1cbc9e1b94c1b5e16fa2f ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoOutputExtension.pm +12a0fc9573b124b5e4c42707b8bad97c ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingSettings20.pm +0d47ec7bc13c93148aecf1939c40441d ./onvif/proxy/lib/ONVIF/PTZ/Types/RealTimeStreamingCapabilities.pm +6493e53d6b8995da0cebc4ea1a6d259a ./onvif/proxy/lib/ONVIF/PTZ/Types/ClassDescriptor.pm +4ea3373b501bcbb0104173110d8da8b7 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZConfigurationExtension2.pm +691638112f43fe37c9a74fe3541e848e ./onvif/proxy/lib/ONVIF/PTZ/Types/TLSConfiguration.pm +1c0d47cb30c902facf5e677acd0062ea ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot1XConfiguration.pm +e2f035df5bcb309b1e84f8b8ebd0710c ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZNode.pm +cf2271bac421e7471668ee3f9ff211e5 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSource.pm +70e6ca7c816200ce6bdb9e7d6a936db1 ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemDateTimeExtension.pm +ce64dcd18fdbc8c2af492b5ce97dc9ad ./onvif/proxy/lib/ONVIF/PTZ/Types/RealTimeStreamingCapabilitiesExtension.pm +9ef6a841c89d97fb448e918812e63521 ./onvif/proxy/lib/ONVIF/PTZ/Types/ExposureOptions.pm +30b663228ee0414922ace0ef12cccd90 ./onvif/proxy/lib/ONVIF/PTZ/Types/FindEventResultList.pm +9b18d50d63b99309c83fb937ebe5b0c8 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoAttributes.pm +aa6df705fbab248ac87068f20725f1c6 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImageStabilizationOptionsExtension.pm +cc5acd54c5d474e8a441143531a9727b ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemCapabilitiesExtension.pm +8a1be43fc3a2192c84eef7fa37fb3099 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDConfigurationExtension.pm +3a25c8e68d1eed245934013b58f0603d ./onvif/proxy/lib/ONVIF/PTZ/Types/Vector2D.pm +b167dc94bf9d2ed45d3bebb53b6df6d3 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoEncoderConfigurationOptions.pm +7e96c1282180bf4c5be835af672a6b3d ./onvif/proxy/lib/ONVIF/PTZ/Types/IrCutFilterAutoAdjustmentOptionsExtension.pm +5a0b1e08f15217623b67300e47311d31 ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateInformationExtension.pm +4c5afa63d5dd7e8d3538ec4f22fb1662 ./onvif/proxy/lib/ONVIF/PTZ/Types/ConfigDescriptionExtension.pm +b264fcf0a3766e783e89c7f92cc9297c ./onvif/proxy/lib/ONVIF/PTZ/Types/DigitalInput.pm +8a110bf7eb5b7c8a93d59332e7871842 ./onvif/proxy/lib/ONVIF/PTZ/Types/SourceIdentification.pm +e06434ed7d58b2339448e5eef562ddea ./onvif/proxy/lib/ONVIF/PTZ/Types/IANA_IfTypes.pm +bc2fad5ccc2805ca097f69c49c36ca74 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceLink.pm +f619b56971953a444546a3f5d2a024b5 ./onvif/proxy/lib/ONVIF/PTZ/Types/PaneConfiguration.pm +094e04aeea05761bd19fac46e57a57bc ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11AvailableNetworks.pm +925500e642999dc9f4b105fb90e6078e ./onvif/proxy/lib/ONVIF/PTZ/Types/IPAddressFilter.pm +ba1ebdb64c04310d609cfb0d22bb2256 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobState.pm +43302b46c907a96954f8938029d553a8 ./onvif/proxy/lib/ONVIF/PTZ/Types/Profile.pm +52e25ec8dadd46ff692b8caf03487857 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPositionFilter.pm +e84c8fe358b804d48e82bb22634befee ./onvif/proxy/lib/ONVIF/PTZ/Types/RuleEngineConfiguration.pm +a2af5bd31f2f0481148fed800476b40f ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceConfigPriority.pm +57763cb5bb5ea06d3ffd7a5190a7e9d6 ./onvif/proxy/lib/ONVIF/PTZ/Types/SourceIdentificationExtension.pm +ca79daa2f608aa19ad9ed2265ce02083 ./onvif/proxy/lib/ONVIF/PTZ/Types/Documentation.pm +e764c53a0a6450f3293c8abc72f1382b ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextOptions.pm +99c347e7a287c9be0f58a8af9fb71342 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceConfigurationOptionsExtension.pm +879e7282a4b0e7c69a58639b395b187d ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsStateInformation.pm +b947b21976384f21fdd2a07c12483b3f ./onvif/proxy/lib/ONVIF/PTZ/Types/ClassDescriptorExtension2.pm +8cb4233d473cecc7769a752892351abd ./onvif/proxy/lib/ONVIF/PTZ/Types/ExposureMode.pm +bc8d4f957b4415d9c7e207b653c348fb ./onvif/proxy/lib/ONVIF/PTZ/Types/ReceiverMode.pm +31f359c48445cf9d7c5b4ea87e6c8bcb ./onvif/proxy/lib/ONVIF/PTZ/Types/ReplayConfiguration.pm +d93a6501e3cfecc405a766a689207764 ./onvif/proxy/lib/ONVIF/PTZ/Types/ContinuousFocus.pm +e512e528ed046c9c02bdce16358d2cca ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStartingCondition.pm +d27151385db4b6063edecfa35cc233ea ./onvif/proxy/lib/ONVIF/PTZ/Types/ShapeDescriptor.pm +e3a42266c97869997339a07899dc78a9 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDImgConfigurationExtension.pm +6f05d7a2875e2a9441927bbe7b3f86e1 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDPosConfiguration.pm +d422ed5b199f77bcea35f5716feee596 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStartingConditionOptionsExtension.pm +e0a535d36d07b17360963fb1479dd955 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingSummary.pm +b326174d927a14a68801ab536ce6ff7f ./onvif/proxy/lib/ONVIF/PTZ/Types/ModeOfOperation.pm +5aefa2565e6f3b01b0c1ba01aaaa7d19 ./onvif/proxy/lib/ONVIF/PTZ/Types/BacklightCompensationOptions.pm +c9eea82e0cf16a7eedb177ea327bd4ac ./onvif/proxy/lib/ONVIF/PTZ/Types/Appearance.pm +fcb56b25162445cae8ecb3c4cedb4d0a ./onvif/proxy/lib/ONVIF/PTZ/Types/ItemList.pm +65438ae32abb407620f80fe8bc997355 ./onvif/proxy/lib/ONVIF/PTZ/Types/DNSName.pm +a99b5b52c1a155bc1ffb471710e8cbe0 ./onvif/proxy/lib/ONVIF/PTZ/Types/H264DecOptions.pm +7d2247e9028cdc4a72938f308497c890 ./onvif/proxy/lib/ONVIF/PTZ/Types/FrameExtension.pm +33c1cd846d8a56fdd307f776285b8482 ./onvif/proxy/lib/ONVIF/PTZ/Types/WideDynamicRange.pm +8698bb91e76cae09f8a5238a91b0674e ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv6Configuration.pm +11b251dff045bd3f66329aaba9f63480 ./onvif/proxy/lib/ONVIF/PTZ/Types/ColorCovariance.pm +69161dfd5c273ab0cc265cd01b482c4d ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDColorOptionsExtension.pm +3ff0c20bf0589bdd2c0e9fefa8f27ac3 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStartingConditionOptions.pm +3cb0409a32605032a25fce376d02b9fa ./onvif/proxy/lib/ONVIF/PTZ/Types/NTPInformationExtension.pm +9cba9dd2c12b1f7fdc313f4fd01c3234 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioSource.pm +02c26dee63e2180d5438adf84ad8b375 ./onvif/proxy/lib/ONVIF/PTZ/Types/PolygonConfiguration.pm +908adc52677a961b1b56be4e3ebfc2a0 ./onvif/proxy/lib/ONVIF/PTZ/Types/G711DecOptions.pm +ca6236d4d1e66c2cd85a11abb70c5edd ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv6NetworkInterfaceSetConfiguration.pm +79163074c3ca2d4c9f9b1a57b6d503fe ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11Status.pm +3dc7d116f04d43d84221da8863e0b5db ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourDirection.pm +1ada8562c1359650783c4c55cd4e9b38 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot1XConfigurationExtension.pm +f3e3692b5fb3dbc1dc381ae7c06ea8ae ./onvif/proxy/lib/ONVIF/PTZ/Types/DNSInformation.pm +447523d9e33a3c3c49e1c92f9d78bf22 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStatus.pm +4b8f0185a0919577636974bd47f809da ./onvif/proxy/lib/ONVIF/PTZ/Types/ReverseOptions.pm +c87869a64679cc1ebe5d4a77b7433c08 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingCapabilities.pm +50962a094e4792dc472bb88971ea2235 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngineInputInfo.pm +0cad472514d2601e0d8d1bdc108eaeb7 ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemLog.pm +9a479ec90cf623e6bf02c303d8706c92 ./onvif/proxy/lib/ONVIF/PTZ/Types/HostnameInformationExtension.pm +4034c1a8a1cf0c70a363a5cc157ea49d ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobTrack.pm +627c9b3d8fd7bad989e1836bce90625b ./onvif/proxy/lib/ONVIF/PTZ/Types/FindMetadataResult.pm +4f3b453acec771d2dd73abd6c247f722 ./onvif/proxy/lib/ONVIF/PTZ/Types/FloatRange.pm +dc80b53870d7a6cc3477f950f51ccff7 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingOptions.pm +48a16e18aa6997763a0444f9cf9d3fd4 ./onvif/proxy/lib/ONVIF/PTZ/Types/Mpeg4Profile.pm +07ef935634ca348011a9938cf1cefae5 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingSettingsExtension203.pm +6409392ceb88d54a9d80d2e8cd37225c ./onvif/proxy/lib/ONVIF/PTZ/Types/ImageStabilizationMode.pm +b5b9244591b87d44a3c1d9a36f43aa7b ./onvif/proxy/lib/ONVIF/PTZ/Types/FaultCodesOpenEnumType.pm +f13a44fcde0f2bba422cf1d27380acd1 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelayOutputSettings.pm +9f1e0ea27c22835c187cea54afc61132 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusOptions.pm +2f468e86615156ec6d7cbe49c5fb80b7 ./onvif/proxy/lib/ONVIF/PTZ/Types/FindPTZPositionResultList.pm +d91d54f358a7af70b5369ec7a72cbd7e ./onvif/proxy/lib/ONVIF/PTZ/Types/DynamicDNSType.pm +c00da9b2aa6d83111c46d60145c75c15 ./onvif/proxy/lib/ONVIF/PTZ/Types/PropertyOperation.pm +78ca4182bd7cb164c615a74a63c16d55 ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataStream.pm +685adb6f3dcf3a7a7cb82bbaca3d2a41 ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataStreamExtension.pm +e3f0240aa2af6163770b5e8f17d2abe7 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot3Configuration.pm +7793085a293b4357210e97fefc312009 ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingStatus.pm +c24d5a434737e3c8af5e73d6a63d7057 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelationshipTypeOpenEnum.pm +45c27714afda42163b66c64b0da7cd30 ./onvif/proxy/lib/ONVIF/PTZ/Types/ObjectExtension.pm +7f49562c85768a52780e0f90b07c16d4 ./onvif/proxy/lib/ONVIF/PTZ/Types/Polyline.pm +2ad4231292a710bbc410b5d66bf3a7f5 ./onvif/proxy/lib/ONVIF/PTZ/Types/GetRecordingsResponseItem.pm +91c3e92dd6d87d3eefc632fdb6026861 ./onvif/proxy/lib/ONVIF/PTZ/Types/StreamType.pm +a1e127da734b84c57f8e80087644d5f0 ./onvif/proxy/lib/ONVIF/PTZ/Types/FindEventResult.pm +2c2bcd9b153f0c010c0e245ab17d887c ./onvif/proxy/lib/ONVIF/PTZ/Types/LayoutExtension.pm +dde57131df02d63188bfe1fe6d406795 ./onvif/proxy/lib/ONVIF/PTZ/Types/PaneLayoutOptions.pm +cdcdecef7144bf0d6eb9efd3a6ce4c10 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsState.pm +cb9368c4d79919f02066fac9d83f7d10 ./onvif/proxy/lib/ONVIF/PTZ/Types/EAPMethodConfiguration.pm +ba39f4ac42fd3f2f9a163c262437ded4 ./onvif/proxy/lib/ONVIF/PTZ/Types/TrackAttributes.pm +7a2e2d95005e54026261f9b5c7635b81 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsDeviceEngineConfiguration.pm +b2ee2f6d668b2b168bd638fd809b3db8 ./onvif/proxy/lib/ONVIF/PTZ/Types/MediaCapabilities.pm +87d988d0503890f2d0ea65611a9357e8 ./onvif/proxy/lib/ONVIF/PTZ/Types/Object.pm +4f2fd9f1547b5a97529461f7b3676a23 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkCapabilitiesExtension.pm +54abb362024d8a8d272262a992b2cd3b ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourStatusExtension.pm +712bd2d8142d689b9a1d1f4a9d3435db ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourOptions.pm +3b69eec64f154b5d6784d62681ff2dec ./onvif/proxy/lib/ONVIF/PTZ/Types/ProfileCapabilities.pm +1c48e62e6b186bcd32672bb71d81f8fe ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioSourceConfiguration.pm +026cc2bdbf18681774be36e404aa064f ./onvif/proxy/lib/ONVIF/PTZ/Types/FactoryDefaultType.pm +ef9adc5afceed0d455c37f9e2fca0051 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTControlDirectionExtension.pm +a630edf2ba97e8467cfb90d4a215b825 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourSupportedExtension.pm +08239af25850fc8a84a493eca451ac06 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDType.pm +c36830014968a1a4be7eb7d2388724b6 ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateStatus.pm +f567b2183bb26dea5399f945afd1c7fb ./onvif/proxy/lib/ONVIF/PTZ/Types/Header.pm +2297a0342d1bf60ef6231ba696774617 ./onvif/proxy/lib/ONVIF/PTZ/Types/PrefixedIPv4Address.pm +deffc2bc65510147affe2c39d21240f2 ./onvif/proxy/lib/ONVIF/PTZ/Types/BaseFaultType.pm +844a7d6ba51f7692e4dd9842ab9ad6f3 ./onvif/proxy/lib/ONVIF/PTZ/Types/IOCapabilitiesExtension2.pm +ed9ca3930f8d8ab89c83714f099a17fb ./onvif/proxy/lib/ONVIF/PTZ/Types/DiscoveryMode.pm +9c8859bfcf14fc3d4af092c8a12e9c47 ./onvif/proxy/lib/ONVIF/PTZ/Types/SearchScopeExtension.pm +78d548bb28ede881ad75e827a9d81562 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDTextOptionsExtension.pm +c447d0bb4b4edd70603d004ac70245f4 ./onvif/proxy/lib/ONVIF/PTZ/Types/ProblemActionType.pm +7adbf31c62c9f299ce596822c4eb26df ./onvif/proxy/lib/ONVIF/PTZ/Types/Color.pm +f8bffeffc13ec4ce0438ad7a7d0ea701 ./onvif/proxy/lib/ONVIF/PTZ/Types/OtherType.pm +f1c6fc188590b06ab872d107ecc59d95 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioDescriptor.pm +8e4a4b8b877e7cbee249cb8489b35cee ./onvif/proxy/lib/ONVIF/PTZ/Types/base64Binary.pm +927ec62a3df1e5a96de0a2196bc7e7db ./onvif/proxy/lib/ONVIF/PTZ/Types/IOCapabilitiesExtension.pm +c6a0e8b19bace704a89f667124e52ba7 ./onvif/proxy/lib/ONVIF/PTZ/Types/H264Options2.pm +65ff49d5dd964d8aba8c1373a3206e66 ./onvif/proxy/lib/ONVIF/PTZ/Types/PolylineArrayConfiguration.pm +de58161497313afe2546b6d07b040578 ./onvif/proxy/lib/ONVIF/PTZ/Types/ContinuousFocusOptions.pm +910c9e1eb1d7bbf312495736ad26acee ./onvif/proxy/lib/ONVIF/PTZ/Types/G726DecOptions.pm +0a7e5e323d162297d7daf4b674b9a642 ./onvif/proxy/lib/ONVIF/PTZ/Types/WhiteBalance20Extension.pm +13ebef6a796d11fd04d20f30a58cff90 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusStatus20.pm +fdcb0f87493aa48e2a0e1df2c00ab98a ./onvif/proxy/lib/ONVIF/PTZ/Types/IOCapabilities.pm +c68639f53a362ebda6b75985121169f2 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkProtocolType.pm +7ba0a4db988059e3ebe696aafd78bb4b ./onvif/proxy/lib/ONVIF/PTZ/Types/Include.pm +046176f99a7acb1ed56e520e3972cdec ./onvif/proxy/lib/ONVIF/PTZ/Types/ItemListDescription.pm +c87f1ea70a739b5479b4af03a9f82bbc ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingStatus20.pm +3610dc7e3cffb7ee4b6932c52618f86e ./onvif/proxy/lib/ONVIF/PTZ/Types/MulticastConfiguration.pm +52959d3d03a51b1afbd32240cf33c9aa ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataConfigurationExtension.pm +cd777fc3416f67e563705740bddc3922 ./onvif/proxy/lib/ONVIF/PTZ/Types/ActionEngineEventPayloadExtension.pm +372590a9b37eda8fa6ba863aead2b1af ./onvif/proxy/lib/ONVIF/PTZ/Types/MediaUri.pm +5bc36393cf96957f69c1b5ce0386f4d3 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZVector.pm +de09beaff3404177c5a18536897972f8 ./onvif/proxy/lib/ONVIF/PTZ/Types/MoveOptions20.pm +932e85df59be0257b7bdc9b4d708e3d4 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelatesToType.pm +ae8a0d913e73d93212e42cc11d00a785 ./onvif/proxy/lib/ONVIF/PTZ/Types/PolylineArrayExtension.pm +0d6182f83fc8ac66ca1bd1a981443bd1 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingStatus.pm +415d743c151983e62e505196cd9c4cb7 ./onvif/proxy/lib/ONVIF/PTZ/Types/IntList.pm +349fa7d1b1b802d51a254812c65356d1 ./onvif/proxy/lib/ONVIF/PTZ/Types/Capabilities.pm +5def0c6243a96e3ed339e3146765ecef ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZConfiguration.pm +54c831a42dc4ed72db9d43ba2f0df9a2 ./onvif/proxy/lib/ONVIF/PTZ/Types/Certificate.pm +406b3a1cdb7c3d3bb375756517db058d ./onvif/proxy/lib/ONVIF/PTZ/Types/AttachmentData.pm +c46504b1e5f8be1296d48678b95acfba ./onvif/proxy/lib/ONVIF/PTZ/Types/ReferenceToken.pm +2b514b2f5959e5778bfc0d7056d5f609 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnyHolder.pm +d774a6ef0c6bf6effe7a664250d00fc0 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobConfiguration.pm +f384f81ce8c848070102425135fc249b ./onvif/proxy/lib/ONVIF/PTZ/Types/RelayMode.pm +4b478d9dd6a821e46156dc628400cc9d ./onvif/proxy/lib/ONVIF/PTZ/Types/ImagingSettingsExtension20.pm +5eb90070b2082ef3ee5a4518c5525d68 ./onvif/proxy/lib/ONVIF/PTZ/Types/UserExtension.pm +0e479121deca10925ecb0e6386be5e14 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPv4Configuration.pm +6792f9be82908cc82b91271a1ae00235 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsDeviceExtension.pm +2a193dfc28b676dcbbd45d43b93a0e26 ./onvif/proxy/lib/ONVIF/PTZ/Types/SystemCapabilitiesExtension2.pm +320397f53711bae8cdf2f904be0544f6 ./onvif/proxy/lib/ONVIF/PTZ/Types/IPAddress.pm +cd787fb66f46f72747fdcbcbea85b104 ./onvif/proxy/lib/ONVIF/PTZ/Types/CapabilitiesExtension.pm +50f345b06024dfd50f76a9ef9691dd64 ./onvif/proxy/lib/ONVIF/PTZ/Types/TrackInformation.pm +953a1ecebc4ff50aff3aa024a1a4b1b9 ./onvif/proxy/lib/ONVIF/PTZ/Types/SecurityCapabilitiesExtension2.pm +acd15357a4bdae1b4e29cb88c744a55c ./onvif/proxy/lib/ONVIF/PTZ/Types/CellLayout.pm +e37690797037075a885df3c4c0fd92e0 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZStatus.pm +af8767580765ae7e44f3487e2b70fb06 ./onvif/proxy/lib/ONVIF/PTZ/Types/FocusStatus20Extension.pm +69cdfa2509600e9808d92a608392acfc ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoDecoderConfigurationOptionsExtension.pm +cb97003ce2175ca502c77dff739a4591 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsCapabilities.pm +30732a84a833ed92828c43f45f902064 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkGateway.pm +d16f65d599a7ba714002a5aac71b7263 ./onvif/proxy/lib/ONVIF/PTZ/Types/ProfileExtension.pm +83491d97c2a21ee3ad13aecbb1626544 ./onvif/proxy/lib/ONVIF/PTZ/Types/BinaryData.pm +ff554ef559f3d347d99c00172a31eb74 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioAttributes.pm +2bcd7202a3836ac7da51c7b87f3a4825 ./onvif/proxy/lib/ONVIF/PTZ/Types/EndpointReferenceType.pm +1337bedfa7022a5d935d15d55069d17d ./onvif/proxy/lib/ONVIF/PTZ/Types/ReceiverState.pm +07fdd04787d4016cf6b1bb3c90e84ff1 ./onvif/proxy/lib/ONVIF/PTZ/Types/TransformationExtension.pm +e98be022dcfcd1f7e1dc835963310d20 ./onvif/proxy/lib/ONVIF/PTZ/Types/hexBinary.pm +7aa55a88ba99df9c4a10285e904fb7c7 ./onvif/proxy/lib/ONVIF/PTZ/Types/Exposure.pm +5fdf1c1d648e13bd48bff49700e40b08 ./onvif/proxy/lib/ONVIF/PTZ/Types/ExposurePriority.pm +2f60cd97770012479eb0e38bbd27c585 ./onvif/proxy/lib/ONVIF/PTZ/Types/EFlipOptions.pm +08ec8074ce0a3fcf1606fb79e1ecfb50 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsDeviceCapabilities.pm +29dba0952d296c946089ccbeb09cac9d ./onvif/proxy/lib/ONVIF/PTZ/Types/FindPTZPositionResult.pm +33162dabd0dcbcb3ddfd63e2c09f33b5 ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngineControl.pm +3bdffb3e0e95edf2df786fa50276d43a ./onvif/proxy/lib/ONVIF/PTZ/Types/LayoutOptions.pm +5319ba09b6e562bcd31e6e3f424a0339 ./onvif/proxy/lib/ONVIF/PTZ/Types/ColorDescriptorExtension.pm +4b6c1891788a580ea171f652fe0a70c2 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkCapabilitiesExtension2.pm +a68309215919e9fc97b2832684b9d162 ./onvif/proxy/lib/ONVIF/PTZ/Types/RelayOutput.pm +a9c15727a9018e7f51b2912a96046135 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPresetTourOperation.pm +5b98973aacdf2a55c02fffb4d10c58e4 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkInterfaceExtension2.pm +a771d947f19bf77f880b6b24b63d3909 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZNodeExtension.pm +14614b956d5c5a78635a2e96a04c5d7a ./onvif/proxy/lib/ONVIF/PTZ/Types/JpegOptions.pm +9e331ec49504e31e39d558a749a5856f ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkHostType.pm +389ae5e4b36e22671835c8b87e85282e ./onvif/proxy/lib/ONVIF/PTZ/Types/DynamicDNSInformationExtension.pm +8193470efbbb952e522c63f172f3db2d ./onvif/proxy/lib/ONVIF/PTZ/Types/CertificateGenerationParameters.pm +4e878d0b9acc263a8d083e9f4e5ec890 ./onvif/proxy/lib/ONVIF/PTZ/Types/ObjectTreeExtension.pm +f3a303ed0522994054600e622710661e ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngine.pm +2db438578920e728426f184a003ab7f1 ./onvif/proxy/lib/ONVIF/PTZ/Types/MotionInCells.pm +72376d4076180b90ade906f5658b7fa8 ./onvif/proxy/lib/ONVIF/PTZ/Types/Rotate.pm +ff193284a96c096fa522547be4b422c0 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobMode.pm +5b123bbe77ea02b99febd6dd2e4e2400 ./onvif/proxy/lib/ONVIF/PTZ/Types/RemoteUser.pm +7500dafa32552c1191214f55d7bff746 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTControlDirection.pm +c76d8b56ccf24405968e73ee2d00cb29 ./onvif/proxy/lib/ONVIF/PTZ/Types/Reverse.pm +19bf97fbc3e0b9a80cc82ddab0e8f5b2 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZConfigurationExtension.pm +97c19cca570b09d044fbf0a19a4c28e9 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioEncoderConfigurationOption.pm +ccbcdb7390f06ac06801b9c8de033bf5 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoAnalyticsStreamExtension.pm +a46c912eef961c4ccffe7d9eeef8411f ./onvif/proxy/lib/ONVIF/PTZ/Types/RelativeFocus.pm +d674604a3e672a04056768caa5c07a4b ./onvif/proxy/lib/ONVIF/PTZ/Types/Mpeg4Configuration.pm +837642259d53ae82c22ca9e6e650f7fd ./onvif/proxy/lib/ONVIF/PTZ/Types/ObjectId.pm +5b41ad14b3d6875a01bd87d0bc7c5d60 ./onvif/proxy/lib/ONVIF/PTZ/Types/DeviceEntity.pm +a0b70837196f70acfd279e9fe3cf15f0 ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobStateSource.pm +fcb21f5049ec7817ae4bba81229b6802 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoAnalyticsConfiguration.pm +857d6cc251df3d9d8cf055f6a4cb92ca ./onvif/proxy/lib/ONVIF/PTZ/Types/IPAddressFilterExtension.pm +6be59f6efab565c3ae29972c7c99dbbf ./onvif/proxy/lib/ONVIF/PTZ/Types/JobToken.pm +f19f0fbe70e564d1d01e0b105d09f31e ./onvif/proxy/lib/ONVIF/PTZ/Types/MetadataAttributes.pm +f7f4750a9335f2a42baa546810a8c973 ./onvif/proxy/lib/ONVIF/PTZ/Types/Body.pm +e69ee4e6a71b04cb78a4545094a8bebc ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioAnalyticsStream.pm +f82437a253890af1ef91543e2331257d ./onvif/proxy/lib/ONVIF/PTZ/Types/AnalyticsEngineInput.pm +a98be533fd46d4c10641bf278fa0a98a ./onvif/proxy/lib/ONVIF/PTZ/Types/MotionExpressionConfiguration.pm +3336f0dd038bad101f7a6b8e56760f47 ./onvif/proxy/lib/ONVIF/PTZ/Types/JpegDecOptions.pm +25df7c2d184de678e47e8778d494432a ./onvif/proxy/lib/ONVIF/PTZ/Types/ItemListDescriptionExtension.pm +b9823ad667d40f6a0495b3704aaa7388 ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceExtension2.pm +e5dc354d75fdd2fd679ad31920da51b8 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZSpacesExtension.pm +6bf51a0d9e348238fca9fdbc8060a278 ./onvif/proxy/lib/ONVIF/PTZ/Types/Exposure20.pm +f4793fc644fe89ebffc349b99216a3fb ./onvif/proxy/lib/ONVIF/PTZ/Types/Description.pm +b058ed12d90d2e96e03e1e7e43e26a8b ./onvif/proxy/lib/ONVIF/PTZ/Types/Vector.pm +8d6d0cdcc18332f3201b7ffdacb8488e ./onvif/proxy/lib/ONVIF/PTZ/Types/EapMethodExtension.pm +3073084db9bb30d51516a863c1f939a4 ./onvif/proxy/lib/ONVIF/PTZ/Types/WideDynamicRange20.pm +4061d9a73840f316717ea70cfd178808 ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDImgOptionsExtension.pm +21c504d25b790b52a5a7dfbd424a23b2 ./onvif/proxy/lib/ONVIF/PTZ/Types/ItemListExtension.pm +096d6dcaa397942b9f280c0ae88bb31d ./onvif/proxy/lib/ONVIF/PTZ/Types/RecordingJobStateTrack.pm +ea667e818f376a9b3159ee9a7e9ae260 ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11Cipher.pm +2187ac9eae99dda92178a98ba78025f5 ./onvif/proxy/lib/ONVIF/PTZ/Types/MediaCapabilitiesExtension.pm +47e0d2332d89e12cc63eb5040f70fe7f ./onvif/proxy/lib/ONVIF/PTZ/Types/Envelope.pm +70c342e6e5962130af509d4d235ac5a2 ./onvif/proxy/lib/ONVIF/PTZ/Types/SupportInformation.pm +1517f410a3ac7162254ff06e65701bbf ./onvif/proxy/lib/ONVIF/PTZ/Types/ReceiverConfiguration.pm +c1c05dcd0fa44b08a513eb41be8b8b4e ./onvif/proxy/lib/ONVIF/PTZ/Types/VideoSourceConfigurationOptions.pm +4468270f3dab544c9312de271ee02e8a ./onvif/proxy/lib/ONVIF/PTZ/Types/Scope.pm +b5ebd2f228aecbc3149a1965eab46241 ./onvif/proxy/lib/ONVIF/PTZ/Types/PTZPreset.pm +9a83327db5e3d3f98128569f7edc9574 ./onvif/proxy/lib/ONVIF/PTZ/Types/AudioClassDescriptor.pm +8c31bc687aabd15f2d15d0a836a09e7e ./onvif/proxy/lib/ONVIF/PTZ/Types/Space2DDescription.pm +774ee43ad4495f0b09b666364ef0ec8d ./onvif/proxy/lib/ONVIF/PTZ/Types/StringAttrList.pm +a1e58734aeb619e0732a756aee8a1e0b ./onvif/proxy/lib/ONVIF/PTZ/Types/Dot11Configuration.pm +0d052758af361eec0f9f12d1f3ba78b0 ./onvif/proxy/lib/ONVIF/PTZ/Types/NetworkZeroConfigurationExtension.pm +4e7661ec886ed94f3d1a9a9c9e7e481c ./onvif/proxy/lib/ONVIF/PTZ/Types/OSDColor.pm +ccc7e15209c2649678e14edc4e6720c0 ./onvif/proxy/lib/ONVIF/PTZ/Types/SupportedAnalyticsModules.pm +2f547cbfd2da5c789b658b7bc9e09f04 ./onvif/proxy/lib/ONVIF/Device/Elements/SetScopes.pm +47ddb7cba48fefdb05dd644b1050aed1 ./onvif/proxy/lib/ONVIF/Device/Elements/GetServiceCapabilitiesResponse.pm +b99949886847590cd484ca15c0897f3d ./onvif/proxy/lib/ONVIF/Device/Elements/GetScopes.pm +edd73ddebc665c6d07d92da75fcc759f ./onvif/proxy/lib/ONVIF/Device/Elements/Polygon.pm +9338f60f44ed7c07319a015b75651aca ./onvif/proxy/lib/ONVIF/Device/Elements/GetPkcs10RequestResponse.pm +9f31e8b43159fb96cc708869373ebffb ./onvif/proxy/lib/ONVIF/Device/Elements/ScanAvailableDot11NetworksResponse.pm +616c60cfad3d0dcd4524bc954120e8b9 ./onvif/proxy/lib/ONVIF/Device/Elements/GetClientCertificateModeResponse.pm +7006833f4819c61f9c62954abce8157a ./onvif/proxy/lib/ONVIF/Device/Elements/GetNTPResponse.pm +822ec88bf2636826ab5ef5f8ebc860f4 ./onvif/proxy/lib/ONVIF/Device/Elements/CreateUsers.pm +172226e2ae1e6be14dc31c352b448a1c ./onvif/proxy/lib/ONVIF/Device/Elements/MetadataConfiguration.pm +f3c8ea28093cb61063c15be3cf98709e ./onvif/proxy/lib/ONVIF/Device/Elements/DeleteUsersResponse.pm +3cac3ab5e1e0b05521ce824800f3cc38 ./onvif/proxy/lib/ONVIF/Device/Elements/SetRelayOutputState.pm +5f5b6c6993841f579e0b0cdbc926fdf9 ./onvif/proxy/lib/ONVIF/Device/Elements/SetDPAddresses.pm +f50a4e5d9e9de98ae3d049cf07efc6b4 ./onvif/proxy/lib/ONVIF/Device/Elements/SetNetworkProtocols.pm +f2e95c2c3665ec1404b15e331bbfa457 ./onvif/proxy/lib/ONVIF/Device/Elements/GetWsdlUrl.pm +0837db6020e3849bf959be2484fc866a ./onvif/proxy/lib/ONVIF/Device/Elements/GetCapabilities.pm +7dbe11a3e0d3476308cbea6569ecc399 ./onvif/proxy/lib/ONVIF/Device/Elements/GetCACertificatesResponse.pm +a8055741eff860611ba5d0a5422a6712 ./onvif/proxy/lib/ONVIF/Device/Elements/VideoSourceConfiguration.pm +20bfa2b7cad41777d52c68d6a7b422be ./onvif/proxy/lib/ONVIF/Device/Elements/GetDPAddresses.pm +ad75dd746cc7d0b2fe36a74d15d82677 ./onvif/proxy/lib/ONVIF/Device/Elements/GetRelayOutputs.pm +5fc44665a5b41578ad0a7c52ebdea38a ./onvif/proxy/lib/ONVIF/Device/Elements/GetCACertificates.pm +3bc647b0281f890e02cc64ad4882891d ./onvif/proxy/lib/ONVIF/Device/Elements/SetUser.pm +0359c22ccde58375a1d725fef77b2d39 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDiscoveryModeResponse.pm +0585089380807f5518be138db463bf98 ./onvif/proxy/lib/ONVIF/Device/Elements/StartSystemRestore.pm +290a57bac4f17af4b41610ea98bf31d7 ./onvif/proxy/lib/ONVIF/Device/Elements/SetRelayOutputSettingsResponse.pm +8509fdc68f97ceda1f78b30c9b54fc7b ./onvif/proxy/lib/ONVIF/Device/Elements/GetAccessPolicy.pm +0ab1b848d0bd14d875ba680e0a72e586 ./onvif/proxy/lib/ONVIF/Device/Elements/SetDNS.pm +da023810c4bbf60d11d377d9b75f3249 ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemLog.pm +6aa13b38a32d717c4dd8d2a8e698ea12 ./onvif/proxy/lib/ONVIF/Device/Elements/GetRemoteDiscoveryModeResponse.pm +355391569d2e0716a7ba45485bcd2d72 ./onvif/proxy/lib/ONVIF/Device/Elements/GetAccessPolicyResponse.pm +5140e145bca2a544ad59a0d06b0561fb ./onvif/proxy/lib/ONVIF/Device/Elements/SystemRebootResponse.pm +fd41ae7a8e6b6aa8c337a29efb3b2d7e ./onvif/proxy/lib/ONVIF/Device/Elements/GetDynamicDNS.pm +3da72ff6d3cb67421cfc2c4acceaf9c2 ./onvif/proxy/lib/ONVIF/Device/Elements/GetIPAddressFilter.pm +287d835df85a4976546350edbce03cd8 ./onvif/proxy/lib/ONVIF/Device/Elements/GetNetworkDefaultGatewayResponse.pm +9432eb90769e07d1d933c8cb5c3eb63b ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemUrisResponse.pm +cc4bddada708457ea2bf0af884faebf9 ./onvif/proxy/lib/ONVIF/Device/Elements/StartSystemRestoreResponse.pm +20eea2ab8d819f1e96b100decb30458a ./onvif/proxy/lib/ONVIF/Device/Elements/SetRelayOutputStateResponse.pm +f7a700af63a40855ce41c9370ab33881 ./onvif/proxy/lib/ONVIF/Device/Elements/SetRelayOutputSettings.pm +1343b5fdb3b71768e1f8ecc10bc8f7f4 ./onvif/proxy/lib/ONVIF/Device/Elements/CreateCertificate.pm +1e046d66dafcc8821d156d11a8e7faf5 ./onvif/proxy/lib/ONVIF/Device/Elements/SetAccessPolicy.pm +c6a12babf14038b1c170f3f9d245d3a6 ./onvif/proxy/lib/ONVIF/Device/Elements/GetCertificates.pm +41f3cf84eba2cb6c1e1f89919cebab4e ./onvif/proxy/lib/ONVIF/Device/Elements/SetRemoteDiscoveryModeResponse.pm +7871ba0b702d6db2bca9b36a3e2be421 ./onvif/proxy/lib/ONVIF/Device/Elements/SetRemoteUserResponse.pm +80b287a3ed8fa6e8626525ce46a4001a ./onvif/proxy/lib/ONVIF/Device/Elements/SetRemoteDiscoveryMode.pm +4be36b42d6a5aef0cbab28767f5b6b1c ./onvif/proxy/lib/ONVIF/Device/Elements/SetNetworkDefaultGatewayResponse.pm +b811f41067bfacabaefa77dc5ca0466c ./onvif/proxy/lib/ONVIF/Device/Elements/SetNetworkDefaultGateway.pm +f3134690c974ca31b8f971c50b7c7c98 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDNSResponse.pm +b47df02be6576da088f9f6eb1c9b6f16 ./onvif/proxy/lib/ONVIF/Device/Elements/GetCertificateInformation.pm +9c0c3873f09bb8caae6aa853aefc9b73 ./onvif/proxy/lib/ONVIF/Device/Elements/AudioOutputConfiguration.pm +4e760fb1f2b37219d9ce6f8086a2f014 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDPAddressesResponse.pm +5938faaf326da682edede7642c4b4b7a ./onvif/proxy/lib/ONVIF/Device/Elements/AudioDecoderConfiguration.pm +9a1ab0a50fb0905a6ff7db1dd2e28eff ./onvif/proxy/lib/ONVIF/Device/Elements/GetEndpointReferenceResponse.pm +e2af282087d02d55cb1910d5ee0af423 ./onvif/proxy/lib/ONVIF/Device/Elements/SetHostnameResponse.pm +7febec4877940e1835b3826b8737b813 ./onvif/proxy/lib/ONVIF/Device/Elements/SetClientCertificateMode.pm +c0ab90c0820f761ece60abe8ed00a906 ./onvif/proxy/lib/ONVIF/Device/Elements/LoadCertificates.pm +902b037fbfdfef50de0809e45c4380da ./onvif/proxy/lib/ONVIF/Device/Elements/SetNTPResponse.pm +01f5eb0760a0d403f4b1605a3fc7fc34 ./onvif/proxy/lib/ONVIF/Device/Elements/GetNetworkProtocolsResponse.pm +e12ba4ea8421924eef9fd8f087dd9d96 ./onvif/proxy/lib/ONVIF/Device/Elements/SetNTP.pm +2149212e2d93450bdaf4f21d73b8666d ./onvif/proxy/lib/ONVIF/Device/Elements/VideoEncoderConfiguration.pm +be9da33773efcd8235c98d407ceb31ca ./onvif/proxy/lib/ONVIF/Device/Elements/Message.pm +381e3a8f6f16c64a7947e048f21f4f15 ./onvif/proxy/lib/ONVIF/Device/Elements/RemoveScopesResponse.pm +829b863b6f37afce8b517a645de84883 ./onvif/proxy/lib/ONVIF/Device/Elements/LoadCACertificatesResponse.pm +8a1254ed5cf4967e52757425fc224c49 ./onvif/proxy/lib/ONVIF/Device/Elements/SetSystemFactoryDefaultResponse.pm +9da9ea1de29cb94aa9f5b0ab9886585e ./onvif/proxy/lib/ONVIF/Device/Elements/GetNTP.pm +e176aab6820d92ae52e475ae627fcd8a ./onvif/proxy/lib/ONVIF/Device/Elements/SetDot1XConfiguration.pm +06bf10d617ff75f84e2934b1e3a0efd7 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot11StatusResponse.pm +782718d241afb0c792ad246a98c99c9e ./onvif/proxy/lib/ONVIF/Device/Elements/AudioEncoderConfiguration.pm +88f51d3e1896744dfe9d39b6211315cc ./onvif/proxy/lib/ONVIF/Device/Elements/SetDynamicDNS.pm +bf28abe0772331986ade663919eadd60 ./onvif/proxy/lib/ONVIF/Device/Elements/SetAccessPolicyResponse.pm +8f6d223ef3616ae7138f7f87dd101ecc ./onvif/proxy/lib/ONVIF/Device/Elements/SetDNSResponse.pm +a322cc75d451087523a6517921b7aa35 ./onvif/proxy/lib/ONVIF/Device/Elements/SetHostname.pm +3206e06dfe33f9c71b5a51fec246f768 ./onvif/proxy/lib/ONVIF/Device/Elements/UpgradeSystemFirmware.pm +33805d97952625a63ded500136f675f5 ./onvif/proxy/lib/ONVIF/Device/Elements/GetUsersResponse.pm +f83c241950d47f6262c928d80897678b ./onvif/proxy/lib/ONVIF/Device/Elements/GetRemoteUser.pm +959f311b33e081b2c85f0a5657ee679b ./onvif/proxy/lib/ONVIF/Device/Elements/Fault.pm +6ae270f036d4dbb8fdd35b396dd53bc7 ./onvif/proxy/lib/ONVIF/Device/Elements/AddIPAddressFilter.pm +d10b585a63307a5bfc6ad0ce19b4d8cc ./onvif/proxy/lib/ONVIF/Device/Elements/SetDot1XConfigurationResponse.pm +cf84a30185677bc42a0e42f99f41d956 ./onvif/proxy/lib/ONVIF/Device/Elements/GetZeroConfiguration.pm +78874b449b8b0b6a1812d9316d6c06b9 ./onvif/proxy/lib/ONVIF/Device/Elements/GetCertificatesStatusResponse.pm +1f5d0fb96607b4394e70a2a6738ba844 ./onvif/proxy/lib/ONVIF/Device/Elements/SetHostnameFromDHCPResponse.pm +abe1af1cfe8bfb7c371a57f9381ed253 ./onvif/proxy/lib/ONVIF/Device/Elements/SetUserResponse.pm +62730ecdabe438918334be8b83d7009b ./onvif/proxy/lib/ONVIF/Device/Elements/DeleteCertificatesResponse.pm +aa746d9a7c0329d61ece5533e401cd5e ./onvif/proxy/lib/ONVIF/Device/Elements/GetHostname.pm +62f57fc839a5d3039a8a66d3199bba94 ./onvif/proxy/lib/ONVIF/Device/Elements/AddScopesResponse.pm +d97802cf2a84ddddc7f1c695a7cef823 ./onvif/proxy/lib/ONVIF/Device/Elements/CreateDot1XConfigurationResponse.pm +e231a212213428ee0d3b157d16313a8c ./onvif/proxy/lib/ONVIF/Device/Elements/RemoveIPAddressFilterResponse.pm +aea4d2b855f04a93082aabea19021ae2 ./onvif/proxy/lib/ONVIF/Device/Elements/GetRemoteDiscoveryMode.pm +4a6a6fe0d6aba9bd532c7c6d42e5cb3f ./onvif/proxy/lib/ONVIF/Device/Elements/AddIPAddressFilterResponse.pm +8f59026626419999a546b480b749e764 ./onvif/proxy/lib/ONVIF/Device/Elements/GetServicesResponse.pm +75a3f87010e8ba13adde54c99be0a475 ./onvif/proxy/lib/ONVIF/Device/Elements/SetNetworkProtocolsResponse.pm +9ea5a670d8ae5a4d9a4eb5bc86da598b ./onvif/proxy/lib/ONVIF/Device/Elements/GetServiceCapabilities.pm +2861a8ad70b030bc53f1e83be8735a01 ./onvif/proxy/lib/ONVIF/Device/Elements/DeleteDot1XConfigurationResponse.pm +e4d0bc967ae0f987adae9594b14baf3c ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemSupportInformation.pm +65f8e08dbb9fefedb87a834af6b95532 ./onvif/proxy/lib/ONVIF/Device/Elements/SetSystemDateAndTimeResponse.pm +d3d90d87db7e2f1ed7779316ead4af71 ./onvif/proxy/lib/ONVIF/Device/Elements/SetIPAddressFilterResponse.pm +8a567609e8525fd587a9b89f6f8c28a1 ./onvif/proxy/lib/ONVIF/Device/Elements/SetZeroConfigurationResponse.pm +6ad1d46c759bd2da41fc993b3e4aafb3 ./onvif/proxy/lib/ONVIF/Device/Elements/GetHostnameResponse.pm +40c51fbfbe2095d1eb7f51be4eb53e39 ./onvif/proxy/lib/ONVIF/Device/Elements/SetNetworkInterfacesResponse.pm +07010f86f70abe809330b5a46a1da2a1 ./onvif/proxy/lib/ONVIF/Device/Elements/RestoreSystem.pm +d561837896f38178d348f1d51c9b3862 ./onvif/proxy/lib/ONVIF/Device/Elements/GetCertificatesResponse.pm +25af209037fa9ac08ca634f1faeb86ba ./onvif/proxy/lib/ONVIF/Device/Elements/SetSystemFactoryDefault.pm +d161657d2600c508d53bb6f7b12a93be ./onvif/proxy/lib/ONVIF/Device/Elements/SendAuxiliaryCommand.pm +51799efc090bbbd6eb2aac56f6abb7bc ./onvif/proxy/lib/ONVIF/Device/Elements/LoadCACertificates.pm +a8cb92779c211f3a3a1bf3323e44d67f ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot1XConfigurationResponse.pm +4f7472bf95f7c1bcfc26d08792725c6d ./onvif/proxy/lib/ONVIF/Device/Elements/CreateCertificateResponse.pm +a451cd4b8a7dd95552d531c119964089 ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemBackup.pm +bf5753749ef567004acef866306c135c ./onvif/proxy/lib/ONVIF/Device/Elements/SetDynamicDNSResponse.pm +94f3fcfd4847932cc160a72fd82633c7 ./onvif/proxy/lib/ONVIF/Device/Elements/StartFirmwareUpgrade.pm +96f10f67dfe10449f9fa751e4e0bd688 ./onvif/proxy/lib/ONVIF/Device/Elements/CreateUsersResponse.pm +59b2d147e35b72986ace1558dfbcf38d ./onvif/proxy/lib/ONVIF/Device/Elements/GetRemoteUserResponse.pm +bbbbc051ba541395e8cff028d7a7fb6b ./onvif/proxy/lib/ONVIF/Device/Elements/GetCapabilitiesResponse.pm +912bd6a762d22e4b5777f0617b84878e ./onvif/proxy/lib/ONVIF/Device/Elements/GetScopesResponse.pm +95164327c682ff73d025244ebb084b74 ./onvif/proxy/lib/ONVIF/Device/Elements/LoadCertificatesResponse.pm +0bec37b220f107dad96c435765e80999 ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemBackupResponse.pm +c7cabd446fec2f9fd85dbf219b3a5307 ./onvif/proxy/lib/ONVIF/Device/Elements/SetIPAddressFilter.pm +718fe1440ee5c25f188d19173b3e668f ./onvif/proxy/lib/ONVIF/Device/Elements/GetDynamicDNSResponse.pm +d608cbdc7737361b2bb46b711790c67d ./onvif/proxy/lib/ONVIF/Device/Elements/DeleteDot1XConfiguration.pm +0d9752c9308ec11961dee550ad1a2b69 ./onvif/proxy/lib/ONVIF/Device/Elements/GetEndpointReference.pm +d2241187a926edf11d544e6095576382 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot11CapabilitiesResponse.pm +f1092d6025ae992bf3f94ee258f33538 ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemSupportInformationResponse.pm +dd4ba84697840cd324839687ebb991fe ./onvif/proxy/lib/ONVIF/Device/Elements/MetadataStream.pm +c8bc0ee1c82162b6acd2240f16bb11c9 ./onvif/proxy/lib/ONVIF/Device/Elements/SetNetworkInterfaces.pm +d5d17d49623486913d4151fdac436bfa ./onvif/proxy/lib/ONVIF/Device/Elements/GetDNS.pm +bceeddf8a8f67c5fc4045fa207188a8e ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemLogResponse.pm +0e55af6285c2521370886f1ad145a478 ./onvif/proxy/lib/ONVIF/Device/Elements/Polyline.pm +877c4f37aad65fde1a8f15831466de9f ./onvif/proxy/lib/ONVIF/Device/Elements/GetPkcs10Request.pm +900590fcccb8953f7ec0855e5e9c731a ./onvif/proxy/lib/ONVIF/Device/Elements/SetCertificatesStatus.pm +181dfcf11fea79766431dc3aeaa095cb ./onvif/proxy/lib/ONVIF/Device/Elements/GetCertificatesStatus.pm +9f4ceb093c3c6e2a908b32a2f0a25986 ./onvif/proxy/lib/ONVIF/Device/Elements/GetNetworkInterfacesResponse.pm +829c0646ce98af380bc0989b7a3ad7d4 ./onvif/proxy/lib/ONVIF/Device/Elements/LoadCertificateWithPrivateKeyResponse.pm +4a902f72c5403b42d9d26a0caefd2cc4 ./onvif/proxy/lib/ONVIF/Device/Elements/AudioSourceConfiguration.pm +5e970e5c89817508beef27c33f1d4ffa ./onvif/proxy/lib/ONVIF/Device/Elements/StartFirmwareUpgradeResponse.pm +237d3f05529319f28e5592744d13f4e8 ./onvif/proxy/lib/ONVIF/Device/Elements/Header.pm +323166880980263c1d36673fa7e1299a ./onvif/proxy/lib/ONVIF/Device/Elements/SystemReboot.pm +5fdd0eac2c28b621e9378a295180a357 ./onvif/proxy/lib/ONVIF/Device/Elements/GetUsers.pm +a6c3f2904572e0998f15fdc9d421ccc5 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDeviceInformationResponse.pm +f5710f380aac7e9ae407a0544c3d523b ./onvif/proxy/lib/ONVIF/Device/Elements/SetScopesResponse.pm +7b62d62cb53ef8af155b85c75abd3d06 ./onvif/proxy/lib/ONVIF/Device/Elements/SetDiscoveryMode.pm +31a8ea1a520f6e78e01ad24a6588a4b7 ./onvif/proxy/lib/ONVIF/Device/Elements/SetHostnameFromDHCP.pm +62ac5b4f79de408d71eafa0c0ce97239 ./onvif/proxy/lib/ONVIF/Device/Elements/Include.pm +fdf69b7d74209c7d5e7b7c977050d35c ./onvif/proxy/lib/ONVIF/Device/Elements/GetNetworkProtocols.pm +be182055164f6cbff63bfbae84db3503 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot11Capabilities.pm +ab8068a743628417f0be18a197060687 ./onvif/proxy/lib/ONVIF/Device/Elements/Capabilities.pm +b95349b1839fdb6cd8aea48ad2ab13f7 ./onvif/proxy/lib/ONVIF/Device/Elements/PTZConfiguration.pm +3e025e32895ab6480c6185b8135a6a0c ./onvif/proxy/lib/ONVIF/Device/Elements/SetDPAddressesResponse.pm +d21a7d6226ac58049857f4bdbef4dd37 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot11Status.pm +cb9386d28437c6198cae42ec7db70eef ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot1XConfiguration.pm +fbf400bc90e012d01924132d79bc40d5 ./onvif/proxy/lib/ONVIF/Device/Elements/DeleteUsers.pm +2954e871ecd42404425f6aae071563a3 ./onvif/proxy/lib/ONVIF/Device/Elements/RemoveScopes.pm +55fefdaca5122bc040bbf19cc918049f ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemDateAndTime.pm +9de966fedcbf36907621c2ba29567b6e ./onvif/proxy/lib/ONVIF/Device/Elements/RestoreSystemResponse.pm +a4f9134186e43c9f09fa456bfc5ba832 ./onvif/proxy/lib/ONVIF/Device/Elements/SendAuxiliaryCommandResponse.pm +a851a7b17bd7fc9a7df7593d46f3ae79 ./onvif/proxy/lib/ONVIF/Device/Elements/SetCertificatesStatusResponse.pm +9cc62a6bd6c7b2f181ab82772bf2a66b ./onvif/proxy/lib/ONVIF/Device/Elements/SetZeroConfiguration.pm +1fac9aa00bacefb506eaa85f6e74383c ./onvif/proxy/lib/ONVIF/Device/Elements/GetIPAddressFilterResponse.pm +f6a44574604c09ae040049e670cc155b ./onvif/proxy/lib/ONVIF/Device/Elements/SetSystemDateAndTime.pm +93997e64602714bfd99fd12687cd2930 ./onvif/proxy/lib/ONVIF/Device/Elements/SetRemoteUser.pm +80b83a35eaf1ac7e25a861728290c404 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot1XConfigurations.pm +f0885fb923c93ad76c40f7a625fcad15 ./onvif/proxy/lib/ONVIF/Device/Elements/LoadCertificateWithPrivateKey.pm +495924ea54764396035dd3ff898b06d8 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDot1XConfigurationsResponse.pm +a129437bb82c2e7837b12ce89179f2ac ./onvif/proxy/lib/ONVIF/Device/Elements/RemoveIPAddressFilter.pm +189a1238f4b52c215e784a3b74cfb0f7 ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemDateAndTimeResponse.pm +27ebfd3b73019570deac49b6aae6b7bf ./onvif/proxy/lib/ONVIF/Device/Elements/VideoAnalyticsConfiguration.pm +9e4c324c5d7fb58a03d09ba74385ec1a ./onvif/proxy/lib/ONVIF/Device/Elements/AddScopes.pm +728d5da078bf538e7275eba45e4ae6f1 ./onvif/proxy/lib/ONVIF/Device/Elements/UpgradeSystemFirmwareResponse.pm +acd669458aedb53ecd00e7dba6ad0807 ./onvif/proxy/lib/ONVIF/Device/Elements/CreateDot1XConfiguration.pm +a6fe55c542b0e8ee8425dbbd02aa9aef ./onvif/proxy/lib/ONVIF/Device/Elements/GetNetworkDefaultGateway.pm +fe9fad8e64d6c9f372280967e5a889be ./onvif/proxy/lib/ONVIF/Device/Elements/GetCertificateInformationResponse.pm +88a4e611e64e8e31ca943ff177719619 ./onvif/proxy/lib/ONVIF/Device/Elements/GetRelayOutputsResponse.pm +841d14d344d00e5a63cd1ca1107fd167 ./onvif/proxy/lib/ONVIF/Device/Elements/SetClientCertificateModeResponse.pm +e9f2c55487c0850a9a3f901bfe29259f ./onvif/proxy/lib/ONVIF/Device/Elements/Body.pm +98e6fa8baecce94d279c63540fcd120d ./onvif/proxy/lib/ONVIF/Device/Elements/GetClientCertificateMode.pm +dcd679e364b1886faf2d06488b79d18d ./onvif/proxy/lib/ONVIF/Device/Elements/DeleteCertificates.pm +6e59431c50785b40052357add8b19983 ./onvif/proxy/lib/ONVIF/Device/Elements/GetSystemUris.pm +4cbe06784319eb234f19a29337ad795c ./onvif/proxy/lib/ONVIF/Device/Elements/GetZeroConfigurationResponse.pm +36381d5539e5a81e15856c57fd2a1914 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDeviceInformation.pm +904059755856b32c087f9831a8aca0c8 ./onvif/proxy/lib/ONVIF/Device/Elements/SetDiscoveryModeResponse.pm +b17fe5050e8830ecafba102adbc56492 ./onvif/proxy/lib/ONVIF/Device/Elements/GetNetworkInterfaces.pm +251f7b2c703cb212919deb4a786ab4c5 ./onvif/proxy/lib/ONVIF/Device/Elements/Envelope.pm +573436bd7008de002f7085986a7a2902 ./onvif/proxy/lib/ONVIF/Device/Elements/GetDiscoveryMode.pm +6e55b31f43cc36f843de6d704d3eae47 ./onvif/proxy/lib/ONVIF/Device/Elements/ScanAvailableDot11Networks.pm +b7620f43c4ca0a737dc4ad7a0606081d ./onvif/proxy/lib/ONVIF/Device/Elements/GetWsdlUrlResponse.pm +e1c149864a5fa28cc65b9e486af0ef3d ./onvif/proxy/lib/ONVIF/Device/Elements/GetServices.pm +dc114f48bdbf12a076ec4e23e0656436 ./onvif/proxy/lib/ONVIF/Device/Attributes/contentType.pm +a632a6c5805e73c2e835b6ae098320af ./onvif/proxy/lib/ONVIF/Device/Attributes/actor.pm +a0ef5133db1b1817665e282abcff22cc ./onvif/proxy/lib/ONVIF/Device/Attributes/encodingStyle.pm +5656bb0c845853dc0cd26451e2d44994 ./onvif/proxy/lib/ONVIF/Device/Attributes/expectedContentTypes.pm +cc4d6106a185e42fcfc3b29d8cc4fb2d ./onvif/proxy/lib/ONVIF/Device/Attributes/mustUnderstand.pm +6d47ed24c1e911a66046c5b6a9ed8103 ./onvif/proxy/lib/ONVIF/Device/Interfaces/Device/DevicePort.pm +97cc09a47d863f2d8c52ebbf69fa7339 ./onvif/proxy/lib/ONVIF/Device/Typemaps/Device.pm +f36c8a4c013cbaeec72f521e99bc94c9 ./onvif/proxy/lib/ONVIF/Device/Types/VideoRateControl.pm +5c06004cece7264b2c0138ef599b9cbb ./onvif/proxy/lib/ONVIF/Device/Types/PTZStatusFilterOptionsExtension.pm +3109938ed696acf547401108d8d36e3f ./onvif/proxy/lib/ONVIF/Device/Types/MessageDescription.pm +4df6b8a2bb19c811f40c67af2558e6ca ./onvif/proxy/lib/ONVIF/Device/Types/DisplayCapabilities.pm +9dae389fa6d34ff50bc1284354b3cd38 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingSourceInformation.pm +2fc5ce8f9c452dbb6c3b5d2cdf35576e ./onvif/proxy/lib/ONVIF/Device/Types/detail.pm +a32c75799388d40ca17df6fba000a26a ./onvif/proxy/lib/ONVIF/Device/Types/NTPInformation.pm +f017901e8fbc440a2cebf700a9230402 ./onvif/proxy/lib/ONVIF/Device/Types/ScopeDefinition.pm +92362f045479157bf7d893063f3e3b3a ./onvif/proxy/lib/ONVIF/Device/Types/NetworkHostExtension.pm +c70fb7918b61a43dbc86daf54d12c73b ./onvif/proxy/lib/ONVIF/Device/Types/NetworkCapabilities.pm +55ccdcc92809273e856ed08333a78598 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingSettings.pm +53999c7623f6a33996a9a3db116c358d ./onvif/proxy/lib/ONVIF/Device/Types/AudioClassDescriptorExtension.pm +68a4b96756654ee011fab2134d31efcc ./onvif/proxy/lib/ONVIF/Device/Types/ExposureOptions20.pm +fc41a1fad4bd66b8b98261601eb9ffa0 ./onvif/proxy/lib/ONVIF/Device/Types/SetDateTimeType.pm +17de35bd0b08d80a60edab041771e5bc ./onvif/proxy/lib/ONVIF/Device/Types/EFlip.pm +2e251db9b6440656c8ca21b7335c6a01 ./onvif/proxy/lib/ONVIF/Device/Types/RelativeFocusOptions.pm +1ac774688ad2d90d23763ca58d25a04d ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalanceMode.pm +b80b21b14264ee545fd781838956cbab ./onvif/proxy/lib/ONVIF/Device/Types/SupportedRulesExtension.pm +05235dce7ebc6aebf3f7866cfa742081 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingOptions20Extension.pm +33a838d8da22317526e28a3bdfb455dc ./onvif/proxy/lib/ONVIF/Device/Types/FrameExtension2.pm +3f23a420aea59ebd8c7dedd4d05ee192 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11Capabilities.pm +ddff6046418af666808341a738aca8d8 ./onvif/proxy/lib/ONVIF/Device/Types/VideoDecoderConfigurationOptions.pm +d35f5fb88e6448d1f3016b64e7bd144f ./onvif/proxy/lib/ONVIF/Device/Types/GetTracksResponseItem.pm +7f2ee4f8369a1d9f106ecc9d2f90d84a ./onvif/proxy/lib/ONVIF/Device/Types/WideDynamicRangeOptions20.pm +08f0de7e1f6b8eeb944c39bfd1d1810b ./onvif/proxy/lib/ONVIF/Device/Types/ImagingCapabilities.pm +7aecdd6b9184c11550a39bffd5910cfa ./onvif/proxy/lib/ONVIF/Device/Types/Name.pm +897ba42e2d77152616c158e690a45e11 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkHost.pm +271acf5eac9f855511a0cedb618ad974 ./onvif/proxy/lib/ONVIF/Device/Types/ObjectTree.pm +c68188cf59cfff1bf254bab13f5a5533 ./onvif/proxy/lib/ONVIF/Device/Types/RelayIdleState.pm +049eeb7afb583a07abb0c3fba36e9200 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataStreamExtension2.pm +b188f9625c58b2083dd86f968588bcb0 ./onvif/proxy/lib/ONVIF/Device/Types/Polygon.pm +13d4ea345dac030e755893e425a78fc1 ./onvif/proxy/lib/ONVIF/Device/Types/OSDImgOptions.pm +3c576cf5662ceefb4f1b125a8b599856 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSpotExtension.pm +7f4e825fa0b0bf76ad0e3494a190d07a ./onvif/proxy/lib/ONVIF/Device/Types/ZoomLimits.pm +f5d5d82647853967ce80e992f5a8e883 ./onvif/proxy/lib/ONVIF/Device/Types/Mpeg4Options2.pm +7ae71a9835d4fafeef9b733a6c4eed41 ./onvif/proxy/lib/ONVIF/Device/Types/PTZSpaces.pm +dd264db55354e82a38600bbd2f3bfe67 ./onvif/proxy/lib/ONVIF/Device/Types/PTControlDirectionOptionsExtension.pm +8bcd3453e9a5c7acdce73fe7709476ec ./onvif/proxy/lib/ONVIF/Device/Types/FloatList.pm +74063272381ad4ef8a1eeb1e37521103 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceExtension.pm +1c7729e2b0ce1ee1a65ccddde28496c0 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11SecurityMode.pm +05d605f6b122b2d8607285005e147b80 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11PSKPassphrase.pm +dd067fcf698efba7415c5e75895f7b01 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11SecurityConfigurationExtension.pm +09478e4b7c079e6e9c57255e38df5456 ./onvif/proxy/lib/ONVIF/Device/Types/AbsoluteFocusOptions.pm +e1fdafcfba2797b6d542a788e77d24d6 ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalance20.pm +b48ef1aefbde565db223518d2ccce43e ./onvif/proxy/lib/ONVIF/Device/Types/ImageStabilizationOptions.pm +7f2192b78b22d2ff0e90c162e03334d6 ./onvif/proxy/lib/ONVIF/Device/Types/AudioSourceOptionsExtension.pm +7ec712d555f374c349a592d5ce8eba0b ./onvif/proxy/lib/ONVIF/Device/Types/MetadataConfiguration.pm +feec5c7a72b04d68087a07423115cf73 ./onvif/proxy/lib/ONVIF/Device/Types/BacklightCompensation20.pm +058b35b6dafa31427f02467b1166c44d ./onvif/proxy/lib/ONVIF/Device/Types/IPv4NetworkInterfaceSetConfiguration.pm +c6e828f5e1c43e1417410d57e5cc0859 ./onvif/proxy/lib/ONVIF/Device/Types/RelayLogicalState.pm +d6ab6bb65fb757120c2b185080d4fe31 ./onvif/proxy/lib/ONVIF/Device/Types/PresetTour.pm +d224c91d6b04643998ca465085a9b036 ./onvif/proxy/lib/ONVIF/Device/Types/OSDConfigurationOptionsExtension.pm +38adac2af1c75606e803ab18b5e545a4 ./onvif/proxy/lib/ONVIF/Device/Types/PanTiltLimits.pm +616b26e93eb650d449ab446439f907f0 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingReference.pm +624dbb1b2d3ebf4fac7fc9ce44096ff4 ./onvif/proxy/lib/ONVIF/Device/Types/MoveStatus.pm +d10f7125b0921b1416c2608838fa99ff ./onvif/proxy/lib/ONVIF/Device/Types/GetTracksResponseList.pm +efc2f3f6eb5f4de75be324cedf568e9a ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceExtension.pm +3849006303260b4505d65e685ec733fe ./onvif/proxy/lib/ONVIF/Device/Types/EventStreamExtension.pm +4b3d94d26676cacc35c45b22205801ea ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobSource.pm +1dedabdfb04ae5630b3da0086a1902a9 ./onvif/proxy/lib/ONVIF/Device/Types/SystemLogUri.pm +066d10aefe16b6b1e91ffea591422431 ./onvif/proxy/lib/ONVIF/Device/Types/CodingCapabilities.pm +cfde7a64d255f66bad3c4d77dac1ebaa ./onvif/proxy/lib/ONVIF/Device/Types/Transport.pm +d481f5a904e8237b804c1d0f69a012ee ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobReference.pm +a7bef56ebc6a207c21acc21ad97b3c9a ./onvif/proxy/lib/ONVIF/Device/Types/AACDecOptions.pm +1782d9ce499ce8d795e34db1986b332d ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceConfiguration.pm +361a421cf61a40dfcd942707f73adc12 ./onvif/proxy/lib/ONVIF/Device/Types/IPAddressFilterType.pm +264f31bc12d4a247f6556224b855bef3 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStartingConditionExtension.pm +08e2ca0458ff905f00f0fd8e6b3b7e71 ./onvif/proxy/lib/ONVIF/Device/Types/ImageStabilization.pm +6d2a5ff504809e35dcfd4e37de833f4d ./onvif/proxy/lib/ONVIF/Device/Types/DeviceCapabilities.pm +1fc07c2f1a80bec8c90fe061c124ad3d ./onvif/proxy/lib/ONVIF/Device/Types/NetworkProtocol.pm +f41d1e621062e1e8c79c15cfbf92fb06 ./onvif/proxy/lib/ONVIF/Device/Types/Layout.pm +588043a73ae74e4e70677186af8ccd20 ./onvif/proxy/lib/ONVIF/Device/Types/Split.pm +e6dc0bc1ed739d004f4cc06d3cc14226 ./onvif/proxy/lib/ONVIF/Device/Types/CapabilitiesExtension2.pm +08888e7b9227d929c4aeda4787a3e0bb ./onvif/proxy/lib/ONVIF/Device/Types/MediaAttributes.pm +93fedd5f155f5a04225b3105f47ff54c ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceConfigurationExtension2.pm +94c5b0d31ed7919dc8db9d7e770b4fb5 ./onvif/proxy/lib/ONVIF/Device/Types/TrackConfiguration.pm +68fedaa79e38235bc1a14695017a6529 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingSettingsExtension.pm +7c85cacfe4c11ec74bf6e31eeae1e112 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11SecurityConfiguration.pm +053e5e052dce5a55bb6c3302724cc3fe ./onvif/proxy/lib/ONVIF/Device/Types/SearchState.pm +cc412aa3d15fce8b18c1ae9510c9dd2c ./onvif/proxy/lib/ONVIF/Device/Types/Frame.pm +df54410725c59759eaa9e0b90305df4a ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngineInputInfoExtension.pm +41448fe80f699d478e92edf4ea4d2beb ./onvif/proxy/lib/ONVIF/Device/Types/DateTimeRange.pm +c38dd1465085258a237d0b6ea5cee336 ./onvif/proxy/lib/ONVIF/Device/Types/CapabilityCategory.pm +ab0f6db2978b246fd7432b0b921986a0 ./onvif/proxy/lib/ONVIF/Device/Types/SupportedAnalyticsModulesExtension.pm +bcceacad0df7a023c5636ddf97c4a9f4 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11SSIDType.pm +2812bd3b431d1f9de5b4f985809f6f74 ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalance.pm +6825555b591af4ebde1314ab86cede97 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceConnectionSetting.pm +8571ba12818bff1b4db4d6ce9e855659 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourPresetDetailOptions.pm +b92e7170c54ad076ca6b8466ec8d673a ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngineConfigurationExtension.pm +c5f3e6febe8f66786d68bc5388e7878c ./onvif/proxy/lib/ONVIF/Device/Types/EFlipOptionsExtension.pm +c349c8d38aa93c655e66c6710d07f9d8 ./onvif/proxy/lib/ONVIF/Device/Types/AudioOutputConfigurationOptions.pm +7f448eec965863e07d50f2990b21fa89 ./onvif/proxy/lib/ONVIF/Device/Types/SupportedRules.pm +454b01bc39dad37804e96844c02b5ad2 ./onvif/proxy/lib/ONVIF/Device/Types/GenericEapPwdConfigurationExtension.pm +dd9605b9dd980f131659a88ebef0be39 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11PSK.pm +703247d25ac998297686fc80fc577f24 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataInput.pm +f9a080793e3cd6467a115bc07ed171d9 ./onvif/proxy/lib/ONVIF/Device/Types/OnvifVersion.pm +028ac159853aff88a53a74d918637281 ./onvif/proxy/lib/ONVIF/Device/Types/VideoOutputConfiguration.pm +2d300407112844f15eafa98c6bd17e6b ./onvif/proxy/lib/ONVIF/Device/Types/RelativeFocusOptions20.pm +236434e96c966e6469e267fde3cbd63a ./onvif/proxy/lib/ONVIF/Device/Types/MaximumNumberOfOSDs.pm +ecb166623c5b6530258a055b0bcebd9c ./onvif/proxy/lib/ONVIF/Device/Types/VideoEncoderOptionsExtension.pm +395c6f582abc36f6c3ab1dde7911de66 ./onvif/proxy/lib/ONVIF/Device/Types/Time.pm +598f21491aa3dbbfcc4ba6040f29bbf1 ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceConfigurationOptionsExtension2.pm +f312377a4f602093c984d8041fb1d734 ./onvif/proxy/lib/ONVIF/Device/Types/IntAttrList.pm +517c692be26c3da4c0332a901a4fceef ./onvif/proxy/lib/ONVIF/Device/Types/EventSubscription.pm +fede94c6098187c3d69cd23cfaeb7b1a ./onvif/proxy/lib/ONVIF/Device/Types/Dot11PSKSetExtension.pm +7cb8f3f405f1bd7688e61acc3b51eeaa ./onvif/proxy/lib/ONVIF/Device/Types/EventCapabilities.pm +377d7fa6e23f6f71aa48203dc3c02803 ./onvif/proxy/lib/ONVIF/Device/Types/TrackReference.pm +1685a55112e4aa83162c41010028ff27 ./onvif/proxy/lib/ONVIF/Device/Types/ShapeDescriptorExtension.pm +a749a0ddf683b97ed7e62d2b133ebaa2 ./onvif/proxy/lib/ONVIF/Device/Types/FindMetadataResultList.pm +7b36177073980f1c34ca5645ed9f8782 ./onvif/proxy/lib/ONVIF/Device/Types/IPv6DHCPConfiguration.pm +54f3290d8fa5b18db3170f2ba6b02ea7 ./onvif/proxy/lib/ONVIF/Device/Types/Rename.pm +e2f2dfdb56b2599a0b6faa07100bd9fc ./onvif/proxy/lib/ONVIF/Device/Types/MetadataFilter.pm +dcf9d8a817eb16e5c61ce2ff2bb61ad4 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourTypeExtension.pm +4a57775744c75cf6be031a4909cfdf88 ./onvif/proxy/lib/ONVIF/Device/Types/AudioEncoderConfigurationOptions.pm +2c8a4ed924a00b51f1d6148a1125a31c ./onvif/proxy/lib/ONVIF/Device/Types/WideDynamicMode.pm +5eb5e14df7e60a01a4832d057870eb21 ./onvif/proxy/lib/ONVIF/Device/Types/Transformation.pm +b7a19fa80b7f434db8f8ebb4d15e45f4 ./onvif/proxy/lib/ONVIF/Device/Types/IrCutFilterMode.pm +7f6ccafc174fc418f1ff5896f363403c ./onvif/proxy/lib/ONVIF/Device/Types/Dot11SignalStrength.pm +552a7a29a491c17b8fec98ce364fa4eb ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourPresetDetailOptionsExtension.pm +772f54a6c83cecd08f2bb1c931bd66fe ./onvif/proxy/lib/ONVIF/Device/Types/RotateOptionsExtension.pm +1105034866dcdfdaf42540a3cc51ac01 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingStatus20Extension.pm +ea3610eaf07b248471abb5ea9e469fab ./onvif/proxy/lib/ONVIF/Device/Types/FocusConfiguration.pm +7f5822f58d7b811521c1891ae021438c ./onvif/proxy/lib/ONVIF/Device/Types/VideoEncoding.pm +21c92bf8c99d0921a40bca981f81bb0a ./onvif/proxy/lib/ONVIF/Device/Types/Mpeg4DecOptions.pm +3c9566c0321f23da7ca7a4e0b60dc93a ./onvif/proxy/lib/ONVIF/Device/Types/ReceiverReference.pm +af40c3c1a489ec021294ad9d25f9450a ./onvif/proxy/lib/ONVIF/Device/Types/Service.pm +19f09037dab6d37019e17bb3b98dcc71 ./onvif/proxy/lib/ONVIF/Device/Types/IPv6Address.pm +67389d3e9f8008eb8be1770c517e0f11 ./onvif/proxy/lib/ONVIF/Device/Types/OSDPosConfigurationExtension.pm +5f932669b614415746510ec338b9d3c5 ./onvif/proxy/lib/ONVIF/Device/Types/DeviceIOCapabilities.pm +7971a48e53cbc3a52d84adb73b2e3bc9 ./onvif/proxy/lib/ONVIF/Device/Types/ReceiverStateInformation.pm +0709ed4fe9e0619daff97fc0fa592e37 ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceConfigurationExtension.pm +c4a7b09c1fa742256c8c30f6ec483b6a ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceSetConfigurationExtension2.pm +729a3d3a6d23037c691bebc64e92fa64 ./onvif/proxy/lib/ONVIF/Device/Types/TransportProtocol.pm +f8a4204719b3d6ac2e595cb182fa9323 ./onvif/proxy/lib/ONVIF/Device/Types/Direction.pm +8f5e464ddbf13fe87d22ecd264a11409 ./onvif/proxy/lib/ONVIF/Device/Types/IrCutFilterAutoAdjustmentOptions.pm +d733cd1097282565f4e7ed1008ae6cd7 ./onvif/proxy/lib/ONVIF/Device/Types/IrCutFilterAutoAdjustmentExtension.pm +bfd230c17f5369ffe72ec52dbb51c164 ./onvif/proxy/lib/ONVIF/Device/Types/ConfigDescription.pm +b6f7e465fa354d47a471b76d41dbc0bb ./onvif/proxy/lib/ONVIF/Device/Types/PTZStream.pm +4f2bb2b935056467890349d426f6dc7e ./onvif/proxy/lib/ONVIF/Device/Types/BehaviourExtension.pm +b68733e5ca3a3fc7398a938149b6c7a1 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11AvailableNetworksExtension.pm +29b6d0f26ccb8e9d1a9da947300bb149 ./onvif/proxy/lib/ONVIF/Device/Types/Enabled.pm +81b2354e2f72a5069848bac4cf76be46 ./onvif/proxy/lib/ONVIF/Device/Types/DurationRange.pm +91ff954b7c8a252f8273cfc5f8cb73e3 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterface.pm +20ecda9504f81fed0bb2b41b6363b2c4 ./onvif/proxy/lib/ONVIF/Device/Types/XPathExpression.pm +928889b26cde22f624ff4c6d8d400149 ./onvif/proxy/lib/ONVIF/Device/Types/IPType.pm +72edded74985ad332ca9e424a59bcd76 ./onvif/proxy/lib/ONVIF/Device/Types/ConfigurationEntity.pm +6ab4ba1c281a6f84a85cdb4dd51241ed ./onvif/proxy/lib/ONVIF/Device/Types/SystemLogType.pm +6ec7b411e65b04c2bd709bb3206d43e3 ./onvif/proxy/lib/ONVIF/Device/Types/ReverseOptionsExtension.pm +caace681369b63ba7247a3d12b48540b ./onvif/proxy/lib/ONVIF/Device/Types/ReverseMode.pm +aba97fde982a99774fdcef16018a6cae ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceSetConfigurationExtension.pm +fc7449469210fc53ef94d9204bad3dda ./onvif/proxy/lib/ONVIF/Device/Types/TrackType.pm +fc9d3be64653f37a3408af84bd92f7d0 ./onvif/proxy/lib/ONVIF/Device/Types/PTZSpeed.pm +0265e95dec66495f6246a56f8e4be25a ./onvif/proxy/lib/ONVIF/Device/Types/SearchCapabilities.pm +fcb58018c85a5be28331f71dfe14b727 ./onvif/proxy/lib/ONVIF/Device/Types/StreamSetup.pm +6694a6ca46946e7c5f998bedfe57a9ab ./onvif/proxy/lib/ONVIF/Device/Types/DateTime.pm +99da479ca108ba71011adaf219cf273f ./onvif/proxy/lib/ONVIF/Device/Types/AuxiliaryData.pm +4400c66f6db4e3a7eacccefe85ded821 ./onvif/proxy/lib/ONVIF/Device/Types/OSDImgConfiguration.pm +4a20d80aa8a6c476a407f861f1820972 ./onvif/proxy/lib/ONVIF/Device/Types/encodingStyle.pm +d9fe6a42b97bea05078efcb7dcfd71a5 ./onvif/proxy/lib/ONVIF/Device/Types/RotateOptions.pm +748b0118e674f12957299a284515f4e4 ./onvif/proxy/lib/ONVIF/Device/Types/Date.pm +9d097325a4aa09e715400b12893a99c1 ./onvif/proxy/lib/ONVIF/Device/Types/MessageDescriptionExtension.pm +a10070acd4d47fb04f6d87e42a029920 ./onvif/proxy/lib/ONVIF/Device/Types/CertificateInformation.pm +576d23aeb38c0787b746a0eb206d0e07 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSpotOptions.pm +d4f4d73013625e0e46b634116e090a90 ./onvif/proxy/lib/ONVIF/Device/Types/ActionEngineEventPayload.pm +b02deb65b85af84a7b54944909fc3dab ./onvif/proxy/lib/ONVIF/Device/Types/MoveOptions.pm +ed4f78ea39a48e5431d38e566d0de0dc ./onvif/proxy/lib/ONVIF/Device/Types/SystemDateTime.pm +ca0dc3da8ec40881fd973e0d6cf74410 ./onvif/proxy/lib/ONVIF/Device/Types/H264Options.pm +934952ebbcb0c725297704fd96319aa4 ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalanceOptions.pm +c60ce400108e97c9fbc2cdc6b50ecadc ./onvif/proxy/lib/ONVIF/Device/Types/FocusOptions20Extension.pm +a484bf2ed0c05951b9eec8e68199b281 ./onvif/proxy/lib/ONVIF/Device/Types/ClassDescriptorExtension.pm +ec12a875cb70a390b89d586e3c98b6a0 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobConfigurationExtension.pm +69c3478ea945f551c3701c2d565eac3f ./onvif/proxy/lib/ONVIF/Device/Types/MotionExpression.pm +c64e83c85bdd3e40ffd29207820dadc7 ./onvif/proxy/lib/ONVIF/Device/Types/H264Profile.pm +92e01c7ff57953ba55977d7fff07f4ee ./onvif/proxy/lib/ONVIF/Device/Types/CertificateGenerationParametersExtension.pm +0802e493bc25fed4330aa6306fa7d5b3 ./onvif/proxy/lib/ONVIF/Device/Types/AudioClassType.pm +cb42e393aa5db142c8868f8d9c50d7c9 ./onvif/proxy/lib/ONVIF/Device/Types/OSDConfigurationOptions.pm +59769211e2c4e88fb0d66819b7a9be91 ./onvif/proxy/lib/ONVIF/Device/Types/OSDTextConfiguration.pm +bef05e03c2acf8befaf7a1cb24b992c8 ./onvif/proxy/lib/ONVIF/Device/Types/AbsoluteFocus.pm +54dea5538c1d04be778fdbfec859b093 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingInformation.pm +6247c3a484b3805053661568d6cba0c3 ./onvif/proxy/lib/ONVIF/Device/Types/AudioOutputConfiguration.pm +b029cefae160a8e39aeba0b2e9dcd2ad ./onvif/proxy/lib/ONVIF/Device/Types/PaneLayout.pm +1ea2951bc25330fc0adb670d3015e5d5 ./onvif/proxy/lib/ONVIF/Device/Types/AudioDecoderConfiguration.pm +4f994866babd19e0f1358ca0d662842e ./onvif/proxy/lib/ONVIF/Device/Types/AudioDecoderConfigurationOptionsExtension.pm +30b48396226ce6ac77f737273936ccc8 ./onvif/proxy/lib/ONVIF/Device/Types/AudioSourceConfigurationOptions.pm +3405ae890a6668df1fcd6fec2801684c ./onvif/proxy/lib/ONVIF/Device/Types/OSDTextConfigurationExtension.pm +f8b4566b4e4a641d8d572e7ecc02dd24 ./onvif/proxy/lib/ONVIF/Device/Types/ProfileExtension2.pm +79fd92916e240a4bffecb92da50c63ca ./onvif/proxy/lib/ONVIF/Device/Types/AudioClassCandidate.pm +9ed3b7c6b2c2e44c12ac48a3bee351a9 ./onvif/proxy/lib/ONVIF/Device/Types/FocusStatus.pm +871f698f69b968650bb155563f0b72c5 ./onvif/proxy/lib/ONVIF/Device/Types/DNSInformationExtension.pm +3cb3daa390dbabe8436a725682133e77 ./onvif/proxy/lib/ONVIF/Device/Types/SecurityCapabilities.pm +d9d89aaf5e0a68c976023f58bfb2d82b ./onvif/proxy/lib/ONVIF/Device/Types/VideoEncoderConfiguration.pm +b21d7f3a9988aecb8abcde8334e89b86 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11StationMode.pm +bae7da0ece0427a74197f9e8c759d378 ./onvif/proxy/lib/ONVIF/Device/Types/DynamicDNSInformation.pm +5673bf1b133271cd487f6c0bd08fd74b ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobSourceExtension.pm +52ed522f2ca19b99191f5ce05c4e5564 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobStateInformationExtension.pm +df1d558a7163af2d56a4d200964d20c1 ./onvif/proxy/lib/ONVIF/Device/Types/ReplayCapabilities.pm +924a2eaec7effe51b035386d9484f24f ./onvif/proxy/lib/ONVIF/Device/Types/OSDColorOptions.pm +92452630f5b58b7443b4e1d2b75b0142 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceSetConfiguration.pm +e402901b45cd0e698922d94741e88704 ./onvif/proxy/lib/ONVIF/Device/Types/IrCutFilterAutoAdjustment.pm +e173dfd062cf07bb05b7bdd71b55f5ce ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngineConfiguration.pm +47508464895f345bc2777a5988ad999b ./onvif/proxy/lib/ONVIF/Device/Types/Vector1D.pm +f86087e22b3d060e15cb4bca60e51966 ./onvif/proxy/lib/ONVIF/Device/Types/GetRecordingJobsResponseItem.pm +48e5d92e4cb175339f79db2141a50555 ./onvif/proxy/lib/ONVIF/Device/Types/OSDReference.pm +b46527cb358745cd45914842ade1cc86 ./onvif/proxy/lib/ONVIF/Device/Types/VideoOutput.pm +ce7d14bd4476b7a4ca669e6874df4099 ./onvif/proxy/lib/ONVIF/Device/Types/BacklightCompensationOptions20.pm +be4a1f73927e7f63f19ba2412fb31f44 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSpot.pm +2e355a177ae5968dac2d44e9d3f0b690 ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsDeviceEngineConfigurationExtension.pm +b6142fad46a973bbfb93956a74232e9e ./onvif/proxy/lib/ONVIF/Device/Types/SearchScope.pm +1be6a3e68b6659cab385b9fcc2f9a0f8 ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalanceOptions20Extension.pm +764bcbf7c6e0f2fa2a58b324de8de317 ./onvif/proxy/lib/ONVIF/Device/Types/Duplex.pm +1aab17e200000aa6812c1cfdea77cc1f ./onvif/proxy/lib/ONVIF/Device/Types/HwAddress.pm +fbf88bfe0ba3c529e29fc03016ab76b2 ./onvif/proxy/lib/ONVIF/Device/Types/FindRecordingResultList.pm +a9dc9d2f65af34ee46cc82bd17162bc7 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingConfiguration.pm +c289e2728e4120b2f4d4a449de458a8f ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobStateTracks.pm +e770cd9fa4ea78f0aaf58c3ed48ec4da ./onvif/proxy/lib/ONVIF/Device/Types/AudioEncoderConfiguration.pm +b1a83950228a6dd00993fc2cdfceb76b ./onvif/proxy/lib/ONVIF/Device/Types/IPv4Address.pm +74e8851fc352cc85281b4128da6d5c37 ./onvif/proxy/lib/ONVIF/Device/Types/AutoFocusMode.pm +376f7a1bcfdf082fdf6f4066fa645942 ./onvif/proxy/lib/ONVIF/Device/Types/H264Configuration.pm +44103cab4922bb3fcd27e5609553c9aa ./onvif/proxy/lib/ONVIF/Device/Types/IrCutFilterAutoBoundaryType.pm +f1b20270bd0a3de0c28430dccad7f843 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceInfo.pm +1652796729ee787c41401ac8280ccc1e ./onvif/proxy/lib/ONVIF/Device/Types/PTZCapabilities.pm +ac2074808167460a4336b354d16b69ea ./onvif/proxy/lib/ONVIF/Device/Types/Space1DDescription.pm +4daee8406cf40677add3d0b63183d591 ./onvif/proxy/lib/ONVIF/Device/Types/JpegOptions2.pm +557016ac18ef3fa2070a033f8d48dba8 ./onvif/proxy/lib/ONVIF/Device/Types/UserLevel.pm +04de4d3367994a39417adbf3d09b0414 ./onvif/proxy/lib/ONVIF/Device/Types/PTControlDirectionOptions.pm +40fe5b5825b1db0a30d37a189ea6e074 ./onvif/proxy/lib/ONVIF/Device/Types/BacklightCompensation.pm +509d6c1ef2f3233e820b9d62a302567f ./onvif/proxy/lib/ONVIF/Device/Types/Rectangle.pm +b1f650b897ec0d51a1d0da69a7624b2a ./onvif/proxy/lib/ONVIF/Device/Types/ImagingOptions20.pm +aa877a9eeecbdca66365cbcf4f922cc4 ./onvif/proxy/lib/ONVIF/Device/Types/ReceiverCapabilities.pm +e4dc4f50c2372c93b6ed255213586b29 ./onvif/proxy/lib/ONVIF/Device/Types/BacklightCompensationMode.pm +65bf26dec0320c8fc210edc2537989cc ./onvif/proxy/lib/ONVIF/Device/Types/PTZMoveStatus.pm +98e2a6b59367dedb571d46527200733a ./onvif/proxy/lib/ONVIF/Device/Types/ImagingOptions20Extension3.pm +0aa795fb2405b22a81b93aca37e833ff ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourPresetDetail.pm +b3198f293a4a6ed69b0c4caf48124d71 ./onvif/proxy/lib/ONVIF/Device/Types/VideoOutputConfigurationOptions.pm +57d2a31c2f3546ea67b860f8ab8f475f ./onvif/proxy/lib/ONVIF/Device/Types/ColorspaceRange.pm +a87e3c0fc9d9f9967db0ce820977cb7b ./onvif/proxy/lib/ONVIF/Device/Types/Domain.pm +0afa9e75e5dcdbde9591f2f94eb73be9 ./onvif/proxy/lib/ONVIF/Device/Types/OSDConfiguration.pm +cd61175f951f104efcab2b9fd25b0a99 ./onvif/proxy/lib/ONVIF/Device/Types/FocusConfiguration20Extension.pm +8f4ce5067f40efde3c2d8c749f0e4c0b ./onvif/proxy/lib/ONVIF/Device/Types/FloatAttrList.pm +53a1aa0fc0a3c1bc0bd0c320c2808aad ./onvif/proxy/lib/ONVIF/Device/Types/TimeZone.pm +b202f9070a58e734a062799b7b9bf22d ./onvif/proxy/lib/ONVIF/Device/Types/IPv6NetworkInterface.pm +b4a63ec05cb2b0dc1beda11d2559134e ./onvif/proxy/lib/ONVIF/Device/Types/DeviceCapabilitiesExtension.pm +23811606764a165786ed5b5a1fefb359 ./onvif/proxy/lib/ONVIF/Device/Types/TrackAttributesExtension.pm +5fae7fc3ac07f2307def43c35a8a9a7f ./onvif/proxy/lib/ONVIF/Device/Types/FocusOptions20.pm +335cace1c761c35f8142f24010f64bd7 ./onvif/proxy/lib/ONVIF/Device/Types/Config.pm +24317d6caa7a5582db4ef34ab8b2f5e5 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourExtension.pm +4ee73a8f19133a5fa9fac6ef1d46f749 ./onvif/proxy/lib/ONVIF/Device/Types/AudioDecoderConfigurationOptions.pm +ca6a8f227199286c0f3976f56d36df70 ./onvif/proxy/lib/ONVIF/Device/Types/ImageStabilizationExtension.pm +660cf6028d54e3a6c85b3262113cc211 ./onvif/proxy/lib/ONVIF/Device/Types/IntRange.pm +3ba907d337e5ac1e2422bd4f35db854e ./onvif/proxy/lib/ONVIF/Device/Types/IntRectangleRange.pm +9d694cb3d5334e8b7e0aa6e2955a6e1e ./onvif/proxy/lib/ONVIF/Device/Types/ImagingOptions20Extension2.pm +12ba39552c07993e0336bafe265c53d5 ./onvif/proxy/lib/ONVIF/Device/Types/PrefixedIPv6Address.pm +8cd35b1e6747819ce5cf077a2da9ef41 ./onvif/proxy/lib/ONVIF/Device/Types/PTZStatusFilterOptions.pm +0432639017c7bc0cc7da40d6fccd53d9 ./onvif/proxy/lib/ONVIF/Device/Types/IPv6ConfigurationExtension.pm +283cd2d9d9cec77bacb7c22e7cf0a85f ./onvif/proxy/lib/ONVIF/Device/Types/PTZStreamExtension.pm +dd2c29b245acaf02f2768d6776886bff ./onvif/proxy/lib/ONVIF/Device/Types/VideoResolution.pm +7b14e2657ff53225da8b1ad7828ec729 ./onvif/proxy/lib/ONVIF/Device/Types/Behaviour.pm +174e8d9e8d46bd0ad088b31187368019 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSupported.pm +acab9b548d65df42441118d318a1bb16 ./onvif/proxy/lib/ONVIF/Device/Types/RotateExtension.pm +be00de6203320c8ae684f90eb9cee1e1 ./onvif/proxy/lib/ONVIF/Device/Types/SourceReference.pm +53b8525695850d952c6aea9eb771834c ./onvif/proxy/lib/ONVIF/Device/Types/RotateMode.pm +47510880d19f79a47cb7c0899e6f2e82 ./onvif/proxy/lib/ONVIF/Device/Types/AudioAnalyticsStreamExtension.pm +7f16bc144eaa3016b8c04eaf57dad862 ./onvif/proxy/lib/ONVIF/Device/Types/Fault.pm +21296d46b45128e143a855131ef13979 ./onvif/proxy/lib/ONVIF/Device/Types/VideoAnalyticsStream.pm +456f8b8f9c2fa943dc01f52d208d36c4 ./onvif/proxy/lib/ONVIF/Device/Types/PaneOptionExtension.pm +4f237f6ad6d756021bb7a6f0d422e140 ./onvif/proxy/lib/ONVIF/Device/Types/User.pm +bcdd539c6456cbb3283f7b4cc6644248 ./onvif/proxy/lib/ONVIF/Device/Types/Mpeg4Options.pm +40683c0c36b41294889552646b229135 ./onvif/proxy/lib/ONVIF/Device/Types/Merge.pm +fc2eb814cdda573a0e33271198a2a7e7 ./onvif/proxy/lib/ONVIF/Device/Types/WideDynamicRangeOptions.pm +27078af4c216253a36795c083c719457 ./onvif/proxy/lib/ONVIF/Device/Types/FocusMove.pm +c14d52fb6f3ecee4b9ee32f0e20c3a2f ./onvif/proxy/lib/ONVIF/Device/Types/MetadataConfigurationOptions.pm +5bdc6ee2002bb6b9e665e0439bb1148e ./onvif/proxy/lib/ONVIF/Device/Types/ColorDescriptor.pm +efa07dd3da802b1861b1df3854b8456e ./onvif/proxy/lib/ONVIF/Device/Types/NetworkProtocolExtension.pm +52a27a0f89fe70c35d5d07bd73e78d48 ./onvif/proxy/lib/ONVIF/Device/Types/MessageExtension.pm +a66173fd9d7e786665318993583b3bfc ./onvif/proxy/lib/ONVIF/Device/Types/EFlipMode.pm +dee9b7b59830248cf4ebbb6f4750dda8 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourState.pm +b697c339b2350259f4d1d1732ec4d514 ./onvif/proxy/lib/ONVIF/Device/Types/PTZFilter.pm +d7ec4617905affa33d9ef5c45cd18cf9 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobStateInformation.pm +a90a9c478c168d3cbf785faa356e07a0 ./onvif/proxy/lib/ONVIF/Device/Types/IPv4NetworkInterface.pm +8b2204dd153fcf04f7f223e445485ea0 ./onvif/proxy/lib/ONVIF/Device/Types/HostnameInformation.pm +482b5f64a18ede70f3c9a2520937f68d ./onvif/proxy/lib/ONVIF/Device/Types/RuleEngineConfigurationExtension.pm +cb89dcbf70ba688d7cbfc1d67ea528da ./onvif/proxy/lib/ONVIF/Device/Types/TopicNamespaceLocation.pm +980108209a95c53d71f2f71a507cb7bd ./onvif/proxy/lib/ONVIF/Device/Types/Dot11AuthAndMangementSuite.pm +eaf6663c8b02c8f08eb7f5dfbd73af69 ./onvif/proxy/lib/ONVIF/Device/Types/SystemLogUriList.pm +0dcff7b290878e466bcc0f7412503f25 ./onvif/proxy/lib/ONVIF/Device/Types/VideoEncoderOptionsExtension2.pm +9b4c79f774e5c92bea175d6193ad049d ./onvif/proxy/lib/ONVIF/Device/Types/BackupFile.pm +e101af7d8c4d97b3a6a4c192c86d026b ./onvif/proxy/lib/ONVIF/Device/Types/NetworkZeroConfiguration.pm +914d1ea61e50be8970180729461be3eb ./onvif/proxy/lib/ONVIF/Device/Types/PolylineArray.pm +3f22f45ecb8c08adf02e0df221139e3e ./onvif/proxy/lib/ONVIF/Device/Types/Dot11PSKSet.pm +4a2812f0af9499fc4b89072f77a478fa ./onvif/proxy/lib/ONVIF/Device/Types/LayoutOptionsExtension.pm +9eb562be5501d90fdb05164c34a28e42 ./onvif/proxy/lib/ONVIF/Device/Types/Receiver.pm +524e30dc997296e0cdaa4a77ec300b53 ./onvif/proxy/lib/ONVIF/Device/Types/SecurityCapabilitiesExtension.pm +29d33aa034da04afaa8a016bc03bacce ./onvif/proxy/lib/ONVIF/Device/Types/ImagingSettingsExtension202.pm +d7fe9d440f3295f892850e55dd064045 ./onvif/proxy/lib/ONVIF/Device/Types/EngineConfiguration.pm +e55c692cbbd4f5fe41bceb0f3ab0b987 ./onvif/proxy/lib/ONVIF/Device/Types/SystemCapabilities.pm +c55371aa1ad45d1bfdb08ec5d430c62b ./onvif/proxy/lib/ONVIF/Device/Types/IntRectangle.pm +3fbbd09f2991df13cbf075e087a60d20 ./onvif/proxy/lib/ONVIF/Device/Types/ClassType.pm +4735789d551b014edc538cab6b642358 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkZeroConfigurationExtension2.pm +41b7a78ee2ccda8676331ea2ed543bd1 ./onvif/proxy/lib/ONVIF/Device/Types/FocusConfiguration20.pm +df41d6baec3927ba5c471c6ae62b6de4 ./onvif/proxy/lib/ONVIF/Device/Types/PTZConfigurationOptions2.pm +11e72870c9137089a059ed53bb030276 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataInputExtension.pm +76cdf90bcd3e418946508edb2fcdeac7 ./onvif/proxy/lib/ONVIF/Device/Types/CertificateUsage.pm +8cecc91d34d38a938c34129f5965a50a ./onvif/proxy/lib/ONVIF/Device/Types/AudioEncoding.pm +95821d3f43d92edf47cfc4d96b4e7e6e ./onvif/proxy/lib/ONVIF/Device/Types/PTZConfigurationOptions.pm +9de9dfaaa3d8a35bd5956a38fbc38763 ./onvif/proxy/lib/ONVIF/Device/Types/AudioOutput.pm +e5bb963c86c1ac1ed58d824889a64d0a ./onvif/proxy/lib/ONVIF/Device/Types/AppearanceExtension.pm +6ba36d1f4f9d6065519d42a29d9ace54 ./onvif/proxy/lib/ONVIF/Device/Types/ColorOptions.pm +36d852f900092e84b16ff80944d67289 ./onvif/proxy/lib/ONVIF/Device/Types/PTZNodeExtension2.pm +fe5ddfa224300bfa53db0dc9d1ddbca3 ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalanceOptions20.pm +989fbc0dad32eaf3efd52c86a84a0314 ./onvif/proxy/lib/ONVIF/Device/Types/CertificateWithPrivateKey.pm +a9cca26088a9bab127a78e71be8dbaaa ./onvif/proxy/lib/ONVIF/Device/Types/VideoOutputExtension.pm +deea7a6865127ab2d82df84f0e5dfb85 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingSettings20.pm +45cbac82e95fa447034ca61ae20cc797 ./onvif/proxy/lib/ONVIF/Device/Types/RealTimeStreamingCapabilities.pm +2b3dd5d655c65fdd46d7631b7a4de2fb ./onvif/proxy/lib/ONVIF/Device/Types/ClassDescriptor.pm +7d46ba77ebc448c40d73dfdb3f666a1e ./onvif/proxy/lib/ONVIF/Device/Types/PTZConfigurationExtension2.pm +e9a24ac99fcf7bb7fbb4337bca7b91a3 ./onvif/proxy/lib/ONVIF/Device/Types/TLSConfiguration.pm +1a2a275ecbf846e29950df95f0a6aa2f ./onvif/proxy/lib/ONVIF/Device/Types/Dot1XConfiguration.pm +c46a954f23b84474030019c40577238e ./onvif/proxy/lib/ONVIF/Device/Types/PTZNode.pm +ba4f9fd9887e27cce20bd63a6ca656fe ./onvif/proxy/lib/ONVIF/Device/Types/VideoSource.pm +2b153afc0c9ef1e516dd361ef0a850c2 ./onvif/proxy/lib/ONVIF/Device/Types/SystemDateTimeExtension.pm +b3cc4d9a5dbaf141cc8e8ff3de90427e ./onvif/proxy/lib/ONVIF/Device/Types/RealTimeStreamingCapabilitiesExtension.pm +430f9dd2737a267e0b2e74412b10a152 ./onvif/proxy/lib/ONVIF/Device/Types/ExposureOptions.pm +fe8d1555493fec8e2b3079d3a246669d ./onvif/proxy/lib/ONVIF/Device/Types/FindEventResultList.pm +f8ce5b1b8bd7e26a1a7d524f4c0b66b3 ./onvif/proxy/lib/ONVIF/Device/Types/VideoAttributes.pm +6d6265fb3dde65dd16e4fd5117a25065 ./onvif/proxy/lib/ONVIF/Device/Types/ImageStabilizationOptionsExtension.pm +972fb2a5765b45c8776e6ae2c078b505 ./onvif/proxy/lib/ONVIF/Device/Types/SystemCapabilitiesExtension.pm +c3e8b06abc2b25d23d3e9423aed74376 ./onvif/proxy/lib/ONVIF/Device/Types/OSDConfigurationExtension.pm +db84c760f75c9f720660a0511e73f405 ./onvif/proxy/lib/ONVIF/Device/Types/Vector2D.pm +b7db6a63b104403261deae720534d98c ./onvif/proxy/lib/ONVIF/Device/Types/VideoEncoderConfigurationOptions.pm +5f808828db1d5e547d38ce94704205d0 ./onvif/proxy/lib/ONVIF/Device/Types/IrCutFilterAutoAdjustmentOptionsExtension.pm +f933dfb57652d654a21ce1d8883e8fde ./onvif/proxy/lib/ONVIF/Device/Types/CertificateInformationExtension.pm +58539774e445dce3d7712b7ec2817ab5 ./onvif/proxy/lib/ONVIF/Device/Types/ConfigDescriptionExtension.pm +41c0b023a04902d50bb6bda73ac2ab73 ./onvif/proxy/lib/ONVIF/Device/Types/DigitalInput.pm +fc0a7ead3760d81231203d53ffbd4512 ./onvif/proxy/lib/ONVIF/Device/Types/SourceIdentification.pm +1e1cdb4cd570951c04a5fce9f5c098dd ./onvif/proxy/lib/ONVIF/Device/Types/IANA_IfTypes.pm +4b47cdd7878dd0749dc6548f6507c580 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceLink.pm +5a0823f66bd56f872536a729d4baa266 ./onvif/proxy/lib/ONVIF/Device/Types/PaneConfiguration.pm +20718fde3f322c1252ee906933a8f482 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11AvailableNetworks.pm +0eed18bd02f98fa7ff1df7c7cc078756 ./onvif/proxy/lib/ONVIF/Device/Types/IPAddressFilter.pm +2e04f2f57d280d5a99ee83fd84614d50 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobState.pm +37c812ec8ca1ac654076cc4fe7281725 ./onvif/proxy/lib/ONVIF/Device/Types/Profile.pm +a18ab88e1b16eda263ad7ebf757d7f07 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPositionFilter.pm +3d0407104d7cf5a4eddf415c34b5d840 ./onvif/proxy/lib/ONVIF/Device/Types/RuleEngineConfiguration.pm +1ddd814555dab01a336c6df5e4a50ec5 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceConfigPriority.pm +c3dc65047461fc97dce73ce017a4df25 ./onvif/proxy/lib/ONVIF/Device/Types/SourceIdentificationExtension.pm +b3d409a69596aa7dea129c3116db97c6 ./onvif/proxy/lib/ONVIF/Device/Types/OSDTextOptions.pm +9a63f6464187e282b135333593edc5a5 ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceConfigurationOptionsExtension.pm +6188ff40d783db0866b2dd23d51f227e ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsStateInformation.pm +ced96cf26f3581330f2d1d11873aeee9 ./onvif/proxy/lib/ONVIF/Device/Types/ClassDescriptorExtension2.pm +52de920d1b963f9495b2a37d84b1a4f1 ./onvif/proxy/lib/ONVIF/Device/Types/ExposureMode.pm +459ee3341d19f2216260ec4f02e7620c ./onvif/proxy/lib/ONVIF/Device/Types/ReceiverMode.pm +1dad8929f47bb2b6748de976a07a7687 ./onvif/proxy/lib/ONVIF/Device/Types/ReplayConfiguration.pm +f023cc95020fc92c7e9c5930e0f95236 ./onvif/proxy/lib/ONVIF/Device/Types/ContinuousFocus.pm +3b8c864f6cd53a0e56d3de44d7bfc347 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStartingCondition.pm +f3d27488a7f6e98c6d16feb0e224fa1d ./onvif/proxy/lib/ONVIF/Device/Types/ShapeDescriptor.pm +ad13ba4874d55b3abdd6276e05c1b54c ./onvif/proxy/lib/ONVIF/Device/Types/OSDImgConfigurationExtension.pm +86969c42dbb75f01e3422091004ae243 ./onvif/proxy/lib/ONVIF/Device/Types/OSDPosConfiguration.pm +6147f4779de281b1cbabf0f308e4e33e ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStartingConditionOptionsExtension.pm +fb41c122ade37a57cf9fabd770adf473 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingSummary.pm +6b4277c6b3da82d6ab3145687be8fd98 ./onvif/proxy/lib/ONVIF/Device/Types/ModeOfOperation.pm +a59725881893c4f1886a167b24ef1d1b ./onvif/proxy/lib/ONVIF/Device/Types/BacklightCompensationOptions.pm +ff3e160789c31c480be6dc84b53ba611 ./onvif/proxy/lib/ONVIF/Device/Types/Appearance.pm +1b061750cbec7e95c7c95ed5dd161496 ./onvif/proxy/lib/ONVIF/Device/Types/ItemList.pm +20f2709bc593de2513f04a856c4ba705 ./onvif/proxy/lib/ONVIF/Device/Types/DNSName.pm +280b764f4dafae30a38ce914cff6b676 ./onvif/proxy/lib/ONVIF/Device/Types/H264DecOptions.pm +c83d52478348922d39c5506611e09056 ./onvif/proxy/lib/ONVIF/Device/Types/FrameExtension.pm +38d4e0bbaf477cb5f6d5c5c15b565117 ./onvif/proxy/lib/ONVIF/Device/Types/WideDynamicRange.pm +57b6a1b881b483d486aef98a72e60d7e ./onvif/proxy/lib/ONVIF/Device/Types/IPv6Configuration.pm +ca118102cfe90abdb470b3ab1df17cae ./onvif/proxy/lib/ONVIF/Device/Types/ColorCovariance.pm +68f492708c2bb5fd18a46c2f398d8f0d ./onvif/proxy/lib/ONVIF/Device/Types/OSDColorOptionsExtension.pm +8179c9db388780229cef2eb8c2d9f932 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStartingConditionOptions.pm +2da6ce483ec8290cac3f2d1d95435f9c ./onvif/proxy/lib/ONVIF/Device/Types/NTPInformationExtension.pm +9266556b603462c9158e8054c322969f ./onvif/proxy/lib/ONVIF/Device/Types/AudioSource.pm +b7d372f036c14675eb3ad8ab98aa7620 ./onvif/proxy/lib/ONVIF/Device/Types/PolygonConfiguration.pm +86f7d18d9bcd8babf7397ce7e730afe2 ./onvif/proxy/lib/ONVIF/Device/Types/G711DecOptions.pm +11992edc8f515921cd132ad29730d66b ./onvif/proxy/lib/ONVIF/Device/Types/IPv6NetworkInterfaceSetConfiguration.pm +eee67a6ae874ddd1ea72028ec43ecd46 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11Status.pm +4552cedd184eff4141c618ab23e54ef3 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourDirection.pm +62615597d2bf3d2d1cd6784d9c9a1f52 ./onvif/proxy/lib/ONVIF/Device/Types/Dot1XConfigurationExtension.pm +63865ae466bbbbdfbb5e27f92736f779 ./onvif/proxy/lib/ONVIF/Device/Types/DNSInformation.pm +77c760915a3d1aa5192c3f57aa167fa1 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStatus.pm +eb8b3a08a3e54236a8e764493c1ff2ae ./onvif/proxy/lib/ONVIF/Device/Types/ReverseOptions.pm +28b657ec114b098ff543f21362518b71 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingCapabilities.pm +8e8012c6bc11d00a7d25b5331070e95d ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngineInputInfo.pm +1d21f21b298c9edb7bad46be64fa72dd ./onvif/proxy/lib/ONVIF/Device/Types/SystemLog.pm +6f7edeb07f50e06655d85339694b779e ./onvif/proxy/lib/ONVIF/Device/Types/HostnameInformationExtension.pm +41bea7665e3d9edde605c493db0a11d1 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobTrack.pm +0439d49fa750d0bb45525e65d11ba5c7 ./onvif/proxy/lib/ONVIF/Device/Types/FindMetadataResult.pm +5d4e8ea5eb51d6ce4579b40680341024 ./onvif/proxy/lib/ONVIF/Device/Types/FloatRange.pm +bfb41faaf450738b241b9262dddbb63d ./onvif/proxy/lib/ONVIF/Device/Types/ImagingOptions.pm +c720ac3a4939b1bbecfb3c988ac5f9eb ./onvif/proxy/lib/ONVIF/Device/Types/Mpeg4Profile.pm +5bf7a0fa18e5c34ecb0820e2e7621bef ./onvif/proxy/lib/ONVIF/Device/Types/ImagingSettingsExtension203.pm +8b324cdf7289f2c5908f3601ef19d55a ./onvif/proxy/lib/ONVIF/Device/Types/ImageStabilizationMode.pm +3fc30f9f959d02dbc2b68cbfc6ee9344 ./onvif/proxy/lib/ONVIF/Device/Types/DeviceServiceCapabilities.pm +8d9b39672f5a89086ce829bf57099857 ./onvif/proxy/lib/ONVIF/Device/Types/RelayOutputSettings.pm +72c1a0d79b4d40263a24add731f90d64 ./onvif/proxy/lib/ONVIF/Device/Types/FocusOptions.pm +e549b881520801fcbffd7a95a6604912 ./onvif/proxy/lib/ONVIF/Device/Types/FindPTZPositionResultList.pm +7268da1fed01131beb4138f4b58cbca2 ./onvif/proxy/lib/ONVIF/Device/Types/DynamicDNSType.pm +e204394c33a75db7d87faac7615d912c ./onvif/proxy/lib/ONVIF/Device/Types/PropertyOperation.pm +d68d6180b84ff91be9d18420968e32d6 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataStream.pm +891a09afdbfc49ec3ff99b21404f8b74 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataStreamExtension.pm +0a5093b80dcd900f2daffe40915609f7 ./onvif/proxy/lib/ONVIF/Device/Types/Dot3Configuration.pm +9d97d7dd8933ca3463d388e814aad579 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingStatus.pm +c112e0949fda8a0bf3eb473752fb8cc6 ./onvif/proxy/lib/ONVIF/Device/Types/ObjectExtension.pm +ec812876ff8d7619a53928253370ee57 ./onvif/proxy/lib/ONVIF/Device/Types/Polyline.pm +d1597e68af96652270dd707471ad3708 ./onvif/proxy/lib/ONVIF/Device/Types/GetRecordingsResponseItem.pm +eb800570fe5cbc16834469aa76cbd844 ./onvif/proxy/lib/ONVIF/Device/Types/StreamType.pm +496d19cbb93e3337894ab4503d8c102e ./onvif/proxy/lib/ONVIF/Device/Types/FindEventResult.pm +bb1d1088785ce8e1c3fc7ed548e69818 ./onvif/proxy/lib/ONVIF/Device/Types/LayoutExtension.pm +8708e5861dc8212538d20efe79b16ce5 ./onvif/proxy/lib/ONVIF/Device/Types/PaneLayoutOptions.pm +3a580fd8354cd135a722d9a7db945c5a ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsState.pm +579e98b22a661ebbd379e73910961338 ./onvif/proxy/lib/ONVIF/Device/Types/EAPMethodConfiguration.pm +3e0549db322a574ab9dcfda2c625375d ./onvif/proxy/lib/ONVIF/Device/Types/TrackAttributes.pm +68e9d3a4b9dbdcf1cdd797a36d1a4b65 ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsDeviceEngineConfiguration.pm +2f50eb7b0f717991f6619da0bc443fbf ./onvif/proxy/lib/ONVIF/Device/Types/MediaCapabilities.pm +9c49b168e88149770f52b28d761d16ba ./onvif/proxy/lib/ONVIF/Device/Types/Object.pm +a817fce581488c0920646cc78d9e9933 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkCapabilitiesExtension.pm +bba0228c9f39edab2b9f9993bbbcfe2a ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourStatusExtension.pm +525a4ffe68f824bfc0c8fa9b9980b4ce ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourOptions.pm +f0c6321b11af7564665cc9c07c84df86 ./onvif/proxy/lib/ONVIF/Device/Types/ProfileCapabilities.pm +f1a33c310778b3439f66b615551caf54 ./onvif/proxy/lib/ONVIF/Device/Types/AudioSourceConfiguration.pm +d64980aa7d927f193b8c5ad889ee4f3b ./onvif/proxy/lib/ONVIF/Device/Types/FactoryDefaultType.pm +65058a38fa5a9d9246a562431cafe7d1 ./onvif/proxy/lib/ONVIF/Device/Types/PTControlDirectionExtension.pm +2f7abb614416689cceb955fbe3016003 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourSupportedExtension.pm +ba29e80d85c7dea497ec6bf17d81ed16 ./onvif/proxy/lib/ONVIF/Device/Types/OSDType.pm +97ea10fe71adb25537246b5fb22862cd ./onvif/proxy/lib/ONVIF/Device/Types/CertificateStatus.pm +fb790843b65b658785fe577b1c7b5e1e ./onvif/proxy/lib/ONVIF/Device/Types/Header.pm +3c7d2c3ddc9470bb345e31b18956b221 ./onvif/proxy/lib/ONVIF/Device/Types/PrefixedIPv4Address.pm +d977aa7036ed935693078a9dc540bd7b ./onvif/proxy/lib/ONVIF/Device/Types/IOCapabilitiesExtension2.pm +ac6ee4229c293905526a0639b7d13b6c ./onvif/proxy/lib/ONVIF/Device/Types/DiscoveryMode.pm +4039b0322c7b62b1158386eeb02a6e57 ./onvif/proxy/lib/ONVIF/Device/Types/SearchScopeExtension.pm +a11a3642713d9a1c3ef8bda52f0237b0 ./onvif/proxy/lib/ONVIF/Device/Types/OSDTextOptionsExtension.pm +67da146b95cd82706d297ed554bcee66 ./onvif/proxy/lib/ONVIF/Device/Types/Color.pm +9180018e17bad7af17bdbbdd67ef64a7 ./onvif/proxy/lib/ONVIF/Device/Types/OtherType.pm +74e4e03566b9186866615fd87bbd1571 ./onvif/proxy/lib/ONVIF/Device/Types/AudioDescriptor.pm +ff3aa19fa54c858d90ea1cfeda0b9c82 ./onvif/proxy/lib/ONVIF/Device/Types/base64Binary.pm +c3527595113e3463e28cb33460c72a08 ./onvif/proxy/lib/ONVIF/Device/Types/IOCapabilitiesExtension.pm +54e09355be60b0af55bb9fb0bb723042 ./onvif/proxy/lib/ONVIF/Device/Types/H264Options2.pm +fa334767daaae18cf938f3194ad3cf55 ./onvif/proxy/lib/ONVIF/Device/Types/PolylineArrayConfiguration.pm +44cf3c892ef12d0bc78ef200a0784091 ./onvif/proxy/lib/ONVIF/Device/Types/ContinuousFocusOptions.pm +ed1c8b61954b67eb127deb9480223bbf ./onvif/proxy/lib/ONVIF/Device/Types/G726DecOptions.pm +65a6a6620cd4a8636a80ee3a73635db3 ./onvif/proxy/lib/ONVIF/Device/Types/WhiteBalance20Extension.pm +7b2c0b455b25aa34b22b6cdd839d33a0 ./onvif/proxy/lib/ONVIF/Device/Types/FocusStatus20.pm +4972324ec7c3572b1e854e99e1a22ee6 ./onvif/proxy/lib/ONVIF/Device/Types/IOCapabilities.pm +795d65b8a8ead41e51a27de7abbe6905 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkProtocolType.pm +bd503459d6db32ef573c3c89d8f0553e ./onvif/proxy/lib/ONVIF/Device/Types/Include.pm +e736a328a66e9cbf2b014328767de3b9 ./onvif/proxy/lib/ONVIF/Device/Types/ItemListDescription.pm +e24393d6fa4d59adb5a29833254adfa7 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingStatus20.pm +a485965ab11a979517f69ac0703fe7c5 ./onvif/proxy/lib/ONVIF/Device/Types/MulticastConfiguration.pm +001cbfd8ad8eea26610bd61e6509f596 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataConfigurationExtension.pm +24a655de2237a6ba9676b00d59e5fd51 ./onvif/proxy/lib/ONVIF/Device/Types/ActionEngineEventPayloadExtension.pm +185e0918db9a0ea17ad261b32d01e914 ./onvif/proxy/lib/ONVIF/Device/Types/MediaUri.pm +171af1aafd537b20536184e9bb760263 ./onvif/proxy/lib/ONVIF/Device/Types/PTZVector.pm +7f866539b3ee7b543b6aeb2de75bd1c0 ./onvif/proxy/lib/ONVIF/Device/Types/MoveOptions20.pm +267f0140c48bb44afe8922a1de82b1a8 ./onvif/proxy/lib/ONVIF/Device/Types/PolylineArrayExtension.pm +53a941bb3ec2d2e3a8572a75da271201 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingStatus.pm +3390eee171e5b67dff71fb6b094c16cb ./onvif/proxy/lib/ONVIF/Device/Types/IntList.pm +885e312cb4a2773dec5390102a09a911 ./onvif/proxy/lib/ONVIF/Device/Types/Capabilities.pm +d3ce1926eb1f1965392c81b2eb3cbaaa ./onvif/proxy/lib/ONVIF/Device/Types/PTZConfiguration.pm +dd22b1b4b8ad1cb4dc4ddabb4377e06e ./onvif/proxy/lib/ONVIF/Device/Types/Certificate.pm +5d9518b3a55a9201b19d9497bea1f642 ./onvif/proxy/lib/ONVIF/Device/Types/AttachmentData.pm +ab1f54dfa7703d39686ffd99d773bd5b ./onvif/proxy/lib/ONVIF/Device/Types/ReferenceToken.pm +4e81a1114c0eb0f68cbe04d75019f773 ./onvif/proxy/lib/ONVIF/Device/Types/AnyHolder.pm +a173affc3d8b624b11165ecbf7f953f1 ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobConfiguration.pm +4fa6beed6e215bf7f3208509a7596b6e ./onvif/proxy/lib/ONVIF/Device/Types/RelayMode.pm +cce1afa057b7d87390d1c520265ca572 ./onvif/proxy/lib/ONVIF/Device/Types/ImagingSettingsExtension20.pm +9ec3b43437d1361af37a8749311b7709 ./onvif/proxy/lib/ONVIF/Device/Types/UserExtension.pm +bb7bb7d04992eb82d68aed3319fa9be0 ./onvif/proxy/lib/ONVIF/Device/Types/IPv4Configuration.pm +2895460a5a5cfbfb495abed94de28c56 ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsDeviceExtension.pm +cf9fd3bcb9a5e9e3775ea4af1e6f493e ./onvif/proxy/lib/ONVIF/Device/Types/SystemCapabilitiesExtension2.pm +5d089d3baefa94092138dfd980179346 ./onvif/proxy/lib/ONVIF/Device/Types/MiscCapabilities.pm +7e8db8afa88509c9fd64cccdb83c703d ./onvif/proxy/lib/ONVIF/Device/Types/IPAddress.pm +b83c7a895a9044eeff804f4e436797af ./onvif/proxy/lib/ONVIF/Device/Types/CapabilitiesExtension.pm +892e22036b14da1f56d030fb03be276d ./onvif/proxy/lib/ONVIF/Device/Types/TrackInformation.pm +a5bd703aeee3a8343c33c3e2197dddd7 ./onvif/proxy/lib/ONVIF/Device/Types/SecurityCapabilitiesExtension2.pm +0469cfc81b40f81efd415cbaec9543a1 ./onvif/proxy/lib/ONVIF/Device/Types/CellLayout.pm +40347c71fb738b3a5fa2e0da9e3351dc ./onvif/proxy/lib/ONVIF/Device/Types/PTZStatus.pm +23c9234a50ba56a95de2f975caba4b93 ./onvif/proxy/lib/ONVIF/Device/Types/FocusStatus20Extension.pm +b93f4c20e290cd12268992d3b9f33941 ./onvif/proxy/lib/ONVIF/Device/Types/VideoDecoderConfigurationOptionsExtension.pm +09cd4230250e1be443ad5082cafb6ded ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsCapabilities.pm +4654a45cecc9d594d6ef537bfd012e86 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkGateway.pm +eb12bc2e4eb8ea5acbb62d4355c001d9 ./onvif/proxy/lib/ONVIF/Device/Types/ProfileExtension.pm +740323ae5681616bba913b2d28c7f5ee ./onvif/proxy/lib/ONVIF/Device/Types/BinaryData.pm +c6a1059bf459cbcf34ba346a62a1eaaa ./onvif/proxy/lib/ONVIF/Device/Types/AudioAttributes.pm +e0363c918d89d608a5e7fd9be3127ee4 ./onvif/proxy/lib/ONVIF/Device/Types/ReceiverState.pm +c0f5895bece32957d4ef957015f62e07 ./onvif/proxy/lib/ONVIF/Device/Types/TransformationExtension.pm +34faeeb3dd1ac67c6f31511653fb2466 ./onvif/proxy/lib/ONVIF/Device/Types/hexBinary.pm +54b3e259035222994e26ac0332d5eed0 ./onvif/proxy/lib/ONVIF/Device/Types/Exposure.pm +b3763ac2f2504474c7dd325b15ad665a ./onvif/proxy/lib/ONVIF/Device/Types/ExposurePriority.pm +129563e906d30035e8aef927499b6365 ./onvif/proxy/lib/ONVIF/Device/Types/EFlipOptions.pm +ae87a6dcf2cbfe6e9f03eaab863b3e15 ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsDeviceCapabilities.pm +d4c462b2c939ad5683f6c857fdb961c3 ./onvif/proxy/lib/ONVIF/Device/Types/FindPTZPositionResult.pm +12cbc75ce501a8b3032170d878680ed3 ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngineControl.pm +ad25a99a60b0a10ccf50c92783007ec7 ./onvif/proxy/lib/ONVIF/Device/Types/LayoutOptions.pm +b023d822432ae6cc4e0301814b7055e2 ./onvif/proxy/lib/ONVIF/Device/Types/ColorDescriptorExtension.pm +5f2c8d5a0ea8870e6bfec89d82525258 ./onvif/proxy/lib/ONVIF/Device/Types/NetworkCapabilitiesExtension2.pm +f9af12d78f3bb23467c7aa639e55d582 ./onvif/proxy/lib/ONVIF/Device/Types/RelayOutput.pm +05e898c2e1d220dcddf4f74b5392cb10 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPresetTourOperation.pm +d54a5ccfe7bc9632efa448326769b48d ./onvif/proxy/lib/ONVIF/Device/Types/NetworkInterfaceExtension2.pm +bec34cd5ee4d124804b27479e3799f4b ./onvif/proxy/lib/ONVIF/Device/Types/PTZNodeExtension.pm +846cdc3834ac11735c294672d5e533e4 ./onvif/proxy/lib/ONVIF/Device/Types/JpegOptions.pm +8b6574c37ccd707f8243fef646d206ab ./onvif/proxy/lib/ONVIF/Device/Types/NetworkHostType.pm +9acfba64cb61788d8cb0585b9ce8aaa1 ./onvif/proxy/lib/ONVIF/Device/Types/DynamicDNSInformationExtension.pm +8b7a5f3466701b001c74e4b24396a655 ./onvif/proxy/lib/ONVIF/Device/Types/CertificateGenerationParameters.pm +7bb52a0a75af4354a77cbb5deb227a41 ./onvif/proxy/lib/ONVIF/Device/Types/ObjectTreeExtension.pm +be258710b28a187dafd6a4dafb58cea3 ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngine.pm +a7d2441ad34d2c796fc1784e74ac835e ./onvif/proxy/lib/ONVIF/Device/Types/MotionInCells.pm +27715d16e700602303f727bd7d1b4ac5 ./onvif/proxy/lib/ONVIF/Device/Types/Rotate.pm +0d88d57a019ff52d948854fd6ceea6dd ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobMode.pm +73275e4c8677c66f5bab2091e7bd35e8 ./onvif/proxy/lib/ONVIF/Device/Types/RemoteUser.pm +8d7930f57dbcc9cbbcd3c336327a994f ./onvif/proxy/lib/ONVIF/Device/Types/PTControlDirection.pm +b0bc1d37bbe9afb24bbb8f8bfbe0af8a ./onvif/proxy/lib/ONVIF/Device/Types/Reverse.pm +3b28b02835303e6fd18d18fe16935d17 ./onvif/proxy/lib/ONVIF/Device/Types/EAPMethodTypes.pm +57c1f2f1298a4394c8bf2b71dbf141fa ./onvif/proxy/lib/ONVIF/Device/Types/PTZConfigurationExtension.pm +a3dbc36706631d09af28378560bea797 ./onvif/proxy/lib/ONVIF/Device/Types/AudioEncoderConfigurationOption.pm +ffdbcadf6e9f4d84bb8333e44577c7c1 ./onvif/proxy/lib/ONVIF/Device/Types/VideoAnalyticsStreamExtension.pm +4f3f309613962d166da3ac11fc29d329 ./onvif/proxy/lib/ONVIF/Device/Types/RelativeFocus.pm +9d653980297f6b8ae685f220ca5eaf2d ./onvif/proxy/lib/ONVIF/Device/Types/Mpeg4Configuration.pm +55750e6acb3e05631a045f495a323fde ./onvif/proxy/lib/ONVIF/Device/Types/ObjectId.pm +7e786e62c2122d6f5c24de160544a478 ./onvif/proxy/lib/ONVIF/Device/Types/DeviceEntity.pm +6457c2fb50bccde84552d9c3699b2ded ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobStateSource.pm +084033083081c1276e20e18a1b6345ef ./onvif/proxy/lib/ONVIF/Device/Types/VideoAnalyticsConfiguration.pm +8b4083cce5aa8b0c0ac2bb878c042d35 ./onvif/proxy/lib/ONVIF/Device/Types/IPAddressFilterExtension.pm +6958813bce2f2bec03a70ded10223418 ./onvif/proxy/lib/ONVIF/Device/Types/JobToken.pm +5a77c75358e74be8384c62b4732bf2f4 ./onvif/proxy/lib/ONVIF/Device/Types/MetadataAttributes.pm +bd098acaef207ccf4085cc90aaf0fca0 ./onvif/proxy/lib/ONVIF/Device/Types/Body.pm +0e10e2f147838df3faff441f609f4e5a ./onvif/proxy/lib/ONVIF/Device/Types/AudioAnalyticsStream.pm +07e67ed933b73fdcb1e453363d818e5d ./onvif/proxy/lib/ONVIF/Device/Types/AnalyticsEngineInput.pm +68b1a84aab5b952287d9b49747ed1c32 ./onvif/proxy/lib/ONVIF/Device/Types/MotionExpressionConfiguration.pm +a2dca53ece3664f04381006a27bc497b ./onvif/proxy/lib/ONVIF/Device/Types/JpegDecOptions.pm +815ec19b0905d1f40bddc90b90621a20 ./onvif/proxy/lib/ONVIF/Device/Types/ItemListDescriptionExtension.pm +453434e140229e716430c706d7f6f8a6 ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceExtension2.pm +1ed8fad6c46a64ea1a173c4f5b9e88c0 ./onvif/proxy/lib/ONVIF/Device/Types/PTZSpacesExtension.pm +a6a6de2556a79c518db3f25ff91ef929 ./onvif/proxy/lib/ONVIF/Device/Types/Exposure20.pm +220eb133a988cea2ead6ab0372426d24 ./onvif/proxy/lib/ONVIF/Device/Types/Description.pm +da552979fb3eac0eca4803f55ec3445d ./onvif/proxy/lib/ONVIF/Device/Types/Vector.pm +cd53d7d938aa5986ad6a75c2f8f6d4c6 ./onvif/proxy/lib/ONVIF/Device/Types/EapMethodExtension.pm +7e17288730828a324ca989c5fa274b22 ./onvif/proxy/lib/ONVIF/Device/Types/WideDynamicRange20.pm +1bf773281c3839abdf0ca49a77868892 ./onvif/proxy/lib/ONVIF/Device/Types/OSDImgOptionsExtension.pm +6dc3fb632e75dfee0175743e52414c90 ./onvif/proxy/lib/ONVIF/Device/Types/ItemListExtension.pm +2e60361035bff22cfa7c78052da2683f ./onvif/proxy/lib/ONVIF/Device/Types/RecordingJobStateTrack.pm +689e740206ef30b747cfdc8cc235c1d6 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11Cipher.pm +3e66501f9827623fe6c9d9ba54d32c8e ./onvif/proxy/lib/ONVIF/Device/Types/MediaCapabilitiesExtension.pm +b84f1a9dfae4245a1a5ec7ffe3ce99ec ./onvif/proxy/lib/ONVIF/Device/Types/Envelope.pm +e272a2a8f00d95bf80ff570976f06ec1 ./onvif/proxy/lib/ONVIF/Device/Types/SupportInformation.pm +57c5008c3b5eb491cc6e490e0a7c7ca3 ./onvif/proxy/lib/ONVIF/Device/Types/ReceiverConfiguration.pm +d66dc836d75e1001908d1794b8162256 ./onvif/proxy/lib/ONVIF/Device/Types/VideoSourceConfigurationOptions.pm +99cc7e9a0e4b3989e4eaf9e0dfeff35b ./onvif/proxy/lib/ONVIF/Device/Types/Scope.pm +f9ce84938311c85d2aa1552e63ad8b13 ./onvif/proxy/lib/ONVIF/Device/Types/PTZPreset.pm +a1f0f2b02734141a36ee721ad20f560c ./onvif/proxy/lib/ONVIF/Device/Types/AudioClassDescriptor.pm +ed99335c550aac5bdc1d23dcdacd2167 ./onvif/proxy/lib/ONVIF/Device/Types/Space2DDescription.pm +0cb4a9ddad321bd83b8ffee186a72fd1 ./onvif/proxy/lib/ONVIF/Device/Types/StringAttrList.pm +a85306d012b67c5fe33e6a6b038e21c2 ./onvif/proxy/lib/ONVIF/Device/Types/Dot11Configuration.pm +4c52250e864c7f53316495e145d7125e ./onvif/proxy/lib/ONVIF/Device/Types/NetworkZeroConfigurationExtension.pm +a76fa6657bda0355c090ca0a5c89a33f ./onvif/proxy/lib/ONVIF/Device/Types/OSDColor.pm +cb65724eb2a15b0d5671164ad63d75db ./onvif/proxy/lib/ONVIF/Device/Types/SupportedAnalyticsModules.pm +a99cd976f7207bfbffd5afa9e2765eb5 ./onvif/proxy/lib/WSDiscovery/Elements/EndpointReference.pm +a46d35fb8cdba0c981590e1a9c5066d6 ./onvif/proxy/lib/WSDiscovery/Elements/Action.pm +9c2f4f6083464587c7b9dca0979282a7 ./onvif/proxy/lib/WSDiscovery/Elements/ProbeMatches.pm +5cd2d523642fbc1260d53c193a834959 ./onvif/proxy/lib/WSDiscovery/Elements/Scopes.pm +50f8c1bd36872b906ce6589f0e41bd6f ./onvif/proxy/lib/WSDiscovery/Elements/ResolveMatches.pm +624cd0431e7f5bcdf9f650ac99847033 ./onvif/proxy/lib/WSDiscovery/Elements/Hello.pm +737bd1e6e0bd6b5962efb84cda061a59 ./onvif/proxy/lib/WSDiscovery/Elements/Types.pm +6f84072d723189c892951b2188821195 ./onvif/proxy/lib/WSDiscovery/Elements/Security.pm +c9a61cd62ed5db53e28257ad6d3e9f29 ./onvif/proxy/lib/WSDiscovery/Elements/ReplyTo.pm +4b2ca1ef09ee65ffbb25d01986825547 ./onvif/proxy/lib/WSDiscovery/Elements/ProblemIRI.pm +0f2a02c676bc261f3f25ef0c6e55d57e ./onvif/proxy/lib/WSDiscovery/Elements/Resolve.pm +0a8a5c4ea7723d6bbeae17879b95b446 ./onvif/proxy/lib/WSDiscovery/Elements/ReferenceParameters.pm +dfd21d968d8497e968eba296797bdc21 ./onvif/proxy/lib/WSDiscovery/Elements/AppSequence.pm +f6050d9ab665b978cd354bfea3b43336 ./onvif/proxy/lib/WSDiscovery/Elements/Sig.pm +c516066078fe847f15475d20beb1cb41 ./onvif/proxy/lib/WSDiscovery/Elements/Metadata.pm +51f0af94eed09a47c211b250b0b8dee1 ./onvif/proxy/lib/WSDiscovery/Elements/FaultTo.pm +fd50487a03a72d0a69eb4d62e41d6af3 ./onvif/proxy/lib/WSDiscovery/Elements/RetryAfter.pm +5b262140ca5d48b167b27cedb11beda2 ./onvif/proxy/lib/WSDiscovery/Elements/ProblemHeaderQName.pm +ecfeee5efde1ad9489205e5e6874c9e6 ./onvif/proxy/lib/WSDiscovery/Elements/Probe.pm +cc91ab27e1901e1856fb9206705f2321 ./onvif/proxy/lib/WSDiscovery/Elements/XAddrs.pm +162da15edec72bc4aac9ac59562e074f ./onvif/proxy/lib/WSDiscovery/Elements/MetadataVersion.pm +ad77efedd4ed6f6f4a193eba57982e2e ./onvif/proxy/lib/WSDiscovery/Elements/RelatesTo.pm +fad2558ae61b53f99df4d83ddd54e7ce ./onvif/proxy/lib/WSDiscovery/Elements/MessageID.pm +fb3eba850cba67500ce8a0f17b4df6c5 ./onvif/proxy/lib/WSDiscovery/Elements/SupportedMatchingRules.pm +bc7497b3d774e606254567429338230e ./onvif/proxy/lib/WSDiscovery/Elements/ProblemAction.pm +af49813ac4c536b533c0f78f04c9a421 ./onvif/proxy/lib/WSDiscovery/Elements/To.pm +b52a9701606cf9ce94d041a34dc0abda ./onvif/proxy/lib/WSDiscovery/Elements/Bye.pm +85646d61ca8f982232029d01632adb4f ./onvif/proxy/lib/WSDiscovery/Elements/From.pm +83c66283471a520b8e1f06ea1e9f6c15 ./onvif/proxy/lib/WSDiscovery/Attributes/Id.pm +235fa0dde47d15ebb8e613abe45d42e5 ./onvif/proxy/lib/WSDiscovery/Attributes/IsReferenceParameter.pm +ced2172e113da40b9a3c03b198003ed6 ./onvif/proxy/lib/WSDiscovery/Interfaces/WSDiscovery/WSDiscoveryPort.pm +78fc1964f715f70f9028790ba10d0e5a ./onvif/proxy/lib/WSDiscovery/Typemaps/WSDiscovery.pm +99efab93db46f9ba282f397fb752d8a7 ./onvif/proxy/lib/WSDiscovery/Types/FaultCodeType.pm +5c25979bc03d3cb0068f367ca017262e ./onvif/proxy/lib/WSDiscovery/Types/ByeType.pm +8e6b820a156e58190f972dd8cb5eb0b2 ./onvif/proxy/lib/WSDiscovery/Types/ProbeType.pm +eec4fa65769c89a6d50d012cfe9fc438 ./onvif/proxy/lib/WSDiscovery/Types/ResolveType.pm +58b92900e5a6d309cc32c63fcdad69de ./onvif/proxy/lib/WSDiscovery/Types/AttributedUnsignedLongType.pm +7867cfc39a297a7379bdab2509906972 ./onvif/proxy/lib/WSDiscovery/Types/ReferenceParametersType.pm +821942e36c471c70cbdf3c8682bac6d8 ./onvif/proxy/lib/WSDiscovery/Types/RelationshipType.pm +eb6c2155210868b492284a7230b8899a ./onvif/proxy/lib/WSDiscovery/Types/HelloType.pm +67c9c805ab3b01edd81a9bc23e60d196 ./onvif/proxy/lib/WSDiscovery/Types/AttributedURIType.pm +f9d62e0a1dd193eb3b52fe1c69b92c73 ./onvif/proxy/lib/WSDiscovery/Types/FaultCodesType.pm +f2d6a8cd66d746642c62fe8450f30b67 ./onvif/proxy/lib/WSDiscovery/Types/AttributedQNameType.pm +0a6c11c1b00ed1d143974c87d75cc8c8 ./onvif/proxy/lib/WSDiscovery/Types/AppSequenceType.pm +efe084a084bf814291bd11bec2d58a8b ./onvif/proxy/lib/WSDiscovery/Types/ScopesType.pm +b325d5e05a1fb92e94495e8457b137cd ./onvif/proxy/lib/WSDiscovery/Types/MetadataType.pm +61b3d95d46a7b278f0745f397fc36e63 ./onvif/proxy/lib/WSDiscovery/Types/QNameListType.pm +224595697735d0c1d9623b3b6b3ecf4e ./onvif/proxy/lib/WSDiscovery/Types/ProbeMatchType.pm +32a0459a9aa7b53bf66d8d93546fbcc3 ./onvif/proxy/lib/WSDiscovery/Types/SigType.pm +6699aba1a5fa29d0b91f57fbc5778990 ./onvif/proxy/lib/WSDiscovery/Types/FaultCodesOpenEnumType.pm +2d50ff4f56517692bfa2ec8a9414bebb ./onvif/proxy/lib/WSDiscovery/Types/RelationshipTypeOpenEnum.pm +b81453e82f943385152d8cdc3fe0d857 ./onvif/proxy/lib/WSDiscovery/Types/ProbeMatchesType.pm +8e713c3218c4ad1c1282ded553b91b94 ./onvif/proxy/lib/WSDiscovery/Types/SecurityType.pm +7544d347644b76ca4c5cb366eac098a5 ./onvif/proxy/lib/WSDiscovery/Types/ProblemActionType.pm +a8a1c0e022777af409155a4b2e2695a9 ./onvif/proxy/lib/WSDiscovery/Types/RelatesToType.pm +69df36e2c882e324faff0b24b4261318 ./onvif/proxy/lib/WSDiscovery/Types/ResolveMatchType.pm +160e3fbf346b35f422c473b14103ae9d ./onvif/proxy/lib/WSDiscovery/Types/ResolveMatchesType.pm +f427023c3036641cc1f6deed477530a0 ./onvif/proxy/lib/WSDiscovery/Types/UriListType.pm +97abe5d9f567a9a6f1aa37686db6bb41 ./onvif/proxy/lib/WSDiscovery/Types/EndpointReferenceType.pm +94127d00817939d0de5926db8e0a4d0f ./onvif/proxy/lib/WSDiscovery/Types/FaultCodeOpenType.pm +cbe82dbf0cc4a50ac03bbf54706dae7c ./onvif/proxy/Makefile.PL +eca6a95ad91d5f4bd44d48e521dd8eaa ./onvif/proxy/CMakeLists.txt +9e94dc93bb41a382caefb1d8034530bb ./onvif/modules/lib/WSSecurity/SecuritySerializer.pm +35f53d12af1b43e4b99a44f14bc0fc1d ./onvif/modules/lib/ONVIF/Deserializer/MessageParser.pm +a505d93d4f21a82793c1b20beaca7072 ./onvif/modules/lib/ONVIF/Deserializer/XSD.pm +22abbf38f03befb8c03c6a59e221ae1b ./onvif/modules/lib/ONVIF/Serializer/SOAP12.pm +33507e88110a30a473bb07d06228b38d ./onvif/modules/lib/ONVIF/Serializer/Base.pm +b58ce88d3de57a72188f6a5a9bda14bb ./onvif/modules/lib/ONVIF/Serializer/SOAP11.pm +c80ac73a1f043b39a34f217fe5deff12 ./onvif/modules/lib/ONVIF/Client.pm +8c4aa4ed3ad3cd1bab00f498c7022b9d ./onvif/modules/lib/WSDiscovery/TransportUDP.pm +cbe82dbf0cc4a50ac03bbf54706dae7c ./onvif/modules/Makefile.PL +7bd64d6650f267f1abdeb94f0502ac89 ./onvif/modules/CMakeLists.txt +446e35ad234a96c2850131340f07bf4b ./onvif/.gitignore +eca821c8d8781c98a1bcae44ab361c13 ./onvif/doc/onvifprobe2b.jpg +0a8781f2991a23e67a89d42dae6103e5 ./onvif/doc/onvifprobe1b.jpg +0bbd4dbee7ac174cd37d3aa727fc8e88 ./onvif/doc/monitor2b.jpg +3be7a20a8b9f83978dcc9b9e01322360 ./onvif/doc/onvifprobe1a.jpg +94e7b0bfe8555247898ef7df5d0ac9de ./onvif/doc/monitor.jpg +d1d5cebbbbdf8a8f19edef531b89a1d5 ./onvif/doc/onvifprobe2a.jpg +af14b3f32ccd07721352432ce7c9c35c ./onvif/doc/monitor2a.jpg +8503afad711f066b734beb4accd47280 ./onvif/CMakeLists.txt +62c802b6c3afcd19a21512d86689abce ./docs/userguide/cameracontrol.rst +c0d5b78ee3bb0d9f81d820ee41c4192a ./docs/userguide/viewevents.rst +e902c73dc4a9e1b50d519911622b1ace ./docs/userguide/options/options_web.rst +b6c52188d0ff765b51a9211536effad6 ./docs/userguide/options/options_email.rst +8fa801cd0afe0e142ed05ca2a035f79e ./docs/userguide/options/options_display.rst +a7bbdeb100a7332e35a124b92760f6c0 ./docs/userguide/options/options_network.rst +3ca37dcdeb91defb6ac06b8686594394 ./docs/userguide/options/options_logging.rst +10a0d433509c209b3f3921538d042bb0 ./docs/userguide/options/options_users.rst +f92dd19032b17a7c0d645f144ddd0df1 ./docs/userguide/options/options_system.rst +ee318c3181ff82a7c7890d9cffee48a8 ./docs/userguide/options/options_eyezm.rst +9fe0e060ec75d4b8e3a5f8167e269bbf ./docs/userguide/options/options_bw.rst +5a2ec26b2bf24e908cf83439772c71e7 ./docs/userguide/options/options_images.rst +20591923694123b762b07c3deec6bdb5 ./docs/userguide/options/options_paths.rst +0e80d6d25d2fe289c06f072ea0a83468 ./docs/userguide/options/options_phonebw.rst +68f71269f0ffd93d6cd75bbb832e54d7 ./docs/userguide/options/options_config.rst +2a6b4c55b246c4bc1b6494d5fc46a903 ./docs/userguide/options/options_x10.rst +8b95c0034df34a47a87e42ae726029f6 ./docs/userguide/options/options_upload.rst +56afc0e2a5b6ae98576579f82d6e3bb4 ./docs/userguide/options/images/Options_X10.png +24b9f2a70da1d17b5e7949a325b6e7fa ./docs/userguide/options/images/Options_System.png +32b32301c3bf4295ff2c3216426cf4d1 ./docs/userguide/options/images/Options_Config.png +6e22af092526862137ca8796a34035d9 ./docs/userguide/options/images/Options_images.png +f651efd7d8a98e6ae5d9a7adade08f19 ./docs/userguide/options/images/Options_web.png +a77fa39b42a9683fddad9eebb8faaf90 ./docs/userguide/options/images/Options_Logging.png +86298c0ceb09c437fd0098ae0a7b75c0 ./docs/userguide/options/images/Options_BW.png +96719dd0c20c940d88825fe3871a33c1 ./docs/userguide/options/images/Options_Paths.png +5fd009720ee0fadf1b558cfc0e491026 ./docs/userguide/options/images/Options_Network.png +45379c5e4dddd375b6e66f35137a9447 ./docs/userguide/options/images/Options_BW_Phone.png +90645f54de1263ce9e892968c2a0b948 ./docs/userguide/options/images/Options_upload.png +b9e9785b6795bb61db6039000f0adb9b ./docs/userguide/options/images/Options_eyezm.png +67854a6582417ae809266c1283373cb3 ./docs/userguide/options/images/Options_Users.png +ba55f09a02ec55c8adebfc7d99709464 ./docs/userguide/options/images/Options_Display.png +373c3619ba0ac8a25d487637d9447cc6 ./docs/userguide/options/images/Options_email.png +80e98a33367d781645d5d1cbecf13a4b ./docs/userguide/viewmonitors.rst +d570036606f0d900e6bb90c35cc4898c ./docs/userguide/options.rst +a3a30a7db39759675b32709d83615bde ./docs/userguide/controlmonitor.rst +112c6c4259dbc52c4e5899a14d8e43cc ./docs/userguide/definezone.rst +fd29c6f32dd7ed12fccc4a666abdc0b3 ./docs/userguide/introduction.rst +5e27632f901c4649c80999440204a750 ./docs/userguide/gettingstarted.rst +da3cedcd3639901443f4353ed91ab148 ./docs/userguide/monitor/images/Monitor_source_curl.png +356596880bbfa568197efec922e839ab ./docs/userguide/monitor/images/Monitor_Misc.png +d8a99a462bb3bd876775de7d727c3969 ./docs/userguide/monitor/images/Monitor_buffers.png +f25d6be2cd63c29b6356c56d634689cf ./docs/userguide/monitor/images/Monitor_timestamp.png +93c6a009de67f1036805fae4dd8e839d ./docs/userguide/monitor/images/Monitor_source_file.png +eb7b4f49d09e4e8c5c34135876b1c79c ./docs/userguide/monitor/images/Monitor_source_remote.png +d271ae4ed989479314c20e4912d80aab ./docs/userguide/monitor/images/Monitor_general.png +5b8bfe5d384533e1cbdc154136a45a54 ./docs/userguide/monitor/images/Monitor_preset.png +6461cf2cd87ab9c99e195c65190ebf9a ./docs/userguide/monitor/images/Monitor_Source_local.png +4e8d9863eacb4416586ee502400e0abc ./docs/userguide/monitor/images/Monitor_Source_ffmpeg.png +dde1846f1d73f1a930ec4a915d821315 ./docs/userguide/monitor/images/Monitor_source_libvlc.png +2ff37307487317e84d9e3d22b56b083a ./docs/userguide/mobile.rst +3c39111a4bb5a3fdaf4bc6dc3ad4ca05 ./docs/userguide/logging.rst +eab8c19e4e8d597c9a77bd8e46f2916b ./docs/userguide/filterevents.rst +0470df29e190730b201b0216cf096e63 ./docs/userguide/components.rst +3e383b060a7c6a85dded7391f443fffd ./docs/userguide/definemonitor.rst +02dd531de2a59e579914a623db5b14cf ./docs/userguide/index.rst +f9de6074f6931f9be235e011aed17fec ./docs/userguide/images/Console.png +a07db18347b4315910e594c390e390db ./docs/installationguide/centos.rst +0cfefff4698b70bbe0dff40dd326e51e ./docs/installationguide/debian.rst +1eea48b4843a4643ab083d93d3dbb65b ./docs/installationguide/fedora.rst +61758887e2871020629f560037d8ce0d ./docs/installationguide/index.rst +1d55c4fe5fb061f851ea300f4ebcbfb2 ./docs/installationguide/ubuntu.rst +3e944fa8357ea69d2b477a02029784c2 ./docs/faq.rst +f8952f4049ffd285f500fa3eee40c3a3 ./docs/conf.py +f83fa3b4dcb6df1f153020734f187756 ./docs/README.md +91fe248d68010c7ce5dff181e73951c3 ./docs/contributing.rst +243665582618ce00e8e75e63e8037ec4 ./docs/api.rst +18da6bbf5d106539b28d12d28dac100a ./docs/Makefile +e01d03652466ce4eeaa64593a52099f9 ./docs/index.rst +357b34eed6e16cd1f77d89666da57dfa ./docs/_templates/hiddenglobaltoc.html +3b77e5fd6696547edc2b7a6a145bf504 ./umutils/nextimeconfigure.zm +558d857f259125badaf2cc4f3c7f1200 ./src/zm_logger.h +fd6be595e1082a5369958a2b0f08e168 ./src/zm_ffmpeg.h +11cce9783aabef06b8a67c83c5698e0a ./src/zm_videostore.h +e69b7a54405624d15fbd8d8786d384e0 ./src/zm_exception.h +2aa690690a17c46e624a34e720a303f9 ./src/zm_coord.h +7c434aa4503fd753a2a22320cfa74490 ./src/zm_logger.cpp +111332466aa21fdb4833a6dd3156124f ./src/zmstreamer.cpp +15b581ae0ab7a10d19c21c718fc7af4c ./src/zm_remote_camera_rtsp.cpp +8496a3baeb5cc2bbab25a8dd1810a5ed ./src/zm_thread.cpp +fdd908541b4f3312858e00377fd548e9 ./src/zm_image_analyser.cpp +2d060d71dc2570574ae3c027262917d2 ./src/zm_db.cpp +d6d7a57c1dacdff6dbb1e05cb55550a6 ./src/Makefile.am +b9ece7b96f8ee41246692b55c621e76e ./src/zm_rtp.cpp +925f6c5ac42134c40d2a68f53ca95a4b ./src/zm_rtp_ctrl.cpp +608cf7026a51b1199de76ebab1bc62b3 ./src/zm_utils.h +823fb8941cf6a1ec8a98bb50fa15e409 ./src/zm_poly.cpp +d358d38240dd17836ae18444a13517c1 ./src/zm_timer.cpp +cc479cb109896c7eabc7ec26cf7a7cfa ./src/zm_user.cpp +a300ce45afc0b7fff0e309fdce17c26a ./src/zm_buffer.h +00ca1445323e36d22343a532452355f6 ./src/zm_local_camera.cpp +8ebf329891f6d9525402442c5460a55b ./src/zm_videostore.cpp +16eb91fa329b7f7f2e563b914f7ac544 ./src/zm_db.h +4fbef7431ed776a6514beff1339e718f ./src/zm_libvlc_camera.h +4089d9ea742cd0c29a63a5ad83d51604 ./src/zm_utils.cpp +2e1204c131fee6eff4c548151e3d1fa7 ./src/zm_ffmpeg_camera.cpp +371d69f5c20081d669333d0f534c19ac ./src/zm_zone.h +7e88f3cf2eb136c0e6242042f3a1072c ./src/zmfix.cpp +ca8325df6c2fb643b7309e143e05dd63 ./src/zm_event.cpp +20846ea8388a14393f0d7a68ca5c324f ./src/zm_config.h.in +eedd87c3ed2782e342b080d9bbb60793 ./src/zm_curl_camera.h +e78883f20f1b94e34e29d211df0732da ./src/zm_libvlc_camera.cpp +34240930ad7988c3e8191a18c6107d23 ./src/zm.cpp +20cf29730432da2ed478324d9e6d5779 ./src/zm_sdp.h +6f5adf7eec0fa8212e0555ea7b0443cd ./src/zm_signal.cpp +122f1984e5807c19a03e408f8e34f7e5 ./src/zm_rtp_source.h +a1385981ade3cfe4012caf962884f734 ./src/zm_curl_camera.cpp +e10eea32d5971b2e5ba570c4a476cab2 ./src/zm_camera.cpp +f0c98a507f16ff7f29e6dba0ada59306 ./src/zm_remote_camera_http.cpp +53b561d4139c9559ed1123b8b691e559 ./src/zm_mpeg.cpp +289edd9e6a518d71437574ee58eeec8a ./src/zm_poly.h +01c7ec5977c6342e33564578c22df56c ./src/zm_user.h +217800e94433b549e044c55cd20718cb ./src/zm_remote_camera.h +11ccdf19c28de970b4648feabf0c5c7b ./src/zm_rtsp_auth.h +fcf9e027264344c3cf45a01240deeb63 ./src/zm_fifo.h +4c38480a4dd50dbae2147f063cda53d1 ./src/zm_camera.h +becf851928ee37eb80dc78409196614d ./src/zm_regexp.h +8738340d189efe68eebcef9c4f305c23 ./src/zm_file_camera.h +cec7ae7350fde1d1a7c878a7fcc56668 ./src/zm_image.cpp +80895763b53d6851df4190a8aa99fb6c ./src/zm_threaddata.cpp +c5adc6032b3dc06f38d16b3538a5ecd6 ./src/zm_remote_camera_rtsp.h +b1eccd7eb5bc91235f0806a114be0a29 ./src/zmc.cpp +831242150b1c201f14ab6ac4b78779b1 ./src/zmf.h +3756394985f956047d7168f45f9ea730 ./src/zm_stream.cpp +1c769c51dc1870444e703ba7e6378e2b ./src/zm_rtp_source.cpp +0fd73fc75df1c7c373d8b2e25ddc380b ./src/zm_signal.h +f20ea73d50ffc351738c257a479a1eb3 ./src/zm_rtp.h +cd2cb63a91a49ad4de8968c78ee9aec3 ./src/jinclude.h +2936701066999e476f72beb097270798 ./src/zm_image_analyser.h +2b1286e6d2d9c5ebf4ab4f318b3fe491 ./src/zm_config.cpp +3aec54ffaf40c8b36d27713529c516f7 ./src/zm_buffer.cpp +bd2dde9b127c58397bfcc84a8eb9d732 ./src/zm_event.h +4589c73baea3cb3e6276ab588d2e367e ./src/zm.h +7773b4d976f6c62b2708df6e109a9095 ./src/zm_rtp_data.cpp +cd749097f4794d4779b92d373f4e393a ./src/zm_rtp_data.h +60d5ab60f82e0adb3d95aa2c0e1e629b ./src/zm_jpeg.h +763cedc85e94dcdc10b4c4ccdf2f03bb ./src/zm_time.cpp +7a6576b49e7315659e89efef7e5f6007 ./src/zma.cpp +ed06acfba8623ec221af79ecb15bc8e0 ./src/zm_fifo.cpp +6a6537db40458e34bc5910d7e21bf17f ./src/zm_timer.h +533582ae52d3830775f1bec81b2fe6dd ./src/zm_time.h +7368c756744aecdeef44b1762a4998d6 ./src/zm_jpeg.cpp +927ff5819a0fa92cd69033bb037604e4 ./src/zm_rtsp_auth.cpp +9cfd2160849677e456ecbf6c10995975 ./src/zm_comms.h +38332214339fc9b4e21973a87eb7c233 ./src/zm_comms.cpp +982b0ea73d266d9108861c1977ba1d1d ./src/zm_box.cpp +57ae77d207f0050bb4b6f44faef121a7 ./src/zm_regexp.cpp +c2769c9d34769fb44cf341c083964c94 ./src/zm_thread.h +86e550e5391f5e91ff11f850ca03588c ./src/zm_box.h +4031bc25cd7e6adcc0b6706e47f3d9b2 ./src/zm_mpeg.h +e67bd8ac5f6b3aa353dc5a9a64c4ea8a ./src/zm_rtsp.cpp +e2cac3b2fadb8d6b44b03788c7c8b3d9 ./src/zm_remote_camera_http.h +319967a72a672ad9e8da56d864e5188e ./src/zm_ffmpeg.cpp +003b1090b66b2bcff9d2f37fde841b46 ./src/zms.cpp +d40607e3e909ca2fae020367ae698e8e ./src/zm_monitor.cpp +4f82fc1f895807f53c1c5dc97f8793d0 ./src/zm_monitor.h +115994bf4cc01cfbc79ee6f9458ffb39 ./src/zm_file_camera.cpp +9a342bf3c41730982aaf06184ebd879e ./src/zm_sendfile.h +9b54586550184ed3bd06b1db4c0c3cad ./src/zmf.cpp +e2a4058d2c633191d0aabdde1da906dd ./src/zm_rtsp.h +5eb0daf6f6bedaf1e79008bb403c51d0 ./src/zm_rtp_ctrl.h +22eceeb94f62ff3ad85cebc85c6d40f6 ./src/zm_coord.cpp +9168ca027ba34557b1aac3e60dc6700a ./src/zm_font.h +14da3205800799008023719b8d8c3213 ./src/zm_remote_camera.cpp +30ef739b6824e0a6d2b27bc6b3d6c5c2 ./src/zm_sdp.cpp +38ae781c38ba41cacff1b0b4b4d60661 ./src/zm_rgb.h +ab2776fc93d7486ec02c584d0d5e5879 ./src/zm_ffmpeg_camera.h +06f71222f01afc1f75ecd9d22571eb20 ./src/zmu.cpp +f7b0619610911ba0e5d183180959d3f7 ./src/zm_video.cpp +f79245b1b5bb07c9d01361e6e5a980f8 ./src/zm_local_camera.h +15257f4a5b37024340c8f1e6ea8cdf83 ./src/zm_zone.cpp +139f0ecf1b074a001b59d066f524c124 ./src/zm_stream.h +25f790d2c8a9349764af921a79033eb9 ./src/zm_exception.cpp +7bc215dcd99b375b2183c7b0873f3925 ./src/zm_mem_utils.h +7c58b881637f25f6b96607817e13a4b3 ./src/zm_video.h +a0a7e8cd316b7860b7170163ca4ad8e5 ./src/zm_image.h +128faca72acc5f16fad89e2ecf57ad03 ./src/CMakeLists.txt +0e84ceff801e4b4df57152c872fa6a0d ./zm.conf.in +ebf0599b68b131c40ddcce51135f84cb ./AUTHORS +850781b1a6ab6fb7ade4e7fea53df98e ./bootstrap.sh +e8359862139499468edceddaea790df5 ./configure +6afe490bc9be80daa397584b6285076b ./NEWS +10141c166677c0874f995f99966dcaef ./zmconfgen.pl.in +82a2a0217d299c1b907c80850ba280c0 ./.gitmodules +63ad52527233833e26d03936af7ad06f ./CMakeLists.txt +431df482c3bf47bec0f11ef5d7c63dac ./acinclude.m4 diff --git a/distros/ubuntu1504_cmake_split_packages/changelog b/distros/ubuntu1504_cmake_split_packages/changelog new file mode 100644 index 000000000..37a592b94 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/changelog @@ -0,0 +1,95 @@ +zoneminder (1.28.1+1-trusty-SNAPSHOT2015061201) vivid; urgency=medium + + * translation fixes + * Merge angular api + * now build using cmake + * use split up packaging + + -- Isaac Connor Fri, 12 Jun 2015 11:22:36 -0400 + +zoneminder (1.28.1+1-trusty-SNAPSHOT2015030201) trusty; urgency=medium + + * maybe fix for RTSP Basic Auth + * Also remove dependency on netpbm + + -- Isaac Connor Mon, 02 Mar 2015 11:25:59 -0500 + +zoneminder (1.28.1+1-utopic-SNAPSHOT2015022301) utopic; urgency=medium + + * Big merge of onvif support and some fixes. + + -- Isaac Connor Mon, 23 Feb 2015 19:45:45 -0500 + +zoneminder (1.28.0+1-trusty-SNAPSHOT2015021201) trusty; urgency=medium + + * add mysql-client-5.6 as a dependency instaed of mysql-client. + + -- Isaac Connor Fri, 13 Feb 2015 09:35:13 -0500 + +zoneminder (1.28.0+1-trusty-SNAPSHOT2015011101) trusty; urgency=medium + + * small changes + + -- Isaac Connor Fri, 12 Dec 2014 16:38:36 -0500 + +zoneminder (1.28.0+1-utopic-SNAPSHOT2014112001) utopic; urgency=medium + + * Various fixes and developments since 1.28.0. Includes Digest-Auth for HTTP and better for RTSP + + -- Isaac Connor Thu, 20 Nov 2014 10:57:57 -0500 + +zoneminder (1.28.0-trusty) trusty; urgency=medium + + * Release + + -- Isaac Connor Fri, 17 Oct 2014 09:25:55 -0400 + +zoneminder (1.27.99+1-trusty-SNAPSHOT2014101401) trusty; urgency=medium + + * Several PR merges in big push for 1.28.0 + + -- Isaac Connor Tue, 14 Oct 2014 09:28:29 -0400 + +zoneminder (1.27.99+1-trusty-SNAPSHOT2014092601) trusty; urgency=medium + + * style updates and db fixes for database logging filters + + -- Isaac Connor Fri, 26 Sep 2014 14:44:45 -0400 + +zoneminder (1.27.99+1-trusty-SNAPSHOT2014090801) trusty; urgency=medium + + * several segfault fixes for local cameras + + -- Isaac Connor Mon, 08 Sep 2014 16:56:57 -0400 + +zoneminder (1.27.99+1-trusty-SNAPSHOT2014090701) trusty; urgency=medium + + * Fix segfaults for local cameras, also now includes the systemd support patch + + -- Isaac Connor Sun, 07 Sep 2014 17:19:01 -0400 + +zoneminder (1.27.99+1-trusty-SNAPSHOT2014082102) trusty; urgency=medium + + * Fix UI inputs for v4l multibuffer and captures per frame + + -- Isaac Connor Thu, 21 Aug 2014 12:03:31 -0400 + +zoneminder (1.27.99+1-trusty-SNAPSHOT2014082101) trusty; urgency=medium + + * fall back to Config table values for V4l MultiBUffer and Captures Per Frame + * add mention of monitor page settings for thse in the config table + + -- Isaac Connor Thu, 21 Aug 2014 10:04:46 -0400 + +zoneminder (1.27.99+1-precise-SNAPSHOT2014080601) precise; urgency=medium + + * improve error messages + * Make zmupdate re-run the most recent patch so that people running the daily builds get their db updates + + -- Isaac Connor Wed, 06 Aug 2014 20:20:20 -0400 + +zoneminder (1.27.0+1-trusty-v4ltomonitor-1) trusty; urgency=high + + * Snapshot release - + + -- Isaac Connor Wed, 09 Jul 2014 21:35:29 -0400 diff --git a/distros/ubuntu1504_cmake_split_packages/compat b/distros/ubuntu1504_cmake_split_packages/compat new file mode 100644 index 000000000..ec635144f --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/compat @@ -0,0 +1 @@ +9 diff --git a/distros/ubuntu1504_cmake_split_packages/control b/distros/ubuntu1504_cmake_split_packages/control new file mode 100644 index 000000000..1f2b9c3ac --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/control @@ -0,0 +1,133 @@ +Source: zoneminder +Section: net +Priority: optional +Maintainer: Isaac Connor +Build-Depends: debhelper (>= 9), po-debconf (>= 1.0), autoconf, automake, libphp-serialization-perl, libgnutls-dev, libmysqlclient-dev | libmariadbclient-dev, libdbd-mysql-perl, libdate-manip-perl, libwww-perl, libjpeg8-dev | libjpeg9-dev | libjpeg62-turbo-dev, libpcre3-dev, libavcodec-ffmpeg-dev, libavformat-ffmpeg-dev, libswscale-ffmpeg-dev, libavutil-ffmpeg-dev, libv4l-dev (>= 0.8.3), libbz2-dev, libtool, libsys-mmap-perl, libavdevice-ffmpeg-dev, libdevice-serialport-perl, libarchive-zip-perl, libmime-lite-perl, dh-autoreconf, libvlccore-dev, libvlc-dev, libcurl4-gnutls-dev | libcurl4-nss-dev | libcurl4-openssl-dev, libgcrypt11-dev | libgcrypt20-dev, libpolkit-gobject-1-dev, libdbi-perl, libnet-sftp-foreign-perl, libexpect-perl, libmime-tools-perl, libx264-dev, libmp4v2-dev, libpcre3-dev +Standards-Version: 3.9.6 + +Package: zoneminder +Section: metapackages +Architecture: all +Depends: ${misc:Depends}, + libzoneminder-perl (>= ${source:Version}), + zoneminder-database (>= ${source:Version}), + zoneminder-core (>= ${binary:Version}), + zoneminder-ui-base (>= ${source:Version}), + zoneminder-ui-classic (>= ${source:Version}), + zoneminder-ui-mobile (>= ${source:Version}), + zoneminder-ui-xml (>= ${source:Version}) +Description: Video camera security and surveillance solution (metapackage) + ZoneMinder is intended for use in single or multi-camera video security + applications, including commercial or home CCTV, theft prevention and child + or family member or home monitoring and other care scenarios. It + supports capture, analysis, recording, and monitoring of video data coming + from one or more video or network cameras attached to a Linux system. + ZoneMinder also support web and semi-automatic control of Pan/Tilt/Zoom + cameras using a variety of protocols. It is suitable for use as a home + video security system and for commercial or professional video security + and surveillance. It can also be integrated into a home automation system + via X.10 or other protocols. + +Package: libzoneminder-perl +Section: perl +Architecture: all +Depends: ${misc:Depends}, ${perl:Depends}, libdbi-perl, + libdevice-serialport-perl, libimage-info-perl, libjson-any-perl, + libsys-mmap-perl, liburi-encode-perl, libwww-perl +Description: Perl libraries for ZoneMinder + ZoneMinder is a video camera security and surveillance solution. + . + This package provides the libraries for the perl scripts, it can be used to + write custom interfaces as well. + +Package: zoneminder-database +Section: database +Architecture: all +Depends: ${misc:Depends}, debconf, dbconfig-common, + mysql-client | mariadb-client +Recommends: mysql-server | mariadb-server +Description: Database management package for ZoneMinder + ZoneMinder is a video camera security and surveillance solution. + . + This package provides the sql files and maintenance scripts to perform all the + database operations (installation, upgrade or removal) on a local or a remote + server. + +Package: zoneminder-core +Section: video +Architecture: any +Depends: libzoneminder-perl (= ${source:Version}), + zoneminder-database (= ${source:Version}), ${shlibs:Depends}, ${misc:Depends}, + ${perl:Depends}, libarchive-tar-perl, libarchive-zip-perl, libdate-manip-perl, + libdbi-perl, libmodule-load-conditional-perl, libmime-lite-perl, + libmime-tools-perl, libnet-sftp-foreign-perl, libphp-serialization-perl, + debconf, ffmpeg | libav-tools, rsyslog | system-log-daemon, zip, + policykit-1, apache2, libmp4v2-2, libpcre++0 +Description: Core binaries and perl scripts for ZoneMinder + ZoneMinder is a video camera security and surveillance solution. + . + This package provides the executable compiled binaries which do the main video + processing work and the perl scripts which perform helper and/or external + interface tasks. + +Package: zoneminder-core-dbg +Priority: extra +Section: debug +Architecture: any +Depends: zoneminder-core (= ${binary:Version}), ${misc:Depends} +Description: Debugging symbols for ZoneMinder + ZoneMinder is a video camera security and surveillance solution. + . + This package provides the debugging symbols for the executable compiled + binaries. + +Package: zoneminder-ui-base +Section: web +Architecture: any +Depends: zoneminder-core (= ${binary:Version}), ${shlibs:Depends}, + ${misc:Depends}, debconf, apache2, libapache2-mod-php5 | libapache2-mod-fcgid, + php5, php5-mysql | php5-mysqlnd +Description: Essential files for ZoneMinder's web user interface + ZoneMinder is a video camera security and surveillance solution. + . + This package provides the essential web files and maintenance scripts to set up + a basic web environment. + +Package: zoneminder-ui-classic +Section: web +Architecture: all +Depends: zoneminder-ui-base (>= ${source:Version}), ${misc:Depends} +Description: Classic web user interface for ZoneMinder + ZoneMinder is a video camera security and surveillance solution. + . + This package provides the classic web user interface. + +Package: zoneminder-ui-mobile +Section: web +Architecture: all +Depends: zoneminder-ui-base (>= ${source:Version}), ${misc:Depends} +Description: Mobile web user interface for ZoneMinder + ZoneMinder is a video camera security and surveillance solution. + . + This package provides the web user interface for mobile devices. + +Package: zoneminder-ui-xml +Section: web +Architecture: all +Depends: zoneminder-ui-base (>= ${source:Version}), ${misc:Depends} +Description: XML interface for ZoneMinder + ZoneMinder is a video camera security and surveillance solution. + . + This package provides a XML interface mainly intended for use with the eyeZm + iPhone Application, but can be used with any other custom programs as well. + +Package: zoneminder-ui-api +Section: web +Architecture: all +Depends: zoneminder-ui-base (>= ${source:Version}), ${misc:Depends} +Description: API interface for ZoneMinder + ZoneMinder is a video camera security and surveillance solution. + . + This package provides an API interface mainly intended for use with angular-ui + or mobile applications, but can be used with any other custom programs as well. + diff --git a/distros/ubuntu1504_cmake_split_packages/copyright b/distros/ubuntu1504_cmake_split_packages/copyright new file mode 100644 index 000000000..a177502a0 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/copyright @@ -0,0 +1,22 @@ +Copyright: + +Copyright 2002 Philip Coombes + +License: + +This package 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 package 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 package; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +On Debian GNU/Linux systems, the text of the GPL can be found in +/usr/share/common-licenses/GPL. diff --git a/distros/ubuntu1504_cmake_split_packages/docs b/distros/ubuntu1504_cmake_split_packages/docs new file mode 100644 index 000000000..b43bf86b5 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/docs @@ -0,0 +1 @@ +README.md diff --git a/distros/ubuntu1504_cmake_split_packages/libzoneminder-perl.install b/distros/ubuntu1504_cmake_split_packages/libzoneminder-perl.install new file mode 100644 index 000000000..792ffc15e --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/libzoneminder-perl.install @@ -0,0 +1,4 @@ +usr/share/perl5/ZoneMinder +usr/share/perl5/ZoneMinder.pm +debian/tmp/usr/share/man/man3/ZoneMinder.3pm +debian/tmp/usr/share/man/man3/ZoneMinder::* diff --git a/onvif/proxy/pm_to_blib b/distros/ubuntu1504_cmake_split_packages/patches/series similarity index 100% rename from onvif/proxy/pm_to_blib rename to distros/ubuntu1504_cmake_split_packages/patches/series diff --git a/distros/ubuntu1504_cmake_split_packages/po/POTFILES.in b/distros/ubuntu1504_cmake_split_packages/po/POTFILES.in new file mode 100644 index 000000000..5b155907e --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/po/POTFILES.in @@ -0,0 +1,3 @@ +[type: gettext/rfc822deb] zoneminder-core.templates +[type: gettext/rfc822deb] zoneminder-database.templates +[type: gettext/rfc822deb] zoneminder-ui-base.templates diff --git a/distros/ubuntu1504_cmake_split_packages/po/fr.po b/distros/ubuntu1504_cmake_split_packages/po/fr.po new file mode 100644 index 000000000..85ced7fd2 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/po/fr.po @@ -0,0 +1,252 @@ +# debconf french translation file for ZoneMinder. +# Copyright (C) 2001-2008 Philip Coombes +# This file is distributed under the same license as the zoneminder package. +# First author: Emmanuel Papin , 2014. +# +msgid "" +msgstr "" +"Project-Id-Version: zoneminder\n" +"Report-Msgid-Bugs-To: zoneminder@packages.debian.org\n" +"POT-Creation-Date: 2014-12-16 12:34+0100\n" +"PO-Revision-Date: 2014-12-07 00:40+0100\n" +"Last-Translator: Emmanuel Papin \n" +"Language-Team: French \n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../zoneminder-core.templates:1001 +msgid "Delete this non empty directory?" +msgstr "Supprimer ce répertoire non vide ?" + +#. Type: boolean +#. Description +#: ../zoneminder-core.templates:1001 +msgid "" +"A purge of the ZoneMinder package is performed but the directory '/var/cache/" +"zoneminder' is not empty so it will not be deleted." +msgstr "" +"Une purge du paquet ZoneMinder est en cours mais le répertoire '/var/cache/" +"zoneminder' n'est pas vide et sera donc conservé." + +#. Type: boolean +#. Description +#: ../zoneminder-core.templates:1001 +msgid "" +"Please consider that this directory is designed to contain data resulting " +"from event detection. Therefore, \"proof of evidence\" could be lost!\"" +msgstr "" +"Veuillez considérer que ce répertoire est conçu pour contenir des données " +"résultants de la détection d'événements. Par conséquent, des preuves " +"pourraient être perdues !" + +#. Type: boolean +#. Description +#: ../zoneminder-core.templates:1001 +msgid "" +"If you are not sure of your decision, please do not delete this directory " +"but perform a manual checkup." +msgstr "" +"Si vous n'êtes pas sûr de votre décision, veuillez conserver ce répertoire " +"et effectuer une vérification manuelle." + +#. Type: boolean +#. Description +#: ../zoneminder-core.templates:2001 +msgid "Deletion confirmed?" +msgstr "Supression confirmée ?" + +#. Type: boolean +#. Description +#: ../zoneminder-core.templates:2001 +msgid "" +"You have allowed the deletion of directory '/var/cache/zoneminder' although " +"it may contain critical data." +msgstr "" +"Vous avez autorisé la suppression du répertoire '/var/cache/zoneminder' bien " +"qu'il puisse contenir des données critiques." + +#. Type: select +#. Choices +#: ../zoneminder-database.templates:1001 +msgid "local" +msgstr "local" + +#. Type: select +#. Choices +#: ../zoneminder-database.templates:1001 +msgid "remote" +msgstr "distant" + +#. Type: select +#. Description +#: ../zoneminder-database.templates:1002 +msgid "Database location:" +msgstr "Emplacement de la base de donnée :" + +#. Type: select +#. Description +#: ../zoneminder-database.templates:1002 +msgid "" +"A database server is required to run ZoneMinder. The database can be " +"installed either locally or remotely on a machine of your network." +msgstr "" +"Un serveur de base de données est requis pour ZoneMinder. La base de donnée " +"peut être installée localement ou à distance sur une machine de votre réseau." + +#. Type: select +#. Description +#: ../zoneminder-database.templates:1002 +msgid "" +"If you choose a remote location, you will have to select the 'tcp/ip' " +"connection method and enter the hostname or ip address of the remote machine " +"in the next configuration screens." +msgstr "" +"Si vous choisissez un emplacement distant, vous devrez sélectionner la " +"méthode de connexion 'tcp/ip' et entrer le nom réseau ou l'adresse ip de la " +"machine distante dans les écrans de configuration suivants." + +#. Type: error +#. Description +#: ../zoneminder-database.templates:2001 +msgid "No local database server is available:" +msgstr "Aucun serveur local de base de données n'est disponible :" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:2001 +msgid "" +"Currently ZoneMinder supports mysql or mariadb database server but none of " +"them appears to be installed on this machine." +msgstr "" +"Actuellement ZoneMinder supporte les serveurs de base de données mysql et " +"mariadb mais aucun d'entre eux n'est installé sur cette machine." + +#. Type: error +#. Description +#: ../zoneminder-database.templates:2001 +msgid "" +"In order to complete ZoneMinder's installation, after ending of this " +"assistant, please install a compatible database server and then restart the " +"assistant by invoking:" +msgstr "" +"Afin de compléter l'installation de ZoneMinder, après la fermeture de cet " +"assitant, veuillez installer un serveur de base de données compatible et " +"ensuite redémarrez l'assistant en invoquant :" + +#. Type: error +#. Description +#. Type: error +#. Description +#: ../zoneminder-database.templates:2001 ../zoneminder-database.templates:3001 +msgid "$ sudo dpkg-reconfigure zoneminder" +msgstr "$ sudo dpkg-reconfigure zoneminder" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:3001 +msgid "Remote database servers are not allowed:" +msgstr "Les serveurs de base de données distants ne sont pas autorisés :" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:3001 +msgid "" +"The current configuration of dbconfig-common does not allow installation of " +"a database on remote servers." +msgstr "" +"La configuration actuelle de dbconfig-common ne permet pas l'installation de " +"bases de données sur des serveurs distants." + +#. Type: error +#. Description +#: ../zoneminder-database.templates:3001 +msgid "" +"In order to reconfigure dbconfig-common, please invoke the following command " +"after ending of this assistant:" +msgstr "" +"Afin de reconfigurer dbconfig-common, veuillez invoquer la commande suivante " +"après la fermeture de cet assitant :" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:3001 +msgid "$ sudo dpkg-reconfigure dbconfig-common" +msgstr "$ sudo dpkg-reconfigure dbconfig-common" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:3001 +msgid "" +"Then, to complete ZoneMinder's installation, please restart this assistant " +"by invoking:" +msgstr "" +"Ensuite, pour compléter l'installation de ZoneMinder, veuillez redémarrer " +"cet assistant en invoquant :" + +#. Type: password +#. Description +#: ../zoneminder-database.templates:4001 +msgid "New password for the ZoneMinder 'admin' user:" +msgstr "Nouveau mot de passe pour le compte 'admin' de ZoneMinder :" + +#. Type: password +#. Description +#: ../zoneminder-database.templates:4001 +msgid "Please enter the password of the default administrative user." +msgstr "Veuillez entrer le mot de passe du compte administrateur par défaut." + +#. Type: password +#. Description +#: ../zoneminder-database.templates:4001 +msgid "" +"While not mandatory, it is highly recommended that you set a custom password " +"for the administrative 'admin' user." +msgstr "" +"Bien que cela ne soit pas obligatoire, il est fortement recommandé de " +"fournir un mot de passe personnalisé pour le compte administrateur 'admin'." + +#. Type: password +#. Description +#: ../zoneminder-database.templates:4001 +msgid "If this field is left blank, the password will not be changed." +msgstr "Si le champ est laissé vide, le mot de passe ne sera pas changé." + +#. Type: password +#. Description +#: ../zoneminder-database.templates:5001 +msgid "Repeat password for the ZoneMinder 'admin' user:" +msgstr "Répéter le mot de passe pour le compte 'admin' de ZoneMinder :" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:6001 +msgid "Password input error" +msgstr "Erreur de mot de passe" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:6001 +msgid "The two passwords you entered were not the same. Please try again." +msgstr "" +"Les deux mots de passe saisis ne sont pas les mêmes. Veuillez essayer à " +"nouveau." + +#. Type: multiselect +#. Description +#: ../zoneminder-ui-base.templates:1001 +msgid "Web server to reconfigure automatically:" +msgstr "Serveur web à reconfigurer automatiquement :" + +#. Type: multiselect +#. Description +#: ../zoneminder-ui-base.templates:1001 +msgid "" +"Please choose the web server that should be automatically configured for " +"ZoneMinder's web portal access." +msgstr "" +"Veuillez choisir le serveur web à reconfigurer automatiquement pour l'accès " +"au portail web de ZoneMinder." diff --git a/distros/ubuntu1504_cmake_split_packages/po/templates.pot b/distros/ubuntu1504_cmake_split_packages/po/templates.pot new file mode 100644 index 000000000..941a4094e --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/po/templates.pot @@ -0,0 +1,222 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: zoneminder\n" +"Report-Msgid-Bugs-To: zoneminder@packages.debian.org\n" +"POT-Creation-Date: 2014-12-16 12:34+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#. Type: boolean +#. Description +#: ../zoneminder-core.templates:1001 +msgid "Delete this non empty directory?" +msgstr "" + +#. Type: boolean +#. Description +#: ../zoneminder-core.templates:1001 +msgid "" +"A purge of the ZoneMinder package is performed but the directory '/var/cache/" +"zoneminder' is not empty so it will not be deleted." +msgstr "" + +#. Type: boolean +#. Description +#: ../zoneminder-core.templates:1001 +msgid "" +"Please consider that this directory is designed to contain data resulting " +"from event detection. Therefore, \"proof of evidence\" could be lost!\"" +msgstr "" + +#. Type: boolean +#. Description +#: ../zoneminder-core.templates:1001 +msgid "" +"If you are not sure of your decision, please do not delete this directory " +"but perform a manual checkup." +msgstr "" + +#. Type: boolean +#. Description +#: ../zoneminder-core.templates:2001 +msgid "Deletion confirmed?" +msgstr "" + +#. Type: boolean +#. Description +#: ../zoneminder-core.templates:2001 +msgid "" +"You have allowed the deletion of directory '/var/cache/zoneminder' although " +"it may contain critical data." +msgstr "" + +#. Type: select +#. Choices +#: ../zoneminder-database.templates:1001 +msgid "local" +msgstr "" + +#. Type: select +#. Choices +#: ../zoneminder-database.templates:1001 +msgid "remote" +msgstr "" + +#. Type: select +#. Description +#: ../zoneminder-database.templates:1002 +msgid "Database location:" +msgstr "" + +#. Type: select +#. Description +#: ../zoneminder-database.templates:1002 +msgid "" +"A database server is required to run ZoneMinder. The database can be " +"installed either locally or remotely on a machine of your network." +msgstr "" + +#. Type: select +#. Description +#: ../zoneminder-database.templates:1002 +msgid "" +"If you choose a remote location, you will have to select the 'tcp/ip' " +"connection method and enter the hostname or ip address of the remote machine " +"in the next configuration screens." +msgstr "" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:2001 +msgid "No local database server is available:" +msgstr "" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:2001 +msgid "" +"Currently ZoneMinder supports mysql or mariadb database server but none of " +"them appears to be installed on this machine." +msgstr "" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:2001 +msgid "" +"In order to complete ZoneMinder's installation, after ending of this " +"assistant, please install a compatible database server and then restart the " +"assistant by invoking:" +msgstr "" + +#. Type: error +#. Description +#. Type: error +#. Description +#: ../zoneminder-database.templates:2001 ../zoneminder-database.templates:3001 +msgid "$ sudo dpkg-reconfigure zoneminder" +msgstr "" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:3001 +msgid "Remote database servers are not allowed:" +msgstr "" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:3001 +msgid "" +"The current configuration of dbconfig-common does not allow installation of " +"a database on remote servers." +msgstr "" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:3001 +msgid "" +"In order to reconfigure dbconfig-common, please invoke the following command " +"after ending of this assistant:" +msgstr "" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:3001 +msgid "$ sudo dpkg-reconfigure dbconfig-common" +msgstr "" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:3001 +msgid "" +"Then, to complete ZoneMinder's installation, please restart this assistant " +"by invoking:" +msgstr "" + +#. Type: password +#. Description +#: ../zoneminder-database.templates:4001 +msgid "New password for the ZoneMinder 'admin' user:" +msgstr "" + +#. Type: password +#. Description +#: ../zoneminder-database.templates:4001 +msgid "Please enter the password of the default administrative user." +msgstr "" + +#. Type: password +#. Description +#: ../zoneminder-database.templates:4001 +msgid "" +"While not mandatory, it is highly recommended that you set a custom password " +"for the administrative 'admin' user." +msgstr "" + +#. Type: password +#. Description +#: ../zoneminder-database.templates:4001 +msgid "If this field is left blank, the password will not be changed." +msgstr "" + +#. Type: password +#. Description +#: ../zoneminder-database.templates:5001 +msgid "Repeat password for the ZoneMinder 'admin' user:" +msgstr "" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:6001 +msgid "Password input error" +msgstr "" + +#. Type: error +#. Description +#: ../zoneminder-database.templates:6001 +msgid "The two passwords you entered were not the same. Please try again." +msgstr "" + +#. Type: multiselect +#. Description +#: ../zoneminder-ui-base.templates:1001 +msgid "Web server to reconfigure automatically:" +msgstr "" + +#. Type: multiselect +#. Description +#: ../zoneminder-ui-base.templates:1001 +msgid "" +"Please choose the web server that should be automatically configured for " +"ZoneMinder's web portal access." +msgstr "" diff --git a/distros/ubuntu1504_cmake_split_packages/rules b/distros/ubuntu1504_cmake_split_packages/rules new file mode 100755 index 000000000..a534e8089 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/rules @@ -0,0 +1,164 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) + +CFLAGS = -Wall +CPPFLAGS = -D__STDC_CONSTANT_MACROS +CXXFLAGS = -DHAVE_LIBCRYPTO + +ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS))) +DEBOPT = --enable-debug +CFLAGS += -g +CXXFLAGS += -g +else +DEBOPT = +endif + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) +CFLAGS += -O0 +else +CFLAGS += -O2 +endif + +INSTDIR = debian/tmp + +# These are used to get the most recent version of the original sources from github +UURL = $(shell git config --get remote.origin.url) +BRANCH = $(shell git rev-parse --abbrev-ref HEAD) +HEAD = $(shell git rev-parse HEAD) +PKD = $(abspath $(dir $(MAKEFILE_LIST))) +PKG = $(word 2,$(shell dpkg-parsechangelog -l$(PKD)/changelog | grep ^Source)) +VER ?= $(shell dpkg-parsechangelog -l$(PKD)/changelog | perl -ne 'print $$1 if m{^Version:\s+(?:\d+:)?(\d.*)(?:\-|\+nmu\d+.*)};') +DTYPE = +TARBALL = ../$(PKG)_$(VER)$(DTYPE).orig.tar.xz + +%: + dh $@ --buildsystem=cmake --parallel + +override_dh_auto_configure: + CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" dh_auto_configure -- \ + -DCMAKE_INSTALL_PREFIX=/usr \ + -DCMAKE_SKIP_RPATH=ON \ + -DCMAKE_VERBOSE_MAKEFILE=OFF \ + -DCMAKE_COLOR_MAKEFILE=ON \ + -DZM_RUNDIR=/var/run/zm \ + -DZM_SOCKDIR=/var/run/zm \ + -DZM_TMPDIR=/var/tmp/zm \ + -DZM_LOGDIR=/var/log/zm \ + -DZM_WEBDIR=/usr/share/zoneminder \ + -DZM_CONTENTDIR=/var/cache/zoneminder \ + -DZM_CGIDIR=/usr/lib/cgi-bin \ + -DZM_WEB_USER=www-data \ + -DZM_WEB_GROUP=www-data \ + -DCMAKE_INSTALL_SYSCONFDIR=etc/zm + +override_dh_auto_test: + # do not run tests... + + +override_dh_clean: + # Add here commands to clean up after the build process. + [ ! -f Makefile ] || $(MAKE) distclean + dh_clean src/zm_config_defines.h + # + # Delete remaining auto-generated Makefile if Makefile.in exists + find $(CURDIR)/ -type f -name "Makefile" | while read file; do \ + [ -f $$file.in ] && rm -f $$file; \ + done || true + # + # Delete remaining auto-generated Makefile.in if Makefile.am exists + find $(CURDIR)/ -type f -name "Makefile.in" | while read filein; do \ + fileam=`echo $$filein | sed 's/\(.*\)\.in/\1\.am/'`; \ + [ -f $$fileam ] && rm -f $$filein; \ + done || true + +override_dh_install: + dh_install --fail-missing + # + # NOTE: This is a short-term kludge; hopefully changes in the next + # upstream version will render this unnecessary. + rm -rf debian/zoneminder/usr/share/zoneminder/events + rm -rf debian/zoneminder/usr/share/zoneminder/images + rm -rf debian/zoneminder/usr/share/zoneminder/temp + # The link stuff for these folders has been moved to + # zoneminder-core.links file + # + # This is a slightly lesser kludge; moving the cgi stuff to + # /usr/share/zoneminder/cgi-bin breaks one set of behavior, + # having it just in /usr/lib/cgi-bin breaks another bit of + # behavior. + # The link stuff for /usr/share/zoneminder/cgi-bin has been moved to + # zoneminder-ui-base.links file + +override_dh_installinit: + dh_installinit --package=zoneminder-core --name=zoneminder + +override_dh_systemd_start: + dh_systemd_start --package=zoneminder-core --name=zoneminder \ + --restart-after-upgrade + +override_dh_systemd_enable: + dh_systemd_enable --package=zoneminder-core --name=zoneminder + +override_dh_fixperms: + dh_fixperms + # + # As requested by the Debian Webapps Policy Manual §3.2.1 + chown root:www-data debian/zoneminder-core/etc/zm/zm.conf + chmod 640 debian/zoneminder-core/etc/zm/zm.conf + +.PHONY: override_dh_strip +override_dh_strip: + dh_strip --dbg-package=zoneminder-core-dbg + +# Inspired by https://wiki.debian.org/onlyjob/get-orig-source +.PHONY: get-orig-source +get-orig-source: $(TARBALL) $(info I: $(PKG)_$(VER)$(DTYPE)) + @ + +$(TARBALL): + $(if $(wildcard $(PKG)-$(VER)),$(error folder '$(PKG)-$(VER)' exists, aborting...)) + @echo "# Cloning origin repository..."; \ + if ! git clone $(UURL) $(PKG)-$(VER); then \ + $(RM) -r $(PKG)-$(VER); \ + echo "failed to clone repository, aborting..."; \ + false; \ + fi + @if [ $(BRANCH) != "master" ]; then \ + cd $(PKG)-$(VER); \ + echo "# Not on master branch, fetching origin branch '$(BRANCH)'..."; \ + git fetch origin $(BRANCH):$(BRANCH) || false; \ + echo "# Switching to branch '$(BRANCH)'..."; \ + git checkout $(BRANCH) || false; \ + fi + @echo "# Checking local source..." + @if [ $$(cd $(PKG)-$(VER) && git rev-parse HEAD) = $(HEAD) ]; then \ + echo "even with origin, ok"; \ + true; \ + else \ + echo "not even with origin, aborting..."; \ + false; \ + fi + @echo "# Setting times..." + @cd $(PKG)-$(VER) \ + && for F in $$(git ls-tree -r --name-only HEAD | sed -e "s/\s/\*/g"); do \ + touch --no-dereference -d "$$(git log -1 --format="%ai" -- $$F)" "$$F"; \ + done + @echo "# Cleaning-up..." + cd $(PKG)-$(VER) && $(RM) -r .git + @echo "# Packing file '$(TARBALL)'..." + @find -L "$(PKG)-$(VER)" -xdev -type f -print | sort \ + | XZ_OPT="-6v" tar -caf "$(TARBALL)" -T- --owner=root --group=root --mode=a+rX \ + && $(RM) -r "$(PKG)-$(VER)" diff --git a/distros/ubuntu1504_cmake_split_packages/source/format b/distros/ubuntu1504_cmake_split_packages/source/format new file mode 100644 index 000000000..89ae9db8f --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/distros/ubuntu1504_cmake_split_packages/source/local-options b/distros/ubuntu1504_cmake_split_packages/source/local-options new file mode 100644 index 000000000..e69de29bb diff --git a/distros/ubuntu1504_cmake_split_packages/source/options b/distros/ubuntu1504_cmake_split_packages/source/options new file mode 100644 index 000000000..8bd61fce6 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/source/options @@ -0,0 +1 @@ +extend-diff-ignore = "(^|/)(config\.sub|config\.guess|Makefile|aclocal.m4|compile|config.h.in|configure|depcomp|install-sh|missing)$" diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.config b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.config new file mode 100644 index 000000000..2a15a599e --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.config @@ -0,0 +1,11 @@ +#!/bin/sh +# config maintainer script for zoneminder-core package + +set -e + +# Source the debconf stuff +. /usr/share/debconf/confmodule + +#DEBHELPER# + +exit 0 diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.dirs b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.dirs new file mode 100644 index 000000000..350c32aff --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.dirs @@ -0,0 +1,4 @@ +var/log/zm +var/cache/zoneminder/events +var/cache/zoneminder/images +var/cache/zoneminder/temp diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.install b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.install new file mode 100644 index 000000000..afd9ada95 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.install @@ -0,0 +1,4 @@ +etc/zm +usr/bin +usr/share/polkit-1/actions +usr/share/polkit-1/rules.d diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.links b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.links new file mode 100644 index 000000000..5560a100a --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.links @@ -0,0 +1,3 @@ +var/cache/zoneminder/events usr/share/zoneminder/events +var/cache/zoneminder/images usr/share/zoneminder/images +var/cache/zoneminder/temp usr/share/zoneminder/temp diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.postinst b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.postinst new file mode 100644 index 000000000..da2b444fe --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.postinst @@ -0,0 +1,80 @@ +#! /bin/sh +# postinst maintainer script for zoneminder-core package + +set -e + +# Source the debconf stuff +. /usr/share/debconf/confmodule + +# Source the config file +CONFIGFILE=/etc/zm/zm.conf +. $CONFIGFILE + +# Do this when the package is installed, upgraded or reconfigured +if [ "$1" = "configure" ] || [ "$1" = "reconfigure" ]; then + + # Retrieve data from dbconfig (inputs from user) + . /etc/dbconfig-common/zoneminder.conf + + # ZoneMinder config file handling + # Inspired by: http://manpages.debian.org/cgi-bin/man.cgi?query=debconf-devel&sektion=7 + + # Backup the config file + cp -a -f $CONFIGFILE ${CONFIGFILE}.postinst.bak + + # Redeclare variables if missing in config file + test -z $dbc_dbserver || grep -Eq "^ *ZM_DB_HOST=" $CONFIGFILE \ + || echo "ZM_DB_HOST=" >> ${CONFIGFILE}.postinst.bak + test -z $dbc_dbname || grep -Eq "^ *ZM_DB_NAME=" $CONFIGFILE \ + || echo "ZM_DB_NAME=" >> ${CONFIGFILE}.postinst.bak + test -z $dbc_dbuser || grep -Eq "^ *ZM_DB_USER=" $CONFIGFILE \ + || echo "ZM_DB_USER=" >> ${CONFIGFILE}.postinst.bak + test -z $dbc_dbpass || grep -Eq "^ *ZM_DB_PASS=" $CONFIGFILE \ + || echo "ZM_DB_PASS=" >> ${CONFIGFILE}.postinst.bak + + # Prevent ZM_DB_HOST to be empty if user selected the 'unix socket' method + if test -z $dbc_dbserver; then + dbc_dbserver_override="localhost" + else + dbc_dbserver_override=$dbc_dbserver + fi + + # Update variables in config file + sed -i "s/^ *ZM_DB_HOST=.*/ZM_DB_HOST=$dbc_dbserver_override/" \ + ${CONFIGFILE}.postinst.bak + test -z $dbc_dbname || sed -i "s/^ *ZM_DB_NAME=.*/ZM_DB_NAME=$dbc_dbname/" \ + ${CONFIGFILE}.postinst.bak + test -z $dbc_dbuser || sed -i "s/^ *ZM_DB_USER=.*/ZM_DB_USER=$dbc_dbuser/" \ + ${CONFIGFILE}.postinst.bak + test -z $dbc_dbpass || sed -i "s/^ *ZM_DB_PASS=.*/ZM_DB_PASS=$dbc_dbpass/" \ + ${CONFIGFILE}.postinst.bak + + # Clean-up backup file + mv -f ${CONFIGFILE}.postinst.bak $CONFIGFILE + + + # Set some file permissions + chown $ZM_WEB_USER:$ZM_WEB_GROUP /var/log/zm + if [ -z "$2" ]; then + chown $ZM_WEB_USER:$ZM_WEB_GROUP -R /var/cache/zoneminder + fi + # As requested by the Debian Webapps Policy Manual §3.2.1 + chown root:${ZM_WEB_GROUP} $CONFIGFILE + chmod 640 $CONFIGFILE +fi + +# Do this every time the package is installed or upgraded +# Test for database presence to avoid failure of zmupdate.pl +if [ "$dbc_install" = "true" ] && [ "$1" = "configure" ]; then + + # Ensure zoneminder is stopped + deb-systemd-invoke stop zoneminder.service || exit $? + + # Run the ZoneMinder update tool + zmupdate.pl --nointeractive + +fi + +#DEBHELPER# + +exit 0 diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.postinst.debhelper b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.postinst.debhelper new file mode 100644 index 000000000..888b155f4 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.postinst.debhelper @@ -0,0 +1,15 @@ +# Automatically added by dh_installinit +# In case this system is running systemd, we need to ensure that all +# necessary tmpfiles (if any) are created before starting. +if [ -d /run/systemd/system ] ; then + systemd-tmpfiles --create /usr/lib/tmpfiles.d/zoneminder.conf >/dev/null || true +fi +# End automatically added section +# Automatically added by dh_installinit +if [ -x "/etc/init.d/zoneminder" ]; then + update-rc.d zoneminder defaults >/dev/null +fi +if [ -x "/etc/init.d/zoneminder" ] || [ -e "/etc/init/zoneminder.conf" ]; then + invoke-rc.d zoneminder start || exit $? +fi +# End automatically added section diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.postrm b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.postrm new file mode 100644 index 000000000..d75e75e8b --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.postrm @@ -0,0 +1,37 @@ +#! /bin/sh +# postrm maintainer script for zoneminder-core package + +set -e + +# Source the debconf stuff +if [ -f /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule +fi + +if [ "$1" = "purge" ]; then + + # Ask the user if we have to remove the cache directory even if not empty + if [ -d /var/cache/zoneminder ] \ + && [ ! $(find /var/cache/zoneminder -maxdepth 0 -type d -empty 2>/dev/null) ]; then + RET="" + db_input high zoneminder/ask_delete || true + db_go || true + db_get zoneminder/ask_delete + if [ "$RET" = "true" ]; then + RET="" + db_input high zoneminder/ask_delete_again || true + db_go || true + db_get zoneminder/ask_delete_again + if [ "$RET" = "true" ]; then + rm -rf /var/cache/zoneminder + fi + fi + fi +fi + +#DEBHELPER# + +# postrm rm may freeze without that +db_stop + +exit 0 diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.postrm.debhelper b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.postrm.debhelper new file mode 100644 index 000000000..19b291b3f --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.postrm.debhelper @@ -0,0 +1,18 @@ +# Automatically added by dh_installinit +if [ "$1" = "purge" ] ; then + update-rc.d zoneminder remove >/dev/null +fi + + +# In case this system is running systemd, we make systemd reload the unit files +# to pick up changes. +if [ -d /run/systemd/system ] ; then + systemctl --system daemon-reload >/dev/null || true +fi +# End automatically added section +# Automatically added by dh_installdebconf +if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule + db_purge +fi +# End automatically added section diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.preinst b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.preinst new file mode 100644 index 000000000..3ed1ef661 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.preinst @@ -0,0 +1,33 @@ +#!/bin/sh +# preinst maintainer script for zoneminder-core package + +set -e + +abort=false +if [ -L /usr/share/zoneminder/events ]; then + l=$(readlink /usr/share/zoneminder/events) + if [ "$l" != "/var/cache/zoneminder/events" ]; then + abort=true + fi +fi +if [ -L /usr/share/zoneminder/images ]; then + l=$(readlink /usr/share/zoneminder/images ) + if [ "$l" != "/var/cache/zoneminder/images" ]; then + abort=true + fi +fi + +if [ "$abort" = "true" ]; then + cat >&2 << EOF +Aborting installation of zoneminder due to non-default symlinks in +/usr/share/zoneminder for the images and/or events directory, which could +result in loss of data. Please move your data in each of these directories to +/var/cache/zoneminder before installing zoneminder from the package. +EOF + exit 1 + +fi + +#DEBHELPER# + +exit 0 diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.prerm.debhelper b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.prerm.debhelper new file mode 100644 index 000000000..2d7592dc3 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.prerm.debhelper @@ -0,0 +1,5 @@ +# Automatically added by dh_installinit +if [ -x "/etc/init.d/zoneminder" ] || [ -e "/etc/init/zoneminder.conf" ]; then + invoke-rc.d zoneminder stop || exit $? +fi +# End automatically added section diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.templates b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.templates new file mode 100644 index 000000000..35fdefd7a --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.templates @@ -0,0 +1,19 @@ +Template: zoneminder/ask_delete +Type: boolean +Default: false +_Description: Delete this non empty directory? + A purge of the ZoneMinder package is performed but the directory + '/var/cache/zoneminder' is not empty so it will not be deleted. + . + Please consider that this directory is designed to contain data resulting from + event detection. Therefore, "proof of evidence" could be lost!" + . + If you are not sure of your decision, please do not delete this directory but + perform a manual checkup. + +Template: zoneminder/ask_delete_again +Type: boolean +Default: false +_Description: Deletion confirmed? + You have allowed the deletion of directory '/var/cache/zoneminder' although + it may contain critical data. diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.zoneminder.init b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.zoneminder.init new file mode 100644 index 000000000..d3354c1d8 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.zoneminder.init @@ -0,0 +1,90 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: zoneminder +# Required-Start: $network $remote_fs $syslog +# Required-Stop: $network $remote_fs $syslog +# Should-Start: mysql +# Should-Stop: mysql +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Control ZoneMinder as a Service +### END INIT INFO +# description: Control ZoneMinder as a Service +# chkconfig: 2345 20 20 + +# Source function library. +#. /etc/rc.d/init.d/functions + +prog=ZoneMinder +ZM_PATH_BIN="/usr/bin" +RUNDIR=/var/run/zm +TMPDIR=/tmp/zm +command="$ZM_PATH_BIN/zmpkg.pl" + +start() { + echo -n "Starting $prog: " + mkdir -p $RUNDIR && chown www-data:www-data $RUNDIR + mkdir -p $TMPDIR && chown www-data:www-data $TMPDIR + $command start + RETVAL=$? + [ $RETVAL = 0 ] && echo success + [ $RETVAL != 0 ] && echo failure + echo + [ $RETVAL = 0 ] && touch /var/lock/zm + return $RETVAL +} +stop() { + echo -n "Stopping $prog: " + # + # Why is this status check being done? + # as $command stop returns 1 if zoneminder + # is stopped, which will result in + # this returning 1, which will stuff + # dpkg when it tries to stop zoneminder before + # uninstalling . . . + # + result=`$command status` + if [ ! "$result" = "running" ]; then + echo "Zoneminder already stopped" + echo + RETVAL=0 + else + $command stop + RETVAL=$? + [ $RETVAL = 0 ] && echo success + [ $RETVAL != 0 ] && echo failure + echo + [ $RETVAL = 0 ] && rm -f /var/lock/zm + fi +} +status() { + result=`$command status` + if [ "$result" = "running" ]; then + echo "ZoneMinder is running" + RETVAL=0 + else + echo "ZoneMinder is stopped" + RETVAL=1 + fi +} + +case "$1" in +'start') + start + ;; +'stop') + stop + ;; +'restart' | 'force-reload') + stop + start + ;; +'status') + status + ;; +*) + echo "Usage: $0 { start | stop | restart | status }" + RETVAL=1 + ;; +esac +exit $RETVAL diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.zoneminder.service b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.zoneminder.service new file mode 100644 index 000000000..d82270024 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.zoneminder.service @@ -0,0 +1,19 @@ +# ZoneMinder systemd unit file +# This file is intended to work with debian distributions + +[Unit] +Description=ZoneMinder CCTV recording and security system +After=network.target mysql.service apache2.service +Requires=apache2.service +Wants=mysql.service + +[Service] +User=www-data +Type=forking +ExecStart=/usr/bin/zmpkg.pl start +ExecReload=/usr/bin/zmpkg.pl restart +ExecStop=/usr/bin/zmpkg.pl stop +PIDFile=/var/run/zm/zm.pid + +[Install] +WantedBy=multi-user.target diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-core.zoneminder.tmpfile b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.zoneminder.tmpfile new file mode 100644 index 000000000..6ea70bf35 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-core.zoneminder.tmpfile @@ -0,0 +1 @@ +d /var/run/zm 0755 www-data www-data diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-database.config b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.config new file mode 100644 index 000000000..f6a84d36d --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.config @@ -0,0 +1,142 @@ +#!/bin/sh +# config maintainer script for zoneminder + +set -e + +# Source the debconf stuff +. /usr/share/debconf/confmodule + +# Set the first version in which dbconfig-common was introduced in the package +dbc_first_version="1.28.0" + +CONFIGFILE=/etc/zm/zm.conf +if [ -e $CONFIGFILE ]; then + # Source the config file if exists + . $CONFIGFILE +elif [ -e ${CONFIGFILE}.dpkg-new ]; then + # If no config file, source the config file which is going to be installed + # by the core package + . ${CONFIGFILE}.dpkg-new +else + # If no config file is going to be installed, set some default values + ZM_DB_HOST= + ZM_DB_NAME="zm" + ZM_DB_USER="zmuser" +fi + +# Set some variables for the dbconfig-common stuff +dbc_dbserver="$ZM_DB_HOST" +dbc_dbname="$ZM_DB_NAME" +dbc_dbuser="$ZM_DB_USER" + +if [ -f /usr/share/dbconfig-common/dpkg/config ]; then + + # Default use dbconfig-common + dbc_install="true" + + # Currently we only support mysql database + dbc_dbtypes="mysql" + + # Set authentication method to password + dbc_authmethod_user="password" + + # Source the dbconfig-common stuff + . /usr/share/dbconfig-common/dpkg/config +fi + +# Do this when the package is installed, upgraded or reconfigured +# Most of answers are cached so the questions will not be asked again +if [ "$1" = "configure" ] || [ "$1" = "reconfigure" ]; then + + # Ask the user if the database shall be installed locally or remotely + db_input high zoneminder/debconf_dblocation || true + db_go || true + db_get zoneminder/debconf_dblocation + + if [ "$RET" = "local" ]; then + if [ ! -e "/usr/sbin/mysqld" ]; then + # Display a message and exit if the user want a local database but + # no database server is available + db_input high zoneminder/debconf_dblocalmissingerror || true + db_go || true + exit 0 + else + # Set the database server to localhost + dbc_dbserver="localhost" + fi + else + # Source the dbconfig main configuration file + if [ -f /etc/dbconfig-common/config ]; then + . /etc/dbconfig-common/config + fi + if [ "$dbc_remote_questions_default" = "false" ]; then + # Display a message and exit if the dbconfig configuration does not + # allow installation of remote databases + # Note: To overcome this issue, we could think to override the + # default setting by using dbc_remote_questions_default='true' in + # maintainer scripts but unfortunately this does not work due to + # current dbconfig design + # More information here: + # https://bugs.launchpad.net/ubuntu/+source/dbconfig-common/+bug/1065331 + db_input high zoneminder/debconf_dbconfigerror || true + db_go || true + exit 0 + fi + fi + + # Ask the user for all database settings + dbc_go zoneminder $@ + + # Ask the user for the password of the database administrator if the user + # has not yet answered to this question. + # This situation may occur if the user skipped the database creation step + # when reconfiguring the package. + RET="" + db_get zoneminder/mysql/admin-pass + if [ -z "$RET" ]; then + db_input high zoneminder/mysql/admin-pass || true + db_go || true + fi + + # Do this only when not upgrading the package (no old version in argument) + if [ -z "$2" ]; then + # Ask for the password of 'admin' user + while :; do + RET="" + db_input high zoneminder/admin_password || true + db_go || true + db_get zoneminder/admin_password + # If password isn't empty we ask for password verification + if [ -z "$RET" ]; then + db_fset zoneminder/admin_password seen false + db_fset zoneminder/admin_password_again seen false + break + fi + ROOT_PW="$RET" + db_input high zoneminder/admin_password_again || true + db_go || true + db_get zoneminder/admin_password_again + if [ "$RET" = "$ROOT_PW" ]; then + ROOT_PW="" + break + fi + db_fset zoneminder/password_mismatch seen false + db_input critical zoneminder/password_mismatch || true + db_set zoneminder/admin_password "" + db_set zoneminder/admin_password_again "" + db_go || true + done + else + # If we are upgrading the package, set an empty password to disable + # password update in ZoneMinder database + db_set zoneminder/admin_password "" + fi + # Set the seen flag to not ask this question again if no password is + # provided + db_fset zoneminder/admin_password seen true + +fi + +#DEBHELPER# + +exit 0 diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-database.dirs b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.dirs new file mode 100644 index 000000000..b37463a9e --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.dirs @@ -0,0 +1,3 @@ +usr/share/zoneminder/db +usr/share/dbconfig-common/data/zoneminder/install +usr/share/dbconfig-common/data/zoneminder/upgrade/mysql diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-database.install b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.install new file mode 100644 index 000000000..756c5bbfa --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.install @@ -0,0 +1 @@ +usr/share/zoneminder/db diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-database.postinst b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.postinst new file mode 100644 index 000000000..41d4e5b5b --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.postinst @@ -0,0 +1,79 @@ +#! /bin/sh +# postinst maintainer script for zoneminder-db package + +set -e + +# Source the debconf stuff +. /usr/share/debconf/confmodule + +mysql_update() { + + # Source the dbconfig stuff + . /usr/share/dbconfig-common/internal/mysql + + # Update the password of the hard-coded default 'admin' account + test -z $ADMIN_PASSWORD || dbc_mysql_exec_command "UPDATE Users SET Password = password('$ADMIN_PASSWORD') WHERE Username = 'admin';" || true + + # Update the database version + dbc_mysql_exec_command "UPDATE Config SET Value = '$DB_VERSION' WHERE Name = 'ZM_DYN_DB_VERSION';" || true +} + +if [ -f /usr/share/dbconfig-common/dpkg/postinst ]; then + + # Set the first version in which dbconfig-common was introduced in the package + dbc_first_version="1.28.0" + + # Set the database type + dbc_dbtypes="mysql" + + # Source the dbconfig-common stuff + . /usr/share/dbconfig-common/dpkg/postinst +fi + +# Do this when the package is installed, upgraded or reconfigured +if [ "$1" = "configure" ] || [ "$1" = "reconfigure" ]; then + + # Install sql database create file for dbconfig + # (needed at first package installation) + if [ ! -f /usr/share/dbconfig-common/data/zoneminder/install/mysql ]; then + install -m 644 /usr/share/zoneminder/db/zm_create.sql \ + /usr/share/dbconfig-common/data/zoneminder/install/mysql + # Remove unneeded sql requests + # dbconfig will create the underlying database + sed -i "/^ *CREATE DATABASE /d" \ + /usr/share/dbconfig-common/data/zoneminder/install/mysql + sed -i "/^ *USE /d" \ + /usr/share/dbconfig-common/data/zoneminder/install/mysql + fi + + # Symlink sql update files for dbconfig (needed when upgrading the package) + for sqlfile in /usr/share/zoneminder/db/zm_update-*.sql; do + lnk=`echo $sqlfile | sed "s/^\/usr\/share\/zoneminder\/db\/zm_update-\(.*\)\.sql/\1/"` + if [ ! -L /usr/share/dbconfig-common/data/zoneminder/upgrade/mysql/$lnk ]; then + ln -sf $sqlfile \ + /usr/share/dbconfig-common/data/zoneminder/upgrade/mysql/$lnk + fi + done || true + + # Create the underlying database and populate it + # dbconfig will take care of applying any updates which are newer than the + # previously installed version + dbc_go zoneminder $@ + + # Get the password of ZoneMinder user 'admin' from debconf + db_get zoneminder/admin_password + ADMIN_PASSWORD=$RET + + # Remove the password from debconf database + test -z $ADMIN_PASSWORD || db_reset zoneminder/admin_password || true + + # Get the lastest database version from dbconfig upgrade folder + DB_VERSION=$(ls -rv /usr/share/dbconfig-common/data/zoneminder/upgrade/$dbc_dbtypes | head -1) + + # Update the default admin account and database version + mysql_update +fi + +#DEBHELPER# + +exit 0 diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-database.postrm b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.postrm new file mode 100644 index 000000000..231f01ad7 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.postrm @@ -0,0 +1,34 @@ +#! /bin/sh +# postrm maintainer script for zoneminder-db package + +set -e + +# Source the debconf stuff +if [ -f /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule +fi + +# Source the dbconfig stuff +if [ -f /usr/share/dbconfig-common/dpkg/postrm ]; then + . /usr/share/dbconfig-common/dpkg/postrm + # Ask the user what do to with dbconfig when removing the package + dbc_go zoneminder $@ +fi + +if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then + # Remove dbconfig stuff added in postinst script + rm -rf /usr/share/dbconfig-common/data/zoneminder + # No need to manually remove the zm database, dbconfig take care of this +fi + +if [ "$1" = "purge" ]; then + # Delete a potential remaining file used in postinst script + rm -f /etc/zm/zm.conf.postinst.bak +fi + +#DEBHELPER# + +# postrm rm may freeze without that +db_stop + +exit 0 diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-database.postrm.debhelper b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.postrm.debhelper new file mode 100644 index 000000000..bc035b98c --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.postrm.debhelper @@ -0,0 +1,6 @@ +# Automatically added by dh_installdebconf +if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule + db_purge +fi +# End automatically added section diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-database.prerm b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.prerm new file mode 100644 index 000000000..31786116a --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.prerm @@ -0,0 +1,22 @@ +#!/bin/sh +# prerm script for zoneminder-db package + +set -e + +# Source the debconf stuff if file exists +if [ -f /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule +fi + +# If dbconfig-common is installed and has been used by zoneminder +if [ -f /usr/share/dbconfig-common/dpkg/prerm ] \ + && [ -f /etc/dbconfig-common/zoneminder.conf ]; then + # Source the dbconfig stuff + . /usr/share/dbconfig-common/dpkg/prerm + # Ask the user what do to with dbconfig before removing the package + dbc_go zoneminder $@ +fi + +# #DEBHELPER# + +exit 0 diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-database.templates b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.templates new file mode 100644 index 000000000..4de4342f6 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-database.templates @@ -0,0 +1,58 @@ +Template: zoneminder/debconf_dblocation +Type: select +__Choices: local, remote +Default: local +_Description: Database location: + A database server is required to run ZoneMinder. The database can be installed + either locally or remotely on a machine of your network. + . + If you choose a remote location, you will have to select the 'tcp/ip' + connection method and enter the hostname or ip address of the remote machine + in the next configuration screens. + +Template: zoneminder/debconf_dblocalmissingerror +Type: error +_Description: No local database server is available: + Currently ZoneMinder supports mysql or mariadb database server but none of them + appears to be installed on this machine. + . + In order to complete ZoneMinder's installation, after ending of this assistant, + please install a compatible database server and then restart the assistant by + invoking: + . + $ sudo dpkg-reconfigure zoneminder + +Template: zoneminder/debconf_dbconfigerror +Type: error +_Description: Remote database servers are not allowed: + The current configuration of dbconfig-common does not allow installation of + a database on remote servers. + . + In order to reconfigure dbconfig-common, please invoke the following command + after ending of this assistant: + . + $ sudo dpkg-reconfigure dbconfig-common + . + Then, to complete ZoneMinder's installation, please restart this assistant by + invoking: + . + $ sudo dpkg-reconfigure zoneminder + +Template: zoneminder/admin_password +Type: password +_Description: New password for the ZoneMinder 'admin' user: + Please enter the password of the default administrative user. + . + While not mandatory, it is highly recommended that you set a custom password + for the administrative 'admin' user. + . + If this field is left blank, the password will not be changed. + +Template: zoneminder/admin_password_again +Type: password +_Description: Repeat password for the ZoneMinder 'admin' user: + +Template: zoneminder/password_mismatch +Type: error +_Description: Password input error + The two passwords you entered were not the same. Please try again. diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-api.install b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-api.install new file mode 100644 index 000000000..5759ebc85 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-api.install @@ -0,0 +1 @@ +usr/share/zoneminder/api diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.config b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.config new file mode 100644 index 000000000..2660208a8 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.config @@ -0,0 +1,20 @@ +#!/bin/sh +# config maintainer script for zoneminder-ui-base package + +set -e + +# Source the debconf stuff +. /usr/share/debconf/confmodule + +# Do this when the package is installed, upgraded or reconfigured +# Most of answers are cached so the questions will not be asked again +if [ "$1" = "configure" ] || [ "$1" = "reconfigure" ]; then + + # Ask the user for the web server(s) to configure + db_input high zoneminder/webserver || true + db_go || true +fi + +#DEBHELPER# + +exit 0 diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.install b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.install new file mode 100644 index 000000000..f72b569be --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.install @@ -0,0 +1,11 @@ +debian/apache.conf etc/zm +usr/lib/cgi-bin +usr/share/zoneminder/ajax +usr/share/zoneminder/css +usr/share/zoneminder/graphics +usr/share/zoneminder/includes +usr/share/zoneminder/index.php +usr/share/zoneminder/js +usr/share/zoneminder/lang +usr/share/zoneminder/tools +usr/share/zoneminder/views diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.links b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.links new file mode 100644 index 000000000..b00a147d6 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.links @@ -0,0 +1 @@ +usr/lib/cgi-bin usr/share/zoneminder/cgi-bin diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.postinst b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.postinst new file mode 100644 index 000000000..a5bce3c98 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.postinst @@ -0,0 +1,48 @@ +#! /bin/sh +# postinst maintainer script for zoneminder-ui-base package + +set -e + +# Source the debconf stuff +. /usr/share/debconf/confmodule + +apache_install() { + + mkdir -p /etc/apache2/conf-available + ln -sf ../../zm/apache.conf /etc/apache2/conf-available/zoneminder.conf + + COMMON_STATE=$(dpkg-query -f '${Status}' -W 'apache2.2-common' 2>/dev/null | awk '{print $3}' || true) + + if [ -e /usr/share/apache2/apache2-maintscript-helper ] ; then + . /usr/share/apache2/apache2-maintscript-helper + apache2_invoke enconf zoneminder + elif [ "$COMMON_STATE" = "installed" ] || [ "$COMMON_STATE" = "unpacked" ] ; then + [ -d /etc/apache2/conf.d/ ] && [ ! -L /etc/apache2/conf.d/zoneminder.conf ] && ln -s ../conf-available/zoneminder.conf /etc/apache2/conf.d/zoneminder.conf + fi + + # Enable CGI script module in apache (not enabled by default on jessie) + a2enmod cgi >/dev/null 2>&1 + + # Reload the web server + deb-systemd-invoke reload apache2.service || true +} + +# Do this when the package is installed, upgraded or reconfigured +if [ "$1" = "configure" ] || [ "$1" = "reconfigure" ]; then + + # Configure the web server + db_get zoneminder/webserver + webservers="$RET" + + for webserver in $webservers; do + webserver=${webserver%,} + # Currently we only support apache2 + if [ "$webserver" = "apache2" ] ; then + apache_install $1 + fi + done +fi + +#DEBHELPER# + +exit 0 diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.postrm b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.postrm new file mode 100644 index 000000000..441bb5218 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.postrm @@ -0,0 +1,41 @@ +#! /bin/sh +# postrm maintainer script for zoneminder-ui-base package + +set -e + +# Source the debconf stuff +if [ -f /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule +fi + +apache_remove() { + COMMON_STATE=$(dpkg-query -f '${Status}' -W 'apache2.2-common' 2>/dev/null | awk '{print $3}' || true) + if [ -e /usr/share/apache2/apache2-maintscript-helper ] ; then + . /usr/share/apache2/apache2-maintscript-helper + apache2_invoke disconf zoneminder + elif [ "$COMMON_STATE" = "installed" ] || [ "$COMMON_STATE" = "unpacked" ] ; then + rm -f /etc/apache2/conf.d/zoneminder.conf + fi + rm -f /etc/apache2/conf-available/zoneminder.conf + # Reload the web server + deb-systemd-invoke reload apache2.service || true +} + +if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then + # Deconfigure the web server + db_get zoneminder/webserver + for webserver in $RET; do + webserver=${webserver%,} + # Currently we only support apache2 + if [ "$webserver" = "apache2" ] ; then + apache_remove $1 + fi + done +fi + +#DEBHELPER# + +# postrm rm may freeze without that +db_stop + +exit 0 diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.postrm.debhelper b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.postrm.debhelper new file mode 100644 index 000000000..bc035b98c --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.postrm.debhelper @@ -0,0 +1,6 @@ +# Automatically added by dh_installdebconf +if [ "$1" = purge ] && [ -e /usr/share/debconf/confmodule ]; then + . /usr/share/debconf/confmodule + db_purge +fi +# End automatically added section diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.templates b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.templates new file mode 100644 index 000000000..31e70277f --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-base.templates @@ -0,0 +1,7 @@ +Template: zoneminder/webserver +Type: multiselect +Choices: apache2 +Default: apache2 +_Description: Web server to reconfigure automatically: + Please choose the web server that should be automatically configured for + ZoneMinder's web portal access. diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-classic.install b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-classic.install new file mode 100644 index 000000000..9532d9dc9 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-classic.install @@ -0,0 +1 @@ +usr/share/zoneminder/skins/classic diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-mobile.install b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-mobile.install new file mode 100644 index 000000000..464bb74eb --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-mobile.install @@ -0,0 +1 @@ +usr/share/zoneminder/skins/mobile diff --git a/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-xml.install b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-xml.install new file mode 100644 index 000000000..6617707f8 --- /dev/null +++ b/distros/ubuntu1504_cmake_split_packages/zoneminder-ui-xml.install @@ -0,0 +1 @@ +usr/share/zoneminder/skins/xml diff --git a/docs/api.rst b/docs/api.rst index 26b6be251..c5baaafb8 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -1,10 +1,10 @@ API -=== +^^^ -This document will provide an overview of ZoneMinder's API. +This document will provide an overview of ZoneMinder's API. This is work in progress. Overview --------- +^^^^^^^^ In an effort to further 'open up' ZoneMinder, an API was needed. This will allow quick integration with and development of ZoneMinder. @@ -14,7 +14,7 @@ provides a RESTful service and supports CRUD (create, retrieve, update, delete) functions for Monitors, Events, Frames, Zones and Config. Examples --------- +^^^^^^^^ Here be a list of examples. Some results may be truncated. @@ -22,97 +22,244 @@ You will see each URL ending in either ``.xml`` or ``.json``. This is the format of the request, and it determines the format that any data returned to you will be in. I like json, however you can use xml if you'd like. +(In all examples, replace 'server' with IP or hostname & port where ZoneMinder is running) + +API Version +^^^^^^^^^^^ +To retrieve the API version: +:: + http://server/zm/api/host/getVersion.json + + Return a list of all monitors ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -``curl -XGET http://zmdevapi/monitors.json`` +:: + + curl -XGET http://server/zm/api/monitors.json Retrieve monitor 1 -^^^^^^^^^^^^^^^^^^ -``curl -XGET http://zmdevapi/monitors/1.json`` +^^^^^^^^^^^^^^^^^^^ + + :: + + curl -XGET http://server/zm/api/monitors/1.json + + +Change State of Monitor 1 +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This API changes monitor 1 to Modect and Enabled +:: + + curl -XPOST http://server/zm/api/monitors/1.json -d "Monitor[Function]=Modect&Monitor[Enabled]:true" Add a monitor -^^^^^^^^^^^^^ +^^^^^^^^^^^^^^ This command will add a new http monitor. -``curl -XPOST http://zmdevapi/monitors.js -d "Monitor[Name]=Cliff-Burton \ -&Monitor[Function]=Modect \ -&Monitor[Protocol]=http \ -&Monitor[Method]=simple \ -&Monitor[Host]=ussr:pass@192.168.11.20 \ -&Monitor[Port]=80 \ -&Monitor[Path]=/mjpg/video.mjpg \ -&Monitor[Width]=704 \ -&Monitor[Height]=480 \ -&Monitor[Colours]=4"`` +:: + + curl -XPOST http://server/zm/api/monitors.json -d "Monitor[Name]=Cliff-Burton \ + &Monitor[Function]=Modect \ + &Monitor[Protocol]=http \ + &Monitor[Method]=simple \ + &Monitor[Host]=usr:pass@192.168.11.20 \ + &Monitor[Port]=80 \ + &Monitor[Path]=/mjpg/video.mjpg \ + &Monitor[Width]=704 \ + &Monitor[Height]=480 \ + &Monitor[Colours]=4" Edit monitor 1 -^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^ This command will change the 'Name' field of Monitor 1 to 'test1' -``curl -XPUT http://zmdevapi/monitors/1.json -d "Monitor[Name]=test1"`` +:: + + curl -XPUT http://server/zm/api/monitors/1.json -d "Monitor[Name]=test1" + Delete monitor 1 -^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^ This command will delete Monitor 1, but will _not_ delete any Events which depend on it. +:: + + curl -XDELETE http://server/zm/api/monitors/1.json -``curl -XDELETE http://zmdevapi/monitors/1.json`` Return a list of all events -^^^^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -``curl -XGET http://zmdevapi/events.json`` +:: + + curl -XGET http://server/zm/api/events.json + + +Note that events list can be quite large and this API (as with all other APIs in ZM) +uses pagination. Each page returns a specific set of entries. By default this is 25 +and ties into WEB_EVENTS_PER_PAGE in the ZM options menu. + +So the logic to iterate through all events should be something like this (pseudocode): +(unfortunately there is no way to get pageCount without getting the first page) + +:: + + data = http://server/zm/api/events.json?page=1 # this returns the first page + # The json object returned now has a property called data.pagination.pageCount + count = data.pagination.pageCount; + for (i=1, i=:2015-05-15 18:43:56/EndTime <=:2015-05-16 18:43:56.json + + +To try this in CuRL, you need to URL escape the spaces like so: + +:: + + curl -XGET "http://server/zm/api/events/index/MonitorId:5/StartTime%20>=:2015-05-15%2018:43:56/EndTime%20<=:2015-05-16%2018:43:56.json" + + +Return a list of events for all monitors within a specified date/time range +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +:: + + curl -XGET "http://server/zm/api/events/index/StartTime%20>=:2015-05-15%2018:43:56/EndTime%20<=:208:43:56.json" + + + +Configuration Apis +^^^^^^^^^^^^^^^^^^^ + +The APIs allow you to access all the configuration parameters of ZM that you typically set inside the web console. +This returns the full list of configuration parameters: + +:: + + curl -XGET http://server/zm/api/configs.json + + +Each configuration parameter has an Id, Name, Value and other fields. Chances are you are likely only going to focus on these 3. + +(Example of changing config TBD) + +Run State Apis ^^^^^^^^^^^^^^^ -This command will change the 'Value' field of Config 121 to 901. +ZM API can be used to start/stop/restart/list states of ZM as well +Examples: + +:: + + curl -XGET http://server/zm/api/states.json # returns list of run states + curl -XPOST http://server/zm/api/states/change/restart.json #restarts ZM + curl -XPOST http://server/zm/api/states/change/stop.json #Stops ZM + curl -XPOST http://server/zm/api/states/change/start.json #Starts ZM + -``curl -XPUT http://zmdevapi/configs/121.json -d "Config[Value]=901"`` Create a Zone -^^^^^^^^^^^^^ +^^^^^^^^^^^^^^ + +:: + + curl -XPOST http://server/zm/api/zones.json -d "Zone[Name]=Jason-Newsted \ + &Zone[MonitorId]=3 \ + &Zone[Type]=Active \ + &Zone[Units]=Percent \ + &Zone[NumCoords]=4 \ + &Zone[Coords]=0,0 639,0 639,479 0,479 \ + &Zone[AlarmRGB]=16711680 \ + &Zone[CheckMethod]=Blobs \ + &Zone[MinPixelThreshold]=25 \ + &Zone[MaxPixelThreshold]= \ + &Zone[MinAlarmPixels]=9216 \ + &Zone[MaxAlarmPixels]= \ + &Zone[FilterX]=3 \ + &Zone[FilterY]=3 \ + &Zone[MinFilterPixels]=9216 \ + &Zone[MaxFilterPixels]=230400 \ + &Zone[MinBlobPixels]=6144 \ + &Zone[MaxBlobPixels]= \ + &Zone[MinBlobs]=1 \ + &Zone[MaxBlobs]= \ + &Zone[OverloadFrames]=0" + +PTZ Control APIs +^^^^^^^^^^^^^^^^ +PTZ controls associated with a monitor are stored in the Controls table and not the Monitors table inside ZM. What that means is when you get the details of a Monitor, you will only know if it is controllable (isControllable:true) and the control ID. +To be able to retrieve PTZ information related to that Control ID, you need to use the controls API + +This returns all the control definitions: +:: + + curl http://server/zm/api/controls.json + +This returns control definitions for a specific control ID=5 +:: + + curl http://server/zm/api/controls/5.json + +Host APIs +^^^^^^^^^^ + +ZM APIs have various APIs that help you in determining host (aka ZM) daemon status, load etc. Some examples: + +:: + + curl -XGET http://server/zm/api/host/daemonCheck.json # 1 = ZM running 0=not running + curl -XGET http://server/zm/api/host/getLoad.json # returns current load of ZM + curl -XGET http://server/zm/api/host/getDiskPercent.json # returns in GB (not percentage), disk usage per monitor (that is, space taken to store various event related information,images etc. per monitor) `` -``curl -XPOST http://zmdevapi/zones.json -d "Zone[Name]=Jason-Newsted \ -&Zone[MonitorId]=3 \ -&Zone[Type]=Active \ -&Zone[Units]=Percent \ -&Zone[NumCoords]=4 \ -&Zone[Coords]=0,0 639,0 639,479 0,479 \ -&Zone[AlarmRGB]=16711680 \ -&Zone[CheckMethod]=Blobs \ -&Zone[MinPixelThreshold]=25 \ -&Zone[MaxPixelThreshold]= \ -&Zone[MinAlarmPixels]=9216 \ -&Zone[MaxAlarmPixels]= \ -&Zone[FilterX]=3 \ -&Zone[FilterY]=3 \ -&Zone[MinFilterPixels]=9216 \ -&Zone[MaxFilterPixels]=230400 \ -&Zone[MinBlobPixels]=6144 \ -&Zone[MaxBlobPixels]= \ -&Zone[MinBlobs]=1 \ -&Zone[MaxBlobs]= \ -&Zone[OverloadFrames]=0"`` diff --git a/m4/ac_check_sendfile.m4 b/m4/ac_check_sendfile.m4 new file mode 100644 index 000000000..12605d588 --- /dev/null +++ b/m4/ac_check_sendfile.m4 @@ -0,0 +1,63 @@ +AC_DEFUN([AC_CHECK_SENDFILE],[ +AC_MSG_CHECKING([whether sendfile() is supported and what prototype it has]) + +saved_CFLAGS="$CFLAGS" +CFLAGS="$CFLAGS -Werror-implicit-function-declaration" +ac_sendfile_supported=no +AC_TRY_LINK([#include + #include ], + [sendfile(1, 1, NULL, 0);], + [ + AC_DEFINE(HAVE_SENDFILE4_SUPPORT, 1, + [Define this if Linux/Solaris sendfile() is supported]) + AC_MSG_RESULT([Linux sendfile()]) + ac_sendfile_supported=yes + ], []) + +if test x$ac_sendfile_supported = xno; then + dnl Checking wether we need libsendfile + dnl Presumably on Solaris + AC_CHECK_LIB(sendfile, sendfile, + [ + AC_DEFINE(HAVE_SENDFILE4_SUPPORT, 1, + [Define this if Linux/Solaris sendfile() is supported]) + SENDFILE_LIBS="-lsendfile" + AC_SUBST(SENDFILE_LIBS) + AC_MSG_RESULT([Solaris sendfile()]) + ac_sendfile_supported=yes + ], []) +fi + +if test x$ac_sendfile_supported = xno; then + dnl Checking wether we have FreeBSD-like sendfile() support. + AC_TRY_LINK([#include + #include ], + [sendfile(1, 1, 0, 0, NULL, NULL, 0);], + [ + AC_DEFINE(HAVE_SENDFILE7_SUPPORT, 1, + [Define this if FreeBSD sendfile() is supported]) + AC_MSG_RESULT([FreeBSD sendfile()]) + ac_sendfile_supported=yes + ], []) +fi + +if test x$ac_sendfile_supported = xno; then + dnl Checking wether we have MacOS-like sendfile() support. + AC_TRY_LINK([#include + #include + #include ], + [sendfile(1, 1, 0, NULL, NULL, 0);], + [ + AC_DEFINE(HAVE_SENDFILE6_SUPPORT, 1, + [Define this if MacOS sendfile() is supported]) + AC_MSG_RESULT([MacOS sendfile()]) + ac_sendfile_supported=yes + ], []) +fi + +CFLAGS="$saved_CFLAGS" + +if test x$ac_sendfile_supported = xno; then + AC_MSG_RESULT([no sendfile() support, using read/send]) +fi +]) diff --git a/misc/zoneminder-tmpfiles.conf.in b/misc/zoneminder-tmpfiles.conf.in index 8f55ce295..79b27f909 100644 --- a/misc/zoneminder-tmpfiles.conf.in +++ b/misc/zoneminder-tmpfiles.conf.in @@ -1 +1,4 @@ -d @ZM_RUNDIR@ 0755 @WEB_USER@ @WEB_GROUP@ +D @ZM_RUNDIR@ 0755 @WEB_USER@ @WEB_GROUP@ +D @ZM_TMPDIR@ 0755 @WEB_USER@ @WEB_GROUP@ +D @ZM_SOCKDIR@ 0755 @WEB_USER@ @WEB_GROUP@ + diff --git a/onvif/modules/CMakeLists.txt b/onvif/modules/CMakeLists.txt index 5e3a878bb..9e46ef9f7 100644 --- a/onvif/modules/CMakeLists.txt +++ b/onvif/modules/CMakeLists.txt @@ -1,10 +1,18 @@ +# CMakeLists.txt for the ZoneMinder ONVIF modules. +# If this is an out-of-source build, copy the files we need to the binary directory +if(NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)) + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Makefile.PL" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/lib" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}" PATTERN "*.in" EXCLUDE) +endif(NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)) + +# MAKEMAKER_NOECHO_COMMAND previously defined in /scripts/zoneminder/CMakeLists.txt # Add build target for the perl modules -add_custom_target(zmonvifmodules ALL perl Makefile.PL FIRST_MAKEFILE=MakefilePerl PREFIX="${CMAKE_CURRENT_BINARY_DIR}/output" LIB="${CMAKE_CURRENT_BINARY_DIR}/output/${ZM_PERL_SUBPREFIX}" INSTALLSITEMAN3DIR="${CMAKE_CURRENT_BINARY_DIR}/output/${CMAKE_INSTALL_MANDIR}/man3" ${MAKEMAKER_NOECHO_COMMAND} COMMAND make --makefile=MakefilePerl COMMAND make --makefile=MakefilePerl pure_install COMMENT "Building ZoneMinder perl modules") +add_custom_target(zmonvifmodules ALL perl Makefile.PL ${ZM_PERL_MM_PARMS} FIRST_MAKEFILE=MakefilePerl DESTDIR="${CMAKE_CURRENT_BINARY_DIR}/output" ${MAKEMAKER_NOECHO_COMMAND} COMMAND make --makefile=MakefilePerl pure_install COMMENT "Building ZoneMinder perl ONVIF proxy module") # Add install target for the perl modules -install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/output/" DESTINATION "${CMAKE_INSTALL_PREFIX}") +install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/output/" DESTINATION "/") # Add additional files and directories to make clean set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "output;blib;pm_to_blib;MakefilePerl") diff --git a/onvif/modules/MYMETA.json b/onvif/modules/MYMETA.json deleted file mode 100644 index fbb5d7c77..000000000 --- a/onvif/modules/MYMETA.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "abstract" : "unknown", - "author" : [ - "Jan Hochstein" - ], - "dynamic_config" : 0, - "generated_by" : "ExtUtils::MakeMaker version 6.72, CPAN::Meta::Converter version 2.141520", - "license" : [ - "unknown" - ], - "meta-spec" : { - "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", - "version" : "2" - }, - "name" : "ONVIF", - "no_index" : { - "directory" : [ - "t", - "inc" - ] - }, - "prereqs" : { - "build" : { - "requires" : { - "ExtUtils::MakeMaker" : "0" - } - }, - "configure" : { - "requires" : { - "ExtUtils::MakeMaker" : "0" - } - }, - "runtime" : { - "requires" : {} - } - }, - "release_status" : "stable", - "version" : "" -} diff --git a/onvif/modules/MYMETA.yml b/onvif/modules/MYMETA.yml deleted file mode 100644 index 109544804..000000000 --- a/onvif/modules/MYMETA.yml +++ /dev/null @@ -1,21 +0,0 @@ ---- -abstract: unknown -author: - - 'Jan Hochstein' -build_requires: - ExtUtils::MakeMaker: '0' -configure_requires: - ExtUtils::MakeMaker: '0' -dynamic_config: 0 -generated_by: 'ExtUtils::MakeMaker version 6.72, CPAN::Meta::Converter version 2.141520' -license: unknown -meta-spec: - url: http://module-build.sourceforge.net/META-spec-v1.4.html - version: '1.4' -name: ONVIF -no_index: - directory: - - t - - inc -requires: {} -version: '' diff --git a/onvif/proxy/CMakeLists.txt b/onvif/proxy/CMakeLists.txt index fece81d11..0051bf2b1 100644 --- a/onvif/proxy/CMakeLists.txt +++ b/onvif/proxy/CMakeLists.txt @@ -1,10 +1,18 @@ +# CMakeLists.txt for the ZoneMinder ONVIF proxy module. +# If this is an out-of-source build, copy the files we need to the binary directory +if(NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)) + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Makefile.PL" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/lib" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}" PATTERN "*.in" EXCLUDE) +endif(NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)) + +# MAKEMAKER_NOECHO_COMMAND previously defined in /scripts/zoneminder/CMakeLists.txt # Add build target for the perl modules -add_custom_target(zmonvifproxy ALL perl Makefile.PL FIRST_MAKEFILE=MakefilePerl PREFIX="${CMAKE_CURRENT_BINARY_DIR}/output" LIB="${CMAKE_CURRENT_BINARY_DIR}/output/${ZM_PERL_SUBPREFIX}" INSTALLSITEMAN3DIR="${CMAKE_CURRENT_BINARY_DIR}/output/${CMAKE_INSTALL_MANDIR}/man3" ${MAKEMAKER_NOECHO_COMMAND} COMMAND make --makefile=MakefilePerl COMMAND make --makefile=MakefilePerl pure_install COMMENT "Building ZoneMinder perl modules") +add_custom_target(zmonvifproxy ALL perl Makefile.PL ${ZM_PERL_MM_PARMS} FIRST_MAKEFILE=MakefilePerl DESTDIR="${CMAKE_CURRENT_BINARY_DIR}/output" ${MAKEMAKER_NOECHO_COMMAND} COMMAND make --makefile=MakefilePerl pure_install COMMENT "Building ZoneMinder perl ONVIF proxy module") # Add install target for the perl modules -install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/output/" DESTINATION "${CMAKE_INSTALL_PREFIX}") +install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/output/" DESTINATION "/") # Add additional files and directories to make clean set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "output;blib;pm_to_blib;MakefilePerl") diff --git a/onvif/proxy/MYMETA.json b/onvif/proxy/MYMETA.json deleted file mode 100644 index fbb5d7c77..000000000 --- a/onvif/proxy/MYMETA.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "abstract" : "unknown", - "author" : [ - "Jan Hochstein" - ], - "dynamic_config" : 0, - "generated_by" : "ExtUtils::MakeMaker version 6.72, CPAN::Meta::Converter version 2.141520", - "license" : [ - "unknown" - ], - "meta-spec" : { - "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", - "version" : "2" - }, - "name" : "ONVIF", - "no_index" : { - "directory" : [ - "t", - "inc" - ] - }, - "prereqs" : { - "build" : { - "requires" : { - "ExtUtils::MakeMaker" : "0" - } - }, - "configure" : { - "requires" : { - "ExtUtils::MakeMaker" : "0" - } - }, - "runtime" : { - "requires" : {} - } - }, - "release_status" : "stable", - "version" : "" -} diff --git a/onvif/proxy/MYMETA.yml b/onvif/proxy/MYMETA.yml deleted file mode 100644 index 109544804..000000000 --- a/onvif/proxy/MYMETA.yml +++ /dev/null @@ -1,21 +0,0 @@ ---- -abstract: unknown -author: - - 'Jan Hochstein' -build_requires: - ExtUtils::MakeMaker: '0' -configure_requires: - ExtUtils::MakeMaker: '0' -dynamic_config: 0 -generated_by: 'ExtUtils::MakeMaker version 6.72, CPAN::Meta::Converter version 2.141520' -license: unknown -meta-spec: - url: http://module-build.sourceforge.net/META-spec-v1.4.html - version: '1.4' -name: ONVIF -no_index: - directory: - - t - - inc -requires: {} -version: '' diff --git a/scripts/ZoneMinder/CMakeLists.txt b/scripts/ZoneMinder/CMakeLists.txt index 61bee83af..09c02b816 100644 --- a/scripts/ZoneMinder/CMakeLists.txt +++ b/scripts/ZoneMinder/CMakeLists.txt @@ -2,13 +2,13 @@ # If this is an out-of-source build, copy the files we need to the binary directory if(NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)) - execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/Changes" "${CMAKE_CURRENT_BINARY_DIR}/Changes") - execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/Makefile.PL" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.PL") - execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/MANIFEST" "${CMAKE_CURRENT_BINARY_DIR}/MANIFEST") - execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/META.yml" "${CMAKE_CURRENT_BINARY_DIR}/META.yml") - execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/README" "${CMAKE_CURRENT_BINARY_DIR}/README") - execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/t" "${CMAKE_CURRENT_BINARY_DIR}/t") - execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/lib" "${CMAKE_CURRENT_BINARY_DIR}/lib") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Changes" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/Makefile.PL" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/MANIFEST" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/META.yml" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/README" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/t" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}") + file(COPY "${CMAKE_CURRENT_SOURCE_DIR}/lib" DESTINATION "${CMAKE_CURRENT_BINARY_DIR}" PATTERN "*.in" EXCLUDE) endif(NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)) # Create files from the .in files @@ -24,10 +24,10 @@ else(CMAKE_VERBOSE_MAKEFILE) endif(CMAKE_VERBOSE_MAKEFILE) # Add build target for the perl modules -add_custom_target(zmperlmodules ALL perl Makefile.PL FIRST_MAKEFILE=MakefilePerl PREFIX="${CMAKE_CURRENT_BINARY_DIR}/output" LIB="${CMAKE_CURRENT_BINARY_DIR}/output/${ZM_PERL_SUBPREFIX}" INSTALLSITEMAN3DIR="${CMAKE_CURRENT_BINARY_DIR}/output/${CMAKE_INSTALL_MANDIR}/man3" ${MAKEMAKER_NOECHO_COMMAND} COMMAND make --makefile=MakefilePerl COMMAND make --makefile=MakefilePerl pure_install COMMENT "Building ZoneMinder perl modules") +add_custom_target(zmperlmodules ALL perl Makefile.PL ${ZM_PERL_MM_PARMS} FIRST_MAKEFILE=MakefilePerl DESTDIR="${CMAKE_CURRENT_BINARY_DIR}/output" ${MAKEMAKER_NOECHO_COMMAND} COMMAND make --makefile=MakefilePerl pure_install COMMENT "Building ZoneMinder perl modules") # Add install target for the perl modules -install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/output/" DESTINATION "${CMAKE_INSTALL_PREFIX}") +install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/output/" DESTINATION "/") # Add additional files and directories to make clean set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "output;blib;pm_to_blib;MakefilePerl") diff --git a/scripts/ZoneMinder/lib/ZoneMinder.pm b/scripts/ZoneMinder/lib/ZoneMinder.pm index 41c972650..87a6b14b7 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder.pm @@ -36,34 +36,42 @@ use ZoneMinder::General qw(:all); use ZoneMinder::Database qw(:all); use ZoneMinder::Memory qw(:all); -our @ISA = qw(Exporter ZoneMinder::Base ZoneMinder::Config ZoneMinder::Logger ZoneMinder::General ZoneMinder::Database ZoneMinder::Memory); +our @ISA = qw( + Exporter + ZoneMinder::Base + ZoneMinder::Config + ZoneMinder::Logger + ZoneMinder::General + ZoneMinder::Database + ZoneMinder::Memory +); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. -# This allows declaration use ZoneMinder ':all'; +# This allows declaration use ZoneMinder ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. our %EXPORT_TAGS = ( - 'base' => [ - @ZoneMinder::Base::EXPORT_OK - ], - 'config' => [ - @ZoneMinder::Config::EXPORT_OK - ], - 'debug' => [ - @ZoneMinder::Logger::EXPORT_OK - ], - 'general' => [ - @ZoneMinder::General::EXPORT_OK - ], - 'database' => [ - @ZoneMinder::Database::EXPORT_OK - ], - 'memory' => [ - @ZoneMinder::Memory::EXPORT_OK - ], + 'base' => [ + @ZoneMinder::Base::EXPORT_OK + ], + 'config' => [ + @ZoneMinder::Config::EXPORT_OK + ], + 'debug' => [ + @ZoneMinder::Logger::EXPORT_OK + ], + 'general' => [ + @ZoneMinder::General::EXPORT_OK + ], + 'database' => [ + @ZoneMinder::Database::EXPORT_OK + ], + 'memory' => [ + @ZoneMinder::Memory::EXPORT_OK + ], ); push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Base.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/Base.pm.in index 3f10e9137..70140ea66 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Base.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/Base.pm.in @@ -19,7 +19,7 @@ # # ========================================================================== # -# This module contains the common definitions and functions used by the rest +# This module contains the common definitions and functions used by the rest # of the ZoneMinder scripts # package ZoneMinder::Base; @@ -38,7 +38,7 @@ use constant ZM_VERSION => "@VERSION@"; # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. -# This allows declaration use ZoneMinder ':all'; +# This allows declaration use ZoneMinder ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. our %EXPORT_TAGS = ( 'all' => [ qw(ZM_VERSION) ] ); @@ -62,7 +62,11 @@ ZoneMinder::Base - Base perl module for ZoneMinder =head1 DESCRIPTION -This module is the base module for the rest of the ZoneMinder modules. It is included by each of the other modules but serves no purpose other than to propagate the perl module version amongst the other modules. You will never need to use this module directly but if you write new ZoneMinder modules they should include it. +This module is the base module for the rest of the ZoneMinder modules. It +is included by each of the other modules but serves no purpose other than +to propagate the perl module version amongst the other modules. You will +never need to use this module directly but if you write new ZoneMinder +modules they should include it. =head2 EXPORT diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in index 21f7a2d50..e38d151c0 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/Config.pm.in @@ -19,7 +19,7 @@ # # ========================================================================== # -# This module contains the common definitions and functions used by the rest +# This module contains the common definitions and functions used by the rest # of the ZoneMinder scripts # package ZoneMinder::Config; @@ -38,15 +38,15 @@ use vars qw( %Config ); # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. -# This allows declaration use ZoneMinder ':all'; +# This allows declaration use ZoneMinder ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. our @EXPORT_CONFIG = qw( %Config ); # Get populated by BEGIN our %EXPORT_TAGS = ( - 'constants' => [ qw( - ZM_PID - ) ] + 'constants' => [ qw( + ZM_PID + ) ] ); push( @{$EXPORT_TAGS{config}}, @EXPORT_CONFIG ); push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; @@ -65,38 +65,43 @@ use Carp; # Load the config from the database into the symbol table BEGIN { - my $config_file = ZM_CONFIG; - ( my $local_config_file = $config_file ) =~ s|^.*/|./|; - if ( -s $local_config_file and -r $local_config_file ) - { - print( STDERR "Warning, overriding installed $local_config_file file with local copy\n" ); - $config_file = $local_config_file; - } - open( CONFIG, "<".$config_file ) or croak( "Can't open config file '$config_file': $!" ); - foreach my $str ( ) - { - next if ( $str =~ /^\s*$/ ); - next if ( $str =~ /^\s*#/ ); + my $config_file = ZM_CONFIG; + ( my $local_config_file = $config_file ) =~ s|^.*/|./|; + if ( -s $local_config_file and -r $local_config_file ) + { + print( STDERR "Warning, overriding installed $local_config_file file with local copy\n" ); + $config_file = $local_config_file; + } + open( my $CONFIG, "<", $config_file ) + or croak( "Can't open config file '$config_file': $!" ); + foreach my $str ( <$CONFIG> ) + { + next if ( $str =~ /^\s*$/ ); + next if ( $str =~ /^\s*#/ ); my ( $name, $value ) = $str =~ /^\s*([^=\s]+)\s*=\s*(.*?)\s*$/; - if ( ! $name ) { - print( STDERR "Warning, bad line in $config_file: $str\n" ); - next; - } # end if - $name =~ tr/a-z/A-Z/; - $Config{$name} = $value; - } - close( CONFIG ); + if ( ! $name ) { + print( STDERR "Warning, bad line in $config_file: $str\n" ); + next; + } # end if + $name =~ tr/a-z/A-Z/; + $Config{$name} = $value; + } + close( $CONFIG ); - use DBI; - my $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$Config{ZM_DB_HOST}, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ) or croak( "Can't connect to db" ); - my $sql = 'select * from Config'; - my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute() or croak( "Can't execute: ".$sth->errstr() ); - while( my $config = $sth->fetchrow_hashref() ) { - $Config{$config->{Name}} = $config->{Value}; - } - $sth->finish(); - #$dbh->disconnect(); + use DBI; + my $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} + .";host=".$Config{ZM_DB_HOST} + , $Config{ZM_DB_USER} + , $Config{ZM_DB_PASS} + ) or croak( "Can't connect to db" ); + my $sql = 'select * from Config'; + my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() or croak( "Can't execute: ".$sth->errstr() ); + while( my $config = $sth->fetchrow_hashref() ) { + $Config{$config->{Name}} = $config->{Value}; + } + $sth->finish(); + #$dbh->disconnect(); } 1; @@ -112,9 +117,16 @@ ZoneMinder::Config - ZoneMinder configuration module. =head1 DESCRIPTION -The ZoneMinder::Config module is used to import the ZoneMinder configuration from the database. It will do this at compile time in a BEGIN block and require access to the zm.conf file either in the current directory or in its defined location in order to determine database access details, configuration from this file will also be included. If the :all or :config tags are used then this configuration is exported into the namespace of the calling program or module. +The ZoneMinder::Config module is used to import the ZoneMinder +configuration from the database. It will do this at compile time in a BEGIN +block and require access to the zm.conf file either in the current +directory or in its defined location in order to determine database access +details, configuration from this file will also be included. If the :all or +:config tags are used then this configuration is exported into the +namespace of the calling program or module. -Once the configuration has been imported then configuration variables are defined as constants and can be accessed directory by name, e.g. +Once the configuration has been imported then configuration variables are +defined as constants and can be accessed directory by name, e.g. $lang = $Config{ZM_LANG_DEFAULT}; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm b/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm index 673e13c98..f586448fb 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigAdmin.pm @@ -19,7 +19,7 @@ # # ========================================================================== # -# This module contains the debug definitions and functions used by the rest +# This module contains the debug definitions and functions used by the rest # of the ZoneMinder scripts # package ZoneMinder::ConfigAdmin; @@ -37,14 +37,14 @@ our @ISA = qw(Exporter ZoneMinder::Base); # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. -# This allows declaration use ZoneMinder ':all'; +# This allows declaration use ZoneMinder ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. our %EXPORT_TAGS = ( - 'functions' => [ qw( - loadConfigFromDB - saveConfigToDB - ) ] + 'functions' => [ qw( + loadConfigFromDB + saveConfigToDB + ) ] ); push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; @@ -67,99 +67,138 @@ use Carp; sub loadConfigFromDB { - print( "Loading config from DB\n" ); - my $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$Config{ZM_DB_HOST}, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ); - - if ( !$dbh ) - { - print( "Error: unable to load options from database: $DBI::errstr\n" ); - return( 0 ); - } - my $sql = "select * from Config"; - my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute() or croak( "Can't execute: ".$sth->errstr() ); - my $option_count = 0; - while( my $config = $sth->fetchrow_hashref() ) - { - my ( $name, $value ) = ( $config->{Name}, $config->{Value} ); - #print( "Name = '$name'\n" ); - my $option = $options_hash{$name}; - if ( !$option ) - { - warn( "No option '$name' found, removing" ); - next; - } - #next if ( $option->{category} eq 'hidden' ); - if ( defined($value) ) - { - if ( $option->{type} == $types{boolean} ) - { - $option->{value} = $value?"yes":"no"; - } - else - { - $option->{value} = $value; - } - } - $option_count++;; - } - $sth->finish(); - $dbh->disconnect(); - return( $option_count ); + print( "Loading config from DB\n" ); + my $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} + .";host=".$Config{ZM_DB_HOST} + ,$Config{ZM_DB_USER} + ,$Config{ZM_DB_PASS} + ); + + if ( !$dbh ) + { + print( "Error: unable to load options from database: $DBI::errstr\n" ); + return( 0 ); + } + my $sql = "select * from Config"; + my $sth = $dbh->prepare_cached( $sql ) + or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() + or croak( "Can't execute: ".$sth->errstr() ); + my $option_count = 0; + while( my $config = $sth->fetchrow_hashref() ) + { + my ( $name, $value ) = ( $config->{Name}, $config->{Value} ); + #print( "Name = '$name'\n" ); + my $option = $options_hash{$name}; + if ( !$option ) + { + warn( "No option '$name' found, removing" ); + next; + } + #next if ( $option->{category} eq 'hidden' ); + if ( defined($value) ) + { + if ( $option->{type} == $types{boolean} ) + { + $option->{value} = $value?"yes":"no"; + } + else + { + $option->{value} = $value; + } + } + $option_count++;; + } + $sth->finish(); + $dbh->disconnect(); + return( $option_count ); } sub saveConfigToDB { - print( "Saving config to DB\n" ); - my $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$Config{ZM_DB_HOST}, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ); + print( "Saving config to DB\n" ); + my $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} + .";host=".$Config{ZM_DB_HOST} + ,$Config{ZM_DB_USER} + ,$Config{ZM_DB_PASS} + ); - if ( !$dbh ) - { - print( "Error: unable to save options to database: $DBI::errstr\n" ); - return( 0 ); - } + if ( !$dbh ) + { + print( "Error: unable to save options to database: $DBI::errstr\n" ); + return( 0 ); + } my $ac = $dbh->{AutoCommit}; $dbh->{AutoCommit} = 0; - $dbh->do('LOCK TABLE Config WRITE') or croak( "Can't lock Config table: " . $dbh->errstr() ); + $dbh->do('LOCK TABLE Config WRITE') + or croak( "Can't lock Config table: " . $dbh->errstr() ); - my $sql = "delete from Config"; - my $res = $dbh->do( $sql ) or croak( "Can't do '$sql': ".$dbh->errstr() ); + my $sql = "delete from Config"; + my $res = $dbh->do( $sql ) + or croak( "Can't do '$sql': ".$dbh->errstr() ); - $sql = "replace into Config set Id = ?, Name = ?, Value = ?, Type = ?, DefaultValue = ?, Hint = ?, Pattern = ?, Format = ?, Prompt = ?, Help = ?, Category = ?, Readonly = ?, Requires = ?"; - my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); - foreach my $option ( @options ) - { - #next if ( $option->{category} eq 'hidden' ); - #print( $option->{name}."\n" ) if ( !$option->{category} ); - $option->{db_type} = $option->{type}->{db_type}; - $option->{db_hint} = $option->{type}->{hint}; - $option->{db_pattern} = $option->{type}->{pattern}; - $option->{db_format} = $option->{type}->{format}; - if ( $option->{db_type} eq "boolean" ) - { - $option->{db_value} = ($option->{value} eq "yes")?"1":"0"; - } - else - { - $option->{db_value} = $option->{value}; - } - if ( my $requires = $option->{requires} ) - { - $option->{db_requires} = join( ";", map { my $value = $_->{value}; $value = ($value eq "yes")?1:0 if ( $options_hash{$_->{name}}->{db_type} eq "boolean" ); ( "$_->{name}=$value" ) } @$requires ); - } - else - { - } - my $res = $sth->execute( $option->{id}, $option->{name}, $option->{db_value}, $option->{db_type}, $option->{default}, $option->{db_hint}, $option->{db_pattern}, $option->{db_format}, $option->{description}, $option->{help}, $option->{category}, $option->{readonly}?1:0, $option->{db_requires} ) or croak( "Can't execute: ".$sth->errstr() ); - } - $sth->finish(); + $sql = "replace into Config set Id = ?, Name = ?, Value = ?, Type = ?, DefaultValue = ?, Hint = ?, Pattern = ?, Format = ?, Prompt = ?, Help = ?, Category = ?, Readonly = ?, Requires = ?"; + my $sth = $dbh->prepare_cached( $sql ) + or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + foreach my $option ( @options ) + { + #next if ( $option->{category} eq 'hidden' ); + #print( $option->{name}."\n" ) if ( !$option->{category} ); + $option->{db_type} = $option->{type}->{db_type}; + $option->{db_hint} = $option->{type}->{hint}; + $option->{db_pattern} = $option->{type}->{pattern}; + $option->{db_format} = $option->{type}->{format}; + if ( $option->{db_type} eq "boolean" ) + { + $option->{db_value} = ($option->{value} eq "yes") + ? "1" + : "0" + ; + } + else + { + $option->{db_value} = $option->{value}; + } + if ( my $requires = $option->{requires} ) + { + $option->{db_requires} = join( ";", + map { + my $value = $_->{value}; + $value = ($value eq "yes") + ? 1 + : 0 + if ( $options_hash{$_->{name}}->{db_type} eq "boolean" ) + ; ( "$_->{name}=$value" ) + } @$requires + ); + } + else + { + } + my $res = $sth->execute( + $option->{id}, + $option->{name}, + $option->{db_value}, + $option->{db_type}, + $option->{default}, + $option->{db_hint}, + $option->{db_pattern}, + $option->{db_format}, + $option->{description}, + $option->{help}, + $option->{category}, + $option->{readonly} ? 1 : 0, + $option->{db_requires} + ) or croak( "Can't execute: ".$sth->errstr() ); + } + $sth->finish(); $dbh->do('UNLOCK TABLES'); $dbh->{AutoCommit} = $ac; - $dbh->disconnect(); + $dbh->disconnect(); } 1; @@ -179,9 +218,15 @@ ZoneMinder::ConfigAdmin - ZoneMinder Configuration Administration module =head1 DESCRIPTION -The ZoneMinder:ConfigAdmin module contains the master definition of the ZoneMinder configuration options as well as helper methods. This module is intended for specialist confguration management and would not normally be used by end users. +The ZoneMinder:ConfigAdmin module contains the master definition of the +ZoneMinder configuration options as well as helper methods. This module is +intended for specialist confguration management and would not normally be +used by end users. -The configuration held in this module, which was previously in zmconfig.pl, includes the name, default value, description, help text, type and category for each option, as well as a number of additional fields in a small number of cases. +The configuration held in this module, which was previously in zmconfig.pl, +includes the name, default value, description, help text, type and category +for each option, as well as a number of additional fields in a small number +of cases. =head1 METHODS @@ -189,11 +234,19 @@ The configuration held in this module, which was previously in zmconfig.pl, incl =item loadConfigFromDB (); -Loads existing configuration from the database (if any) and merges it with the definitions held in this module. This results in the merging of any new configuration and the removal of any deprecated configuration while preserving the existing values of every else. +Loads existing configuration from the database (if any) and merges it with +the definitions held in this module. This results in the merging of any new +configuration and the removal of any deprecated configuration while +preserving the existing values of every else. =item saveConfigToDB (); -Saves configuration held in memory to the database. The act of loading and saving configuration is a convenient way to ensure that the configuration held in the database corresponds with the most recent definitions and that all components are using the same set of configuration. +Saves configuration held in memory to the database. The act of loading and +saving configuration is a convenient way to ensure that the configuration +held in the database corresponds with the most recent definitions and that +all components are using the same set of configuration. + +=back =head2 EXPORT diff --git a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in index 46da03bf0..e55e856e4 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/ConfigData.pm.in @@ -19,7 +19,7 @@ # # ========================================================================== # -# This module contains the debug definitions and functions used by the rest +# This module contains the debug definitions and functions used by the rest # of the ZoneMinder scripts # package ZoneMinder::ConfigData; @@ -37,15 +37,15 @@ our @ISA = qw(Exporter ZoneMinder::Base); # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. -# This allows declaration use ZoneMinder ':all'; +# This allows declaration use ZoneMinder ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. our %EXPORT_TAGS = ( - 'data' => [ qw( - %types - @options - %options_hash - ) ] + 'data' => [ qw( + %types + @options + %options_hash + ) ] ); push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; @@ -73,944 +73,2022 @@ sub INIT # Types our %types = ( - string => { db_type=>"string", hint=>"string", pattern=>qr|^(.+)$|, format=>q( $1 ) }, - alphanum => { db_type=>"string", hint=>"alphanumeric", pattern=>qr|^([a-zA-Z0-9-_]+)$|, format=>q( $1 ) }, - text => { db_type=>"text", hint=>"free text", pattern=>qr|^(.+)$|, format=>q( $1 ) }, - boolean => { db_type=>"boolean", hint=>"yes|no", pattern=>qr|^([yn])|i, check=>q( $1 ), format=>q( ($1 =~ /^y/) ? "yes" : "no" ) }, - integer => { db_type=>"integer", hint=>"integer", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - decimal => { db_type=>"decimal", hint=>"decimal", pattern=>qr|^(\d+(?:\.\d+)?)$|, format=>q( $1 ) }, - hexadecimal => { db_type=>"hexadecimal", hint=>"hexadecimal", pattern=>qr|^(?:0x)?([0-9a-f]{1,8})$|, format=>q( "0x".$1 ) }, - tristate => { db_type=>"string", hint=>"auto|yes|no", pattern=>qr|^([ayn])|i, check=>q( $1 ), format=>q( ($1 =~ /^y/) ? "yes" : ($1 =~ /^n/ ? "no" : "auto" ) ) }, - abs_path => { db_type=>"string", hint=>"/absolute/path/to/somewhere", pattern=>qr|^((?:/[^/]*)+?)/?$|, format=>q( $1 ) }, - rel_path => { db_type=>"string", hint=>"relative/path/to/somewhere", pattern=>qr|^((?:[^/].*)?)/?$|, format=>q( $1 ) }, - directory => { db_type=>"string", hint=>"directory", pattern=>qr|^([a-zA-Z0-9-_.]+)$|, format=>q( $1 ) }, - file => { db_type=>"string", hint=>"filename", pattern=>qr|^([a-zA-Z0-9-_.]+)$|, format=>q( $1 ) }, - hostname => { db_type=>"string", hint=>"host.your.domain", pattern=>qr|^([a-zA-Z0-9_.-]+)$|, format=>q( $1 ) }, - url => { db_type=>"string", hint=>"http://host.your.domain/", pattern=>qr|^(?:http://)?(.+)$|, format=>q( "http://".$1 ) }, - email => { db_type=>"string", hint=>"your.name\@your.domain", pattern=>qr|^([a-zA-Z0-9_.-]+)\@([a-zA-Z0-9_.-]+)$|, format=>q( $1\@$2 ) }, + string => { + db_type =>"string", + hint =>"string", + pattern =>qr|^(.+)$|, + format =>q( $1 ) + }, + alphanum => { + db_type =>"string", + hint =>"alphanumeric", + pattern =>qr|^([a-zA-Z0-9-_]+)$|, + format =>q( $1 ) + }, + text => { + db_type =>"text", + hint =>"free text", + pattern =>qr|^(.+)$|, + format =>q( $1 ) + }, + boolean => { + db_type =>"boolean", + hint =>"yes|no", + pattern =>qr|^([yn])|i, + check =>q( $1 ), + format =>q( ($1 =~ /^y/) + ? "yes" + : "no" + ) + }, + integer => { + db_type =>"integer", + hint =>"integer", + pattern =>qr|^(\d+)$|, + format =>q( $1 ) + }, + decimal => { + db_type =>"decimal", + hint =>"decimal", + pattern =>qr|^(\d+(?:\.\d+)?)$|, + format =>q( $1 ) + }, + hexadecimal => { + db_type =>"hexadecimal", + hint =>"hexadecimal", + pattern =>qr|^(?:0x)?([0-9a-f]{1,8})$|, + format =>q( "0x".$1 ) + }, + tristate => { + db_type =>"string", + hint =>"auto|yes|no", + pattern =>qr|^([ayn])|i, check=>q( $1 ), + format =>q( ($1 =~ /^y/) + ? "yes" + : ($1 =~ /^n/ ? "no" : "auto" ) + ) + }, + abs_path => { + db_type =>"string", + hint =>"/absolute/path/to/somewhere", + pattern =>qr|^((?:/[^/]*)+?)/?$|, + format =>q( $1 ) + }, + rel_path => { + db_type =>"string", + hint =>"relative/path/to/somewhere", + pattern =>qr|^((?:[^/].*)?)/?$|, + format =>q( $1 ) + }, + directory => { + db_type =>"string", + hint =>"directory", + pattern =>qr|^([a-zA-Z0-9-_.]+)$|, + format =>q( $1 ) + }, + file => { + db_type =>"string", + hint =>"filename", + pattern =>qr|^([a-zA-Z0-9-_.]+)$|, + format =>q( $1 ) + }, + hostname => { + db_type =>"string", + hint =>"host.your.domain", + pattern =>qr|^([a-zA-Z0-9_.-]+)$|, + format =>q( $1 ) + }, + url => { + db_type =>"string", + hint =>"http://host.your.domain/", + pattern =>qr|^(?:http://)?(.+)$|, + format =>q( "http://".$1 ) + }, + email => { + db_type =>"string", + hint =>"your.name\@your.domain", + pattern =>qr|^([a-zA-Z0-9_.-]+)\@([a-zA-Z0-9_.-]+)$|, + format =>q( $1\@$2 ) + }, ); +sub qqq { ## Un-pad paragraph of text. + local $_ = shift; + s{\n?^\s*}{ }mg; + return $_; +} + our @options = ( { - name => "ZM_SKIN_DEFAULT", - default => "classic", + name => "ZM_SKIN_DEFAULT", + default => "classic", description => "Default skin used by web interface", - help => "ZoneMinder allows the use of many different web interfaces. This option allows you to set the default skin used by the website. Users can change their skin later, this merely sets the default.", - type => $types{string}, - category => "system", + + help => qqq(" + ZoneMinder allows the use of many different web interfaces. + This option allows you to set the default skin used by the + website. Users can change their skin later, this merely sets + the default. + "), + type => $types{string}, + category => "system", }, { - name => "ZM_CSS_DEFAULT", - default => "classic", + name => "ZM_CSS_DEFAULT", + default => "classic", description => "Default set of css files used by web interface", - help => "ZoneMinder allows the use of many different web interfaces, and some skins allow the use of different set of CSS files to control the appearance. This option allows you to set the default set of css files used by the website. Users can change their css later, this merely sets the default.", - type => $types{string}, - category => "system", + help => qqq(" + ZoneMinder allows the use of many different web interfaces, and + some skins allow the use of different set of CSS files to + control the appearance. This option allows you to set the + default set of css files used by the website. Users can change + their css later, this merely sets the default. + "), + type => $types{string}, + category => "system", }, - { - name => "ZM_LANG_DEFAULT", - default => "en_gb", - description => "Default language used by web interface", - help => "ZoneMinder allows the web interface to use languages other than English if the appropriate language file has been created and is present. This option allows you to change the default language that is used from the shipped language, British English, to another language", - type => $types{string}, - category => "system", - }, - { - name => "ZM_OPT_USE_AUTH", - default => "no", - description => "Authenticate user logins to ZoneMinder", - help => "ZoneMinder can run in two modes. The simplest is an entirely unauthenticated mode where anyone can access ZoneMinder and perform all tasks. This is most suitable for installations where the web server access is limited in other ways. The other mode enables user accounts with varying sets of permissions. Users must login or authenticate to access ZoneMinder and are limited by their defined permissions.", - type => $types{boolean}, - category => "system", - }, - { - name => "ZM_AUTH_TYPE", - default => "builtin", - description => "What is used to authenticate ZoneMinder users", - help => "ZoneMinder can use two methods to authenticate users when running in authenticated mode. The first is a builtin method where ZoneMinder provides facilities for users to log in and maintains track of their identity. The second method allows interworking with other methods such as http basic authentication which passes an independently authentication 'remote' user via http. In this case ZoneMinder would use the supplied user without additional authentication provided such a user is configured ion ZoneMinder.", - requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" } ], - type => { db_type=>"string", hint=>"builtin|remote", pattern=>qr|^([br])|i, format=>q( $1 =~ /^b/ ? "builtin" : "remote" ) }, - category => "system", - }, - { - name => "ZM_AUTH_RELAY", - default => "hashed", - description => "Method used to relay authentication information", - help => "When ZoneMinder is running in authenticated mode it can pass user details between the web pages and the back end processes. There are two methods for doing this. This first is to use a time limited hashed string which contains no direct username or password details, the second method is to pass the username and passwords around in plaintext. This method is not recommend except where you do not have the md5 libraries available on your system or you have a completely isolated system with no external access. You can also switch off authentication relaying if your system is isolated in other ways.", - requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" } ], - type => { db_type=>"string", hint=>"hashed|plain|none", pattern=>qr|^([hpn])|i, format=>q( ($1 =~ /^h/) ? "hashed" : ($1 =~ /^p/ ? "plain" : "none" ) ) }, - category => "system", - }, - { - name => "ZM_AUTH_HASH_SECRET", - default => "...Change me to something unique...", - description => "Secret for encoding hashed authentication information", - help => "When ZoneMinder is running in hashed authenticated mode it is necessary to generate hashed strings containing encrypted sensitive information such as usernames and password. Although these string are reasonably secure the addition of a random secret increases security substantially.", - requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, { name=>"ZM_AUTH_RELAY", value=>"hashed" } ], - type => $types{string}, - category => "system", - }, - { - name => "ZM_AUTH_HASH_IPS", - default => "yes", - description => "Include IP addresses in the authentication hash", - help => "When ZoneMinder is running in hashed authenticated mode it can optionally include the requesting IP address in the resultant hash. This adds an extra level of security as only requests from that address may use that authentication key. However in some circumstances, such as access over mobile networks, the requesting address can change for each request which will cause most requests to fail. This option allows you to control whether IP addresses are included in the authentication hash on your system. If you experience intermitent problems with authentication, switching this option off may help.", - requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, { name=>"ZM_AUTH_RELAY", value=>"hashed" } ], - type => $types{boolean}, - category => "system", - }, - { - name => "ZM_AUTH_HASH_LOGINS", - default => "no", - description => "Allow login by authentication hash", - help => "The normal process for logging into ZoneMinder is via the login screen with username and password. In some circumstances it may be desirable to allow access directly to one or more pages, for instance from a third party application. If this option is enabled then adding an 'auth' parameter to any request will include a shortcut login bypassing the login screen, if not already logged in. As authentication hashes are time and, optionally, IP limited this can allow short-term access to ZoneMinder screens from other web pages etc. In order to use this the calling application will hae to generate the authentication hash itself and ensure it is valid. If you use this option you should ensure that you have modified the ZM_AUTH_HASH_SECRET to somethign unique to your system.", - requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, { name=>"ZM_AUTH_RELAY", value=>"hashed" } ], - type => $types{boolean}, - category => "system", - }, - { - name => "ZM_DIR_EVENTS", - default => "events", - description => "Directory where events are stored", - help => "This is the path to the events directory where all the event images and other miscellaneous files are stored. CAUTION: The directory you specify here cannot be outside the web root. This is a common mistake. Most users should never change this value. If you intend to record events to a second disk or network share, then you should mount the drive or share directly to the ZoneMinder events folder or follow the instructions in the ZoneMinder Wiki titled Using a dedicated Hard Drive.", - type => $types{directory}, - category => "paths", - }, - { - name => "ZM_USE_DEEP_STORAGE", - default => "yes", - description => "Use a deep filesystem hierarchy for events", - help => "Traditionally ZoneMinder stores all events for a monitor in one directory for that monitor. This is simple and efficient except when you have very large amounts of events. Some filesystems are unable to store more than 32k files in one directory and even without this limitation, large numbers of files in a directory can slow creation and deletion of files. This option allows you to select an alternate method of storing events by year/month/day/hour/min/second which has the effect of separating events out into more directories, resulting in less per directory, and also making it easier to manually navigate to any events that may have happened at a particular time or date.", - type => $types{boolean}, - category => "paths", - }, - { - name => "ZM_DIR_IMAGES", - default => "images", - description => "Directory where the images that the ZoneMinder client generates are stored", - help => "ZoneMinder generates a myriad of images, mostly of which are associated with events. For those that aren't this is where they go. CAUTION: The directory you specify here cannot be outside the web root. This is a common mistake. Most users should never change this value. If you intend to save images to a second disk or network share, then you should mount the drive or share directly to the ZoneMinder images folder or follow the instructions in the ZoneMinder Wiki titled Using a dedicated Hard Drive.", - type => $types{directory}, - category => "paths", - }, - { - name => "ZM_DIR_SOUNDS", - default => "sounds", - description => "Directory to the sounds that the ZoneMinder client can use", - help => "ZoneMinder can optionally play a sound file when an alarm is detected. This indicates where to look for this file. CAUTION: The directory you specify here cannot be outside the web root. Most users should never change this value.", - type => $types{directory}, - category => "paths", - }, - { - name => "ZM_PATH_ZMS", - default => "/cgi-bin/nph-zms", - description => "Web path to zms streaming server", - help => "The ZoneMinder streaming server is required to send streamed images to your browser. It will be installed into the cgi-bin path given at configuration time. This option determines what the web path to the server is rather than the local path on your machine. Ordinarily the streaming server runs in parser-header mode however if you experience problems with streaming you can change this to non-parsed-header (nph) mode by changing 'zms' to 'nph-zms'.", - type => $types{rel_path}, - category => "paths", - }, - { - name => "ZM_COLOUR_JPEG_FILES", - default => "no", - description => "Colourise greyscale JPEG files", - help => "Cameras that capture in greyscale can write their captured images to jpeg files with a corresponding greyscale colour space. This saves a small amount of disk space over colour ones. However some tools such as ffmpeg either fail to work with this colour space or have to convert it beforehand. Setting this option to yes uses up a little more space but makes creation of MPEG files much faster.", - type => $types{boolean}, - category => "images", - }, - { - name => "ZM_ADD_JPEG_COMMENTS", - default => "no", - description => "Add jpeg timestamp annotations as file header comments", - help => "JPEG files may have a number of extra fields added to the file header. The comment field may have any kind of text added. This options allows you to have the same text that is used to annotate the image additionally included as a file header comment. If you archive event images to other locations this may help you locate images for particular events or times if you use software that can read comment headers.", - type => $types{boolean}, - category => "images", - }, - { - name => "ZM_JPEG_FILE_QUALITY", - default => "70", - description => "Set the JPEG quality setting for the saved event files (1-100)", - help => "When ZoneMinder detects an event it will save the images associated with that event to files. These files are in the JPEG format and can be viewed or streamed later. This option specifies what image quality should be used to save these files. A higher number means better quality but less compression so will take up more disk space and take longer to view over a slow connection. By contrast a low number means smaller, quicker to view, files but at the price of lower quality images. This setting applies to all images written except if the capture image has caused an alarm and the alarm file quality option is set at a higher value when that is used instead.", - type => $types{integer}, - category => "images", - }, - { - name => "ZM_JPEG_ALARM_FILE_QUALITY", - default => "0", - description => "Set the JPEG quality setting for the saved event files during an alarm (1-100)", - help => "This value is equivalent to the regular jpeg file quality setting above except that it only applies to images saved while in an alarm state and then only if this value is set to a higher quality setting than the ordinary file setting. If set to a lower value then it is ignored. Thus leaving it at the default of 0 effectively means to use the regular file quality setting for all saved images. This is to prevent acccidentally saving important images at a worse quality setting.", - type => $types{integer}, - category => "images", - }, - # Deprecated, now stream quality - { - name => "ZM_JPEG_IMAGE_QUALITY", - default => "70", - description => "Set the JPEG quality setting for the streamed 'live' images (1-100)", - help => "When viewing a 'live' stream for a monitor ZoneMinder will grab an image from the buffer and encode it into JPEG format before sending it. This option specifies what image quality should be used to encode these images. A higher number means better quality but less compression so will take longer to view over a slow connection. By contrast a low number means quicker to view images but at the price of lower quality images. This option does not apply when viewing events or still images as these are usually just read from disk and so will be encoded at the quality specified by the previous options.", - type => $types{integer}, - category => "hidden", - }, - { - name => "ZM_JPEG_STREAM_QUALITY", - default => "70", - description => "Set the JPEG quality setting for the streamed 'live' images (1-100)", - help => "When viewing a 'live' stream for a monitor ZoneMinder will grab an image from the buffer and encode it into JPEG format before sending it. This option specifies what image quality should be used to encode these images. A higher number means better quality but less compression so will take longer to view over a slow connection. By contrast a low number means quicker to view images but at the price of lower quality images. This option does not apply when viewing events or still images as these are usually just read from disk and so will be encoded at the quality specified by the previous options.", - type => $types{integer}, - category => "images", - }, - { - name => "ZM_MPEG_TIMED_FRAMES", - default => "yes", - description => "Tag video frames with a timestamp for more realistic streaming", - help => "When using streamed MPEG based video, either for live monitor streams or events, ZoneMinder can send the streams in two ways. If this option is selected then the timestamp for each frame, taken from it's capture time, is included in the stream. This means that where the frame rate varies, for instance around an alarm, the stream will still maintain it's 'real' timing. If this option is not selected then an approximate frame rate is calculated and that is used to schedule frames instead. This option should be selected unless you encounter problems with your preferred streaming method.", - type => $types{boolean}, - category => "images", - }, - { - name => "ZM_MPEG_LIVE_FORMAT", - default => "swf", - description => "What format 'live' video streams are played in", - help => "When using MPEG mode ZoneMinder can output live video. However what formats are handled by the browser varies greatly between machines. This option allows you to specify a video format using a file extension format, so you would just enter the extension of the file type you would like and the rest is determined from that. The default of 'asf' works well under Windows with Windows Media Player but I'm currently not sure what, if anything, works on a Linux platform. If you find out please let me know! If this option is left blank then live streams will revert to being in motion jpeg format", - type => $types{string}, - category => "images", - }, - { - name => "ZM_MPEG_REPLAY_FORMAT", - default => "swf", - description => "What format 'replay' video streams are played in", - help => "When using MPEG mode ZoneMinder can replay events in encoded video format. However what formats are handled by the browser varies greatly between machines. This option allows you to specify a video format using a file extension format, so you would just enter the extension of the file type you would like and the rest is determined from that. The default of 'asf' works well under Windows with Windows Media Player and 'mpg', or 'avi' etc should work under Linux. If you know any more then please let me know! If this option is left blank then live streams will revert to being in motion jpeg format", - type => $types{string}, - category => "images", - }, - { - name => "ZM_RAND_STREAM", - default => "yes", - description => "Add a random string to prevent caching of streams", - help => "Some browsers can cache the streams used by ZoneMinder. In order to prevent his a harmless random string can be appended to the url to make each invocation of the stream appear unique.", - type => $types{boolean}, - category => "images", - }, - { - name => "ZM_OPT_CAMBOZOLA", - default => "no", - description => "Is the (optional) cambozola java streaming client installed", - help => "Cambozola is a handy low fat cheese flavoured Java applet that ZoneMinder uses to view image streams on browsers such as Internet Explorer that don't natively support this format. If you use this browser it is highly recommended to install this from http://www.charliemouse.com/code/cambozola/ however if it is not installed still images at a lower refresh rate can still be viewed.", - type => $types{boolean}, - category => "images", - }, - { - name => "ZM_PATH_CAMBOZOLA", - default => "cambozola.jar", - description => "Web path to (optional) cambozola java streaming client", - help => "Cambozola is a handy low fat cheese flavoured Java applet that ZoneMinder uses to view image streams on browsers such as Internet Explorer that don't natively support this format. If you use this browser it is highly recommended to install this from http://www.charliemouse.com/code/cambozola/ however if it is not installed still images at a lower refresh rate can still be viewed. Leave this as 'cambozola.jar' if cambozola is installed in the same directory as the ZoneMinder web client files.", - requires => [ { name=>"ZM_OPT_CAMBOZOLA", value=>"yes" } ], - type => $types{rel_path}, - category => "images", - }, - { - name => "ZM_RELOAD_CAMBOZOLA", - default => "0", - description => "After how many seconds should Cambozola be reloaded in live view", - help => "Cambozola allows for the viewing of streaming MJPEG however it caches the entire stream into cache space on the computer, setting this to a number > 0 will cause it to automatically reload after that many seconds to avoid filling up a hard drive.", - type => $types{integer}, - category => "images", - }, - { - name => "ZM_TIMESTAMP_ON_CAPTURE", - default => "yes", - description => "Timestamp images as soon as they are captured", - help => "ZoneMinder can add a timestamp to images in two ways. The default method, when this option is set, is that each image is timestamped immediately when captured and so the image held in memory is marked right away. The second method does not timestamp the images until they are either saved as part of an event or accessed over the web. The timestamp used in both methods will contain the same time as this is preserved along with the image. The first method ensures that an image is timestamped regardless of any other circumstances but will result in all images being timestamped even those never saved or viewed. The second method necessitates that saved images are copied before being saved otherwise two timestamps perhaps at different scales may be applied. This has the (perhaps) desirable side effect that the timestamp is always applied at the same resolution so an image that has scaling applied will still have a legible and correctly scaled timestamp.", - type => $types{boolean}, - category => "config", - }, - { - name => "ZM_CPU_EXTENSIONS", - default => "yes", - description => "Use advanced CPU extensions to increase performance", - help => "When advanced processor extensions such as SSE2 or SSSE3 are available, ZoneMinder can use them, which should increase performance and reduce system load. Enabling this option on processors that do not support the advanced processors extensions used by ZoneMinder is harmless and will have no effect.", - type => $types{boolean}, - category => "config", - }, - { - name => "ZM_FAST_IMAGE_BLENDS", - default => "yes", - description => "Use a fast algorithm to blend the reference image", - help => "To detect alarms ZoneMinder needs to blend the captured image with the stored reference image to update it for comparison with the next image. The reference blend percentage specified for the monitor controls how much the new image affects the reference image. There are two methods that are available for this. If this option is set then fast calculation which does not use any multiplication or division is used. This calculation is extremely fast, however it limits the possible blend percentages to 50%, 25%, 12.5%, 6.25%, 3.25% and 1.5%. Any other blend percentage will be rounded to the nearest possible one. The alternative is to switch this option off and use standard blending instead, which is slower.", - type => $types{boolean}, - category => "config", - }, - { - name => "ZM_OPT_ADAPTIVE_SKIP", - default => "yes", - description => "Should frame analysis try and be efficient in skipping frames", - help => "In previous versions of ZoneMinder the analysis daemon would attempt to keep up with the capture daemon by processing the last captured frame on each pass. This would sometimes have the undesirable side-effect of missing a chunk of the initial activity that caused the alarm because the pre-alarm frames would all have to be written to disk and the database before processing the next frame, leading to some delay between the first and second event frames. Setting this option enables a newer adaptive algorithm where the analysis daemon attempts to process as many captured frames as possible, only skipping frames when in danger of the capture daemon overwriting yet to be processed frames. This skip is variable depending on the size of the ring buffer and the amount of space left in it. Enabling this option will give you much better coverage of the beginning of alarms whilst biasing out any skipped frames towards the middle or end of the event. However you should be aware that this will have the effect of making the analysis daemon run somewhat behind the capture daemon during events and for particularly fast rates of capture it is possible for the adaptive algorithm to be overwhelmed and not have time to react to a rapid build up of pending frames and thus for a buffer overrun condition to occur.", - type => $types{boolean}, - category => "config", - }, - { - name => "ZM_MAX_SUSPEND_TIME", - default => "30", - description => "Maximum time that a monitor may have motion detection suspended", - help => "ZoneMinder allows monitors to have motion detection to be suspended, for instance while panning a camera. Ordinarily this relies on the operator resuming motion detection afterwards as failure to do so can leave a monitor in a permanently suspended state. This setting allows you to set a maximum time which a camera may be suspended for before it automatically resumes motion detection. This time can be extended by subsequent suspend indications after the first so continuous camera movement will also occur while the monitor is suspended.", - type => $types{integer}, - category => "config", - }, - # Deprecated, really no longer necessary - { - name => "ZM_OPT_REMOTE_CAMERAS", - default => "no", - description => "Are you going to use remote/networked cameras", - help => "ZoneMinder can work with both local cameras, ie. those attached physically to your computer and remote or network cameras. If you will be using networked cameras select this option.", - type => $types{boolean}, - category => "hidden", - }, - # Deprecated, now set on a per monitor basis using the Method field - { - name => "ZM_NETCAM_REGEXPS", - default => "yes", - description => "Use regular expression matching with network cameras", - help => "Traditionally ZoneMinder has used complex regular regular expressions to handle the multitude of formats that network cameras produce. In versions from 1.21.1 the default is to use a simpler and faster built in pattern matching methodology. This works well with most networks cameras but if you have problems you can try the older, but more flexible, regular expression based method by selecting this option. Note, to use this method you must have libpcre installed on your system.", - requires => [ { name => "ZM_OPT_REMOTE_CAMERAS", value => "yes" } ], - type => $types{boolean}, - category => "hidden", - }, - { - name => "ZM_HTTP_VERSION", - default => "1.0", - description => "The version of HTTP that ZoneMinder will use to connect", - help => "ZoneMinder can communicate with network cameras using either of the HTTP/1.1 or HTTP/1.0 standard. A server will normally fall back to the version it supports with no problem so this should usually by left at the default. However it can be changed to HTTP/1.0 if necessary to resolve particular issues.", - type => { db_type=>"string", hint=>"1.1|1.0", pattern=>qr|^(1\.[01])$|, format=>q( $1?$1:"" ) }, - category => "network", - }, - { - name => "ZM_HTTP_UA", - default => "ZoneMinder", - description => "The user agent that ZoneMinder uses to identify itself", - help => "When ZoneMinder communicates with remote cameras it will identify itself using this string and it's version number. This is normally sufficient, however if a particular cameras expects only to communicate with certain browsers then this can be changed to a different string identifying ZoneMinder as Internet Explorer or Netscape etc.", - type => $types{string}, - category => "network", - }, - { - name => "ZM_HTTP_TIMEOUT", - default => "2500", - description => "How long ZoneMinder waits before giving up on images (milliseconds)", - help => "When retrieving remote images ZoneMinder will wait for this length of time before deciding that an image is not going to arrive and taking steps to retry. This timeout is in milliseconds (1000 per second) and will apply to each part of an image if it is not sent in one whole chunk.", - type => $types{integer}, - category => "network", - }, { - name => "ZM_MIN_RTP_PORT", - default => "40200", - description => "Minimum port that ZoneMinder will listen for RTP traffic on", - help => "When ZoneMinder communicates with MPEG4 capable cameras using RTP with the unicast method it must open ports for the camera to connect back to for control and streaming purposes. This setting specifies the minimum port number that ZoneMinder will use. Ordinarily two adjacent ports are used for each camera, one for control packets and one for data packets. This port should be set to an even number, you may also need to open up a hole in your firewall to allow cameras to connect back if you wish to use unicasting.", - type => $types{integer}, - category => "network", - }, - { - name => "ZM_MAX_RTP_PORT", - default => "40499", - description => "Maximum port that ZoneMinder will listen for RTP traffic on", - help => "When ZoneMinder communicates with MPEG4 capable cameras using RTP with the unicast method it must open ports for the camera to connect back to for control and streaming purposes. This setting specifies the maximum port number that ZoneMinder will use. Ordinarily two adjacent ports are used for each camera, one for control packets and one for data packets. This port should be set to an even number, you may also need to open up a hole in your firewall to allow cameras to connect back if you wish to use unicasting. You should also ensure that you have opened up at least two ports for each monitor that will be connecting to unicasting network cameras.", - type => $types{integer}, - category => "network", - }, - { - name => "ZM_OPT_FFMPEG", - default => "@OPT_FFMPEG@", - description => "Is the ffmpeg video encoder/decoder installed", - help => "ZoneMinder can optionally encode a series of video images into an MPEG encoded movie file for viewing, downloading or storage. This option allows you to specify whether you have the ffmpeg tools installed. Note that creating MPEG files can be fairly CPU and disk intensive and is not a required option as events can still be reviewed as video streams without it.", - type => $types{boolean}, - category => "images", - }, - { - name => "ZM_PATH_FFMPEG", - default => "@PATH_FFMPEG@", - description => "Path to (optional) ffmpeg mpeg encoder", - help => "This path should point to where ffmpeg has been installed.", - requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], - type => $types{abs_path}, - category => "images", - }, - { - name => "ZM_FFMPEG_INPUT_OPTIONS", - default => "", - description => "Additional input options to ffmpeg", - help => "Ffmpeg can take many options on the command line to control the quality of video produced. This option allows you to specify your own set that apply to the input to ffmpeg (options that are given before the -i option). Check the ffmpeg documentation for a full list of options which may be used here.", - requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], - type => $types{string}, - category => "images", - }, - { - name => "ZM_FFMPEG_OUTPUT_OPTIONS", - default => "-r 25", - description => "Additional output options to ffmpeg", - help => "Ffmpeg can take many options on the command line to control the quality of video produced. This option allows you to specify your own set that apply to the output from ffmpeg (options that are given after the -i option). Check the ffmpeg documentation for a full list of options which may be used here. The most common one will often be to force an output frame rate supported by the video encoder.", - requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], - type => $types{string}, - category => "images", - }, - { - name => "ZM_FFMPEG_FORMATS", - default => "mpg mpeg wmv asf avi* mov swf 3gp**", - description => "Formats to allow for ffmpeg video generation", - help => "Ffmpeg can generate video in many different formats. This option allows you to list the ones you want to be able to select. As new formats are supported by ffmpeg you can add them here and be able to use them immediately. Adding a '*' after a format indicates that this will be the default format used for web video, adding '**' defines the default format for phone video.", - requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], - type => $types{string}, - category => "images", - }, - { - name => "ZM_FFMPEG_OPEN_TIMEOUT", - default => "10", - description => "Timeout in seconds when opening a stream.", - help => "When Ffmpeg is opening a stream, it can take a long time before failing; certain circumstances even seem to be able to lock indefinitely. This option allows you to set a maximum time in seconds to pass before closing the stream and trying to reopen it again.", - requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], - type => $types{integer}, - category => "images", - }, - { - name => "ZM_LOG_LEVEL_SYSLOG", - default => "0", - description => "Save logging output to the system log", - help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that goes to the system log. ZoneMinder binaries have always logged to the system log but now scripts and web logging is also included. To preserve the previous behaviour you should ensure this value is set to Info or Warning. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below", - type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "logging", - }, - { - name => "ZM_LOG_LEVEL_FILE", - default => "-5", - description => "Save logging output to component files", - help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that goes to individual log files written by specific components. This is how logging worked previously and although useful for tracking down issues in specific components it also resulted in many disparate log files. To preserve this behaviour you should ensure this value is set to Info or Warning. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance though file output has less impact than the other options. If you want debug you will also need to set a level and component below", - type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "logging", - }, - { - name => "ZM_LOG_LEVEL_WEBLOG", - default => "-5", - description => "Save logging output to the weblog", - help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output from the web interface that goes to the httpd error log. Note that only web logging from PHP and JavaScript files is included and so this option is really only useful for investigating specific issues with those components. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below", - type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "logging", - }, - { - name => "ZM_LOG_LEVEL_DATABASE", - default => "0", - description => "Save logging output to the database", - help => "ZoneMinder logging is now more more integrated between components and allows you to specify the destination for logging output and the individual levels for each. This option lets you control the level of logging output that is written to the database. This is a new option which can make viewing logging output easier and more intuitive and also makes it easier to get an overall impression of how the system is performing. If you have a large or very busy system then it is possible that use of this option may slow your system down if the table becomes very large. Ensure you use the LOG_DATABASE_LIMIT option to keep the table to a manageable size. This option controls the maximum level of logging that will be written, so Info includes Warnings and Errors etc. To disable entirely, set this option to None. You should use caution when setting this option to Debug as it can affect severely affect system performance. If you want debug you will also need to set a level and component below", - type => { db_type=>"integer", hint=>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "logging", - }, - { - name => "ZM_LOG_DATABASE_LIMIT", - default => "7 day", - description => "Maximum number of log entries to retain", - help => "If you are using database logging then it is possible to quickly build up a large number of entries in the Logs table. This option allows you to specify how many of these entries are kept. If you set this option to a number greater than zero then that number is used to determine the maximum number of rows, less than or equal to zero indicates no limit and is not recommended. You can also set this value to time values such as ' day' which will limit the log entries to those newer than that time. You can specify 'hour', 'day', 'week', 'month' and 'year', note that the values should be singular (no 's' at the end). The Logs table is pruned periodically so it is possible for more than the expected number of rows to be present briefly in the meantime.", - type => $types{string}, - category => "logging", - }, - { - name => "ZM_LOG_DEBUG", - default => "no", - description => "Switch debugging on", - help => "ZoneMinder components usually support debug logging available to help with diagnosing problems. Binary components have several levels of debug whereas more other components have only one. Normally this is disabled to minimise performance penalties and avoid filling logs too quickly. This option lets you switch on other options that allow you to configure additional debug information to be output. Components will pick up this instruction when they are restarted.", - type => $types{boolean}, - category => "logging", - }, - { - name => "ZM_LOG_DEBUG_TARGET", - default => "", - description => "What components should have extra debug enabled", - help => "There are three scopes of debug available. Leaving this option blank means that all components will use extra debug (not recommended). Setting this option to '_', e.g. _zmc, will limit extra debug to that component only. Setting this option to '__', e.g. '_zmc_m1' will limit extra debug to that instance of the component only. This is ordinarily what you probably want to do. To debug scripts use their names without the .pl extension, e.g. '_zmvideo' and to debug issues with the web interface use '_web'. You can specify multiple targets by separating them with '|' characters.", - requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], - type => $types{string}, - category => "logging", - }, - { - name => "ZM_LOG_DEBUG_LEVEL", - default => 1, - description => "What level of extra debug should be enabled", - help => "There are 9 levels of debug available, with higher numbers being more debug and level 0 being no debug. However not all levels are used by all components. Also if there is debug at a high level it is usually likely to be output at such a volume that it may obstruct normal operation. For this reason you should set the level carefully and cautiously until the degree of debug you wish to see is present. Scripts and the web interface only have one level so this is an on/off type option for them.", - requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], - type => { db_type=>"integer", hint=>"1|2|3|4|5|6|7|8|9", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "logging", - }, - { - name => "ZM_LOG_DEBUG_FILE", - default => "@ZM_LOGDIR@/zm_debug.log+", - description => "Where extra debug is output to", - help => "This option allows you to specify a different target for debug output. All components have a default log file which will norally be in /tmp or /var/log and this is where debug will be written to if this value is empty. Adding a path here will temporarily redirect debug, and other logging output, to this file. This option is a simple filename and you are debugging several components then they will all try and write to the same file with undesirable consequences. Appending a '+' to the filename will cause the file to be created with a '.' suffix containing your process id. In this way debug from each run of a component is kept separate. This is the recommended setting as it will also prevent subsequent runs from overwriting the same log. You should ensure that permissions are set up to allow writing to the file and directory specified here.", - requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], - type => $types{string}, - category => "logging", - }, - { - name => "ZM_LOG_CHECK_PERIOD", - default => "900", - description => "Time period used when calculating overall system health", - help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to indicate what period of historical events are used in this calculation. This value is expressed in seconds and is ignored if LOG_LEVEL_DATABASE is set to None.", - type => $types{integer}, - category => "logging", - }, - { - name => "ZM_LOG_ALERT_WAR_COUNT", - default => "1", - description => "Number of warnings indicating system alert state", - help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many warnings must have occurred within the defined time period to generate an overall system alert state. A value of zero means warnings are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", - type => $types{integer}, - category => "logging", - }, - { - name => "ZM_LOG_ALERT_ERR_COUNT", - default => "1", - description => "Number of errors indicating system alert state", - help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many errors must have occurred within the defined time period to generate an overall system alert state. A value of zero means errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", - type => $types{integer}, - category => "logging", - }, - { - name => "ZM_LOG_ALERT_FAT_COUNT", - default => "0", - description => "Number of fatal error indicating system alert state", - help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many fatal errors (including panics) must have occurred within the defined time period to generate an overall system alert state. A value of zero means fatal errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", - type => $types{integer}, - category => "logging", - }, - { - name => "ZM_LOG_ALARM_WAR_COUNT", - default => "100", - description => "Number of warnings indicating system alarm state", - help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many warnings must have occurred within the defined time period to generate an overall system alarm state. A value of zero means warnings are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", - type => $types{integer}, - category => "logging", - }, - { - name => "ZM_LOG_ALARM_ERR_COUNT", - default => "10", - description => "Number of errors indicating system alarm state", - help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many errors must have occurred within the defined time period to generate an overall system alarm state. A value of zero means errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", - type => $types{integer}, - category => "logging", - }, - { - name => "ZM_LOG_ALARM_FAT_COUNT", - default => "1", - description => "Number of fatal error indicating system alarm state", - help => "When ZoneMinder is logging events to the database it can retrospectively examine the number of warnings and errors that have occurred to calculate an overall state of system health. This option allows you to specify how many fatal errors (including panics) must have occurred within the defined time period to generate an overall system alarm state. A value of zero means fatal errors are not considered. This value is ignored if LOG_LEVEL_DATABASE is set to None.", - type => $types{integer}, - category => "logging", - }, - { - name => "ZM_RECORD_EVENT_STATS", - default => "yes", - description => "Record event statistical information, switch off if too slow", - help => "This version of ZoneMinder records detailed information about events in the Stats table. This can help in profiling what the optimum settings are for Zones though this is tricky at present. However in future releases this will be done more easily and intuitively, especially with a large sample of events. The default option of 'yes' allows this information to be collected now in readiness for this but if you are concerned about performance you can switch this off in which case no Stats information will be saved.", - type => $types{boolean}, - category => "logging", - }, - { - name => "ZM_RECORD_DIAG_IMAGES", - default => "no", - description => "Record intermediate alarm diagnostic images, can be very slow", - help => "In addition to recording event statistics you can also record the intermediate diagnostic images that display the results of the various checks and processing that occur when trying to determine if an alarm event has taken place. There are several of these images generated for each frame and zone for each alarm or alert frame so this can have a massive impact on performance. Only switch this setting on for debug or analysis purposes and remember to switch it off again once no longer required.", - type => $types{boolean}, - category => "logging", - }, - { - name => "ZM_DUMP_CORES", - default => "no", - description => "Create core files on unexpected process failure.", - help => "When an unrecoverable error occurs in a ZoneMinder binary process is has traditionally been trapped and the details written to logs to aid in remote analysis. However in some cases it is easier to diagnose the error if a core file, which is a memory dump of the process at the time of the error, is created. This can be interactively analysed in the debugger and may reveal more or better information than that available from the logs. This option is recommended for advanced users only otherwise leave at the default. Note using this option to trigger core files will mean that there will be no indication in the binary logs that a process has died, they will just stop, however the zmdc log will still contain an entry. Also note that you may have to explicitly enable core file creation on your system via the 'ulimit -c' command or other means otherwise no file will be created regardless of the value of this option.", - type => $types{boolean}, - category => "logging", - }, - { - name => "ZM_PATH_MAP", - default => "/dev/shm", - description => "Path to the mapped memory files that that ZoneMinder can use", - help => "ZoneMinder has historically used IPC shared memory for shared data between processes. This has it's advantages and limitations. This version of ZoneMinder can use an alternate method, mapped memory, instead with can be enabled with the --enable--mmap directive to configure. This requires less system configuration and is generally more flexible. However it requires each shared data segment to map onto a filesystem file. This option indicates where those mapped files go. You should ensure that this location has sufficient space for these files and for the best performance it should be a tmpfs file system or ramdisk otherwise disk access may render this method slower than the regular shared memory one.", - type => $types{abs_path}, - category => "paths", - }, - { - name => "ZM_PATH_SOCKS", - default => "@ZM_SOCKDIR@", - description => "Path to the various Unix domain socket files that ZoneMinder uses", - help => "ZoneMinder generally uses Unix domain sockets where possible. This reduces the need for port assignments and prevents external applications from possibly compromising the daemons. However each Unix socket requires a .sock file to be created. This option indicates where those socket files go.", - type => $types{abs_path}, - category => "paths", - }, - { - name => "ZM_PATH_LOGS", - default => "@ZM_LOGDIR@", - description => "Path to the various logs that the ZoneMinder daemons generate", - help => "There are various daemons that are used by ZoneMinder to perform various tasks. Most generate helpful log files and this is where they go. They can be deleted if not required for debugging.", - type => $types{abs_path}, - category => "paths", - }, - { - name => "ZM_PATH_SWAP", - default => "@ZM_TMPDIR@", - description => "Path to location for temporary swap images used in streaming", - help => "Buffered playback requires temporary swap images to be stored for each instance of the streaming daemons. This option determines where these images will be stored. The images will actually be stored in sub directories beneath this location and will be automatically cleaned up after a period of time.", - type => $types{abs_path}, - category => "paths", - }, - { - name => "ZM_PATH_ARP", - default => "", - description => "Path to a supported ARP tool", - help => "The camera probe function uses Address Resolution Protocol in order to find known devices on the network. Optionally supply the full path to \"ip neigh\", \"arp -a\", or any other tool on your system that returns ip/mac address pairs. If this field is left empty, ZoneMinder will search for the command \"arp\" and attempt to use that.", - type => $types{abs_path}, - category => "paths", - }, - { - name => "ZM_WEB_TITLE_PREFIX", - default => "ZM", - description => "The title prefix displayed on each window", - help => "If you have more than one installation of ZoneMinder it can be helpful to display different titles for each one. Changing this option allows you to customise the window titles to include further information to aid identification.", - type => $types{string}, - category => "web", - }, - { - name => "ZM_WEB_RESIZE_CONSOLE", - default => "yes", - description => "Should the console window resize itself to fit", - help => "Traditionally the main ZoneMinder web console window has resized itself to shrink to a size small enough to list only the monitors that are actually present. This is intended to make the window more unobtrusize but may not be to everyones tastes, especially if opened in a tab in browsers which support this kind if layout. Switch this option off to have the console window size left to the users preference", - type => $types{boolean}, - category => "web", - }, - { - name => "ZM_WEB_POPUP_ON_ALARM", - default => "yes", - description => "Should the monitor window jump to the top if an alarm occurs", - help => "When viewing a live monitor stream you can specify whether you want the window to pop to the front if an alarm occurs when the window is minimised or behind another window. This is most useful if your monitors are over doors for example when they can pop up if someone comes to the doorway.", - type => $types{boolean}, - category => "web", - }, - { - name => "ZM_OPT_X10", - default => "no", - description => "Support interfacing with X10 devices", - help => "If you have an X10 Home Automation setup in your home you can use ZoneMinder to initiate or react to X10 signals if your computer has the appropriate interface controller. This option indicates whether X10 options will be available in the browser client.", - type => $types{boolean}, - category => "x10", - }, - { - name => "ZM_X10_DEVICE", - default => "/dev/ttyS0", - description => "What device is your X10 controller connected on", - requires => [ { name => "ZM_OPT_X10", value => "yes" } ], - help => "If you have an X10 controller device (e.g. XM10U) connected to your computer this option details which port it is conected on, the default of /dev/ttyS0 maps to serial or com port 1.", - type => $types{abs_path}, - category => "x10", - }, - { - name => "ZM_X10_HOUSE_CODE", - default => "A", - description => "What X10 house code should be used", - requires => [ { name => "ZM_OPT_X10", value => "yes" } ], - help => "X10 devices are grouped together by identifying them as all belonging to one House Code. This option details what that is. It should be a single letter between A and P.", - type => { db_type=>"string", hint=>"A-P", pattern=>qr|^([A-P])|i, format=>q( uc($1) ) }, - category => "x10", - }, - { - name => "ZM_X10_DB_RELOAD_INTERVAL", - default => "60", - description => "How often (in seconds) the X10 daemon reloads the monitors from the database", - requires => [ { name => "ZM_OPT_X10", value => "yes" } ], - help => "The zmx10 daemon periodically checks the database to find out what X10 events trigger, or result from, alarms. This option determines how frequently this check occurs, unless you change this area frequently this can be a fairly large value.", - type => $types{integer}, - category => "x10", - }, - { - name => "ZM_WEB_SOUND_ON_ALARM", - default => "no", - description => "Should the monitor window play a sound if an alarm occurs", - help => "When viewing a live monitor stream you can specify whether you want the window to play a sound to alert you if an alarm occurs.", - type => $types{boolean}, - category => "web", - }, - { - name => "ZM_WEB_ALARM_SOUND", - default => "", - description => "The sound to play on alarm, put this in the sounds directory", - help => "You can specify a sound file to play if an alarm occurs whilst you are watching a live monitor stream. So long as your browser understands the format it does not need to be any particular type. This file should be placed in the sounds directory defined earlier.", - type => $types{file}, - requires => [ { name => "ZM_WEB_SOUND_ON_ALARM", value => "yes" } ], - category => "web", - }, - { - name => "ZM_WEB_COMPACT_MONTAGE", - default => "no", - description => "Compact the montage view by removing extra detail", - help => "The montage view shows the output of all of your active monitors in one window. This include a small menu and status information for each one. This can increase the web traffic and make the window larger than may be desired. Setting this option on removes all this extraneous information and just displays the images.", - type => $types{boolean}, - category => "web", - }, - { - name => "ZM_OPT_FAST_DELETE", - default => "yes", - description => "Delete only event database records for speed", - help => "Normally an event created as the result of an alarm consists of entries in one or more database tables plus the various files associated with it. When deleting events in the browser it can take a long time to remove all of this if your are trying to do a lot of events at once. It is recommended that you set this option which means that the browser client only deletes the key entries in the events table, which means the events will no longer appear in the listing, and leaves the zmaudit daemon to clear up the rest later.", - type => $types{boolean}, - category => "system", - }, - { - name => "ZM_STRICT_VIDEO_CONFIG", - default => "yes", - description => "Allow errors in setting video config to be fatal", - help => "With some video devices errors can be reported in setting the various video attributes when in fact the operation was successful. Switching this option off will still allow these errors to be reported but will not cause them to kill the video capture daemon. Note however that doing this will cause all errors to be ignored including those which are genuine and which may cause the video capture to not function correctly. Use this option with caution.", - type => $types{boolean}, - category => "config", - }, - { - name => "ZM_SIGNAL_CHECK_POINTS", - default => "10", - description => "How many points in a captured image to check for signal loss", - help => "For locally attached video cameras ZoneMinder can check for signal loss by looking at a number of random points on each captured image. If all of these points are set to the same fixed colour then the camera is assumed to have lost signal. When this happens any open events are closed and a short one frame signal loss event is generated, as is another when the signal returns. This option defines how many points on each image to check. Note that this is a maximum, any points found to not have the check colour will abort any further checks so in most cases on a couple of points will actually be checked. Network and file based cameras are never checked.", - type => $types{integer}, - category => "config", - }, - { - name => "ZM_V4L_MULTI_BUFFER", - default => "yes", - description => "Use more than one buffer for Video 4 Linux devices", - help => "Performance when using Video 4 Linux devices is usually best if multiple buffers are used allowing the next image to be captured while the previous one is being processed. If you have multiple devices on a card sharing one input that requires switching then this approach can sometimes cause frames from one source to be mixed up with frames from another. Switching this option off prevents multi buffering resulting in slower but more stable image capture. This option is ignored for non-local cameras or if only one input is present on a capture chip. This option addresses a similar problem to the ZM_CAPTURES_PER_FRAME option and you should normally change the value of only one of the options at a time. If you have different capture cards that need different values you can ovveride them in each individual monitor on the source page.", - type => $types{boolean}, - category => "config", - }, - { - name => "ZM_CAPTURES_PER_FRAME", - default => "1", - description => "How many images are captured per returned frame, for shared local cameras", - help => "If you are using cameras attached to a video capture card which forces multiple inputs to share one capture chip, it can sometimes produce images with interlaced frames reversed resulting in poor image quality and a distinctive comb edge appearance. Increasing this setting allows you to force additional image captures before one is selected as the captured frame. This allows the capture hardware to 'settle down' and produce better quality images at the price of lesser capture rates. This option has no effect on (a) network cameras, or (b) where multiple inputs do not share a capture chip. This option addresses a similar problem to the ZM_V4L_MULTI_BUFFER option and you should normally change the value of only one of the options at a time. If you have different capture cards that need different values you can ovveride them in each individual monitor on the source page.", - type => $types{integer}, - category => "config", - }, - { - name => "ZM_FILTER_RELOAD_DELAY", - default => "300", - description => "How often (in seconds) filters are reloaded in zmfilter", - help => "ZoneMinder allows you to save filters to the database which allow events that match certain criteria to be emailed, deleted or uploaded to a remote machine etc. The zmfilter daemon loads these and does the actual operation. This option determines how often the filters are reloaded from the database to get the latest versions or new filters. If you don't change filters very often this value can be set to a large value.", - type => $types{integer}, - category => "system", - }, - { - name => "ZM_FILTER_EXECUTE_INTERVAL", - default => "60", - description => "How often (in seconds) to run automatic saved filters", - help => "ZoneMinder allows you to save filters to the database which allow events that match certain criteria to be emailed, deleted or uploaded to a remote machine etc. The zmfilter daemon loads these and does the actual operation. This option determines how often the filters are executed on the saved event in the database. If you want a rapid response to new events this should be a smaller value, however this may increase the overall load on the system and affect performance of other elements.", - type => $types{integer}, - category => "system", - }, - { - name => "ZM_OPT_UPLOAD", - default => "no", - description => "Should ZoneMinder support uploading events from filters", - help => "In ZoneMinder you can create event filters that specify whether events that match certain criteria should be uploaded to a remote server for archiving. This option specifies whether this functionality should be available", - type => $types{boolean}, - category => "upload", - }, - { - name => "ZM_UPLOAD_ARCH_FORMAT", - default => "tar", - description => "What format the uploaded events should be created in.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - help => "Uploaded events may be stored in either .tar or .zip format, this option specifies which. Note that to use this you will need to have the Archive::Tar and/or Archive::Zip perl modules installed.", - type => { db_type=>"string", hint=>"tar|zip", pattern=>qr|^([tz])|i, format=>q( $1 =~ /^t/ ? "tar" : "zip" ) }, - category => "upload", - }, - { - name => "ZM_UPLOAD_ARCH_COMPRESS", - default => "no", - description => "Should archive files be compressed", - help => "When the archive files are created they can be compressed. However in general since the images are compressed already this saves only a minimal amount of space versus utilising more CPU in their creation. Only enable if you have CPU to waste and are limited in disk space on your remote server or bandwidth.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{boolean}, - category => "upload", - }, - { - name => "ZM_UPLOAD_ARCH_ANALYSE", - default => "no", - description => "Include the analysis files in the archive", - help => "When the archive files are created they can contain either just the captured frames or both the captured frames and, for frames that caused an alarm, the analysed image with the changed area highlighted. This option controls files are included. Only include analysed frames if you have a high bandwidth connection to the remote server or if you need help in figuring out what caused an alarm in the first place as archives with these files in can be considerably larger.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{boolean}, - category => "upload", - }, - { - name => "ZM_UPLOAD_PROTOCOL", - default => "ftp", - description => "What protocol to use to upload events", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - help => "ZoneMinder can upload events to a remote server using either FTP or SFTP. Regular FTP is widely supported but not necessarily very secure whereas SFTP (Secure FTP) runs over an ssh connection and so is encrypted and uses regular ssh ports. Note that to use this you will need to have the appropriate perl module, either Net::FTP or Net::SFTP installed depending on your choice.", - type => { db_type=>"string", hint=>"ftp|sftp", pattern=>qr|^([tz])|i, format=>q( $1 =~ /^f/ ? "ftp" : "sftp" ) }, - category => "upload", - }, - { - name => "ZM_UPLOAD_FTP_HOST", - default => "", - description => "The remote server to upload to", - help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the name, or ip address, of the server to use.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{hostname}, - category => "hidden", - }, - { - name => "ZM_UPLOAD_HOST", - default => "", - description => "The remote server to upload events to", - help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the name, or ip address, of the server to use.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{hostname}, - category => "upload", - }, - { - name => "ZM_UPLOAD_PORT", - default => "", - description => "The port on the remote upload server, if not the default (SFTP only)", - help => "You can use filters to instruct ZoneMinder to upload events to a remote server. If you are using the SFTP protocol then this option allows you to specify a particular port to use for connection. If this option is left blank then the default, port 22, is used. This option is ignored for FTP uploads.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{integer}, - category => "upload", - }, - { - name => "ZM_UPLOAD_FTP_USER", - default => "", - description => "Your ftp username", - help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the username that ZoneMinder should use to log in for ftp transfer.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{alphanum}, - category => "hidden", - }, - { - name => "ZM_UPLOAD_USER", - default => "", - description => "Remote server username", - help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the username that ZoneMinder should use to log in for transfer.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{alphanum}, - category => "upload", - }, - { - name => "ZM_UPLOAD_FTP_PASS", - default => "", - description => "Your ftp password", - help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the password that ZoneMinder should use to log in for ftp transfer.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{string}, - category => "hidden", - }, - { - name => "ZM_UPLOAD_PASS", - default => "", - description => "Remote server password", - help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the password that ZoneMinder should use to log in for transfer. If you are using certicate based logins for SFTP servers you can leave this option blank.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{string}, - category => "upload", - }, - { - name => "ZM_UPLOAD_FTP_LOC_DIR", - default => "@ZM_TMPDIR@", - description => "The local directory in which to create upload files", - help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the local directory that ZoneMinder should use for temporary upload files. These are files that are created from events, uploaded and then deleted.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{abs_path}, - category => "hidden", - }, - { - name => "ZM_UPLOAD_LOC_DIR", - default => "@ZM_TMPDIR@", - description => "The local directory in which to create upload files", - help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the local directory that ZoneMinder should use for temporary upload files. These are files that are created from events, uploaded and then deleted.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{abs_path}, - category => "upload", - }, - { - name => "ZM_UPLOAD_FTP_REM_DIR", - default => "", - description => "The remote directory to upload to", - help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the remote directory that ZoneMinder should use to upload event files to.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{rel_path}, - category => "hidden", - }, - { - name => "ZM_UPLOAD_REM_DIR", - default => "", - description => "The remote directory to upload to", - help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the remote directory that ZoneMinder should use to upload event files to.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{rel_path}, - category => "upload", - }, - { - name => "ZM_UPLOAD_FTP_TIMEOUT", - default => "120", - description => "How long to allow the transfer to take for each file", - help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates the maximum ftp inactivity timeout (in seconds) that should be tolerated before ZoneMinder determines that the transfer has failed and closes down the connection.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{integer}, - category => "hidden", - }, - { - name => "ZM_UPLOAD_TIMEOUT", - default => "120", - description => "How long to allow the transfer to take for each file", - help => "You can use filters to instruct ZoneMinder to upload events to a remote server. This option indicates the maximum inactivity timeout (in seconds) that should be tolerated before ZoneMinder determines that the transfer has failed and closes down the connection.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{integer}, - category => "upload", - }, - { - name => "ZM_UPLOAD_FTP_PASSIVE", - default => "yes", - description => "Use passive ftp when uploading", - help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. This option indicates that ftp transfers should be done in passive mode. This uses a single connection for all ftp activity and, whilst slower than active transfers, is more robust and likely to work from behind filewalls. This option is ignored for SFTP transfers.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - help => "If your computer is behind a firewall or proxy you may need to set FTP to passive mode. In fact for simple transfers it makes little sense to do otherwise anyway but you can set this to 'No' if you wish.", - type => $types{boolean}, - category => "upload", - }, - { - name => "ZM_UPLOAD_FTP_DEBUG", - default => "no", - description => "Switch ftp debugging on", - help => "You can use filters to instruct ZoneMinder to upload events to a remote ftp server. If you are having (or expecting) troubles with uploading events then setting this to 'yes' permits additional information to be included in the zmfilter log file.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{boolean}, - category => "hidden", - }, - { - name => "ZM_UPLOAD_DEBUG", - default => "no", - description => "Switch upload debugging on", - help => "You can use filters to instruct ZoneMinder to upload events to a remote server. If you are having (or expecting) troubles with uploading events then setting this to 'yes' permits additional information to be generated by the underlying transfer modules and included in the logs.", - requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], - type => $types{boolean}, - category => "upload", - }, - { - name => "ZM_OPT_EMAIL", - default => "no", - description => "Should ZoneMinder email you details of events that match corresponding filters", - help => "In ZoneMinder you can create event filters that specify whether events that match certain criteria should have their details emailed to you at a designated email address. This will allow you to be notified of events as soon as they occur and also to quickly view the events directly. This option specifies whether this functionality should be available. The email created with this option can be any size and is intended to be sent to a regular email reader rather than a mobile device.", - type => $types{boolean}, - category => "mail", - }, - { - name => "ZM_EMAIL_ADDRESS", - default => "", - description => "The email address to send matching event details to", - requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], - help => "This option is used to define the email address that any events that match the appropriate filters will be sent to.", - type => $types{email}, - category => "mail", - }, - { - name => "ZM_EMAIL_TEXT", - default => 'subject = "ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)" + name => "ZM_LANG_DEFAULT", + default => "en_gb", + description => "Default language used by web interface", + help => qqq(" + ZoneMinder allows the web interface to use languages other than + English if the appropriate language file has been created and + is present. This option allows you to change the default + language that is used from the shipped language, British + English, to another language + "), + type => $types{string}, + category => "system", + }, + { + name => "ZM_OPT_USE_AUTH", + default => "no", + description => "Authenticate user logins to ZoneMinder", + help => qqq(" + ZoneMinder can run in two modes. The simplest is an entirely + unauthenticated mode where anyone can access ZoneMinder and + perform all tasks. This is most suitable for installations + where the web server access is limited in other ways. The other + mode enables user accounts with varying sets of permissions. + Users must login or authenticate to access ZoneMinder and are + limited by their defined permissions. + "), + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_AUTH_TYPE", + default => "builtin", + description => "What is used to authenticate ZoneMinder users", + help => qqq(" + ZoneMinder can use two methods to authenticate users when + running in authenticated mode. The first is a builtin method + where ZoneMinder provides facilities for users to log in and + maintains track of their identity. The second method allows + interworking with other methods such as http basic + authentication which passes an independently authentication + 'remote' user via http. In this case ZoneMinder would use the + supplied user without additional authentication provided such a + user is configured ion ZoneMinder. + "), + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" } ], + type => { + db_type =>"string", + hint =>"builtin|remote", + pattern =>qr|^([br])|i, + format =>q( $1 =~ /^b/ ? "builtin" : "remote" ) + }, + category => "system", + }, + { + name => "ZM_AUTH_RELAY", + default => "hashed", + description => "Method used to relay authentication information", + help => qqq(" + When ZoneMinder is running in authenticated mode it can pass + user details between the web pages and the back end processes. + There are two methods for doing this. This first is to use a + time limited hashed string which contains no direct username or + password details, the second method is to pass the username and + passwords around in plaintext. This method is not recommend + except where you do not have the md5 libraries available on + your system or you have a completely isolated system with no + external access. You can also switch off authentication + relaying if your system is isolated in other ways. + "), + requires => [ { name=>"ZM_OPT_USE_AUTH", value=>"yes" } ], + type => { + db_type =>"string", + hint =>"hashed|plain|none", + pattern =>qr|^([hpn])|i, + format =>q( ($1 =~ /^h/) + ? "hashed" + : ($1 =~ /^p/ ? "plain" : "none" ) + ) + }, + category => "system", + }, + { + name => "ZM_AUTH_HASH_SECRET", + default => "...Change me to something unique...", + description => "Secret for encoding hashed authentication information", + help => qqq(" + When ZoneMinder is running in hashed authenticated mode it is + necessary to generate hashed strings containing encrypted + sensitive information such as usernames and password. Although + these string are reasonably secure the addition of a random + secret increases security substantially. + "), + requires => [ + { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, + { name=>"ZM_AUTH_RELAY", value=>"hashed" } + ], + type => $types{string}, + category => "system", + }, + { + name => "ZM_AUTH_HASH_IPS", + default => "yes", + description => "Include IP addresses in the authentication hash", + help => qqq(" + When ZoneMinder is running in hashed authenticated mode it can + optionally include the requesting IP address in the resultant + hash. This adds an extra level of security as only requests + from that address may use that authentication key. However in + some circumstances, such as access over mobile networks, the + requesting address can change for each request which will cause + most requests to fail. This option allows you to control + whether IP addresses are included in the authentication hash on + your system. If you experience intermitent problems with + authentication, switching this option off may help. + "), + requires => [ + { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, + { name=>"ZM_AUTH_RELAY", value=>"hashed" } + ], + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_AUTH_HASH_LOGINS", + default => "no", + description => "Allow login by authentication hash", + help => qqq(" + The normal process for logging into ZoneMinder is via the login + screen with username and password. In some circumstances it may + be desirable to allow access directly to one or more pages, for + instance from a third party application. If this option is + enabled then adding an 'auth' parameter to any request will + include a shortcut login bypassing the login screen, if not + already logged in. As authentication hashes are time and, + optionally, IP limited this can allow short-term access to + ZoneMinder screens from other web pages etc. In order to use + this the calling application will hae to generate the + authentication hash itself and ensure it is valid. If you use + this option you should ensure that you have modified the + ZM_AUTH_HASH_SECRET to somethign unique to your system. + "), + requires => [ + { name=>"ZM_OPT_USE_AUTH", value=>"yes" }, + { name=>"ZM_AUTH_RELAY", value=>"hashed" } + ], + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_DIR_EVENTS", + default => "events", + description => "Directory where events are stored", + help => qqq(" + This is the path to the events directory where all the event + images and other miscellaneous files are stored. CAUTION: The + directory you specify here cannot be outside the web root. This + is a common mistake. Most users should never change this value. + If you intend to record events to a second disk or network + share, then you should mount the drive or share directly to the + ZoneMinder events folder or follow the instructions in the + ZoneMinder Wiki titled Using a dedicated Hard Drive. + "), + type => $types{directory}, + category => "paths", + }, + { + name => "ZM_USE_DEEP_STORAGE", + default => "yes", + description => "Use a deep filesystem hierarchy for events", + help => qqq(" + This option is now the default for new ZoneMinder systems and + should not be changed. Previous versions of ZoneMinder stored + all events for a monitor under one folder. Enabling + USE_DEEP_STORAGE causes ZoneMinder to store events under a + folder structure that follows year/month/day/hour/min/second. + Storing events this way avoids the limitation of storing more + than 32k files in a single folder inherent in some filesystems. + It is important to note that you cannot simply change this + option. You must stop zoneminder, enable USE_DEEP_STORAGE, and + then run \"sudo zmupdate.pl --migrate-events\". FAILURE TO DO + SO WILL RESULT IN LOSS OF YOUR DATA! Consult the ZoneMinder + WiKi for further details. + "), + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_DIR_IMAGES", + default => "images", + description => "Directory where the images that the ZoneMinder client generates are stored", + help => qqq(" + ZoneMinder generates a myriad of images, mostly of which are + associated with events. For those that aren't this is where + they go. CAUTION: The directory you specify here cannot be + outside the web root. This is a common mistake. Most users + should never change this value. If you intend to save images to + a second disk or network share, then you should mount the drive + or share directly to the ZoneMinder images folder or follow the + instructions in the ZoneMinder Wiki titled Using a dedicated + Hard Drive. + "), + type => $types{directory}, + category => "paths", + }, + { + name => "ZM_DIR_SOUNDS", + default => "sounds", + description => "Directory to the sounds that the ZoneMinder client can use", + help => qqq(" + ZoneMinder can optionally play a sound file when an alarm is + detected. This indicates where to look for this file. CAUTION: + The directory you specify here cannot be outside the web root. + Most users should never change this value. + "), + type => $types{directory}, + category => "paths", + }, + { + name => "ZM_PATH_ZMS", + default => "/cgi-bin/nph-zms", + description => "Web path to zms streaming server", + help => qqq(" + The ZoneMinder streaming server is required to send streamed + images to your browser. It will be installed into the cgi-bin + path given at configuration time. This option determines what + the web path to the server is rather than the local path on + your machine. Ordinarily the streaming server runs in + parser-header mode however if you experience problems with + streaming you can change this to non-parsed-header (nph) mode + by changing 'zms' to 'nph-zms'. + "), + type => $types{rel_path}, + category => "paths", + }, + { + name => "ZM_COLOUR_JPEG_FILES", + default => "no", + description => "Colourise greyscale JPEG files", + help => qqq(" + Cameras that capture in greyscale can write their captured + images to jpeg files with a corresponding greyscale colour + space. This saves a small amount of disk space over colour + ones. However some tools such as ffmpeg either fail to work + with this colour space or have to convert it beforehand. + Setting this option to yes uses up a little more space but + makes creation of MPEG files much faster. + "), + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_ADD_JPEG_COMMENTS", + default => "no", + description => "Add jpeg timestamp annotations as file header comments", + help => qqq(" + JPEG files may have a number of extra fields added to the file + header. The comment field may have any kind of text added. This + options allows you to have the same text that is used to + annotate the image additionally included as a file header + comment. If you archive event images to other locations this + may help you locate images for particular events or times if + you use software that can read comment headers. + "), + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_JPEG_FILE_QUALITY", + default => "70", + description => "Set the JPEG quality setting for the saved event files (1-100)", + help => qqq(" + When ZoneMinder detects an event it will save the images + associated with that event to files. These files are in the + JPEG format and can be viewed or streamed later. This option + specifies what image quality should be used to save these + files. A higher number means better quality but less + compression so will take up more disk space and take longer to + view over a slow connection. By contrast a low number means + smaller, quicker to view, files but at the price of lower + quality images. This setting applies to all images written + except if the capture image has caused an alarm and the alarm + file quality option is set at a higher value when that is used + instead. + "), + type => $types{integer}, + category => "images", + }, + { + name => "ZM_JPEG_ALARM_FILE_QUALITY", + default => "0", + description => "Set the JPEG quality setting for the saved event files during an alarm (1-100)", + help => qqq(" + This value is equivalent to the regular jpeg file quality + setting above except that it only applies to images saved while + in an alarm state and then only if this value is set to a + higher quality setting than the ordinary file setting. If set + to a lower value then it is ignored. Thus leaving it at the + default of 0 effectively means to use the regular file quality + setting for all saved images. This is to prevent acccidentally + saving important images at a worse quality setting. + "), + type => $types{integer}, + category => "images", + }, + # Deprecated, now stream quality + { + name => "ZM_JPEG_IMAGE_QUALITY", + default => "70", + description => "Set the JPEG quality setting for the streamed 'live' images (1-100)", + help => qqq(" + When viewing a 'live' stream for a monitor ZoneMinder will grab + an image from the buffer and encode it into JPEG format before + sending it. This option specifies what image quality should be + used to encode these images. A higher number means better + quality but less compression so will take longer to view over a + slow connection. By contrast a low number means quicker to view + images but at the price of lower quality images. This option + does not apply when viewing events or still images as these are + usually just read from disk and so will be encoded at the + quality specified by the previous options. + "), + type => $types{integer}, + category => "hidden", + }, + { + name => "ZM_JPEG_STREAM_QUALITY", + default => "70", + description => "Set the JPEG quality setting for the streamed 'live' images (1-100)", + help => qqq(" + When viewing a 'live' stream for a monitor ZoneMinder will grab + an image from the buffer and encode it into JPEG format before + sending it. This option specifies what image quality should be + used to encode these images. A higher number means better + quality but less compression so will take longer to view over a + slow connection. By contrast a low number means quicker to view + images but at the price of lower quality images. This option + does not apply when viewing events or still images as these are + usually just read from disk and so will be encoded at the + quality specified by the previous options. + "), + type => $types{integer}, + category => "images", + }, + { + name => "ZM_MPEG_TIMED_FRAMES", + default => "yes", + description => "Tag video frames with a timestamp for more realistic streaming", + help => qqq(" + When using streamed MPEG based video, either for live monitor + streams or events, ZoneMinder can send the streams in two ways. + If this option is selected then the timestamp for each frame, + taken from it's capture time, is included in the stream. This + means that where the frame rate varies, for instance around an + alarm, the stream will still maintain it's 'real' timing. If + this option is not selected then an approximate frame rate is + calculated and that is used to schedule frames instead. This + option should be selected unless you encounter problems with + your preferred streaming method. + "), + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_MPEG_LIVE_FORMAT", + default => "swf", + description => "What format 'live' video streams are played in", + help => qqq(" + When using MPEG mode ZoneMinder can output live video. However + what formats are handled by the browser varies greatly between + machines. This option allows you to specify a video format + using a file extension format, so you would just enter the + extension of the file type you would like and the rest is + determined from that. The default of 'asf' works well under + Windows with Windows Media Player but I'm currently not sure + what, if anything, works on a Linux platform. If you find out + please let me know! If this option is left blank then live + streams will revert to being in motion jpeg format + "), + type => $types{string}, + category => "images", + }, + { + name => "ZM_MPEG_REPLAY_FORMAT", + default => "swf", + description => "What format 'replay' video streams are played in", + help => qqq(" + When using MPEG mode ZoneMinder can replay events in encoded + video format. However what formats are handled by the browser + varies greatly between machines. This option allows you to + specify a video format using a file extension format, so you + would just enter the extension of the file type you would like + and the rest is determined from that. The default of 'asf' + works well under Windows with Windows Media Player and 'mpg', + or 'avi' etc should work under Linux. If you know any more then + please let me know! If this option is left blank then live + streams will revert to being in motion jpeg format + "), + type => $types{string}, + category => "images", + }, + { + name => "ZM_RAND_STREAM", + default => "yes", + description => "Add a random string to prevent caching of streams", + help => qqq(" + Some browsers can cache the streams used by ZoneMinder. In + order to prevent his a harmless random string can be appended + to the url to make each invocation of the stream appear unique. + "), + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_OPT_CAMBOZOLA", + default => "no", + description => "Is the (optional) cambozola java streaming client installed", + help => qqq(" + Cambozola is a handy low fat cheese flavoured Java applet that + ZoneMinder uses to view image streams on browsers such as + Internet Explorer that don't natively support this format. If + you use this browser it is highly recommended to install this + from http://www.charliemouse.com/code/cambozola/ however if it + is not installed still images at a lower refresh rate can still + be viewed. + "), + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_PATH_CAMBOZOLA", + default => "cambozola.jar", + description => "Web path to (optional) cambozola java streaming client", + help => qqq(" + Cambozola is a handy low fat cheese flavoured Java applet that + ZoneMinder uses to view image streams on browsers such as + Internet Explorer that don't natively support this format. If + you use this browser it is highly recommended to install this + from http://www.charliemouse.com/code/cambozola/ however if it + is not installed still images at a lower refresh rate can still + be viewed. Leave this as 'cambozola.jar' if cambozola is + installed in the same directory as the ZoneMinder web client + files. + "), + requires => [ { name=>"ZM_OPT_CAMBOZOLA", value=>"yes" } ], + type => $types{rel_path}, + category => "images", + }, + { + name => "ZM_RELOAD_CAMBOZOLA", + default => "0", + description => "After how many seconds should Cambozola be reloaded in live view", + help => qqq(" + Cambozola allows for the viewing of streaming MJPEG however it + caches the entire stream into cache space on the computer, + setting this to a number > 0 will cause it to automatically + reload after that many seconds to avoid filling up a hard + drive. + "), + type => $types{integer}, + category => "images", + }, + { + name => "ZM_TIMESTAMP_ON_CAPTURE", + default => "yes", + description => "Timestamp images as soon as they are captured", + help => qqq(" + ZoneMinder can add a timestamp to images in two ways. The + default method, when this option is set, is that each image is + timestamped immediately when captured and so the image held in + memory is marked right away. The second method does not + timestamp the images until they are either saved as part of an + event or accessed over the web. The timestamp used in both + methods will contain the same time as this is preserved along + with the image. The first method ensures that an image is + timestamped regardless of any other circumstances but will + result in all images being timestamped even those never saved + or viewed. The second method necessitates that saved images are + copied before being saved otherwise two timestamps perhaps at + different scales may be applied. This has the (perhaps) + desirable side effect that the timestamp is always applied at + the same resolution so an image that has scaling applied will + still have a legible and correctly scaled timestamp. + "), + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_CPU_EXTENSIONS", + default => "yes", + description => "Use advanced CPU extensions to increase performance", + help => qqq(" + When advanced processor extensions such as SSE2 or SSSE3 are + available, ZoneMinder can use them, which should increase + performance and reduce system load. Enabling this option on + processors that do not support the advanced processors + extensions used by ZoneMinder is harmless and will have no + effect. + "), + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_FAST_IMAGE_BLENDS", + default => "yes", + description => "Use a fast algorithm to blend the reference image", + help => qqq(" + To detect alarms ZoneMinder needs to blend the captured image + with the stored reference image to update it for comparison + with the next image. The reference blend percentage specified + for the monitor controls how much the new image affects the + reference image. There are two methods that are available for + this. If this option is set then fast calculation which does + not use any multiplication or division is used. This + calculation is extremely fast, however it limits the possible + blend percentages to 50%, 25%, 12.5%, 6.25%, 3.25% and 1.5%. + Any other blend percentage will be rounded to the nearest + possible one. The alternative is to switch this option off + and use standard blending instead, which is slower. + "), + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_OPT_ADAPTIVE_SKIP", + default => "yes", + description => "Should frame analysis try and be efficient in skipping frames", + help => qqq(" + In previous versions of ZoneMinder the analysis daemon would + attempt to keep up with the capture daemon by processing the + last captured frame on each pass. This would sometimes have the + undesirable side-effect of missing a chunk of the initial + activity that caused the alarm because the pre-alarm frames + would all have to be written to disk and the database before + processing the next frame, leading to some delay between the + first and second event frames. Setting this option enables a + newer adaptive algorithm where the analysis daemon attempts to + process as many captured frames as possible, only skipping + frames when in danger of the capture daemon overwriting yet to + be processed frames. This skip is variable depending on the + size of the ring buffer and the amount of space left in it. + Enabling this option will give you much better coverage of the + beginning of alarms whilst biasing out any skipped frames + towards the middle or end of the event. However you should be + aware that this will have the effect of making the analysis + daemon run somewhat behind the capture daemon during events and + for particularly fast rates of capture it is possible for the + adaptive algorithm to be overwhelmed and not have time to react + to a rapid build up of pending frames and thus for a buffer + overrun condition to occur. + "), + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_MAX_SUSPEND_TIME", + default => "30", + description => "Maximum time that a monitor may have motion detection suspended", + help => qqq(" + ZoneMinder allows monitors to have motion detection to be + suspended, for instance while panning a camera. Ordinarily this + relies on the operator resuming motion detection afterwards as + failure to do so can leave a monitor in a permanently suspended + state. This setting allows you to set a maximum time which a + camera may be suspended for before it automatically resumes + motion detection. This time can be extended by subsequent + suspend indications after the first so continuous camera + movement will also occur while the monitor is suspended. + "), + type => $types{integer}, + category => "config", + }, + # Deprecated, really no longer necessary + { + name => "ZM_OPT_REMOTE_CAMERAS", + default => "no", + description => "Are you going to use remote/networked cameras", + help => qqq(" + ZoneMinder can work with both local cameras, ie. those attached + physically to your computer and remote or network cameras. If + you will be using networked cameras select this option. + "), + type => $types{boolean}, + category => "hidden", + }, + # Deprecated, now set on a per monitor basis using the Method field + { + name => "ZM_NETCAM_REGEXPS", + default => "yes", + description => "Use regular expression matching with network cameras", + help => qqq(" + Traditionally ZoneMinder has used complex regular regular + expressions to handle the multitude of formats that network + cameras produce. In versions from 1.21.1 the default is to use + a simpler and faster built in pattern matching methodology. + This works well with most networks cameras but if you have + problems you can try the older, but more flexible, regular + expression based method by selecting this option. Note, to use + this method you must have libpcre installed on your system. + "), + requires => [ { name => "ZM_OPT_REMOTE_CAMERAS", value => "yes" } ], + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_HTTP_VERSION", + default => "1.0", + description => "The version of HTTP that ZoneMinder will use to connect", + help => qqq(" + ZoneMinder can communicate with network cameras using either of + the HTTP/1.1 or HTTP/1.0 standard. A server will normally fall + back to the version it supports with no problem so this should + usually by left at the default. However it can be changed to + HTTP/1.0 if necessary to resolve particular issues. + "), + type => { + db_type =>"string", + hint =>"1.1|1.0", + pattern =>qr|^(1\.[01])$|, + format =>q( $1?$1:"" ) + }, + category => "network", + }, + { + name => "ZM_HTTP_UA", + default => "ZoneMinder", + description => "The user agent that ZoneMinder uses to identify itself", + help => qqq(" + When ZoneMinder communicates with remote cameras it will + identify itself using this string and it's version number. This + is normally sufficient, however if a particular cameras expects + only to communicate with certain browsers then this can be + changed to a different string identifying ZoneMinder as + Internet Explorer or Netscape etc. + "), + type => $types{string}, + category => "network", + }, + { + name => "ZM_HTTP_TIMEOUT", + default => "2500", + description => "How long ZoneMinder waits before giving up on images (milliseconds)", + help => qqq(" + When retrieving remote images ZoneMinder will wait for this + length of time before deciding that an image is not going to + arrive and taking steps to retry. This timeout is in + milliseconds (1000 per second) and will apply to each part of + an image if it is not sent in one whole chunk. + "), + type => $types{integer}, + category => "network", + }, + { + name => "ZM_MIN_RTP_PORT", + default => "40200", + description => "Minimum port that ZoneMinder will listen for RTP traffic on", + help => qqq(" + When ZoneMinder communicates with MPEG4 capable cameras using + RTP with the unicast method it must open ports for the camera + to connect back to for control and streaming purposes. This + setting specifies the minimum port number that ZoneMinder will + use. Ordinarily two adjacent ports are used for each camera, + one for control packets and one for data packets. This port + should be set to an even number, you may also need to open up a + hole in your firewall to allow cameras to connect back if you + wish to use unicasting. + "), + type => $types{integer}, + category => "network", + }, + { + name => "ZM_MAX_RTP_PORT", + default => "40499", + description => "Maximum port that ZoneMinder will listen for RTP traffic on", + help => qqq(" + When ZoneMinder communicates with MPEG4 capable cameras using + RTP with the unicast method it must open ports for the camera + to connect back to for control and streaming purposes. This + setting specifies the maximum port number that ZoneMinder will + use. Ordinarily two adjacent ports are used for each camera, + one for control packets and one for data packets. This port + should be set to an even number, you may also need to open up a + hole in your firewall to allow cameras to connect back if you + wish to use unicasting. You should also ensure that you have + opened up at least two ports for each monitor that will be + connecting to unicasting network cameras. + "), + type => $types{integer}, + category => "network", + }, + { + name => "ZM_OPT_FFMPEG", + default => "@OPT_FFMPEG@", + description => "Is the ffmpeg video encoder/decoder installed", + help => qqq(" + ZoneMinder can optionally encode a series of video images into + an MPEG encoded movie file for viewing, downloading or storage. + This option allows you to specify whether you have the ffmpeg + tools installed. Note that creating MPEG files can be fairly + CPU and disk intensive and is not a required option as events + can still be reviewed as video streams without it. + "), + type => $types{boolean}, + category => "images", + }, + { + name => "ZM_PATH_FFMPEG", + default => "@PATH_FFMPEG@", + description => "Path to (optional) ffmpeg mpeg encoder", + help => "This path should point to where ffmpeg has been installed.", + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{abs_path}, + category => "images", + }, + { + name => "ZM_FFMPEG_INPUT_OPTIONS", + default => "", + description => "Additional input options to ffmpeg", + help => qqq(" + Ffmpeg can take many options on the command line to control the + quality of video produced. This option allows you to specify + your own set that apply to the input to ffmpeg (options that + are given before the -i option). Check the ffmpeg documentation + for a full list of options which may be used here. + "), + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{string}, + category => "images", + }, + { + name => "ZM_FFMPEG_OUTPUT_OPTIONS", + default => "-r 25", + description => "Additional output options to ffmpeg", + help => qqq(" + Ffmpeg can take many options on the command line to control the + quality of video produced. This option allows you to specify + your own set that apply to the output from ffmpeg (options that + are given after the -i option). Check the ffmpeg documentation + for a full list of options which may be used here. The most + common one will often be to force an output frame rate + supported by the video encoder. + "), + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{string}, + category => "images", + }, + { + name => "ZM_FFMPEG_FORMATS", + default => "mpg mpeg wmv asf avi* mov swf 3gp**", + description => "Formats to allow for ffmpeg video generation", + help => qqq(" + Ffmpeg can generate video in many different formats. This + option allows you to list the ones you want to be able to + select. As new formats are supported by ffmpeg you can add them + here and be able to use them immediately. Adding a '*' after a + format indicates that this will be the default format used for + web video, adding '**' defines the default format for phone + video. + "), + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{string}, + category => "images", + }, + { + name => "ZM_FFMPEG_OPEN_TIMEOUT", + default => "10", + description => "Timeout in seconds when opening a stream.", + help => qqq(" + When Ffmpeg is opening a stream, it can take a long time before + failing; certain circumstances even seem to be able to lock + indefinitely. This option allows you to set a maximum time in + seconds to pass before closing the stream and trying to reopen + it again. + "), + requires => [ { name=>"ZM_OPT_FFMPEG", value=>"yes" } ], + type => $types{integer}, + category => "images", + }, + { + name => "ZM_LOG_LEVEL_SYSLOG", + default => "0", + description => "Save logging output to the system log", + help => qqq(" + ZoneMinder logging is now more more integrated between + components and allows you to specify the destination for + logging output and the individual levels for each. This option + lets you control the level of logging output that goes to the + system log. ZoneMinder binaries have always logged to the + system log but now scripts and web logging is also included. To + preserve the previous behaviour you should ensure this value is + set to Info or Warning. This option controls the maximum level + of logging that will be written, so Info includes Warnings and + Errors etc. To disable entirely, set this option to None. You + should use caution when setting this option to Debug as it can + affect severely affect system performance. If you want debug + you will also need to set a level and component below + "), + type => { + db_type =>"integer", + hint =>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", + pattern =>qr|^(\d+)$|, + format =>q( $1 ) + }, + category => "logging", + }, + { + name => "ZM_LOG_LEVEL_FILE", + default => "-5", + description => "Save logging output to component files", + help => qqq(" + ZoneMinder logging is now more more integrated between + components and allows you to specify the destination for + logging output and the individual levels for each. This option + lets you control the level of logging output that goes to + individual log files written by specific components. This is + how logging worked previously and although useful for tracking + down issues in specific components it also resulted in many + disparate log files. To preserve this behaviour you should + ensure this value is set to Info or Warning. This option + controls the maximum level of logging that will be written, so + Info includes Warnings and Errors etc. To disable entirely, set + this option to None. You should use caution when setting this + option to Debug as it can affect severely affect system + performance though file output has less impact than the other + options. If you want debug you will also need to set a level + and component below + "), + type => { + db_type =>"integer", + hint =>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", + pattern =>qr|^(\d+)$|, + format =>q( $1 ) + }, + category => "logging", + }, + { + name => "ZM_LOG_LEVEL_WEBLOG", + default => "-5", + description => "Save logging output to the weblog", + help => qqq(" + ZoneMinder logging is now more more integrated between + components and allows you to specify the destination for + logging output and the individual levels for each. This option + lets you control the level of logging output from the web + interface that goes to the httpd error log. Note that only web + logging from PHP and JavaScript files is included and so this + option is really only useful for investigating specific issues + with those components. This option controls the maximum level + of logging that will be written, so Info includes Warnings and + Errors etc. To disable entirely, set this option to None. You + should use caution when setting this option to Debug as it can + affect severely affect system performance. If you want debug + you will also need to set a level and component below + "), + type => { + db_type =>"integer", + hint =>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", + pattern =>qr|^(\d+)$|, + format =>q( $1 ) + }, + category => "logging", + }, + { + name => "ZM_LOG_LEVEL_DATABASE", + default => "0", + description => "Save logging output to the database", + help => qqq(" + ZoneMinder logging is now more more integrated between + components and allows you to specify the destination for + logging output and the individual levels for each. This option + lets you control the level of logging output that is written to + the database. This is a new option which can make viewing + logging output easier and more intuitive and also makes it + easier to get an overall impression of how the system is + performing. If you have a large or very busy system then it is + possible that use of this option may slow your system down if + the table becomes very large. Ensure you use the + LOG_DATABASE_LIMIT option to keep the table to a manageable + size. This option controls the maximum level of logging that + will be written, so Info includes Warnings and Errors etc. To + disable entirely, set this option to None. You should use + caution when setting this option to Debug as it can affect + severely affect system performance. If you want debug you will + also need to set a level and component below + "), + type => { + db_type =>"integer", + hint =>"None=-5|Panic=-4|Fatal=-3|Error=-2|Warning=-1|Info=0|Debug=1", + pattern =>qr|^(\d+)$|, + format =>q( $1 ) + }, + category => "logging", + }, + { + name => "ZM_LOG_DATABASE_LIMIT", + default => "7 day", + description => "Maximum number of log entries to retain", + help => qqq(" + If you are using database logging then it is possible to + quickly build up a large number of entries in the Logs table. + This option allows you to specify how many of these entries are + kept. If you set this option to a number greater than zero then + that number is used to determine the maximum number of rows, + less than or equal to zero indicates no limit and is not + recommended. You can also set this value to time values such as + ' day' which will limit the log entries to those newer than + that time. You can specify 'hour', 'day', 'week', 'month' and + 'year', note that the values should be singular (no 's' at the + end). The Logs table is pruned periodically so it is possible + for more than the expected number of rows to be present briefly + in the meantime. + "), + type => $types{string}, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG", + default => "no", + description => "Switch debugging on", + help => qqq(" + ZoneMinder components usually support debug logging available + to help with diagnosing problems. Binary components have + several levels of debug whereas more other components have only + one. Normally this is disabled to minimise performance + penalties and avoid filling logs too quickly. This option lets + you switch on other options that allow you to configure + additional debug information to be output. Components will pick + up this instruction when they are restarted. + "), + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG_TARGET", + default => "", + description => "What components should have extra debug enabled", + help => qqq(" + There are three scopes of debug available. Leaving this option + blank means that all components will use extra debug (not + recommended). Setting this option to '_', e.g. _zmc, + will limit extra debug to that component only. Setting this + option to '__', e.g. '_zmc_m1' will limit + extra debug to that instance of the component only. This is + ordinarily what you probably want to do. To debug scripts use + their names without the .pl extension, e.g. '_zmvideo' and to + debug issues with the web interface use '_web'. You can specify + multiple targets by separating them with '|' characters. + "), + requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], + type => $types{string}, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG_LEVEL", + default => 1, + description => "What level of extra debug should be enabled", + help => qqq(" + There are 9 levels of debug available, with higher numbers + being more debug and level 0 being no debug. However not all + levels are used by all components. Also if there is debug at a + high level it is usually likely to be output at such a volume + that it may obstruct normal operation. For this reason you + should set the level carefully and cautiously until the degree + of debug you wish to see is present. Scripts and the web + interface only have one level so this is an on/off type option + for them. + "), + requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], + type => { + db_type =>"integer", + hint =>"1|2|3|4|5|6|7|8|9", + pattern =>qr|^(\d+)$|, + format =>q( $1 ) + }, + category => "logging", + }, + { + name => "ZM_LOG_DEBUG_FILE", + default => "@ZM_LOGDIR@/zm_debug.log+", + description => "Where extra debug is output to", + help => qqq(" + This option allows you to specify a different target for debug + output. All components have a default log file which will + norally be in /tmp or /var/log and this is where debug will be + written to if this value is empty. Adding a path here will + temporarily redirect debug, and other logging output, to this + file. This option is a simple filename and you are debugging + several components then they will all try and write to the same + file with undesirable consequences. Appending a '+' to the + filename will cause the file to be created with a '.' + suffix containing your process id. In this way debug from each + run of a component is kept separate. This is the recommended + setting as it will also prevent subsequent runs from + overwriting the same log. You should ensure that permissions + are set up to allow writing to the file and directory specified + here. + "), + requires => [ { name => "ZM_LOG_DEBUG", value => "yes" } ], + type => $types{string}, + category => "logging", + }, + { + name => "ZM_LOG_CHECK_PERIOD", + default => "900", + description => "Time period used when calculating overall system health", + help => qqq(" + When ZoneMinder is logging events to the database it can + retrospectively examine the number of warnings and errors that + have occurred to calculate an overall state of system health. + This option allows you to indicate what period of historical + events are used in this calculation. This value is expressed in + seconds and is ignored if LOG_LEVEL_DATABASE is set to None. + "), + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALERT_WAR_COUNT", + default => "1", + description => "Number of warnings indicating system alert state", + help => qqq(" + When ZoneMinder is logging events to the database it can + retrospectively examine the number of warnings and errors that + have occurred to calculate an overall state of system health. + This option allows you to specify how many warnings must have + occurred within the defined time period to generate an overall + system alert state. A value of zero means warnings are not + considered. This value is ignored if LOG_LEVEL_DATABASE is set + to None. + "), + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALERT_ERR_COUNT", + default => "1", + description => "Number of errors indicating system alert state", + help => qqq(" + When ZoneMinder is logging events to the database it can + retrospectively examine the number of warnings and errors that + have occurred to calculate an overall state of system health. + This option allows you to specify how many errors must have + occurred within the defined time period to generate an overall + system alert state. A value of zero means errors are not + considered. This value is ignored if LOG_LEVEL_DATABASE is set + to None. + "), + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALERT_FAT_COUNT", + default => "0", + description => "Number of fatal error indicating system alert state", + help => qqq(" + When ZoneMinder is logging events to the database it can + retrospectively examine the number of warnings and errors that + have occurred to calculate an overall state of system health. + This option allows you to specify how many fatal errors + (including panics) must have occurred within the defined time + period to generate an overall system alert state. A value of + zero means fatal errors are not considered. This value is + ignored if LOG_LEVEL_DATABASE is set to None. + "), + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALARM_WAR_COUNT", + default => "100", + description => "Number of warnings indicating system alarm state", + help => qqq(" + When ZoneMinder is logging events to the database it can + retrospectively examine the number of warnings and errors that + have occurred to calculate an overall state of system health. + This option allows you to specify how many warnings must have + occurred within the defined time period to generate an overall + system alarm state. A value of zero means warnings are not + considered. This value is ignored if LOG_LEVEL_DATABASE is set + to None. + "), + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALARM_ERR_COUNT", + default => "10", + description => "Number of errors indicating system alarm state", + help => qqq(" + When ZoneMinder is logging events to the database it can + retrospectively examine the number of warnings and errors that + have occurred to calculate an overall state of system health. + This option allows you to specify how many errors must have + occurred within the defined time period to generate an overall + system alarm state. A value of zero means errors are not + considered. This value is ignored if LOG_LEVEL_DATABASE is set + to None. + "), + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_LOG_ALARM_FAT_COUNT", + default => "1", + description => "Number of fatal error indicating system alarm state", + help => qqq(" + When ZoneMinder is logging events to the database it can + retrospectively examine the number of warnings and errors that + have occurred to calculate an overall state of system health. + This option allows you to specify how many fatal errors + (including panics) must have occurred within the defined time + period to generate an overall system alarm state. A value of + zero means fatal errors are not considered. This value is + ignored if LOG_LEVEL_DATABASE is set to None. + "), + type => $types{integer}, + category => "logging", + }, + { + name => "ZM_RECORD_EVENT_STATS", + default => "yes", + description => "Record event statistical information, switch off if too slow", + help => qqq(" + This version of ZoneMinder records detailed information about + events in the Stats table. This can help in profiling what the + optimum settings are for Zones though this is tricky at + present. However in future releases this will be done more + easily and intuitively, especially with a large sample of + events. The default option of 'yes' allows this information to + be collected now in readiness for this but if you are concerned + about performance you can switch this off in which case no + Stats information will be saved. + "), + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_RECORD_DIAG_IMAGES", + default => "no", + description => "Record intermediate alarm diagnostic images, can be very slow", + help => qqq(" + In addition to recording event statistics you can also record + the intermediate diagnostic images that display the results of + the various checks and processing that occur when trying to + determine if an alarm event has taken place. There are several + of these images generated for each frame and zone for each + alarm or alert frame so this can have a massive impact on + performance. Only switch this setting on for debug or analysis + purposes and remember to switch it off again once no longer + required. + "), + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_DUMP_CORES", + default => "no", + description => "Create core files on unexpected process failure.", + help => qqq(" + When an unrecoverable error occurs in a ZoneMinder binary + process is has traditionally been trapped and the details + written to logs to aid in remote analysis. However in some + cases it is easier to diagnose the error if a core file, which + is a memory dump of the process at the time of the error, is + created. This can be interactively analysed in the debugger and + may reveal more or better information than that available from + the logs. This option is recommended for advanced users only + otherwise leave at the default. Note using this option to + trigger core files will mean that there will be no indication + in the binary logs that a process has died, they will just + stop, however the zmdc log will still contain an entry. Also + note that you may have to explicitly enable core file creation + on your system via the 'ulimit -c' command or other means + otherwise no file will be created regardless of the value of + this option. + "), + type => $types{boolean}, + category => "logging", + }, + { + name => "ZM_PATH_MAP", + default => "/dev/shm", + description => "Path to the mapped memory files that that ZoneMinder can use", + help => qqq(" + ZoneMinder has historically used IPC shared memory for shared + data between processes. This has it's advantages and + limitations. This version of ZoneMinder can use an alternate + method, mapped memory, instead with can be enabled with the + --enable--mmap directive to configure. This requires less + system configuration and is generally more flexible. However it + requires each shared data segment to map onto a filesystem + file. This option indicates where those mapped files go. You + should ensure that this location has sufficient space for these + files and for the best performance it should be a tmpfs file + system or ramdisk otherwise disk access may render this method + slower than the regular shared memory one. + "), + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_SOCKS", + default => "@ZM_SOCKDIR@", + description => "Path to the various Unix domain socket files that ZoneMinder uses", + help => qqq(" + ZoneMinder generally uses Unix domain sockets where possible. + This reduces the need for port assignments and prevents + external applications from possibly compromising the daemons. + However each Unix socket requires a .sock file to be created. + This option indicates where those socket files go. + "), + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_LOGS", + default => "@ZM_LOGDIR@", + description => "Path to the various logs that the ZoneMinder daemons generate", + help => qqq(" + There are various daemons that are used by ZoneMinder to + perform various tasks. Most generate helpful log files and this + is where they go. They can be deleted if not required for + debugging. + "), + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_SWAP", + default => "@ZM_TMPDIR@", + description => "Path to location for temporary swap images used in streaming", + help => qqq(" + Buffered playback requires temporary swap images to be stored + for each instance of the streaming daemons. This option + determines where these images will be stored. The images will + actually be stored in sub directories beneath this location and + will be automatically cleaned up after a period of time. + "), + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_PATH_ARP", + default => "", + description => "Path to a supported ARP tool", + help => qqq(" + The camera probe function uses Address Resolution Protocol in + order to find known devices on the network. Optionally supply + the full path to \"ip neigh\", \"arp -a\", or any other tool on + your system that returns ip/mac address pairs. If this field is + left empty, ZoneMinder will search for the command \"arp\" and + attempt to use that. + "), + type => $types{abs_path}, + category => "paths", + }, + { + name => "ZM_WEB_TITLE_PREFIX", + default => "ZM", + description => "The title prefix displayed on each window", + help => qqq(" + If you have more than one installation of ZoneMinder it can be + helpful to display different titles for each one. Changing this + option allows you to customise the window titles to include + further information to aid identification. + "), + type => $types{string}, + category => "web", + }, + { + name => "ZM_WEB_RESIZE_CONSOLE", + default => "yes", + description => "Should the console window resize itself to fit", + help => qqq(" + Traditionally the main ZoneMinder web console window has + resized itself to shrink to a size small enough to list only + the monitors that are actually present. This is intended to + make the window more unobtrusize but may not be to everyones + tastes, especially if opened in a tab in browsers which support + this kind if layout. Switch this option off to have the console + window size left to the users preference + "), + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_POPUP_ON_ALARM", + default => "yes", + description => "Should the monitor window jump to the top if an alarm occurs", + help => qqq(" + When viewing a live monitor stream you can specify whether you + want the window to pop to the front if an alarm occurs when the + window is minimised or behind another window. This is most + useful if your monitors are over doors for example when they + can pop up if someone comes to the doorway. + "), + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_OPT_X10", + default => "no", + description => "Support interfacing with X10 devices", + help => qqq(" + If you have an X10 Home Automation setup in your home you can + use ZoneMinder to initiate or react to X10 signals if your + computer has the appropriate interface controller. This option + indicates whether X10 options will be available in the browser + client. + "), + type => $types{boolean}, + category => "x10", + }, + { + name => "ZM_X10_DEVICE", + default => "/dev/ttyS0", + description => "What device is your X10 controller connected on", + requires => [ { name => "ZM_OPT_X10", value => "yes" } ], + help => qqq(" + If you have an X10 controller device (e.g. XM10U) connected to + your computer this option details which port it is connected on, + the default of /dev/ttyS0 maps to serial or com port 1. + "), + type => $types{abs_path}, + category => "x10", + }, + { + name => "ZM_X10_HOUSE_CODE", + default => "A", + description => "What X10 house code should be used", + requires => [ { name => "ZM_OPT_X10", value => "yes" } ], + help => qqq(" + X10 devices are grouped together by identifying them as all + belonging to one House Code. This option details what that is. + It should be a single letter between A and P. + "), + type => { db_type=>"string", hint=>"A-P", pattern=>qr|^([A-P])|i, format=>q( uc($1) ) }, + category => "x10", + }, + { + name => "ZM_X10_DB_RELOAD_INTERVAL", + default => "60", + description => "How often (in seconds) the X10 daemon reloads the monitors from the database", + requires => [ { name => "ZM_OPT_X10", value => "yes" } ], + help => qqq(" + The zmx10 daemon periodically checks the database to find out + what X10 events trigger, or result from, alarms. This option + determines how frequently this check occurs, unless you change + this area frequently this can be a fairly large value. + "), + type => $types{integer}, + category => "x10", + }, + { + name => "ZM_WEB_SOUND_ON_ALARM", + default => "no", + description => "Should the monitor window play a sound if an alarm occurs", + help => qqq(" + When viewing a live monitor stream you can specify whether you + want the window to play a sound to alert you if an alarm + occurs. + "), + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_ALARM_SOUND", + default => "", + description => "The sound to play on alarm, put this in the sounds directory", + help => qqq(" + You can specify a sound file to play if an alarm occurs whilst + you are watching a live monitor stream. So long as your browser + understands the format it does not need to be any particular + type. This file should be placed in the sounds directory + defined earlier. + "), + type => $types{file}, + requires => [ { name => "ZM_WEB_SOUND_ON_ALARM", value => "yes" } ], + category => "web", + }, + { + name => "ZM_WEB_COMPACT_MONTAGE", + default => "no", + description => "Compact the montage view by removing extra detail", + help => qqq(" + The montage view shows the output of all of your active + monitors in one window. This include a small menu and status + information for each one. This can increase the web traffic and + make the window larger than may be desired. Setting this option + on removes all this extraneous information and just displays + the images. + "), + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_OPT_FAST_DELETE", + default => "yes", + description => "Delete only event database records for speed", + help => qqq(" + Normally an event created as the result of an alarm consists of + entries in one or more database tables plus the various files + associated with it. When deleting events in the browser it can + take a long time to remove all of this if your are trying to do + a lot of events at once. It is recommended that you set this + option which means that the browser client only deletes the key + entries in the events table, which means the events will no + longer appear in the listing, and leaves the zmaudit daemon to + clear up the rest later. + "), + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_STRICT_VIDEO_CONFIG", + default => "yes", + description => "Allow errors in setting video config to be fatal", + help => qqq(" + With some video devices errors can be reported in setting the + various video attributes when in fact the operation was + successful. Switching this option off will still allow these + errors to be reported but will not cause them to kill the video + capture daemon. Note however that doing this will cause all + errors to be ignored including those which are genuine and + which may cause the video capture to not function correctly. + Use this option with caution. + "), + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_SIGNAL_CHECK_POINTS", + default => "10", + description => "How many points in a captured image to check for signal loss", + help => qqq(" + For locally attached video cameras ZoneMinder can check for + signal loss by looking at a number of random points on each + captured image. If all of these points are set to the same + fixed colour then the camera is assumed to have lost signal. + When this happens any open events are closed and a short one + frame signal loss event is generated, as is another when the + signal returns. This option defines how many points on each + image to check. Note that this is a maximum, any points found + to not have the check colour will abort any further checks so + in most cases on a couple of points will actually be checked. + Network and file based cameras are never checked. + "), + type => $types{integer}, + category => "config", + }, + { + name => "ZM_V4L_MULTI_BUFFER", + default => "yes", + description => "Use more than one buffer for Video 4 Linux devices", + help => qqq(" + Performance when using Video 4 Linux devices is usually best if + multiple buffers are used allowing the next image to be + captured while the previous one is being processed. If you have + multiple devices on a card sharing one input that requires + switching then this approach can sometimes cause frames from + one source to be mixed up with frames from another. Switching + this option off prevents multi buffering resulting in slower + but more stable image capture. This option is ignored for + non-local cameras or if only one input is present on a capture + chip. This option addresses a similar problem to the + ZM_CAPTURES_PER_FRAME option and you should normally change the + value of only one of the options at a time. If you have + different capture cards that need different values you can + ovveride them in each individual monitor on the source page. + "), + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_CAPTURES_PER_FRAME", + default => "1", + description => "How many images are captured per returned frame, for shared local cameras", + help => qqq(" + If you are using cameras attached to a video capture card which + forces multiple inputs to share one capture chip, it can + sometimes produce images with interlaced frames reversed + resulting in poor image quality and a distinctive comb edge + appearance. Increasing this setting allows you to force + additional image captures before one is selected as the + captured frame. This allows the capture hardware to 'settle + down' and produce better quality images at the price of lesser + capture rates. This option has no effect on (a) network + cameras, or (b) where multiple inputs do not share a capture + chip. This option addresses a similar problem to the + ZM_V4L_MULTI_BUFFER option and you should normally change the + value of only one of the options at a time. If you have + different capture cards that need different values you can + ovveride them in each individual monitor on the source page. + "), + type => $types{integer}, + category => "config", + }, + { + name => "ZM_FILTER_RELOAD_DELAY", + default => "300", + description => "How often (in seconds) filters are reloaded in zmfilter", + help => qqq(" + ZoneMinder allows you to save filters to the database which + allow events that match certain criteria to be emailed, deleted + or uploaded to a remote machine etc. The zmfilter daemon loads + these and does the actual operation. This option determines how + often the filters are reloaded from the database to get the + latest versions or new filters. If you don't change filters + very often this value can be set to a large value. + "), + type => $types{integer}, + category => "system", + }, + { + name => "ZM_FILTER_EXECUTE_INTERVAL", + default => "60", + description => "How often (in seconds) to run automatic saved filters", + help => qqq(" + ZoneMinder allows you to save filters to the database which + allow events that match certain criteria to be emailed, deleted + or uploaded to a remote machine etc. The zmfilter daemon loads + these and does the actual operation. This option determines how + often the filters are executed on the saved event in the + database. If you want a rapid response to new events this + should be a smaller value, however this may increase the + overall load on the system and affect performance of other + elements. + "), + type => $types{integer}, + category => "system", + }, + { + name => "ZM_OPT_UPLOAD", + default => "no", + description => "Should ZoneMinder support uploading events from filters", + help => qqq(" + In ZoneMinder you can create event filters that specify whether + events that match certain criteria should be uploaded to a + remote server for archiving. This option specifies whether this + functionality should be available + "), + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_ARCH_FORMAT", + default => "tar", + description => "What format the uploaded events should be created in.", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + help => qqq(" + Uploaded events may be stored in either .tar or .zip format, + this option specifies which. Note that to use this you will + need to have the Archive::Tar and/or Archive::Zip perl modules + installed. + "), + type => { + db_type =>"string", + hint =>"tar|zip", + pattern =>qr|^([tz])|i, + format =>q( $1 =~ /^t/ ? "tar" : "zip" ) + }, + category => "upload", + }, + { + name => "ZM_UPLOAD_ARCH_COMPRESS", + default => "no", + description => "Should archive files be compressed", + help => qqq(" + When the archive files are created they can be compressed. + However in general since the images are compressed already this + saves only a minimal amount of space versus utilising more CPU + in their creation. Only enable if you have CPU to waste and are + limited in disk space on your remote server or bandwidth. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_ARCH_ANALYSE", + default => "no", + description => "Include the analysis files in the archive", + help => qqq(" + When the archive files are created they can contain either just + the captured frames or both the captured frames and, for frames + that caused an alarm, the analysed image with the changed area + highlighted. This option controls files are included. Only + include analysed frames if you have a high bandwidth connection + to the remote server or if you need help in figuring out what + caused an alarm in the first place as archives with these files + in can be considerably larger. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_PROTOCOL", + default => "ftp", + description => "What protocol to use to upload events", + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + help => qqq(" + ZoneMinder can upload events to a remote server using either + FTP or SFTP. Regular FTP is widely supported but not + necessarily very secure whereas SFTP (Secure FTP) runs over an + ssh connection and so is encrypted and uses regular ssh ports. + Note that to use this you will need to have the appropriate + perl module, either Net::FTP or Net::SFTP installed depending + on your choice. + "), + type => { + db_type =>"string", + hint =>"ftp|sftp", + pattern =>qr|^([tz])|i, + format =>q( $1 =~ /^f/ ? "ftp" : "sftp" ) + }, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_HOST", + default => "", + description => "The remote server to upload to", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote ftp server. This option indicates the name, or ip + address, of the server to use. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{hostname}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_HOST", + default => "", + description => "The remote server to upload events to", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote server. This option indicates the name, or ip address, + of the server to use. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{hostname}, + category => "upload", + }, + { + name => "ZM_UPLOAD_PORT", + default => "", + description => "The port on the remote upload server, if not the default (SFTP only)", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote server. If you are using the SFTP protocol then this + option allows you to specify a particular port to use for + connection. If this option is left blank then the default, port + 22, is used. This option is ignored for FTP uploads. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{integer}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_USER", + default => "", + description => "Your ftp username", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote ftp server. This option indicates the username that + ZoneMinder should use to log in for ftp transfer. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{alphanum}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_USER", + default => "", + description => "Remote server username", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote server. This option indicates the username that + ZoneMinder should use to log in for transfer. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{alphanum}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_PASS", + default => "", + description => "Your ftp password", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote ftp server. This option indicates the password that + ZoneMinder should use to log in for ftp transfer. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{string}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_PASS", + default => "", + description => "Remote server password", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote server. This option indicates the password that + ZoneMinder should use to log in for transfer. If you are using + certicate based logins for SFTP servers you can leave this + option blank. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{string}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_LOC_DIR", + default => "@ZM_TMPDIR@", + description => "The local directory in which to create upload files", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote ftp server. This option indicates the local directory + that ZoneMinder should use for temporary upload files. These + are files that are created from events, uploaded and then + deleted. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{abs_path}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_LOC_DIR", + default => "@ZM_TMPDIR@", + description => "The local directory in which to create upload files", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote server. This option indicates the local directory that + ZoneMinder should use for temporary upload files. These are + files that are created from events, uploaded and then deleted. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{abs_path}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_REM_DIR", + default => "", + description => "The remote directory to upload to", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote ftp server. This option indicates the remote directory + that ZoneMinder should use to upload event files to. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{rel_path}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_REM_DIR", + default => "", + description => "The remote directory to upload to", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote server. This option indicates the remote directory + that ZoneMinder should use to upload event files to. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{rel_path}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_TIMEOUT", + default => "120", + description => "How long to allow the transfer to take for each file", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote ftp server. This option indicates the maximum ftp + inactivity timeout (in seconds) that should be tolerated before + ZoneMinder determines that the transfer has failed and closes + down the connection. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{integer}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_TIMEOUT", + default => "120", + description => "How long to allow the transfer to take for each file", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote server. This option indicates the maximum inactivity + timeout (in seconds) that should be tolerated before ZoneMinder + determines that the transfer has failed and closes down the + connection. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{integer}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_PASSIVE", + default => "yes", + description => "Use passive ftp when uploading", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote ftp server. This option indicates that ftp transfers + should be done in passive mode. This uses a single connection + for all ftp activity and, whilst slower than active transfers, + is more robust and likely to work from behind filewalls. This + option is ignored for SFTP transfers. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + help => qqq(" + If your computer is behind a firewall or proxy you may need to + set FTP to passive mode. In fact for simple transfers it makes + little sense to do otherwise anyway but you can set this to + 'No' if you wish. + "), + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_UPLOAD_FTP_DEBUG", + default => "no", + description => "Switch ftp debugging on", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote ftp server. If you are having (or expecting) troubles + with uploading events then setting this to 'yes' permits + additional information to be included in the zmfilter log file. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_UPLOAD_DEBUG", + default => "no", + description => "Switch upload debugging on", + help => qqq(" + You can use filters to instruct ZoneMinder to upload events to + a remote server. If you are having (or expecting) troubles with + uploading events then setting this to 'yes' permits additional + information to be generated by the underlying transfer modules + and included in the logs. + "), + requires => [ { name => "ZM_OPT_UPLOAD", value => "yes" } ], + type => $types{boolean}, + category => "upload", + }, + { + name => "ZM_OPT_EMAIL", + default => "no", + description => "Should ZoneMinder email you details of events that match corresponding filters", + help => qqq(" + In ZoneMinder you can create event filters that specify whether + events that match certain criteria should have their details + emailed to you at a designated email address. This will allow + you to be notified of events as soon as they occur and also to + quickly view the events directly. This option specifies whether + this functionality should be available. The email created with + this option can be any size and is intended to be sent to a + regular email reader rather than a mobile device. + "), + type => $types{boolean}, + category => "mail", + }, + { + name => "ZM_EMAIL_ADDRESS", + default => "", + description => "The email address to send matching event details to", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => qqq(" + This option is used to define the email address that any events + that match the appropriate filters will be sent to. + "), + type => $types{email}, + category => "mail", + }, + { + name => "ZM_EMAIL_TEXT", + default => 'subject = "ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)" body = " Hello, @@ -1027,24 +2105,30 @@ The details are as follows :- This alarm was matched by the %FN% filter and can be viewed at %EPS% ZoneMinder"', - description => "The text of the email used to send matching event details", - requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], - help => "This option is used to define the content of the email that is sent for any events that match the appropriate filters.", - type => $types{text}, - category => "hidden", - }, - { - name => "ZM_EMAIL_SUBJECT", - default => "ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)", - description => "The subject of the email used to send matching event details", - requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], - help => "This option is used to define the subject of the email that is sent for any events that match the appropriate filters.", - type => $types{string}, - category => "mail", - }, - { - name => "ZM_EMAIL_BODY", - default => " + description => "The text of the email used to send matching event details", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => qqq(" + This option is used to define the content of the email that is + sent for any events that match the appropriate filters. + "), + type => $types{text}, + category => "hidden", + }, + { + name => "ZM_EMAIL_SUBJECT", + default => "ZoneMinder: Alarm - %MN%-%EI% (%ESM% - %ESA% %EFA%)", + description => "The subject of the email used to send matching event details", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => qqq(" + This option is used to define the subject of the email that is + sent for any events that match the appropriate filters. + "), + type => $types{string}, + category => "mail", + }, + { + name => "ZM_EMAIL_BODY", + default => " Hello, An alarm has been detected on your installation of the ZoneMinder. @@ -1060,896 +2144,1853 @@ The details are as follows :- This alarm was matched by the %FN% filter and can be viewed at %EPS% ZoneMinder", - description => "The body of the email used to send matching event details", - requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], - help => "This option is used to define the content of the email that is sent for any events that match the appropriate filters.", - type => $types{text}, - category => "mail", - }, - { - name => "ZM_OPT_MESSAGE", - default => "no", - description => "Should ZoneMinder message you with details of events that match corresponding filters", - help => "In ZoneMinder you can create event filters that specify whether events that match certain criteria should have their details sent to you at a designated short message email address. This will allow you to be notified of events as soon as they occur. This option specifies whether this functionality should be available. The email created by this option will be brief and is intended to be sent to an SMS gateway or a minimal mail reader such as a mobile device or phone rather than a regular email reader.", - type => $types{boolean}, - category => "mail", - }, - { - name => "ZM_MESSAGE_ADDRESS", - default => "", - description => "The email address to send matching event details to", - requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], - help => "This option is used to define the short message email address that any events that match the appropriate filters will be sent to.", - type => $types{email}, - category => "mail", - }, - { - name => "ZM_MESSAGE_TEXT", - default => 'subject = "ZoneMinder: Alarm - %MN%-%EI%" + description => "The body of the email used to send matching event details", + requires => [ { name => "ZM_OPT_EMAIL", value => "yes" } ], + help => qqq(" + This option is used to define the content of the email that is + sent for any events that match the appropriate filters. + "), + type => $types{text}, + category => "mail", + }, + { + name => "ZM_OPT_MESSAGE", + default => "no", + description => "Should ZoneMinder message you with details of events that match corresponding filters", + help => qqq(" + In ZoneMinder you can create event filters that specify whether + events that match certain criteria should have their details + sent to you at a designated short message email address. This + will allow you to be notified of events as soon as they occur. + This option specifies whether this functionality should be + available. The email created by this option will be brief and + is intended to be sent to an SMS gateway or a minimal mail + reader such as a mobile device or phone rather than a regular + email reader. + "), + type => $types{boolean}, + category => "mail", + }, + { + name => "ZM_MESSAGE_ADDRESS", + default => "", + description => "The email address to send matching event details to", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => qqq(" + This option is used to define the short message email address + that any events that match the appropriate filters will be sent + to. + "), + type => $types{email}, + category => "mail", + }, + { + name => "ZM_MESSAGE_TEXT", + default => 'subject = "ZoneMinder: Alarm - %MN%-%EI%" body = "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score."', - description => "The text of the message used to send matching event details", - requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], - help => "This option is used to define the content of the message that is sent for any events that match the appropriate filters.", - type => $types{text}, - category => "hidden", - }, - { - name => "ZM_MESSAGE_SUBJECT", - default => "ZoneMinder: Alarm - %MN%-%EI%", - description => "The subject of the message used to send matching event details", - requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], - help => "This option is used to define the subject of the message that is sent for any events that match the appropriate filters.", - type => $types{string}, - category => "mail", - }, - { - name => "ZM_MESSAGE_BODY", - default => "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score.", - description => "The body of the message used to send matching event details", - requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], - help => "This option is used to define the content of the message that is sent for any events that match the appropriate filters.", - type => $types{text}, - category => "mail", - }, - { - name => "ZM_NEW_MAIL_MODULES", - default => "no", - description => "Use a newer perl method to send emails", - requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], - help => "Traditionally ZoneMinder has used the MIME::Entity perl module to construct and send notification emails and messages. Some people have reported problems with this module not being present at all or flexible enough for their needs. If you are one of those people this option allows you to select a new mailing method using MIME::Lite and Net::SMTP instead. This method was contributed by Ross Melin and should work for everyone but has not been extensively tested so currently is not selected by default.", - type => $types{boolean}, - category => "mail", - }, - { - name => "ZM_EMAIL_HOST", - default => "localhost", - description => "The host address of your SMTP mail server", - requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], - help => "If you have chosen SMTP as the method by which to send notification emails or messages then this option allows you to choose which SMTP server to use to send them. The default of localhost may work if you have the sendmail, exim or a similar daemon running however you may wish to enter your ISP's SMTP mail server here.", - type => $types{hostname}, - category => "mail", - }, - { - name => "ZM_FROM_EMAIL", - default => "", - description => "The email address you wish your event notifications to originate from", - requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], - help => "The emails or messages that will be sent to you informing you of events can appear to come from a designated email address to help you with mail filtering etc. An address of something like ZoneMinder\@your.domain is recommended.", - type => $types{email}, - category => "mail", - }, - { - name => "ZM_URL", - default => "", - description => "The URL of your ZoneMinder installation", - requires => [ { name => "ZM_OPT_EMAIL", value => "yes" }, { name => "ZM_OPT_MESSAGE", value => "yes" } ], - help => "The emails or messages that will be sent to you informing you of events can include a link to the events themselves for easy viewing. If you intend to use this feature then set this option to the url of your installation as it would appear from where you read your email, e.g. http://host.your.domain/zm.php.", - type => $types{url}, - category => "mail", - }, - { - name => "ZM_MAX_RESTART_DELAY", - default => "600", - description => "Maximum delay (in seconds) for daemon restart attempts.", - help => "The zmdc (zm daemon control) process controls when processeses are started or stopped and will attempt to restart any that fail. If a daemon fails frequently then a delay is introduced between each restart attempt. If the daemon stills fails then this delay is increased to prevent extra load being placed on the system by continual restarts. This option controls what this maximum delay is.", - type => $types{integer}, - category => "system", - }, - { - name => "ZM_WATCH_CHECK_INTERVAL", - default => "10", - description => "How often to check the capture daemons have not locked up", - help => "The zmwatch daemon checks the image capture performance of the capture daemons to ensure that they have not locked up (rarely a sync error may occur which blocks indefinately). This option determines how often the daemons are checked.", - type => $types{integer}, - category => "system", - }, - { - name => "ZM_WATCH_MAX_DELAY", - default => "5", - description => "The maximum delay allowed since the last captured image", - help => "The zmwatch daemon checks the image capture performance of the capture daemons to ensure that they have not locked up (rarely a sync error may occur which blocks indefinately). This option determines the maximum delay to allow since the last captured frame. The daemon will be restarted if it has not captured any images after this period though the actual restart may take slightly longer in conjunction with the check interval value above.", - type => $types{decimal}, - category => "system", - }, - { + description => "The text of the message used to send matching event details", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => qqq(" + This option is used to define the content of the message that + is sent for any events that match the appropriate filters. + "), + type => $types{text}, + category => "hidden", + }, + { + name => "ZM_MESSAGE_SUBJECT", + default => "ZoneMinder: Alarm - %MN%-%EI%", + description => "The subject of the message used to send matching event details", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => qqq(" + This option is used to define the subject of the message that + is sent for any events that match the appropriate filters. + "), + type => $types{string}, + category => "mail", + }, + { + name => "ZM_MESSAGE_BODY", + default => "ZM alarm detected - %EL% secs, %EF%/%EFA% frames, t%EST%/m%ESM%/a%ESA% score.", + description => "The body of the message used to send matching event details", + requires => [ { name => "ZM_OPT_MESSAGE", value => "yes" } ], + help => qqq(" + This option is used to define the content of the message that + is sent for any events that match the appropriate filters. + "), + type => $types{text}, + category => "mail", + }, + { + name => "ZM_NEW_MAIL_MODULES", + default => "no", + description => "Use a newer perl method to send emails", + requires => [ + { name => "ZM_OPT_EMAIL", value => "yes" }, + { name => "ZM_OPT_MESSAGE", value => "yes" } + ], + help => qqq(" + Traditionally ZoneMinder has used the MIME::Entity perl module + to construct and send notification emails and messages. Some + people have reported problems with this module not being + present at all or flexible enough for their needs. If you are + one of those people this option allows you to select a new + mailing method using MIME::Lite and Net::SMTP instead. This + method was contributed by Ross Melin and should work for + everyone but has not been extensively tested so currently is + not selected by default. + "), + type => $types{boolean}, + category => "mail", + }, + { + name => "ZM_EMAIL_HOST", + default => "localhost", + description => "The host address of your SMTP mail server", + requires => [ + { name => "ZM_OPT_EMAIL", value => "yes" }, + { name => "ZM_OPT_MESSAGE", value => "yes" } + ], + help => qqq(" + If you have chosen SMTP as the method by which to send + notification emails or messages then this option allows you to + choose which SMTP server to use to send them. The default of + localhost may work if you have the sendmail, exim or a similar + daemon running however you may wish to enter your ISP's SMTP + mail server here. + "), + type => $types{hostname}, + category => "mail", + }, + { + name => "ZM_FROM_EMAIL", + default => "", + description => "The email address you wish your event notifications to originate from", + requires => [ + { name => "ZM_OPT_EMAIL", value => "yes" }, + { name => "ZM_OPT_MESSAGE", value => "yes" } + ], + help => qqq(" + The emails or messages that will be sent to you informing you + of events can appear to come from a designated email address to + help you with mail filtering etc. An address of something like + ZoneMinder\@your.domain is recommended. + "), + type => $types{email}, + category => "mail", + }, + { + name => "ZM_URL", + default => "", + description => "The URL of your ZoneMinder installation", + requires => [ + { name => "ZM_OPT_EMAIL", value => "yes" }, + { name => "ZM_OPT_MESSAGE", value => "yes" } + ], + help => qqq(" + The emails or messages that will be sent to you informing you + of events can include a link to the events themselves for easy + viewing. If you intend to use this feature then set this option + to the url of your installation as it would appear from where + you read your email, e.g. http://host.your.domain/zm.php. + "), + type => $types{url}, + category => "mail", + }, + { + name => "ZM_MAX_RESTART_DELAY", + default => "600", + description => "Maximum delay (in seconds) for daemon restart attempts.", + help => qqq(" + The zmdc (zm daemon control) process controls when processeses + are started or stopped and will attempt to restart any that + fail. If a daemon fails frequently then a delay is introduced + between each restart attempt. If the daemon stills fails then + this delay is increased to prevent extra load being placed on + the system by continual restarts. This option controls what + this maximum delay is. + "), + type => $types{integer}, + category => "system", + }, + { + name => "ZM_WATCH_CHECK_INTERVAL", + default => "10", + description => "How often to check the capture daemons have not locked up", + help => qqq(" + The zmwatch daemon checks the image capture performance of the + capture daemons to ensure that they have not locked up (rarely + a sync error may occur which blocks indefinitely). This option + determines how often the daemons are checked. + "), + type => $types{integer}, + category => "system", + }, + { + name => "ZM_WATCH_MAX_DELAY", + default => "5", + description => "The maximum delay allowed since the last captured image", + help => qqq(" + The zmwatch daemon checks the image capture performance of the + capture daemons to ensure that they have not locked up (rarely + a sync error may occur which blocks indefinitely). This option + determines the maximum delay to allow since the last captured + frame. The daemon will be restarted if it has not captured any + images after this period though the actual restart may take + slightly longer in conjunction with the check interval value + above. + "), + type => $types{decimal}, + category => "system", + }, + { - name => "ZM_RUN_AUDIT", - default => "yes", - description => "Run zmaudit to check data consistency", - help => "The zmaudit daemon exists to check that the saved information in the database and on the filesystem match and are consistent with each other. If an error occurs or if you are using 'fast deletes' it may be that database records are deleted but files remain. In this case, and similar, zmaudit will remove redundant information to synchronise the two data stores. This option controls whether zmaudit is run in the background and performs these checks and fixes continuously. This is recommended for most systems however if you have a very large number of events the process of scanning the database and filesystem may take a long time and impact performance. In this case you may prefer to not have zmaudit running unconditionally and schedule occasional checks at other, more convenient, times.", - type => $types{boolean}, - category => "system", - }, - { - - name => "ZM_AUDIT_CHECK_INTERVAL", - default => "900", - description => "How often to check database and filesystem consistency", - help => "The zmaudit daemon exists to check that the saved information in the database and on the filesystem match and are consistent with each other. If an error occurs or if you are using 'fast deletes' it may be that database records are deleted but files remain. In this case, and similar, zmaudit will remove redundant information to synchronise the two data stores. The default check interval of 900 seconds (15 minutes) is fine for most systems however if you have a very large number of events the process of scanning the database and filesystem may take a long time and impact performance. In this case you may prefer to make this interval much larger to reduce the impact on your system. This option determines how often these checks are performed.", - type => $types{integer}, - category => "system", - }, - { - name => "ZM_FORCED_ALARM_SCORE", - default => "255", - description => "Score to give forced alarms", - help => "The 'zmu' utility can be used to force an alarm on a monitor rather than rely on the motion detection algorithms. This option determines what score to give these alarms to distinguish them from regular ones. It must be 255 or less.", - type => $types{integer}, - category => "config", - }, - { - name => "ZM_BULK_FRAME_INTERVAL", - default => "100", - description => "How often a bulk frame should be written to the database", - help => "Traditionally ZoneMinder writes an entry into the Frames database table for each frame that is captured and saved. This works well in motion detection scenarios but when in a DVR situation ('Record' or 'Mocord' mode) this results in a huge number of frame writes and a lot of database and disk bandwidth for very little additional information. Setting this to a non-zero value will enabled ZoneMinder to group these non-alarm frames into one 'bulk' frame entry which saves a lot of bandwidth and space. The only disadvantage of this is that timing information for individual frames is lost but in constant frame rate situations this is usually not significant. This setting is ignored in Modect mode and individual frames are still written if an alarm occurs in Mocord mode also.", - type => $types{integer}, - category => "config", - }, - { - name => "ZM_EVENT_CLOSE_MODE", - default => "idle", - description => "When continuous events are closed.", - help => "When a monitor is running in a continuous recording mode (Record or Mocord) events are usually closed after a fixed period of time (the section length). However in Mocord mode it is possible that motion detection may occur near the end of a section. This option controls what happens when an alarm occurs in Mocord mode. The 'time' setting means that the event will be closed at the end of the section regardless of alarm activity. The 'idle' setting means that the event will be closed at the end of the section if there is no alarm activity occuring at the time otherwise it will be closed once the alarm is over meaning the event may end up being longer than the normal section length. The 'alarm' setting means that if an alarm occurs during the event, the event will be closed once the alarm is over regardless of when this occurs. This has the effect of limiting the number of alarms to one per event and the events will be shorter than the section length if an alarm has occurred.", - type => $types{boolean}, - type => { db_type=>"string", hint=>"time|idle|alarm", pattern=>qr|^([tia])|i, format=>q( ($1 =~ /^t/) ? "time" : ($1 =~ /^i/ ? "idle" : "time" ) ) }, - category => "config", - }, + name => "ZM_RUN_AUDIT", + default => "yes", + description => "Run zmaudit to check data consistency", + help => qqq(" + The zmaudit daemon exists to check that the saved information + in the database and on the filesystem match and are consistent + with each other. If an error occurs or if you are using 'fast + deletes' it may be that database records are deleted but files + remain. In this case, and similar, zmaudit will remove + redundant information to synchronise the two data stores. This + option controls whether zmaudit is run in the background and + performs these checks and fixes continuously. This is + recommended for most systems however if you have a very large + number of events the process of scanning the database and + filesystem may take a long time and impact performance. In this + case you may prefer to not have zmaudit running unconditionally + and schedule occasional checks at other, more convenient, + times. + "), + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_AUDIT_CHECK_INTERVAL", + default => "900", + description => "How often to check database and filesystem consistency", + help => qqq(" + The zmaudit daemon exists to check that the saved information + in the database and on the filesystem match and are consistent + with each other. If an error occurs or if you are using 'fast + deletes' it may be that database records are deleted but files + remain. In this case, and similar, zmaudit will remove + redundant information to synchronise the two data stores. The + default check interval of 900 seconds (15 minutes) is fine for + most systems however if you have a very large number of events + the process of scanning the database and filesystem may take a + long time and impact performance. In this case you may prefer + to make this interval much larger to reduce the impact on your + system. This option determines how often these checks are + performed. + "), + type => $types{integer}, + category => "system", + }, + { + name => "ZM_AUDIT_MIN_AGE", + default => "86400", + description => "The minimum age in seconds event data must be in order to be deleted.", + help => qqq(" + The zmaudit daemon exists to check that the saved information + in the database and on the filesystem match and are consistent + with each other. Event files or db records that are younger than + this setting will not be deleted and a warning will be given. + "), + type => $types{integer}, + category => "system", + }, + { + name => "ZM_FORCED_ALARM_SCORE", + default => "255", + description => "Score to give forced alarms", + help => qqq(" + The 'zmu' utility can be used to force an alarm on a monitor + rather than rely on the motion detection algorithms. This + option determines what score to give these alarms to + distinguish them from regular ones. It must be 255 or less. + "), + type => $types{integer}, + category => "config", + }, + { + name => "ZM_BULK_FRAME_INTERVAL", + default => "100", + description => "How often a bulk frame should be written to the database", + help => qqq(" + Traditionally ZoneMinder writes an entry into the Frames + database table for each frame that is captured and saved. This + works well in motion detection scenarios but when in a DVR + situation ('Record' or 'Mocord' mode) this results in a huge + number of frame writes and a lot of database and disk bandwidth + for very little additional information. Setting this to a + non-zero value will enabled ZoneMinder to group these non-alarm + frames into one 'bulk' frame entry which saves a lot of + bandwidth and space. The only disadvantage of this is that + timing information for individual frames is lost but in + constant frame rate situations this is usually not significant. + This setting is ignored in Modect mode and individual frames + are still written if an alarm occurs in Mocord mode also. + "), + type => $types{integer}, + category => "config", + }, + { + name => "ZM_EVENT_CLOSE_MODE", + default => "idle", + description => "When continuous events are closed.", + help => qqq(" + When a monitor is running in a continuous recording mode + (Record or Mocord) events are usually closed after a fixed + period of time (the section length). However in Mocord mode it + is possible that motion detection may occur near the end of a + section. This option controls what happens when an alarm occurs + in Mocord mode. The 'time' setting means that the event will be + closed at the end of the section regardless of alarm activity. + The 'idle' setting means that the event will be closed at the + end of the section if there is no alarm activity occurring at + the time otherwise it will be closed once the alarm is over + meaning the event may end up being longer than the normal + section length. The 'alarm' setting means that if an alarm + occurs during the event, the event will be closed once the + alarm is over regardless of when this occurs. This has the + effect of limiting the number of alarms to one per event and + the events will be shorter than the section length if an alarm + has occurred. + "), + type => $types{boolean}, + type => { + db_type =>"string", + hint =>"time|idle|alarm", + pattern =>qr|^([tia])|i, + format =>q( ($1 =~ /^t/) + ? "time" + : ($1 =~ /^i/ ? "idle" : "time" ) + ) + }, + category => "config", + }, # Deprecated, superseded by event close mode - { - name => "ZM_FORCE_CLOSE_EVENTS", - default => "no", - description => "Close events at section ends.", - help => "When a monitor is running in a continuous recording mode (Record or Mocord) events are usually closed after a fixed period of time (the section length). However in Mocord mode it is possible that motion detection may occur near the end of a section and ordinarily this will prevent the event being closed until the motion has ceased. Switching this option on will force the event closed at the specified time regardless of any motion activity.", - type => $types{boolean}, - category => "hidden", - }, - { - name => "ZM_CREATE_ANALYSIS_IMAGES", - default => "yes", - description => "Create analysed alarm images with motion outlined", - help => "By default during an alarm ZoneMinder records both the raw captured image and one that has been analysed and had areas where motion was detected outlined. This can be very useful during zone configuration or in analysing why events occured. However it also incurs some overhead and in a stable system may no longer be necessary. This parameter allows you to switch the generation of these images off.", - type => $types{boolean}, - category => "config", - }, - { - name => "ZM_WEIGHTED_ALARM_CENTRES", - default => "no", - description => "Use a weighted algorithm to calculate the centre of an alarm", - help => "ZoneMinder will always calculate the centre point of an alarm in a zone to give some indication of where on the screen it is. This can be used by the experimental motion tracking feature or your own custom extensions. In the alarmed or filtered pixels mode this is a simple midpoint between the extents of the detected pxiesl. However in the blob method this can instead be calculated using weighted pixel locations to give more accurate positioning for irregularly shaped blobs. This method, while more precise is also slower and so is turned off by default.", - type => $types{boolean}, - category => "config", - }, - { - name => "ZM_EVENT_IMAGE_DIGITS", - default => "5", - description => "How many significant digits are used in event image numbering", - help => "As event images are captured they are stored to the filesystem with a numerical index. By default this index has three digits so the numbers start 001, 002 etc. This works works for most scenarios as events with more than 999 frames are rarely captured. However if you have extremely long events and use external applications then you may wish to increase this to ensure correct sorting of images in listings etc. Warning, increasing this value on a live system may render existing events unviewable as the event will have been saved with the previous scheme. Decreasing this value should have no ill effects.", - type => $types{integer}, - category => "config", - }, - { - name => "ZM_DEFAULT_ASPECT_RATIO", - default => "4:3", - description => "The default width:height aspect ratio used in monitors", - help => "When specifying the dimensions of monitors you can click a checkbox to ensure that the width stays in the correct ratio to the height, or vice versa. This setting allows you to indicate what the ratio of these settings should be. This should be specified in the format : and the default of 4:3 normally be acceptable but 11:9 is another common setting. If the checkbox is not clicked when specifying monitor dimensions this setting has no effect.", - type => $types{string}, - category => "config", - }, - { - name => "ZM_USER_SELF_EDIT", - default => "no", - description => "Allow unprivileged users to change their details", - help => "Ordinarily only users with system edit privilege are able to change users details. Switching this option on allows ordinary users to change their passwords and their language settings", - type => $types{boolean}, - category => "config", - }, - { - name => "ZM_OPT_FRAME_SERVER", - default => "no", - description => "Should analysis farm out the writing of images to disk", - #requires => [ { name => "ZM_OPT_ADAPTIVE_SKIP", value => "yes" } ], - help => "In some circumstances it is possible for a slow disk to take so long writing images to disk that it causes the analysis daemon to fall behind especially during high frame rate events. Setting this option to yes enables a frame server daemon (zmf) which will be sent the images from the analysis daemon and will do the actual writing of images itself freeing up the analysis daemon to get on with other things. Should this transmission fail or other permanent or transient error occur, this function will fall back to the analysis daemon.", - type => $types{boolean}, - category => "system", - }, - { - name => "ZM_FRAME_SOCKET_SIZE", - default => "0", - description => "Specify the frame server socket buffer size if non-standard", - requires => [ { name => "ZM_OPT_FRAME_SERVER", value => "yes" } ], - help => "For large captured images it is possible for the writes from the analysis daemon to the frame server to fail as the amount to be written exceeds the default buffer size. While the images are then written by the analysis daemon so no data is lost, it defeats the object of the frame server daemon in the first place. You can use this option to indicate that a larger buffer size should be used. Note that you may have to change the existing maximum socket buffer size on your system via sysctl (or in /proc/sys/net/core/wmem_max) to allow this new size to be set. Alternatively you can change the default buffer size on your system in the same way in which case that will be used with no change necessary in this option", - type => $types{integer}, - category => "system", - }, - { - name => "ZM_OPT_CONTROL", - default => "no", - description => "Support controllable (e.g. PTZ) cameras", - help => "ZoneMinder includes limited support for controllable cameras. A number of sample protocols are included and others can easily be added. If you wish to control your cameras via ZoneMinder then select this option otherwise if you only have static cameras or use other control methods then leave this option off.", - type => $types{boolean}, - category => "system", - }, - { - name => "ZM_OPT_TRIGGERS", - default => "no", - description => "Interface external event triggers via socket or device files", - help => "ZoneMinder can interact with external systems which prompt or cancel alarms. This is done via the zmtrigger.pl script. This option indicates whether you want to use these external triggers. Most people will say no here.", - type => $types{boolean}, - category => "system", - }, - { - name => "ZM_CHECK_FOR_UPDATES", - default => "yes", - description => "Check with zoneminder.com for updated versions", - help => "From ZoneMinder version 1.17.0 onwards new versions are expected to be more frequent. To save checking manually for each new version ZoneMinder can check with the zoneminder.com website to determine the most recent release. These checks are infrequent, about once per week, and no personal or system information is transmitted other than your current version number. If you do not wish these checks to take place or your ZoneMinder system has no internet access you can switch these check off with this configuration variable", - type => $types{boolean}, - category => "system", - }, - { - name => "ZM_UPDATE_CHECK_PROXY", - default => "", - description => "Proxy url if required to access zoneminder.com", - help => "If you use a proxy to access the internet then ZoneMinder needs to know so it can access zoneminder.com to check for updates. If you do use a proxy enter the full proxy url here in the form of http://:/", - type => $types{string}, - category => "system", - }, - { - name => "ZM_SHM_KEY", - default => "0x7a6d0000", - description => "Shared memory root key to use", - help => "ZoneMinder uses shared memory to speed up communication between modules. To identify the right area to use shared memory keys are used. This option controls what the base key is, each monitor will have it's Id or'ed with this to get the actual key used. You will not normally need to change this value unless it clashes with another instance of ZoneMinder on the same machine. Only the first four hex digits are used, the lower four will be masked out and ignored.", - type => $types{hexadecimal}, - category => "system", - }, + { + name => "ZM_FORCE_CLOSE_EVENTS", + default => "no", + description => "Close events at section ends.", + help => qqq(" + When a monitor is running in a continuous recording mode + (Record or Mocord) events are usually closed after a fixed + period of time (the section length). However in Mocord mode it + is possible that motion detection may occur near the end of a + section and ordinarily this will prevent the event being closed + until the motion has ceased. Switching this option on will + force the event closed at the specified time regardless of any + motion activity. + "), + type => $types{boolean}, + category => "hidden", + }, + { + name => "ZM_CREATE_ANALYSIS_IMAGES", + default => "yes", + description => "Create analysed alarm images with motion outlined", + help => qqq(" + By default during an alarm ZoneMinder records both the raw + captured image and one that has been analysed and had areas + where motion was detected outlined. This can be very useful + during zone configuration or in analysing why events occurred. + However it also incurs some overhead and in a stable system may + no longer be necessary. This parameter allows you to switch the + generation of these images off. + "), + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_WEIGHTED_ALARM_CENTRES", + default => "no", + description => "Use a weighted algorithm to calculate the centre of an alarm", + help => qqq(" + ZoneMinder will always calculate the centre point of an alarm + in a zone to give some indication of where on the screen it is. + This can be used by the experimental motion tracking feature or + your own custom extensions. In the alarmed or filtered pixels + mode this is a simple midpoint between the extents of the + detected pxiesl. However in the blob method this can instead be + calculated using weighted pixel locations to give more accurate + positioning for irregularly shaped blobs. This method, while + more precise is also slower and so is turned off by default. + "), + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_EVENT_IMAGE_DIGITS", + default => "5", + description => "How many significant digits are used in event image numbering", + help => qqq(" + As event images are captured they are stored to the filesystem + with a numerical index. By default this index has three digits + so the numbers start 001, 002 etc. This works works for most + scenarios as events with more than 999 frames are rarely + captured. However if you have extremely long events and use + external applications then you may wish to increase this to + ensure correct sorting of images in listings etc. Warning, + increasing this value on a live system may render existing + events unviewable as the event will have been saved with the + previous scheme. Decreasing this value should have no ill + effects. + "), + type => $types{integer}, + category => "config", + }, + { + name => "ZM_DEFAULT_ASPECT_RATIO", + default => "4:3", + description => "The default width:height aspect ratio used in monitors", + help => qqq(" + When specifying the dimensions of monitors you can click a + checkbox to ensure that the width stays in the correct ratio to + the height, or vice versa. This setting allows you to indicate + what the ratio of these settings should be. This should be + specified in the format : and the + default of 4:3 normally be acceptable but 11:9 is another + common setting. If the checkbox is not clicked when specifying + monitor dimensions this setting has no effect. + "), + type => $types{string}, + category => "config", + }, + { + name => "ZM_USER_SELF_EDIT", + default => "no", + description => "Allow unprivileged users to change their details", + help => qqq(" + Ordinarily only users with system edit privilege are able to + change users details. Switching this option on allows ordinary + users to change their passwords and their language settings + "), + type => $types{boolean}, + category => "config", + }, + { + name => "ZM_OPT_FRAME_SERVER", + default => "no", + description => "Should analysis farm out the writing of images to disk", + #requires => [ { name => "ZM_OPT_ADAPTIVE_SKIP", value => "yes" } ], + help => qqq(" + In some circumstances it is possible for a slow disk to take so + long writing images to disk that it causes the analysis daemon + to fall behind especially during high frame rate events. + Setting this option to yes enables a frame server daemon (zmf) + which will be sent the images from the analysis daemon and will + do the actual writing of images itself freeing up the analysis + daemon to get on with other things. Should this transmission + fail or other permanent or transient error occur, this function + will fall back to the analysis daemon. + "), + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_FRAME_SOCKET_SIZE", + default => "0", + description => "Specify the frame server socket buffer size if non-standard", + requires => [ { name => "ZM_OPT_FRAME_SERVER", value => "yes" } ], + help => qqq(" + For large captured images it is possible for the writes from + the analysis daemon to the frame server to fail as the amount + to be written exceeds the default buffer size. While the images + are then written by the analysis daemon so no data is lost, it + defeats the object of the frame server daemon in the first + place. You can use this option to indicate that a larger buffer + size should be used. Note that you may have to change the + existing maximum socket buffer size on your system via sysctl + (or in /proc/sys/net/core/wmem_max) to allow this new size to + be set. Alternatively you can change the default buffer size on + your system in the same way in which case that will be used + with no change necessary in this option + "), + type => $types{integer}, + category => "system", + }, + { + name => "ZM_OPT_CONTROL", + default => "no", + description => "Support controllable (e.g. PTZ) cameras", + help => qqq(" + ZoneMinder includes limited support for controllable cameras. A + number of sample protocols are included and others can easily + be added. If you wish to control your cameras via ZoneMinder + then select this option otherwise if you only have static + cameras or use other control methods then leave this option + off. + "), + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_OPT_TRIGGERS", + default => "no", + description => "Interface external event triggers via socket or device files", + help => qqq(" + ZoneMinder can interact with external systems which prompt or + cancel alarms. This is done via the zmtrigger.pl script. This + option indicates whether you want to use these external + triggers. Most people will say no here. + "), + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_CHECK_FOR_UPDATES", + default => "yes", + description => "Check with zoneminder.com for updated versions", + help => qqq(" + From ZoneMinder version 1.17.0 onwards new versions are + expected to be more frequent. To save checking manually for + each new version ZoneMinder can check with the zoneminder.com + website to determine the most recent release. These checks are + infrequent, about once per week, and no personal or system + information is transmitted other than your current version + number. If you do not wish these checks to take place or your + ZoneMinder system has no internet access you can switch these + check off with this configuration variable + "), + type => $types{boolean}, + category => "system", + }, + { + name => "ZM_UPDATE_CHECK_PROXY", + default => "", + description => "Proxy url if required to access zoneminder.com", + help => qqq(" + If you use a proxy to access the internet then ZoneMinder needs + to know so it can access zoneminder.com to check for updates. + If you do use a proxy enter the full proxy url here in the form + of http://:/ + "), + type => $types{string}, + category => "system", + }, + { + name => "ZM_SHM_KEY", + default => "0x7a6d0000", + description => "Shared memory root key to use", + help => qqq(" + ZoneMinder uses shared memory to speed up communication between + modules. To identify the right area to use shared memory keys + are used. This option controls what the base key is, each + monitor will have it's Id or'ed with this to get the actual key + used. You will not normally need to change this value unless it + clashes with another instance of ZoneMinder on the same + machine. Only the first four hex digits are used, the lower + four will be masked out and ignored. + "), + type => $types{hexadecimal}, + category => "system", + }, # Deprecated, really no longer necessary - { - name => "ZM_WEB_REFRESH_METHOD", - default => "javascript", - description => "What method windows should use to refresh themselves", - help => "Many windows in Javascript need to refresh themselves to keep their information current. This option determines what method they should use to do this. Choosing 'javascript' means that each window will have a short JavaScript statement in with a timer to prompt the refresh. This is the most compatible method. Choosing 'http' means the refresh instruction is put in the HTTP header. This is a cleaner method but refreshes are interrupted or cancelled when a link in the window is clicked meaning that the window will no longer refresh and this would have to be done manually.", - type => { db_type=>"string", hint=>"javascript|http", pattern=>qr|^([jh])|i, format=>q( $1 =~ /^j/ ? "javascript" : "http" ) }, - category => "hidden", - }, - { - name => "ZM_WEB_EVENT_SORT_FIELD", - default => "DateTime", - description => "Default field the event lists are sorted by", - help => "Events in lists can be initially ordered in any way you want. This option controls what field is used to sort them. You can modify this ordering from filters or by clicking on headings in the lists themselves. Bear in mind however that the 'Prev' and 'Next' links, when scrolling through events, relate to the ordering in the lists and so not always to time based ordering.", - type => { db_type=>"string", hint=>"Id|Name|Cause|MonitorName|DateTime|Length|Frames|AlarmFrames|TotScore|AvgScore|MaxScore", pattern=>qr|.|, format=>q( $1 ) }, - category => "web", - }, - { - name => "ZM_WEB_EVENT_SORT_ORDER", - default => "asc", - description => "Default order the event lists are sorted by", - help => "Events in lists can be initially ordered in any way you want. This option controls what order (ascending or descending) is used to sort them. You can modify this ordering from filters or by clicking on headings in the lists themselves. Bear in mind however that the 'Prev' and 'Next' links, when scrolling through events, relate to the ordering in the lists and so not always to time based ordering.", - type => { db_type=>"string", hint=>"asc|desc", pattern=>qr|^([ad])|i, format=>q( $1 =~ /^a/i ? "asc" : "desc" ) }, - category => "web", - }, - { - name => "ZM_WEB_EVENTS_PER_PAGE", - default => "25", - description => "How many events to list per page in paged mode", - help => "In the event list view you can either list all events or just a page at a time. This option controls how many events are listed per page in paged mode and how often to repeat the column headers in non-paged mode.", - type => $types{integer}, - category => "web", - }, - { - name => "ZM_WEB_LIST_THUMBS", - default => "no", - description => "Display mini-thumbnails of event images in event lists", - help => "Ordinarily the event lists just display text details of the events to save space and time. By switching this option on you can also display small thumbnails to help you identify events of interest. The size of these thumbnails is controlled by the following two options.", - type => $types{boolean}, - category => "web", - }, - { - name => "ZM_WEB_LIST_THUMB_WIDTH", - default => "48", - description => "The width of the thumbnails that appear in the event lists", - help => "This options controls the width of the thumbnail images that appear in the event lists. It should be fairly small to fit in with the rest of the table. If you prefer you can specify a height instead in the next option but you should only use one of the width or height and the other option should be set to zero. If both width and height are specified then width will be used and height ignored.", - type => $types{integer}, - requires => [ { name => "ZM_WEB_LIST_THUMBS", value => "yes" } ], - category => "web", - }, - { - name => "ZM_WEB_LIST_THUMB_HEIGHT", - default => "0", - description => "The height of the thumbnails that appear in the event lists", - help => "This options controls the height of the thumbnail images that appear in the event lists. It should be fairly small to fit in with the rest of the table. If you prefer you can specify a width instead in the previous option but you should only use one of the width or height and the other option should be set to zero. If both width and height are specified then width will be used and height ignored.", - type => $types{integer}, - requires => [ { name => "ZM_WEB_LIST_THUMBS", value => "yes" } ], - category => "web", - }, - { - name => "ZM_WEB_USE_OBJECT_TAGS", - default => "yes", - description => "Wrap embed in object tags for media content", - help => "There are two methods of including media content in web pages. The most common way is use the EMBED tag which is able to give some indication of the type of content. However this is not a standard part of HTML. The official method is to use OBJECT tags which are able to give more information allowing the correct media viewers etc to be loaded. However these are less widely supported and content may be specifically tailored to a particular platform or player. This option controls whether media content is enclosed in EMBED tags only or whether, where appropriate, it is additionally wrapped in OBJECT tags. Currently OBJECT tags are only used in a limited number of circumstances but they may become more widespread in the future. It is suggested that you leave this option on unless you encounter problems playing some content.", - type => $types{boolean}, - category => "web", - }, - { - name => "ZM_WEB_H_REFRESH_MAIN", - default => "60", - introduction => "There are now a number of options that are grouped into bandwidth categories, this allows you to configure the ZoneMinder client to work optimally over the various access methods you might to access the client.\n\nThe next few options control what happens when the client is running in 'high' bandwidth mode. You should set these options for when accessing the ZoneMinder client over a local network or high speed link. In most cases the default values will be suitable as a starting point.", - description => "How often (in seconds) the main console window should refresh itself", - help => "The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.", - type => $types{integer}, - category => "highband", - }, - { - name => "ZM_WEB_H_REFRESH_CYCLE", - default => "10", - description => "How often (in seconds) the cycle watch window swaps to the next monitor", - help => "The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.", - type => $types{integer}, - category => "highband", - }, - { - name => "ZM_WEB_H_REFRESH_IMAGE", - default => "3", - description => "How often (in seconds) the watched image is refreshed (if not streaming)", - help => "The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.", - type => $types{integer}, - category => "highband", - }, - { - name => "ZM_WEB_H_REFRESH_STATUS", - default => "1", - description => "How often (in seconds) the status refreshes itself in the watch window", - help => "The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.", - type => $types{integer}, - category => "highband", - }, - { - name => "ZM_WEB_H_REFRESH_EVENTS", - default => "5", - description => "How often (in seconds) the event listing is refreshed in the watch window", - help => "The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.", - type => $types{integer}, - category => "highband", - }, - { - name => "ZM_WEB_H_CAN_STREAM", - default => "auto", - description => "Override the automatic detection of browser streaming capability", - help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", - type => $types{tristate}, - category => "highband", - }, - { - name => "ZM_WEB_H_STREAM_METHOD", - default => "jpeg", - description => "Which method should be used to send video streams to your browser.", - help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", - type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, - category => "highband", - }, - { - name => "ZM_WEB_H_DEFAULT_SCALE", - default => "100", - description => "What the default scaling factor applied to 'live' or 'event' views is (%)", - help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", - type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "highband", - }, - { - name => "ZM_WEB_H_DEFAULT_RATE", - default => "100", - description => "What the default replay rate factor applied to 'event' views is (%)", - help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", - type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "highband", - }, - { - name => "ZM_WEB_H_VIDEO_BITRATE", - default => "150000", - description => "What the bitrate of the video encoded stream should be set to", - help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", - type => $types{integer}, - category => "highband", - }, - { - name => "ZM_WEB_H_VIDEO_MAXFPS", - default => "30", - description => "What the maximum frame rate for streamed video should be", - help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", - type => $types{integer}, - category => "highband", - }, - { - name => "ZM_WEB_H_SCALE_THUMBS", - default => "no", - description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", - help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", - type => $types{boolean}, - category => "highband", - }, - { - name => "ZM_WEB_H_EVENTS_VIEW", - default => "events", - description => "What the default view of multiple events should be.", - help => "Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.", - type => { db_type=>"string", hint=>"events|timeline", pattern=>qr|^([lt])|i, format=>q( $1 =~ /^e/ ? "events" : "timeline" ) }, - category => "highband", - }, - { - name => "ZM_WEB_H_SHOW_PROGRESS", - default => "yes", - description => "Show the progress of replay in event view.", - help => "When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.", - type => $types{boolean}, - category => "highband", - }, - { - name => "ZM_WEB_H_AJAX_TIMEOUT", - default => "3000", - description => "How long to wait for Ajax request responses (ms)", - help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", - type => $types{integer}, - category => "highband", - }, - { - name => "ZM_WEB_M_REFRESH_MAIN", - default => "300", - description => "How often (in seconds) the main console window should refresh itself", - help => "The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.", - type => $types{integer}, - introduction => "The next few options control what happens when the client is running in 'medium' bandwidth mode. You should set these options for when accessing the ZoneMinder client over a slower cable or DSL link. In most cases the default values will be suitable as a starting point.", - category => "medband", - }, - { - name => "ZM_WEB_M_REFRESH_CYCLE", - default => "20", - description => "How often (in seconds) the cycle watch window swaps to the next monitor", - help => "The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.", - type => $types{integer}, - category => "medband", - }, - { - name => "ZM_WEB_M_REFRESH_IMAGE", - default => "10", - description => "How often (in seconds) the watched image is refreshed (if not streaming)", - help => "The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.", - type => $types{integer}, - category => "medband", - }, - { - name => "ZM_WEB_M_REFRESH_STATUS", - default => "5", - description => "How often (in seconds) the status refreshes itself in the watch window", - help => "The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.", - type => $types{integer}, - category => "medband", - }, - { - name => "ZM_WEB_M_REFRESH_EVENTS", - default => "60", - description => "How often (in seconds) the event listing is refreshed in the watch window", - help => "The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.", - type => $types{integer}, - category => "medband", - }, - { - name => "ZM_WEB_M_CAN_STREAM", - default => "auto", - description => "Override the automatic detection of browser streaming capability", - help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", - type => $types{tristate}, - category => "medband", - }, - { - name => "ZM_WEB_M_STREAM_METHOD", - default => "jpeg", - description => "Which method should be used to send video streams to your browser.", - help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", - type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, - category => "medband", - }, - { - name => "ZM_WEB_M_DEFAULT_SCALE", - default => "100", - description => "What the default scaling factor applied to 'live' or 'event' views is (%)", - help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", - type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "medband", - }, - { - name => "ZM_WEB_M_DEFAULT_RATE", - default => "100", - description => "What the default replay rate factor applied to 'event' views is (%)", - help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", - type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "medband", - }, - { - name => "ZM_WEB_M_VIDEO_BITRATE", - default => "75000", - description => "What the bitrate of the video encoded stream should be set to", - help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", - type => $types{integer}, - category => "medband", - }, - { - name => "ZM_WEB_M_VIDEO_MAXFPS", - default => "10", - description => "What the maximum frame rate for streamed video should be", - help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", - type => $types{integer}, - category => "medband", - }, - { - name => "ZM_WEB_M_SCALE_THUMBS", - default => "yes", - description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", - help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", - type => $types{boolean}, - category => "medband", - }, - { - name => "ZM_WEB_M_EVENTS_VIEW", - default => "events", - description => "What the default view of multiple events should be.", - help => "Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.", - type => { db_type=>"string", hint=>"events|timeline", pattern=>qr|^([lt])|i, format=>q( $1 =~ /^e/ ? "events" : "timeline" ) }, - category => "medband", - }, - { - name => "ZM_WEB_M_SHOW_PROGRESS", - default => "yes", - description => "Show the progress of replay in event view.", - help => "When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.", - type => $types{boolean}, - category => "medband", - }, - { - name => "ZM_WEB_M_AJAX_TIMEOUT", - default => "5000", - description => "How long to wait for Ajax request responses (ms)", - help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", - type => $types{integer}, - category => "medband", - }, - { - name => "ZM_WEB_L_REFRESH_MAIN", - default => "300", - description => "How often (in seconds) the main console window should refresh itself", - introduction => "The next few options control what happens when the client is running in 'low' bandwidth mode. You should set these options for when accessing the ZoneMinder client over a modem or slow link. In most cases the default values will be suitable as a starting point.", - help => "The main console window lists a general status and the event totals for all monitors. This is not a trivial task and should not be repeated too frequently or it may affect the performance of the rest of the system.", - type => $types{integer}, - category => "lowband", - }, - { - name => "ZM_WEB_L_REFRESH_CYCLE", - default => "30", - description => "How often (in seconds) the cycle watch window swaps to the next monitor", - help => "The cycle watch window is a method of continuously cycling between images from all of your monitors. This option determines how often to refresh with a new image.", - type => $types{integer}, - category => "lowband", - }, - { - name => "ZM_WEB_L_REFRESH_IMAGE", - default => "15", - description => "How often (in seconds) the watched image is refreshed (if not streaming)", - help => "The live images from a monitor can be viewed in either streamed or stills mode. This option determines how often a stills image is refreshed, it has no effect if streaming is selected.", - type => $types{integer}, - category => "lowband", - }, - { - name => "ZM_WEB_L_REFRESH_STATUS", - default => "10", - description => "How often (in seconds) the status refreshes itself in the watch window", - help => "The monitor window is actually made from several frames. The one in the middle merely contains a monitor status which needs to refresh fairly frequently to give a true indication. This option determines that frequency.", - type => $types{integer}, - category => "lowband", - }, - { - name => "ZM_WEB_L_REFRESH_EVENTS", - default => "180", - description => "How often (in seconds) the event listing is refreshed in the watch window", - help => "The monitor window is actually made from several frames. The lower framme contains a listing of the last few events for easy access. This option determines how often this is refreshed.", - type => $types{integer}, - category => "lowband", - }, - { - name => "ZM_WEB_L_CAN_STREAM", - default => "auto", - description => "Override the automatic detection of browser streaming capability", - help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", - type => $types{tristate}, - category => "lowband", - }, - { - name => "ZM_WEB_L_STREAM_METHOD", - default => "jpeg", - description => "Which method should be used to send video streams to your browser.", - help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", - type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, - category => "lowband", - }, - { - name => "ZM_WEB_L_DEFAULT_SCALE", - default => "100", - description => "What the default scaling factor applied to 'live' or 'event' views is (%)", - help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", - type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "lowband", - }, - { - name => "ZM_WEB_L_DEFAULT_RATE", - default => "100", - description => "What the default replay rate factor applied to 'event' views is (%)", - help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", - type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "lowband", - }, - { - name => "ZM_WEB_L_VIDEO_BITRATE", - default => "25000", - description => "What the bitrate of the video encoded stream should be set to", - help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", - type => $types{integer}, - category => "lowband", - }, - { - name => "ZM_WEB_L_VIDEO_MAXFPS", - default => "5", - description => "What the maximum frame rate for streamed video should be", - help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", - type => $types{integer}, - category => "lowband", - }, - { - name => "ZM_WEB_L_SCALE_THUMBS", - default => "yes", - description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", - help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", - type => $types{boolean}, - category => "lowband", - }, - { - name => "ZM_WEB_L_EVENTS_VIEW", - default => "events", - description => "What the default view of multiple events should be.", - help => "Stored events can be viewed in either an events list format or in a timeline based one. This option sets the default view that will be used. Choosing one view here does not prevent the other view being used as it will always be selectable from whichever view is currently being used.", - type => { db_type=>"string", hint=>"events|timeline", pattern=>qr|^([lt])|i, format=>q( $1 =~ /^e/ ? "events" : "timeline" ) }, - category => "lowband", - }, - { - name => "ZM_WEB_L_SHOW_PROGRESS", - default => "no", - description => "Show the progress of replay in event view.", - help => "When viewing events an event navigation panel and progress bar is shown below the event itself. This allows you to jump to specific points in the event, but can can also dynamically update to display the current progress of the event replay itself. This progress is calculated from the actual event duration and is not directly linked to the replay itself, so on limited bandwidth connections may be out of step with the replay. This option allows you to turn off the progress display, whilst still keeping the navigation aspect, where bandwidth prevents it functioning effectively.", - type => $types{boolean}, - category => "lowband", - }, - { - name => "ZM_WEB_L_AJAX_TIMEOUT", - default => "10000", - description => "How long to wait for Ajax request responses (ms)", - help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", - type => $types{integer}, - category => "lowband", - }, - { - name => "ZM_WEB_P_CAN_STREAM", - default => "auto", - description => "Override the automatic detection of browser streaming capability", - help => "If you know that your browser can handle image streams of the type 'multipart/x-mixed-replace' but ZoneMinder does not detect this correctly you can set this option to ensure that the stream is delivered with or without the use of the Cambozola plugin. Selecting 'yes' will tell ZoneMinder that your browser can handle the streams natively, 'no' means that it can't and so the plugin will be used while 'auto' lets ZoneMinder decide.", - type => $types{tristate}, - category => "phoneband", - }, - { - name => "ZM_WEB_P_STREAM_METHOD", - default => "jpeg", - description => "Which method should be used to send video streams to your browser.", - help => "ZoneMinder can be configured to use either mpeg encoded video or a series or still jpeg images when sending video streams. This option defines which is used. If you choose mpeg you should ensure that you have the appropriate plugins available on your browser whereas choosing jpeg will work natively on Mozilla and related browsers and with a Java applet on Internet Explorer", - type => { db_type=>"string", hint=>"mpeg|jpeg", pattern=>qr|^([mj])|i, format=>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) }, - category => "phoneband", - }, - { - name => "ZM_WEB_P_DEFAULT_SCALE", - default => "100", - description => "What the default scaling factor applied to 'live' or 'event' views is (%)", - help => "Normally ZoneMinder will display 'live' or 'event' streams in their native size. However if you have monitors with large dimensions or a slow link you may prefer to reduce this size, alternatively for small monitors you can enlarge it. This options lets you specify what the default scaling factor will be. It is expressed as a percentage so 100 is normal size, 200 is double size etc.", - type => { db_type=>"integer", hint=>"25|33|50|75|100|150|200|300|400", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "phoneband", - }, - { - name => "ZM_WEB_P_DEFAULT_RATE", - default => "100", - description => "What the default replay rate factor applied to 'event' views is (%)", - help => "Normally ZoneMinder will display 'event' streams at their native rate, i.e. as close to real-time as possible. However if you have long events it is often convenient to replay them at a faster rate for review. This option lets you specify what the default replay rate will be. It is expressed as a percentage so 100 is normal rate, 200 is double speed etc.", - type => { db_type=>"integer", hint=>"25|50|100|150|200|400|1000|2500|5000|10000", pattern=>qr|^(\d+)$|, format=>q( $1 ) }, - category => "phoneband", - }, - { - name => "ZM_WEB_P_VIDEO_BITRATE", - default => "8000", - description => "What the bitrate of the video encoded stream should be set to", - help => "When encoding real video via the ffmpeg library a bit rate can be specified which roughly corresponds to the available bandwidth used for the stream. This setting effectively corresponds to a 'quality' setting for the video. A low value will result in a blocky image whereas a high value will produce a clearer view. Note that this setting does not control the frame rate of the video however the quality of the video produced is affected both by this setting and the frame rate that the video is produced at. A higher frame rate at a particular bit rate result in individual frames being at a lower quality.", - type => $types{integer}, - category => "phoneband", - }, - { - name => "ZM_WEB_P_VIDEO_MAXFPS", - default => "5", - description => "What the maximum frame rate for streamed video should be", - help => "When using streamed video the main control is the bitrate which determines how much data can be transmitted. However a lower bitrate at high frame rates results in a lower quality image. This option allows you to limit the maximum frame rate to ensure that video quality is maintained. An additional advantage is that encoding video at high frame rates is a processor intensive task when for the most part a very high frame rate offers little perceptible improvement over one that has a more manageable resource requirement. Note, this option is implemented as a cap beyond which binary reduction takes place. So if you have a device capturing at 15fps and set this option to 10fps then the video is not produced at 10fps, but rather at 7.5fps (15 divided by 2) as the final frame rate must be the original divided by a power of 2.", - type => $types{integer}, - category => "phoneband", - }, - { - name => "ZM_WEB_P_SCALE_THUMBS", - default => "yes", - description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", - help => "If unset, this option sends the whole image to the browser which resizes it in the window. If set the image is scaled down on the server before sending a reduced size image to the browser to conserve bandwidth at the cost of cpu on the server. Note that ZM can only perform the resizing if the appropriate PHP graphics functionality is installed. This is usually available in the php-gd package.", - type => $types{boolean}, - category => "phoneband", - }, - { - name => "ZM_WEB_P_AJAX_TIMEOUT", - default => "10000", - description => "How long to wait for Ajax request responses (ms)", - help => "The newer versions of the live feed and event views use Ajax to request information from the server and populate the views dynamically. This option allows you to specify a timeout if required after which requests are abandoned. A timeout may be necessary if requests would overwise hang such as on a slow connection. This would tend to consume a lot of browser memory and make the interface unresponsive. Ordinarily no requests should timeout so this setting should be set to a value greater than the slowest expected response. This value is in milliseconds but if set to zero then no timeout will be used.", - type => $types{integer}, - category => "phoneband", - }, - { - name => "ZM_DYN_LAST_VERSION", - default => "", - description => "What the last version of ZoneMinder recorded from zoneminder.com is", - help => "", - type => $types{string}, - readonly => 1, - category => "dynamic", - }, - { - name => "ZM_DYN_CURR_VERSION", - default => "@VERSION@", - description => "What the effective current version of ZoneMinder is, might be different from actual if versions ignored", - help => "", - type => $types{string}, - readonly => 1, - category => "dynamic", - }, - { - name => "ZM_DYN_DB_VERSION", - default => "@VERSION@", - description => "What the version of the database is, from zmupdate", - help => "", - type => $types{string}, - readonly => 1, - category => "dynamic", - }, - { - name => "ZM_DYN_LAST_CHECK", - default => "", - description => "When the last check for version from zoneminder.com was", - help => "", - type => $types{integer}, - readonly => 1, - category => "dynamic", - }, - { - name => "ZM_DYN_NEXT_REMINDER", - default => "", - description => "When the earliest time to remind about versions will be", - help => "", - type => $types{string}, - readonly => 1, - category => "dynamic", - }, - { - name => "ZM_DYN_DONATE_REMINDER_TIME", - default => 0, - description => "When the earliest time to remind about donations will be", - help => "", - type => $types{integer}, - readonly => 1, - category => "dynamic", - }, - { - name => "ZM_DYN_SHOW_DONATE_REMINDER", - default => "yes", - description => "Remind about donations or not", - help => "", - type => $types{boolean}, - readonly => 1, - category => "dynamic", - }, - { - name => "ZM_EYEZM_DEBUG", - default => "no", - description => "Switch additional debugging on for eyeZm Plugin", - help => "Enable or Disable extra debugging from the eyeZm Plugin. Extra debugging information will be displayed in it's own file (EYEZM_LOG_TO_FILE is set), or your Apache error log", - type => $types{boolean}, - category => "eyeZm", - }, - { - name => "ZM_EYEZM_LOG_TO_FILE", - default => "yes", - description => "When eyeZm Debugging is enabled, enabling this logs output to it's own file", - help => "When EYEZM_DEBUG is on and EYEZM_LOG_TO_FILE is on, output generated from the eyeZm Plugin will go to it's own file. Otherwise it will go to the apache error log.", - type => $types{boolean}, - category => "eyeZm", - }, - { - name => "ZM_EYEZM_LOG_FILE", - default => "@ZM_LOGDIR@/zm_xml.log", - description => "Default filename to use when logging eyeZm Output and EYEZM_LOG_TO_FILE is enabled", - help => "This file will contain it's own output from the eyeZm Plugin when EYEZM_LOG_TO_FILE and EYEZM_DEBUG are both enabled", - type => $types{string}, - category => "eyeZm", - }, - { - name => "ZM_EYEZM_EVENT_VCODEC", - default => "mpeg4", - description => "Default video-codec to use for encoding events", - help => "The eyeZm Plugin calls FFMPEG externally to encode the captured images. If your FFMPEG is not built with support for H264, change this to MPEG-4. If using H264, please check http://www.eyezm.com for H264 requirements and that your eyeZm version supports H264 (v1.2+).", - type => { db_type=>"string", hint=>"mpeg4|h264", pattern=>qr|^([mh])|i, format=>q( $1 =~ /^m/ ? "mpeg4" : "h264" ) }, - category => "eyeZm", - }, - { - name => "ZM_EYEZM_FEED_VCODEC", - default => "mjpeg", - description => "Default video-codec to use for streaming the live feed", - help => "Determines whether the live stream is generated using native MJPEG streaming with ZoneMinder, or H264 using FFMPEG and HTML-5 streaming. If using H264, please check http://www.eyezm.com for H264 requirements and that your eyeZm version supports H264 (v1.2+). This is just a default parameter, and can be overridden with eyeZm.", - type => { db_type=>"string", hint=>"mjpeg|h264", pattern=>qr|^([mh])|i, format=>q( $1 =~ /^m/ ? "mjpeg" : "h264" ) }, - category => "eyeZm", - }, - { - name => "ZM_EYEZM_H264_DEFAULT_BR", - default => "96k", - description => "Default bit-rate to use with FFMPEG for H264 streaming", - help => "When using the eyeZm Plugin to stream H264 data, FFMPEG requires a bitrate to control the quality and bandwidth of the video. This should be specified in a format acceptable to FFMPEG. The default value is sufficient for most installations. This is just a default parameter, and can be overridden with eyeZm.", - type => $types{string}, - category => "eyeZm", - }, - { - name => "ZM_EYEZM_H264_DEFAULT_EVBR", - default => "128k", - description => "Default bit-rate to use with FFMPEG for H264 event viewing", - help => "When using the eyeZm Plugin to view events in H264, FFMPEG requires a bitrate to control the quality and bandwidth of the video. This should be specified in a format acceptable to FFMPEG. The default value is sufficient for most installations. This is just a default parameter, and can be overridden with eyeZm.", - type => $types{string}, - category => "eyeZm", - }, - { - name => "ZM_EYEZM_H264_TIMEOUT", - default => "20", - description => "Timeout (sec) to wait for H264 stream to start before terminating", - help => "The eyeZm Plugin will attempt to spawn an H264 stream when requested, and require that it complete within the timeout specified. If you have a slow system or find through the logs that the H264 stream is not starting because the timeout is expiring, even though FFMPEG is running, try increasing this value. If you have a fast system, decreasing this value can improve the responsiveness when there are issues starting H264 streams", - type => $types{string}, - category => "eyeZm", - }, - { - name => "ZM_EYEZM_SEG_DURATION", - default => "3", - description => "Segment duration used for streaming using HTTP-5 Streaming protocol", - help => "The HTTP-5 Live Streaming Protocol segments the input video stream into small chunks of a duration specified by this parameter. Increasing the segment duration will help with choppy connections on the other end, but will increase the latency in starting a stream.", - type => $types{string}, - category => "eyeZm", - }, + { + name => "ZM_WEB_REFRESH_METHOD", + default => "javascript", + description => "What method windows should use to refresh themselves", + help => qqq(" + Many windows in Javascript need to refresh themselves to keep + their information current. This option determines what method + they should use to do this. Choosing 'javascript' means that + each window will have a short JavaScript statement in with a + timer to prompt the refresh. This is the most compatible + method. Choosing 'http' means the refresh instruction is put in + the HTTP header. This is a cleaner method but refreshes are + interrupted or cancelled when a link in the window is clicked + meaning that the window will no longer refresh and this would + have to be done manually. + "), + type => { + db_type =>"string", + hint =>"javascript|http", + pattern =>qr|^([jh])|i, + format =>q( $1 =~ /^j/ + ? "javascript" + : "http" + ) + }, + category => "hidden", + }, + { + name => "ZM_WEB_EVENT_SORT_FIELD", + default => "DateTime", + description => "Default field the event lists are sorted by", + help => qqq(" + Events in lists can be initially ordered in any way you want. + This option controls what field is used to sort them. You can + modify this ordering from filters or by clicking on headings in + the lists themselves. Bear in mind however that the 'Prev' and + 'Next' links, when scrolling through events, relate to the + ordering in the lists and so not always to time based ordering. + "), + type => { + db_type =>"string", + hint =>"Id|Name|Cause|MonitorName|DateTime|Length|Frames|AlarmFrames|TotScore|AvgScore|MaxScore", + pattern =>qr|.|, + format =>q( $1 ) + }, + category => "web", + }, + { + name => "ZM_WEB_EVENT_SORT_ORDER", + default => "asc", + description => "Default order the event lists are sorted by", + help => qqq(" + Events in lists can be initially ordered in any way you want. + This option controls what order (ascending or descending) is + used to sort them. You can modify this ordering from filters or + by clicking on headings in the lists themselves. Bear in mind + however that the 'Prev' and 'Next' links, when scrolling + through events, relate to the ordering in the lists and so not + always to time based ordering. + "), + type => { + db_type =>"string", + hint =>"asc|desc", + pattern =>qr|^([ad])|i, + format =>q( $1 =~ /^a/i ? "asc" : "desc" ) + }, + category => "web", + }, + { + name => "ZM_WEB_EVENTS_PER_PAGE", + default => "25", + description => "How many events to list per page in paged mode", + help => qqq(" + In the event list view you can either list all events or just a + page at a time. This option controls how many events are listed + per page in paged mode and how often to repeat the column + headers in non-paged mode. + "), + type => $types{integer}, + category => "web", + }, + { + name => "ZM_WEB_LIST_THUMBS", + default => "no", + description => "Display mini-thumbnails of event images in event lists", + help => qqq(" + Ordinarily the event lists just display text details of the + events to save space and time. By switching this option on you + can also display small thumbnails to help you identify events + of interest. The size of these thumbnails is controlled by the + following two options. + "), + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_LIST_THUMB_WIDTH", + default => "48", + description => "The width of the thumbnails that appear in the event lists", + help => qqq(" + This options controls the width of the thumbnail images that + appear in the event lists. It should be fairly small to fit in + with the rest of the table. If you prefer you can specify a + height instead in the next option but you should only use one + of the width or height and the other option should be set to + zero. If both width and height are specified then width will be + used and height ignored. + "), + type => $types{integer}, + requires => [ { name => "ZM_WEB_LIST_THUMBS", value => "yes" } ], + category => "web", + }, + { + name => "ZM_WEB_LIST_THUMB_HEIGHT", + default => "0", + description => "The height of the thumbnails that appear in the event lists", + help => qqq(" + This options controls the height of the thumbnail images that + appear in the event lists. It should be fairly small to fit in + with the rest of the table. If you prefer you can specify a + width instead in the previous option but you should only use + one of the width or height and the other option should be set + to zero. If both width and height are specified then width will + be used and height ignored. + "), + type => $types{integer}, + requires => [ { name => "ZM_WEB_LIST_THUMBS", value => "yes" } ], + category => "web", + }, + { + name => "ZM_WEB_USE_OBJECT_TAGS", + default => "yes", + description => "Wrap embed in object tags for media content", + help => qqq(" + There are two methods of including media content in web pages. + The most common way is use the EMBED tag which is able to give + some indication of the type of content. However this is not a + standard part of HTML. The official method is to use OBJECT + tags which are able to give more information allowing the + correct media viewers etc to be loaded. However these are less + widely supported and content may be specifically tailored to a + particular platform or player. This option controls whether + media content is enclosed in EMBED tags only or whether, where + appropriate, it is additionally wrapped in OBJECT tags. + Currently OBJECT tags are only used in a limited number of + circumstances but they may become more widespread in the + future. It is suggested that you leave this option on unless + you encounter problems playing some content. + "), + type => $types{boolean}, + category => "web", + }, + { + name => "ZM_WEB_H_REFRESH_MAIN", + default => "60", + introduction => qqq(" + There are now a number of options that are grouped into + bandwidth categories, this allows you to configure the + ZoneMinder client to work optimally over the various access + methods you might to access the client.\n\nThe next few options + control what happens when the client is running in 'high' + bandwidth mode. You should set these options for when accessing + the ZoneMinder client over a local network or high speed link. + In most cases the default values will be suitable as a starting + point. + "), + description => "How often (in seconds) the main console window should refresh itself", + help => qqq(" + The main console window lists a general status and the event + totals for all monitors. This is not a trivial task and should + not be repeated too frequently or it may affect the performance + of the rest of the system. + "), + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_CYCLE", + default => "10", + description => "How often (in seconds) the cycle watch window swaps to the next monitor", + help => qqq(" + The cycle watch window is a method of continuously cycling + between images from all of your monitors. This option + determines how often to refresh with a new image. + "), + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_IMAGE", + default => "3", + description => "How often (in seconds) the watched image is refreshed (if not streaming)", + help => qqq(" + The live images from a monitor can be viewed in either streamed + or stills mode. This option determines how often a stills image + is refreshed, it has no effect if streaming is selected. + "), + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_STATUS", + default => "1", + description => "How often (in seconds) the status refreshes itself in the watch window", + help => qqq(" + The monitor window is actually made from several frames. The + one in the middle merely contains a monitor status which needs + to refresh fairly frequently to give a true indication. This + option determines that frequency. + "), + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_REFRESH_EVENTS", + default => "5", + description => "How often (in seconds) the event listing is refreshed in the watch window", + help => qqq(" + The monitor window is actually made from several frames. The + lower framme contains a listing of the last few events for easy + access. This option determines how often this is refreshed. + "), + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => qqq(" + If you know that your browser can handle image streams of the + type 'multipart/x-mixed-replace' but ZoneMinder does not detect + this correctly you can set this option to ensure that the + stream is delivered with or without the use of the Cambozola + plugin. Selecting 'yes' will tell ZoneMinder that your browser + can handle the streams natively, 'no' means that it can't and + so the plugin will be used while 'auto' lets ZoneMinder decide. + "), + type => $types{tristate}, + category => "highband", + }, + { + name => "ZM_WEB_H_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => qqq(" + ZoneMinder can be configured to use either mpeg encoded video + or a series or still jpeg images when sending video streams. + This option defines which is used. If you choose mpeg you + should ensure that you have the appropriate plugins available + on your browser whereas choosing jpeg will work natively on + Mozilla and related browsers and with a Java applet on Internet + Explorer + "), + type => { + db_type =>"string", + hint =>"mpeg|jpeg", + pattern =>qr|^([mj])|i, + format =>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) + }, + category => "highband", + }, + { + name => "ZM_WEB_H_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => qqq(" + Normally ZoneMinder will display 'live' or 'event' streams in + their native size. However if you have monitors with large + dimensions or a slow link you may prefer to reduce this size, + alternatively for small monitors you can enlarge it. This + options lets you specify what the default scaling factor will + be. It is expressed as a percentage so 100 is normal size, 200 + is double size etc. + "), + type => { + db_type =>"integer", + hint =>"25|33|50|75|100|150|200|300|400", + pattern =>qr|^(\d+)$|, + format =>q( $1 ) + }, + category => "highband", + }, + { + name => "ZM_WEB_H_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => qqq(" + Normally ZoneMinder will display 'event' streams at their + native rate, i.e. as close to real-time as possible. However if + you have long events it is often convenient to replay them at a + faster rate for review. This option lets you specify what the + default replay rate will be. It is expressed as a percentage so + 100 is normal rate, 200 is double speed etc. + "), + type => { + db_type =>"integer", + hint =>"25|50|100|150|200|400|1000|2500|5000|10000", + pattern =>qr|^(\d+)$|, + format =>q( $1 ) + }, + category => "highband", + }, + { + name => "ZM_WEB_H_VIDEO_BITRATE", + default => "150000", + description => "What the bitrate of the video encoded stream should be set to", + help => qqq(" + When encoding real video via the ffmpeg library a bit rate can + be specified which roughly corresponds to the available + bandwidth used for the stream. This setting effectively + corresponds to a 'quality' setting for the video. A low value + will result in a blocky image whereas a high value will produce + a clearer view. Note that this setting does not control the + frame rate of the video however the quality of the video + produced is affected both by this setting and the frame rate + that the video is produced at. A higher frame rate at a + particular bit rate result in individual frames being at a + lower quality. + "), + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_VIDEO_MAXFPS", + default => "30", + description => "What the maximum frame rate for streamed video should be", + help => qqq(" + When using streamed video the main control is the bitrate which + determines how much data can be transmitted. However a lower + bitrate at high frame rates results in a lower quality image. + This option allows you to limit the maximum frame rate to + ensure that video quality is maintained. An additional + advantage is that encoding video at high frame rates is a + processor intensive task when for the most part a very high + frame rate offers little perceptible improvement over one that + has a more manageable resource requirement. Note, this option + is implemented as a cap beyond which binary reduction takes + place. So if you have a device capturing at 15fps and set this + option to 10fps then the video is not produced at 10fps, but + rather at 7.5fps (15 divided by 2) as the final frame rate must + be the original divided by a power of 2. + "), + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_H_SCALE_THUMBS", + default => "no", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => qqq(" + If unset, this option sends the whole image to the browser + which resizes it in the window. If set the image is scaled down + on the server before sending a reduced size image to the + browser to conserve bandwidth at the cost of cpu on the server. + Note that ZM can only perform the resizing if the appropriate + PHP graphics functionality is installed. This is usually + available in the php-gd package. + "), + type => $types{boolean}, + category => "highband", + }, + { + name => "ZM_WEB_H_EVENTS_VIEW", + default => "events", + description => "What the default view of multiple events should be.", + help => qqq(" + Stored events can be viewed in either an events list format or + in a timeline based one. This option sets the default view that + will be used. Choosing one view here does not prevent the other + view being used as it will always be selectable from whichever + view is currently being used. + "), + type => { + db_type =>"string", + hint =>"events|timeline", + pattern =>qr|^([lt])|i, + format =>q( $1 =~ /^e/ ? "events" : "timeline" ) + }, + category => "highband", + }, + { + name => "ZM_WEB_H_SHOW_PROGRESS", + default => "yes", + description => "Show the progress of replay in event view.", + help => qqq(" + When viewing events an event navigation panel and progress bar + is shown below the event itself. This allows you to jump to + specific points in the event, but can can also dynamically + update to display the current progress of the event replay + itself. This progress is calculated from the actual event + duration and is not directly linked to the replay itself, so on + limited bandwidth connections may be out of step with the + replay. This option allows you to turn off the progress + display, whilst still keeping the navigation aspect, where + bandwidth prevents it functioning effectively. + "), + type => $types{boolean}, + category => "highband", + }, + { + name => "ZM_WEB_H_AJAX_TIMEOUT", + default => "3000", + description => "How long to wait for Ajax request responses (ms)", + help => qqq(" + The newer versions of the live feed and event views use Ajax to + request information from the server and populate the views + dynamically. This option allows you to specify a timeout if + required after which requests are abandoned. A timeout may be + necessary if requests would overwise hang such as on a slow + connection. This would tend to consume a lot of browser memory + and make the interface unresponsive. Ordinarily no requests + should timeout so this setting should be set to a value greater + than the slowest expected response. This value is in + milliseconds but if set to zero then no timeout will be used. + "), + type => $types{integer}, + category => "highband", + }, + { + name => "ZM_WEB_M_REFRESH_MAIN", + default => "300", + description => "How often (in seconds) the main console window should refresh itself", + help => qqq(" + The main console window lists a general status and the event + totals for all monitors. This is not a trivial task and should + not be repeated too frequently or it may affect the performance + of the rest of the system. + "), + type => $types{integer}, + introduction => qqq(" + The next few options control what happens when the client is + running in 'medium' bandwidth mode. You should set these + options for when accessing the ZoneMinder client over a slower + cable or DSL link. In most cases the default values will be + suitable as a starting point. + "), + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_CYCLE", + default => "20", + description => "How often (in seconds) the cycle watch window swaps to the next monitor", + help => qqq(" + The cycle watch window is a method of continuously cycling + between images from all of your monitors. This option + determines how often to refresh with a new image. + "), + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_IMAGE", + default => "10", + description => "How often (in seconds) the watched image is refreshed (if not streaming)", + help => qqq(" + The live images from a monitor can be viewed in either streamed + or stills mode. This option determines how often a stills image + is refreshed, it has no effect if streaming is selected. + "), + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_STATUS", + default => "5", + description => "How often (in seconds) the status refreshes itself in the watch window", + help => qqq(" + The monitor window is actually made from several frames. The + one in the middle merely contains a monitor status which needs + to refresh fairly frequently to give a true indication. This + option determines that frequency. + "), + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_REFRESH_EVENTS", + default => "60", + description => "How often (in seconds) the event listing is refreshed in the watch window", + help => qqq(" + The monitor window is actually made from several frames. The + lower framme contains a listing of the last few events for easy + access. This option determines how often this is refreshed. + "), + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => qqq(" + If you know that your browser can handle image streams of the + type 'multipart/x-mixed-replace' but ZoneMinder does not detect + this correctly you can set this option to ensure that the + stream is delivered with or without the use of the Cambozola + plugin. Selecting 'yes' will tell ZoneMinder that your browser + can handle the streams natively, 'no' means that it can't and + so the plugin will be used while 'auto' lets ZoneMinder decide. + "), + type => $types{tristate}, + category => "medband", + }, + { + name => "ZM_WEB_M_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => qqq(" + ZoneMinder can be configured to use either mpeg encoded video + or a series or still jpeg images when sending video streams. + This option defines which is used. If you choose mpeg you + should ensure that you have the appropriate plugins available + on your browser whereas choosing jpeg will work natively on + Mozilla and related browsers and with a Java applet on Internet + Explorer + "), + type => { + db_type =>"string", + hint =>"mpeg|jpeg", + pattern =>qr|^([mj])|i, + format =>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) + }, + category => "medband", + }, + { + name => "ZM_WEB_M_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => qqq(" + Normally ZoneMinder will display 'live' or 'event' streams in + their native size. However if you have monitors with large + dimensions or a slow link you may prefer to reduce this size, + alternatively for small monitors you can enlarge it. This + options lets you specify what the default scaling factor will + be. It is expressed as a percentage so 100 is normal size, 200 + is double size etc. + "), + type => { + db_type =>"integer", + hint =>"25|33|50|75|100|150|200|300|400", + pattern =>qr|^(\d+)$|, + format =>q( $1 ) + }, + category => "medband", + }, + { + name => "ZM_WEB_M_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => qqq(" + Normally ZoneMinder will display 'event' streams at their + native rate, i.e. as close to real-time as possible. However if + you have long events it is often convenient to replay them at a + faster rate for review. This option lets you specify what the + default replay rate will be. It is expressed as a percentage so + 100 is normal rate, 200 is double speed etc. + "), + type => { + db_type =>"integer", + hint =>"25|50|100|150|200|400|1000|2500|5000|10000", + pattern =>qr|^(\d+)$|, + format =>q( $1 ) + }, + category => "medband", + }, + { + name => "ZM_WEB_M_VIDEO_BITRATE", + default => "75000", + description => "What the bitrate of the video encoded stream should be set to", + help => qqq(" + When encoding real video via the ffmpeg library a bit rate can + be specified which roughly corresponds to the available + bandwidth used for the stream. This setting effectively + corresponds to a 'quality' setting for the video. A low value + will result in a blocky image whereas a high value will produce + a clearer view. Note that this setting does not control the + frame rate of the video however the quality of the video + produced is affected both by this setting and the frame rate + that the video is produced at. A higher frame rate at a + particular bit rate result in individual frames being at a + lower quality. + "), + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_VIDEO_MAXFPS", + default => "10", + description => "What the maximum frame rate for streamed video should be", + help => qqq(" + When using streamed video the main control is the bitrate which + determines how much data can be transmitted. However a lower + bitrate at high frame rates results in a lower quality image. + This option allows you to limit the maximum frame rate to + ensure that video quality is maintained. An additional + advantage is that encoding video at high frame rates is a + processor intensive task when for the most part a very high + frame rate offers little perceptible improvement over one that + has a more manageable resource requirement. Note, this option + is implemented as a cap beyond which binary reduction takes + place. So if you have a device capturing at 15fps and set this + option to 10fps then the video is not produced at 10fps, but + rather at 7.5fps (15 divided by 2) as the final frame rate must + be the original divided by a power of 2. + "), + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_M_SCALE_THUMBS", + default => "yes", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => qqq(" + If unset, this option sends the whole image to the browser + which resizes it in the window. If set the image is scaled down + on the server before sending a reduced size image to the + browser to conserve bandwidth at the cost of cpu on the server. + Note that ZM can only perform the resizing if the appropriate + PHP graphics functionality is installed. This is usually + available in the php-gd package. + "), + type => $types{boolean}, + category => "medband", + }, + { + name => "ZM_WEB_M_EVENTS_VIEW", + default => "events", + description => "What the default view of multiple events should be.", + help => qqq(" + Stored events can be viewed in either an events list format or + in a timeline based one. This option sets the default view that + will be used. Choosing one view here does not prevent the other + view being used as it will always be selectable from whichever + view is currently being used. + "), + type => { + db_type =>"string", + hint =>"events|timeline", + pattern =>qr|^([lt])|i, + format =>q( $1 =~ /^e/ ? "events" : "timeline" ) + }, + category => "medband", + }, + { + name => "ZM_WEB_M_SHOW_PROGRESS", + default => "yes", + description => "Show the progress of replay in event view.", + help => qqq(" + When viewing events an event navigation panel and progress bar + is shown below the event itself. This allows you to jump to + specific points in the event, but can can also dynamically + update to display the current progress of the event replay + itself. This progress is calculated from the actual event + duration and is not directly linked to the replay itself, so on + limited bandwidth connections may be out of step with the + replay. This option allows you to turn off the progress + display, whilst still keeping the navigation aspect, where + bandwidth prevents it functioning effectively. + "), + type => $types{boolean}, + category => "medband", + }, + { + name => "ZM_WEB_M_AJAX_TIMEOUT", + default => "5000", + description => "How long to wait for Ajax request responses (ms)", + help => qqq(" + The newer versions of the live feed and event views use Ajax to + request information from the server and populate the views + dynamically. This option allows you to specify a timeout if + required after which requests are abandoned. A timeout may be + necessary if requests would overwise hang such as on a slow + connection. This would tend to consume a lot of browser memory + and make the interface unresponsive. Ordinarily no requests + should timeout so this setting should be set to a value greater + than the slowest expected response. This value is in + milliseconds but if set to zero then no timeout will be used. + "), + type => $types{integer}, + category => "medband", + }, + { + name => "ZM_WEB_L_REFRESH_MAIN", + default => "300", + description => "How often (in seconds) the main console window should refresh itself", + introduction => qqq(" + The next few options control what happens when the client is + running in 'low' bandwidth mode. You should set these options + for when accessing the ZoneMinder client over a modem or slow + link. In most cases the default values will be suitable as a + starting point. + "), + help => qqq(" + The main console window lists a general status and the event + totals for all monitors. This is not a trivial task and should + not be repeated too frequently or it may affect the performance + of the rest of the system. + "), + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_CYCLE", + default => "30", + description => "How often (in seconds) the cycle watch window swaps to the next monitor", + help => qqq(" + The cycle watch window is a method of continuously cycling + between images from all of your monitors. This option + determines how often to refresh with a new image. + "), + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_IMAGE", + default => "15", + description => "How often (in seconds) the watched image is refreshed (if not streaming)", + help => qqq(" + The live images from a monitor can be viewed in either streamed + or stills mode. This option determines how often a stills image + is refreshed, it has no effect if streaming is selected. + "), + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_STATUS", + default => "10", + description => "How often (in seconds) the status refreshes itself in the watch window", + help => qqq(" + The monitor window is actually made from several frames. The + one in the middle merely contains a monitor status which needs + to refresh fairly frequently to give a true indication. This + option determines that frequency. + "), + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_REFRESH_EVENTS", + default => "180", + description => "How often (in seconds) the event listing is refreshed in the watch window", + help => qqq(" + The monitor window is actually made from several frames. The + lower framme contains a listing of the last few events for easy + access. This option determines how often this is refreshed. + "), + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => qqq(" + If you know that your browser can handle image streams of the + type 'multipart/x-mixed-replace' but ZoneMinder does not detect + this correctly you can set this option to ensure that the + stream is delivered with or without the use of the Cambozola + plugin. Selecting 'yes' will tell ZoneMinder that your browser + can handle the streams natively, 'no' means that it can't and + so the plugin will be used while 'auto' lets ZoneMinder decide. + "), + type => $types{tristate}, + category => "lowband", + }, + { + name => "ZM_WEB_L_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => qqq(" + ZoneMinder can be configured to use either mpeg encoded video + or a series or still jpeg images when sending video streams. + This option defines which is used. If you choose mpeg you + should ensure that you have the appropriate plugins available + on your browser whereas choosing jpeg will work natively on + Mozilla and related browsers and with a Java applet on Internet + Explorer + "), + type => { + db_type =>"string", + hint =>"mpeg|jpeg", + pattern =>qr|^([mj])|i, + format =>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) + }, + category => "lowband", + }, + { + name => "ZM_WEB_L_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => qqq(" + Normally ZoneMinder will display 'live' or 'event' streams in + their native size. However if you have monitors with large + dimensions or a slow link you may prefer to reduce this size, + alternatively for small monitors you can enlarge it. This + options lets you specify what the default scaling factor will + be. It is expressed as a percentage so 100 is normal size, 200 + is double size etc. + "), + type => { + db_type =>"integer", + hint =>"25|33|50|75|100|150|200|300|400", + pattern =>qr|^(\d+)$|, + format =>q( $1 ) + }, + category => "lowband", + }, + { + name => "ZM_WEB_L_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => qqq(" + Normally ZoneMinder will display 'event' streams at their + native rate, i.e. as close to real-time as possible. However if + you have long events it is often convenient to replay them at a + faster rate for review. This option lets you specify what the + default replay rate will be. It is expressed as a percentage so + 100 is normal rate, 200 is double speed etc. + "), + type => { + db_type =>"integer", + hint =>"25|50|100|150|200|400|1000|2500|5000|10000", + pattern =>qr|^(\d+)$|, format=>q( $1 ) + }, + category => "lowband", + }, + { + name => "ZM_WEB_L_VIDEO_BITRATE", + default => "25000", + description => "What the bitrate of the video encoded stream should be set to", + help => qqq(" + When encoding real video via the ffmpeg library a bit rate can + be specified which roughly corresponds to the available + bandwidth used for the stream. This setting effectively + corresponds to a 'quality' setting for the video. A low value + will result in a blocky image whereas a high value will produce + a clearer view. Note that this setting does not control the + frame rate of the video however the quality of the video + produced is affected both by this setting and the frame rate + that the video is produced at. A higher frame rate at a + particular bit rate result in individual frames being at a + lower quality. + "), + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_VIDEO_MAXFPS", + default => "5", + description => "What the maximum frame rate for streamed video should be", + help => qqq(" + When using streamed video the main control is the bitrate which + determines how much data can be transmitted. However a lower + bitrate at high frame rates results in a lower quality image. + This option allows you to limit the maximum frame rate to + ensure that video quality is maintained. An additional + advantage is that encoding video at high frame rates is a + processor intensive task when for the most part a very high + frame rate offers little perceptible improvement over one that + has a more manageable resource requirement. Note, this option + is implemented as a cap beyond which binary reduction takes + place. So if you have a device capturing at 15fps and set this + option to 10fps then the video is not produced at 10fps, but + rather at 7.5fps (15 divided by 2) as the final frame rate must + be the original divided by a power of 2. + "), + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_L_SCALE_THUMBS", + default => "yes", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => qqq(" + If unset, this option sends the whole image to the browser + which resizes it in the window. If set the image is scaled down + on the server before sending a reduced size image to the + browser to conserve bandwidth at the cost of cpu on the server. + Note that ZM can only perform the resizing if the appropriate + PHP graphics functionality is installed. This is usually + available in the php-gd package. + "), + type => $types{boolean}, + category => "lowband", + }, + { + name => "ZM_WEB_L_EVENTS_VIEW", + default => "events", + description => "What the default view of multiple events should be.", + help => qqq(" + Stored events can be viewed in either an events list format or + in a timeline based one. This option sets the default view that + will be used. Choosing one view here does not prevent the other + view being used as it will always be selectable from whichever + view is currently being used. + "), + type => { + db_type =>"string", + hint =>"events|timeline", + pattern =>qr|^([lt])|i, + format =>q( $1 =~ /^e/ ? "events" : "timeline" ) + }, + category => "lowband", + }, + { + name => "ZM_WEB_L_SHOW_PROGRESS", + default => "no", + description => "Show the progress of replay in event view.", + help => qqq(" + When viewing events an event navigation panel and progress bar + is shown below the event itself. This allows you to jump to + specific points in the event, but can can also dynamically + update to display the current progress of the event replay + itself. This progress is calculated from the actual event + duration and is not directly linked to the replay itself, so on + limited bandwidth connections may be out of step with the + replay. This option allows you to turn off the progress + display, whilst still keeping the navigation aspect, where + bandwidth prevents it functioning effectively. + "), + type => $types{boolean}, + category => "lowband", + }, + { + name => "ZM_WEB_L_AJAX_TIMEOUT", + default => "10000", + description => "How long to wait for Ajax request responses (ms)", + help => qqq(" + The newer versions of the live feed and event views use Ajax to + request information from the server and populate the views + dynamically. This option allows you to specify a timeout if + required after which requests are abandoned. A timeout may be + necessary if requests would overwise hang such as on a slow + connection. This would tend to consume a lot of browser memory + and make the interface unresponsive. Ordinarily no requests + should timeout so this setting should be set to a value greater + than the slowest expected response. This value is in + milliseconds but if set to zero then no timeout will be used. + "), + type => $types{integer}, + category => "lowband", + }, + { + name => "ZM_WEB_P_CAN_STREAM", + default => "auto", + description => "Override the automatic detection of browser streaming capability", + help => qqq(" + If you know that your browser can handle image streams of the + type 'multipart/x-mixed-replace' but ZoneMinder does not detect + this correctly you can set this option to ensure that the + stream is delivered with or without the use of the Cambozola + plugin. Selecting 'yes' will tell ZoneMinder that your browser + can handle the streams natively, 'no' means that it can't and + so the plugin will be used while 'auto' lets ZoneMinder decide. + "), + type => $types{tristate}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_STREAM_METHOD", + default => "jpeg", + description => "Which method should be used to send video streams to your browser.", + help => qqq(" + ZoneMinder can be configured to use either mpeg encoded video + or a series or still jpeg images when sending video streams. + This option defines which is used. If you choose mpeg you + should ensure that you have the appropriate plugins available + on your browser whereas choosing jpeg will work natively on + Mozilla and related browsers and with a Java applet on Internet + Explorer + "), + type => { + db_type =>"string", + hint =>"mpeg|jpeg", + pattern =>qr|^([mj])|i, + format =>q( $1 =~ /^m/ ? "mpeg" : "jpeg" ) + }, + category => "phoneband", + }, + { + name => "ZM_WEB_P_DEFAULT_SCALE", + default => "100", + description => "What the default scaling factor applied to 'live' or 'event' views is (%)", + help => qqq(" + Normally ZoneMinder will display 'live' or 'event' streams in + their native size. However if you have monitors with large + dimensions or a slow link you may prefer to reduce this size, + alternatively for small monitors you can enlarge it. This + options lets you specify what the default scaling factor will + be. It is expressed as a percentage so 100 is normal size, 200 + is double size etc. + "), + type => { + db_type =>"integer", + hint =>"25|33|50|75|100|150|200|300|400", + pattern =>qr|^(\d+)$|, format=>q( $1 ) + }, + category => "phoneband", + }, + { + name => "ZM_WEB_P_DEFAULT_RATE", + default => "100", + description => "What the default replay rate factor applied to 'event' views is (%)", + help => qqq(" + Normally ZoneMinder will display 'event' streams at their + native rate, i.e. as close to real-time as possible. However if + you have long events it is often convenient to replay them at a + faster rate for review. This option lets you specify what the + default replay rate will be. It is expressed as a percentage so + 100 is normal rate, 200 is double speed etc. + "), + type => { + db_type =>"integer", + hint =>"25|50|100|150|200|400|1000|2500|5000|10000", + pattern =>qr|^(\d+)$|, + format =>q( $1 ) + }, + category => "phoneband", + }, + { + name => "ZM_WEB_P_VIDEO_BITRATE", + default => "8000", + description => "What the bitrate of the video encoded stream should be set to", + help => qqq(" + When encoding real video via the ffmpeg library a bit rate can + be specified which roughly corresponds to the available + bandwidth used for the stream. This setting effectively + corresponds to a 'quality' setting for the video. A low value + will result in a blocky image whereas a high value will produce + a clearer view. Note that this setting does not control the + frame rate of the video however the quality of the video + produced is affected both by this setting and the frame rate + that the video is produced at. A higher frame rate at a + particular bit rate result in individual frames being at a + lower quality. + "), + type => $types{integer}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_VIDEO_MAXFPS", + default => "5", + description => "What the maximum frame rate for streamed video should be", + help => qqq(" + When using streamed video the main control is the bitrate which + determines how much data can be transmitted. However a lower + bitrate at high frame rates results in a lower quality image. + This option allows you to limit the maximum frame rate to + ensure that video quality is maintained. An additional + advantage is that encoding video at high frame rates is a + processor intensive task when for the most part a very high + frame rate offers little perceptible improvement over one that + has a more manageable resource requirement. Note, this option + is implemented as a cap beyond which binary reduction takes + place. So if you have a device capturing at 15fps and set this + option to 10fps then the video is not produced at 10fps, but + rather at 7.5fps (15 divided by 2) as the final frame rate must + be the original divided by a power of 2. + "), + type => $types{integer}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_SCALE_THUMBS", + default => "yes", + description => "Scale thumbnails in events, bandwidth versus cpu in rescaling", + help => qqq(" + If unset, this option sends the whole image to the browser + which resizes it in the window. If set the image is scaled down + on the server before sending a reduced size image to the + browser to conserve bandwidth at the cost of cpu on the server. + Note that ZM can only perform the resizing if the appropriate + PHP graphics functionality is installed. This is usually + available in the php-gd package. + "), + type => $types{boolean}, + category => "phoneband", + }, + { + name => "ZM_WEB_P_AJAX_TIMEOUT", + default => "10000", + description => "How long to wait for Ajax request responses (ms)", + help => qqq(" + The newer versions of the live feed and event views use Ajax to + request information from the server and populate the views + dynamically. This option allows you to specify a timeout if + required after which requests are abandoned. A timeout may be + necessary if requests would overwise hang such as on a slow + connection. This would tend to consume a lot of browser memory + and make the interface unresponsive. Ordinarily no requests + should timeout so this setting should be set to a value greater + than the slowest expected response. This value is in + milliseconds but if set to zero then no timeout will be used. + "), + type => $types{integer}, + category => "phoneband", + }, + { + name => "ZM_DYN_LAST_VERSION", + default => "", + description => "What the last version of ZoneMinder recorded from zoneminder.com is", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_CURR_VERSION", + default => "@VERSION@", + description => qqq(" + What the effective current version of ZoneMinder is, might be + different from actual if versions ignored + "), + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_DB_VERSION", + default => "@VERSION@", + description => "What the version of the database is, from zmupdate", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_LAST_CHECK", + default => "", + description => "When the last check for version from zoneminder.com was", + help => "", + type => $types{integer}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_NEXT_REMINDER", + default => "", + description => "When the earliest time to remind about versions will be", + help => "", + type => $types{string}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_DONATE_REMINDER_TIME", + default => 0, + description => "When the earliest time to remind about donations will be", + help => "", + type => $types{integer}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_DYN_SHOW_DONATE_REMINDER", + default => "yes", + description => "Remind about donations or not", + help => "", + type => $types{boolean}, + readonly => 1, + category => "dynamic", + }, + { + name => "ZM_EYEZM_DEBUG", + default => "no", + description => "Switch additional debugging on for eyeZm Plugin", + help => qqq(" + Enable or Disable extra debugging from the eyeZm Plugin. Extra + debugging information will be displayed in it's own file + (EYEZM_LOG_TO_FILE is set), or your Apache error log + "), + type => $types{boolean}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_LOG_TO_FILE", + default => "yes", + description => "When eyeZm Debugging is enabled, enabling this logs output to it's own file", + help => qqq(" + When EYEZM_DEBUG is on and EYEZM_LOG_TO_FILE is on, output + generated from the eyeZm Plugin will go to it's own file. + Otherwise it will go to the apache error log. + "), + type => $types{boolean}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_LOG_FILE", + default => "@ZM_LOGDIR@/zm_xml.log", + description => "Default filename to use when logging eyeZm Output and EYEZM_LOG_TO_FILE is enabled", + help => qqq(" + This file will contain it's own output from the eyeZm Plugin + when EYEZM_LOG_TO_FILE and EYEZM_DEBUG are both enabled + "), + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_EVENT_VCODEC", + default => "mpeg4", + description => "Default video-codec to use for encoding events", + help => qqq(" + The eyeZm Plugin calls FFMPEG externally to encode the captured + images. If your FFMPEG is not built with support for H264, + change this to MPEG-4. If using H264, please check + http://www.eyezm.com for H264 requirements and that your eyeZm + version supports H264 (v1.2+). + "), + type => { + db_type =>"string", + hint =>"mpeg4|h264", + pattern =>qr|^([mh])|i, + format =>q( $1 =~ /^m/ ? "mpeg4" : "h264" ) + }, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_FEED_VCODEC", + default => "mjpeg", + description => "Default video-codec to use for streaming the live feed", + help => qqq(" + Determines whether the live stream is generated using native + MJPEG streaming with ZoneMinder, or H264 using FFMPEG and + HTML-5 streaming. If using H264, please check + http://www.eyezm.com for H264 requirements and that your eyeZm + version supports H264 (v1.2+). This is just a default + parameter, and can be overridden with eyeZm. + "), + type => { + db_type =>"string", + hint =>"mjpeg|h264", + pattern =>qr|^([mh])|i, + format =>q( $1 =~ /^m/ ? "mjpeg" : "h264" ) + }, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_H264_DEFAULT_BR", + default => "96k", + description => "Default bit-rate to use with FFMPEG for H264 streaming", + help => qqq(" + When using the eyeZm Plugin to stream H264 data, FFMPEG + requires a bitrate to control the quality and bandwidth of the + video. This should be specified in a format acceptable to + FFMPEG. The default value is sufficient for most installations. + This is just a default parameter, and can be overridden with + eyeZm. + "), + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_H264_DEFAULT_EVBR", + default => "128k", + description => "Default bit-rate to use with FFMPEG for H264 event viewing", + help => qqq(" + When using the eyeZm Plugin to view events in H264, FFMPEG + requires a bitrate to control the quality and bandwidth of the + video. This should be specified in a format acceptable to + FFMPEG. The default value is sufficient for most installations. + This is just a default parameter, and can be overridden with + eyeZm. + "), + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_H264_TIMEOUT", + default => "20", + description => "Timeout (sec) to wait for H264 stream to start before terminating", + help => qqq(" + The eyeZm Plugin will attempt to spawn an H264 stream when + requested, and require that it complete within the timeout + specified. If you have a slow system or find through the logs + that the H264 stream is not starting because the timeout is + expiring, even though FFMPEG is running, try increasing this + value. If you have a fast system, decreasing this value can + improve the responsiveness when there are issues starting H264 + streams + "), + type => $types{string}, + category => "eyeZm", + }, + { + name => "ZM_EYEZM_SEG_DURATION", + default => "3", + description => "Segment duration used for streaming using HTTP-5 Streaming protocol", + help => qqq(" + The HTTP-5 Live Streaming Protocol segments the input video + stream into small chunks of a duration specified by this + parameter. Increasing the segment duration will help with + choppy connections on the other end, but will increase the + latency in starting a stream. + "), + type => $types{string}, + category => "eyeZm", + }, ); our %options_hash = map { ( $_->{name}, $_ ) } @options; @@ -1960,22 +4001,22 @@ sub initialiseConfig { return if ( $configInitialised ); - # Do some initial data munging to finish the data structures - # Create option ids - my $option_id = 0; - foreach my $option ( @options ) - { - if ( defined($option->{default}) ) - { - $option->{value} = $option->{default} - } - else - { - $option->{value} = ''; - } - #next if ( $option->{category} eq 'hidden' ); - $option->{id} = $option_id++; - } + # Do some initial data munging to finish the data structures + # Create option ids + my $option_id = 0; + foreach my $option ( @options ) + { + if ( defined($option->{default}) ) + { + $option->{value} = $option->{default} + } + else + { + $option->{value} = ''; + } + #next if ( $option->{category} eq 'hidden' ); + $option->{id} = $option_id++; + } $configInitialised = 1; } @@ -1996,9 +4037,15 @@ ZoneMinder::ConfigData - ZoneMinder Configuration Data module =head1 DESCRIPTION -The ZoneMinder:ConfigData module contains the master definition of the ZoneMinder configuration options as well as helper methods. This module is intended for specialist confguration management and would not normally be used by end users. +The ZoneMinder:ConfigData module contains the master definition of the +ZoneMinder configuration options as well as helper methods. This module is +intended for specialist confguration management and would not normally be +used by end users. -The configuration held in this module, which was previously in zmconfig.pl, includes the name, default value, description, help text, type and category for each option, as well as a number of additional fields in a small number of cases. +The configuration held in this module, which was previously in zmconfig.pl, +includes the name, default value, description, help text, type and category +for each option, as well as a number of additional fields in a small number +of cases. =head1 METHODS @@ -2006,11 +4053,19 @@ The configuration held in this module, which was previously in zmconfig.pl, incl =item loadConfigFromDB (); -Loads existing configuration from the database (if any) and merges it with the definitions held in this module. This results in the merging of any new configuration and the removal of any deprecated configuration while preserving the existing values of every else. +Loads existing configuration from the database (if any) and merges it with +the definitions held in this module. This results in the merging of any new +configuration and the removal of any deprecated configuration while +preserving the existing values of every else. =item saveConfigToDB (); -Saves configuration held in memory to the database. The act of loading and saving configuration is a convenient way to ensure that the configuration held in the database corresponds with the most recent definitions and that all components are using the same set of configuration. +Saves configuration held in memory to the database. The act of loading and +saving configuration is a convenient way to ensure that the configuration +held in the database corresponds with the most recent definitions and that +all components are using the same set of configuration. + +=back =head2 EXPORT diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control.pm index 2a646772d..0822dc3d3 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control.pm @@ -19,7 +19,7 @@ # # ========================================================================== # -# This module contains the base class definitions for the camera control +# This module contains the base class definitions for the camera control # protocol implementations # package ZoneMinder::Control; @@ -45,17 +45,17 @@ our $AUTOLOAD; sub new { - my $class = shift; - my $id = shift; - my $self = {}; - $self->{name} = "PelcoD"; + my $class = shift; + my $id = shift; + my $self = {}; + $self->{name} = "PelcoD"; if ( !defined($id) ) { Fatal( "No monitor defined when invoking protocol ".$self->{name} ); } - $self->{id} = $id; - bless( $self, $class ); - return $self; + $self->{id} = $id; + bless( $self, $class ); + return $self; } sub DESTROY @@ -64,32 +64,32 @@ sub DESTROY sub AUTOLOAD { - my $self = shift; - my $class = ref($self) || croak( "$self not object" ); - my $name = $AUTOLOAD; - $name =~ s/.*://; - if ( exists($self->{$name}) ) - { - return( $self->{$name} ); - } - croak( "Can't access $name member of object of class $class" ); + my $self = shift; + my $class = ref($self) || croak( "$self not object" ); + my $name = $AUTOLOAD; + $name =~ s/.*://; + if ( exists($self->{$name}) ) + { + return( $self->{$name} ); + } + croak( "Can't access $name member of object of class $class" ); } -sub getKey() +sub getKey { - my $self = shift; + my $self = shift; return( $self->{id} ); } sub open { - my $self = shift; + my $self = shift; Fatal( "No open method defined for protocol ".$self->{name} ); } sub close { - my $self = shift; + my $self = shift; Fatal( "No close method defined for protocol ".$self->{name} ); } @@ -145,9 +145,9 @@ sub executeCommand &{$self->{$command}}( $self, $params ); } -sub printMsg() +sub printMsg { - my $self = shift; + my $self = shift; Fatal( "No printMsg method defined for protocol ".$self->{name} ); } diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/3S.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/3S.pm index f825af109..47d783bff 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/3S.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/3S.pm @@ -21,10 +21,10 @@ # # This module contains the implementation of the 3S camera control # protocol -#Model: N5071 -#Hardware Version: 00 -#Firmware Version: V1.03_STD-1 -#Firmware Build Time: Jun 19 2012 15:28:17 +#Model: N5071 +#Hardware Version: 00 +#Firmware Version: V1.03_STD-1 +#Firmware Build Time: Jun 19 2012 15:28:17 package ZoneMinder::Control::3S; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8608W_Y2k.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8608W_Y2k.pm index 7ffbf248a..2e5b21f76 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8608W_Y2k.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8608W_Y2k.pm @@ -53,7 +53,7 @@ our @ISA = qw(ZoneMinder::Control); # of the position of your mouse on the arrow. # Extremity of arrow equal to fastest speed of movement # Close the base of arrow to lowest speed of movement -# for diagonaly you can click before the begining of the arrow for low speed +# for diagonaly you can click before the beginning of the arrow for low speed # In round center equal to stop to move and switch of latest OSD # -You can clic directly on the image that equal to click on arrow (for the left there is a bug in zoneminder speed is inverted) # -Zoom Tele switch ON InfraRed LED and stay to manual IR MODE @@ -63,7 +63,7 @@ our @ISA = qw(ZoneMinder::Control); # -8 Preset PTZ are implemented and functionnal # -This Script use for login "admin" this hardcoded and your password must setup in "Control Device" section # -This script is compatible with the basic authentification method used by mostly new camera based with hi3510 chipset -# -AutoStop function is active and you must set up value (in sec exemple 0.7) under AutoStop section +# -AutoStop function is active and you must set up value (in sec example 0.7) under AutoStop section # or you can set up to 0 for disable it (in this case you need to click to the circle center for stop) # -"White In" to control Brightness, "auto" for restore the original value of Brightness # -"White Out" to control Contrast, "man" for restore the original value of Contrast @@ -129,7 +129,7 @@ sub printMsg } sub sendCmd -{ +{ my $self = shift; my $cmd = shift; my $result = undef; @@ -211,7 +211,7 @@ sub moveConUp if ( $tiltspeed < 10 ) { $tiltspeed = 1; } - Debug( "Move Up" ); + Debug( "Move Up" ); if ( $osd eq "on" ) { my $cmd = "param.cgi?cmd=setoverlayattr&-region=1&-show=1&-name=Move Up $tiltspeed"; @@ -658,9 +658,9 @@ sub presetGoto __END__ # Below is stub documentation for your module. You'd better edit it! -=head1 FI-8608W +=head1 NAME -ZoneMinder::Database - Perl extension for FOSCAM FI-8608W by Christophe_Y2k +ZoneMinder::Control::FI-8608W - Perl extension for FOSCAM FI-8608W by Christophe_Y2k =head1 SYNOPSIS diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8620_Y2k.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8620_Y2k.pm index 7d9cd261d..3e2addf85 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8620_Y2k.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8620_Y2k.pm @@ -57,7 +57,7 @@ our @ISA = qw(ZoneMinder::Control); # of the position of your mouse on the arrow. # Extremity of arrow equal to fastest speed of movement # Close the base of arrow to lowest speed of movement -# for diagonaly you can click before the begining of the arrow for low speed +# for diagonaly you can click before the beginning of the arrow for low speed # In round center equal to stop to move # -You can clic directly on the image that equal to click on arrow (for the left there is a bug in zoneminder speed is inverted) # -Zoom Tele/Wide with time control to simulate speed because speed value do not work (buggy firmware or not implemented on this cam) @@ -67,7 +67,7 @@ our @ISA = qw(ZoneMinder::Control); # You Need to configure ZoneMinder PANSPEED & TILTSEPPED & ZOOMSPEED 1 to 63 by 1 step # -This Script use for login "admin" this hardcoded and your password must setup in "Control Device" section # -This script is compatible with the basic authentification method used by mostly new camera -# -AutoStop function is active and you must set up value (in sec exemple 0.5) under AutoStop section +# -AutoStop function is active and you must set up value (in sec example 0.5) under AutoStop section # or you can set up to 0 for disable it but the camera never stop to move and trust me, she can move all the night... # (you need to click to the center arrow for stop) # -"White In" to control Brightness, "auto" for restore the original value of Brightness @@ -734,9 +734,9 @@ sub presetGoto __END__ # Below is stub documentation for your module. You'd better edit it! -=head1 FI8620 +=head1 NAME -ZoneMinder::Database - Perl extension for FOSCAM FI8620 +ZoneMinder::Control::FI8620 - Perl extension for FOSCAM FI8620 =head1 SYNOPSIS diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8908W.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8908W.pm index ab877c609..dd30484c3 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8908W.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8908W.pm @@ -43,176 +43,176 @@ use ZoneMinder::Config qw(:all); use Time::HiRes qw( usleep ); sub new -{ - my $class = shift; - my $id = shift; - my $self = ZoneMinder::Control->new( $id ); - bless( $self, $class ); - srand( time() ); - return $self; +{ + my $class = shift; + my $id = shift; + my $self = ZoneMinder::Control->new( $id ); + bless( $self, $class ); + srand( time() ); + return $self; } our $AUTOLOAD; sub AUTOLOAD { - my $self = shift; - my $class = ref($self) || croak( "$self not object" ); - my $name = $AUTOLOAD; - $name =~ s/.*://; - if ( exists($self->{$name}) ) - { - return( $self->{$name} ); - } - Fatal( "Can't access $name member of object of class $class" ); + my $self = shift; + my $class = ref($self) || croak( "$self not object" ); + my $name = $AUTOLOAD; + $name =~ s/.*://; + if ( exists($self->{$name}) ) + { + return( $self->{$name} ); + } + Fatal( "Can't access $name member of object of class $class" ); } sub open { - my $self = shift; + my $self = shift; - $self->loadMonitor(); + $self->loadMonitor(); - use LWP::UserAgent; - $self->{ua} = LWP::UserAgent->new; - $self->{ua}->agent( "ZoneMinder Control Agent/".ZoneMinder::Base::ZM_VERSION ); + use LWP::UserAgent; + $self->{ua} = LWP::UserAgent->new; + $self->{ua}->agent( "ZoneMinder Control Agent/".ZoneMinder::Base::ZM_VERSION ); - $self->{state} = 'open'; + $self->{state} = 'open'; } sub close { - my $self = shift; - $self->{state} = 'closed'; + my $self = shift; + $self->{state} = 'closed'; } sub printMsg { - my $self = shift; - my $msg = shift; - my $msg_len = length($msg); + my $self = shift; + my $msg = shift; + my $msg_len = length($msg); - Debug( $msg."[".$msg_len."]" ); + Debug( $msg."[".$msg_len."]" ); } sub sendCmd { - my $self = shift; - my $cmd = shift; - my $result = undef; + my $self = shift; + my $cmd = shift; + my $result = undef; - my ($user, $password) = split /:/, $self->{Monitor}->{ControlDevice}; + my ($user, $password) = split /:/, $self->{Monitor}->{ControlDevice}; - if ( !defined $password ) { - # If value of "Control device" does not consist of two parts, then only password is given and we fallback to default user: - $password = $user; - $user = 'admin'; - } + if ( !defined $password ) { + # If value of "Control device" does not consist of two parts, then only password is given and we fallback to default user: + $password = $user; + $user = 'admin'; + } - $cmd .= "user=$user&pwd=$password"; + $cmd .= "user=$user&pwd=$password"; - printMsg( $cmd, "Tx" ); + printMsg( $cmd, "Tx" ); - my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/$cmd" ); - my $res = $self->{ua}->request($req); + my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/$cmd" ); + my $res = $self->{ua}->request($req); - if ( $res->is_success ) - { - $result = !undef; - } - else - { - Error( "Error check failed: '".$res->status_line()."' for URL ".$req->uri() ); - } + if ( $res->is_success ) + { + $result = !undef; + } + else + { + Error( "Error check failed: '".$res->status_line()."' for URL ".$req->uri() ); + } - return( $result ); + return( $result ); } sub reset { - my $self = shift; - Debug( "Camera Reset" ); - $self->sendCmd( 'reboot.cgi?' ); + my $self = shift; + Debug( "Camera Reset" ); + $self->sendCmd( 'reboot.cgi?' ); } #Up Arrow sub moveConUp { - my $self = shift; - Debug( "Move Up" ); - $self->sendCmd( 'decoder_control.cgi?command=0&' ); + my $self = shift; + Debug( "Move Up" ); + $self->sendCmd( 'decoder_control.cgi?command=0&' ); } #Down Arrow sub moveConDown { - my $self = shift; - Debug( "Move Down" ); - $self->sendCmd( 'decoder_control.cgi?command=2&' ); + my $self = shift; + Debug( "Move Down" ); + $self->sendCmd( 'decoder_control.cgi?command=2&' ); } #Left Arrow sub moveConLeft { - my $self = shift; - Debug( "Move Left" ); - $self->sendCmd( 'decoder_control.cgi?command=6&' ); + my $self = shift; + Debug( "Move Left" ); + $self->sendCmd( 'decoder_control.cgi?command=6&' ); } #Right Arrow sub moveConRight { - my $self = shift; - Debug( "Move Right" ); - $self->sendCmd( 'decoder_control.cgi?command=4&' ); + my $self = shift; + Debug( "Move Right" ); + $self->sendCmd( 'decoder_control.cgi?command=4&' ); } #Diagonally Up Right Arrow sub moveConUpRight { - my $self = shift; - Debug( "Move Diagonally Up Right" ); - $self->sendCmd( 'decoder_control.cgi?command=90&' ); + my $self = shift; + Debug( "Move Diagonally Up Right" ); + $self->sendCmd( 'decoder_control.cgi?command=90&' ); } #Diagonally Down Right Arrow sub moveConDownRight { - my $self = shift; - Debug( "Move Diagonally Down Right" ); - $self->sendCmd( 'decoder_control.cgi?command=92&' ); + my $self = shift; + Debug( "Move Diagonally Down Right" ); + $self->sendCmd( 'decoder_control.cgi?command=92&' ); } #Diagonally Up Left Arrow sub moveConUpLeft { - my $self = shift; - Debug( "Move Diagonally Up Left" ); - $self->sendCmd( 'decoder_control.cgi?command=91&' ); + my $self = shift; + Debug( "Move Diagonally Up Left" ); + $self->sendCmd( 'decoder_control.cgi?command=91&' ); } #Diagonally Down Left Arrow sub moveConDownLeft { - my $self = shift; - Debug( "Move Diagonally Down Left" ); - $self->sendCmd( 'decoder_control.cgi?command=93&' ); + my $self = shift; + Debug( "Move Diagonally Down Left" ); + $self->sendCmd( 'decoder_control.cgi?command=93&' ); } #Stop sub moveStop { - my $self = shift; - Debug( "Move Stop" ); - $self->sendCmd( 'decoder_control.cgi?command=1&' ); + my $self = shift; + Debug( "Move Stop" ); + $self->sendCmd( 'decoder_control.cgi?command=1&' ); } #Move Camera to Home Position sub presetHome { - my $self = shift; - Debug( "Home Preset" ); - $self->sendCmd( 'decoder_control.cgi?command=25&' ); + my $self = shift; + Debug( "Home Preset" ); + $self->sendCmd( 'decoder_control.cgi?command=25&' ); } 1; @@ -220,12 +220,17 @@ sub presetHome __END__ =pod +=head1 NAME + +ZoneMinder::Control::FI8908W - Foscam FI8908W camera control + =head1 DESCRIPTION -This module contains the implementation of the Foscam FI8908W / FI8918W IP camera control -protocol. +This module contains the implementation of the Foscam FI8908W / FI8918W IP +camera control protocol. + +The module uses "Control Device" value to retrieve user and password. User +and password should be separated by colon, e.g. user:password. If colon is +not provided, then "admin" is used as a fallback value for the user. -The module uses "Control Device" value to retrieve user and password. User and password should -be separated by colon, e.g. user:password. If colon is not provided, then "admin" is used -as a fallback value for the user. =cut diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8918W.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8918W.pm new file mode 100644 index 000000000..835f2943b --- /dev/null +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/FI8918W.pm @@ -0,0 +1,355 @@ +# Modified on Jun 19 2016 by PP +# Changes made +# - modified command to work properly and pick up credentials from Control Device +# - the old script did not stop moving- added autostop +# (note that mjpeg cameras have onestep but that is too granular) +# - You need to set "user=xxx&pwd=yyy" in the ControlDevice field (NOT usr like in Foscam HD) + +# ========================================================================== +# +# ZoneMinder Foscam FI8918W IP Control Protocol Module, $Date: 2009-11-25 09:20:00 +0000 (Wed, 04 Nov 2009) $, $Revision: 0001 $ +# Copyright (C) 2001-2008 Philip Coombes +# Modified for use with Foscam FI8918W IP Camera by Dave Harris +# Modified Feb 2011 by Howard Durdle (http://durdl.es/x) to: +# fix horizontal panning, add presets and IR on/off +# use Control Device field to pass username and password +# Modified May 2014 by Arun Horne (http://arunhorne.co.uk) to: +# use HTTP basic auth as required by firmware 11.37.x.x upward +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ========================================================================== +# +# This module contains the implementation of the Foscam FI8918W IP camera control +# protocol +# + +package MyAgent; + +use base 'LWP::UserAgent'; + + +package ZoneMinder::Control::FI8918W; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Control; + +our @ISA = qw(ZoneMinder::Control); + +our $VERSION = $ZoneMinder::Base::VERSION; + +# ========================================================================== +# +# Foscam FI8918W IP Control Protocol +# +# ========================================================================== + +use ZoneMinder::Logger qw(:all); +use ZoneMinder::Config qw(:all); + + use Time::HiRes qw( usleep ); + +sub new +{ + my $class = shift; + my $id = shift; + my $self = ZoneMinder::Control->new( $id ); + my $logindetails = ""; + bless( $self, $class ); + srand( time() ); + return $self; +} + +our $AUTOLOAD; + +sub AUTOLOAD +{ + my $self = shift; + my $class = ref($self) || croak( "$self not object" ); + my $name = $AUTOLOAD; + $name =~ s/.*://; + if ( exists($self->{$name}) ) + { + return( $self->{$name} ); + } + Fatal( "Can't access $name member of object of class $class" ); +} +our $stop_command; + +sub open +{ + my $self = shift; + + $self->loadMonitor(); + + $self->{ua} = MyAgent->new; + $self->{ua}->agent( "ZoneMinder Control Agent/" ); + + $self->{state} = 'open'; +} + +sub close +{ + my $self = shift; + $self->{state} = 'closed'; +} + +sub printMsg +{ + my $self = shift; + my $msg = shift; + my $msg_len = length($msg); + + Debug( $msg."[".$msg_len."]" ); +} + +sub sendCmd +{ + my $self = shift; + my $cmd = shift; + my $result = undef; + printMsg( $cmd, "Tx" ); + + # PP Old cameras also support onstep=1 but it is too granular. Instead using moveCon and stop after interval + # PP - cleaned up URL to take it properly from Control device + # Control device needs to be of format user=xxx&pwd=yyy + my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/$cmd"."&".$self->{Monitor}->{ControlDevice}); + print ("Sending $req\n"); + my $res = $self->{ua}->request($req); + + if ( $res->is_success ) + { + $result = !undef; + } + else + { + Error( "Error REALLY check failed:'".$res->status_line()."'" ); + Error ("Cmd:".$req); + } + + return( $result ); +} + +sub reset +{ + my $self = shift; + Debug( "Camera Reset" ); + my $cmd = "reboot.cgi?"; + $self->sendCmd( $cmd ); +} + +# PP - in all move operations, added auto stop after timeout + +#Up Arrow +sub moveConUp +{ + my $self = shift; + Debug( "Move Up" ); + my $cmd = "decoder_control.cgi?command=0"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +#Down Arrow +sub moveConDown +{ + my $self = shift; + Debug( "Move Down" ); + my $cmd = "decoder_control.cgi?command=2"; + $self->sendCmd( $cmd ); +} + +#Left Arrow +sub moveConLeft +{ + my $self = shift; + Debug( "Move Left" ); + my $cmd = "decoder_control.cgi?command=6"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +#Right Arrow +sub moveConRight +{ + my $self = shift; + Debug( "Move Right" ); + my $cmd = "decoder_control.cgi?command=4"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +#Diagonally Up Right Arrow +sub moveConUpRight +{ + my $self = shift; + Debug( "Move Diagonally Up Right" ); + my $cmd = "decoder_control.cgi?command=90"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); + +} + +#Diagonally Down Right Arrow +sub moveConDownRight +{ + my $self = shift; + Debug( "Move Diagonally Down Right" ); + my $cmd = "decoder_control.cgi?command=92"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +#Diagonally Up Left Arrow +sub moveConUpLeft +{ + my $self = shift; + Debug( "Move Diagonally Up Left" ); + my $cmd = "decoder_control.cgi?command=91"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +#Diagonally Down Left Arrow +sub moveConDownLeft +{ + my $self = shift; + Debug( "Move Diagonally Down Left" ); + my $cmd = "decoder_control.cgi?command=93"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +#Stop +sub moveStop +{ + my $self = shift; + Debug( "Move Stop" ); + my $cmd = "decoder_control.cgi?command=1"; + $self->sendCmd( $cmd ); +} + +# PP - imported from 9831 - autostop after usleep +sub autoStop +{ + my $self = shift; + my $autostop = shift; + if( $autostop ) + { + Debug( "Auto Stop" ); + usleep( $autostop ); + my $cmd = "decoder_control.cgi?command=1"; + $self->sendCmd( $cmd ); + } +} + +#Move Camera to Home Position +sub presetHome +{ + my $self = shift; + Debug( "Home Preset" ); + my $cmd = "decoder_control.cgi?command=25"; + $self->sendCmd( $cmd ); +} + +#Set preset +sub presetSet +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset' ); + my $presetCmd = 30 + ($preset*2); + Debug( "Set Preset $preset with cmd $presetCmd" ); + my $cmd = "decoder_control.cgi?command=$presetCmd"; + $self->sendCmd( $cmd ); +} + +#Goto preset +sub presetGoto +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset' ); + my $presetCmd = 31 + ($preset*2); + Debug( "Goto Preset $preset with cmd $presetCmd" ); + my $cmd = "decoder_control.cgi?command=$presetCmd"; + $self->sendCmd( $cmd ); +} + +#Turn IR on +sub wake +{ + my $self = shift; + Debug( "Wake - IR on" ); + my $cmd = "decoder_control.cgi?command=95"; + $self->sendCmd( $cmd ); +} + +#Turn IR off +sub sleep +{ + my $self = shift; + Debug( "Sleep - IR off" ); + my $cmd = "decoder_control.cgi?command=94"; + $self->sendCmd( $cmd ); +} + +1; +__END__ + +=head1 FI8918W + +ZoneMinder::Database - Perl extension for FOSCAM FI8918W + +=head1 SYNOPSIS + +Control script for Foscam MJPEG 8918W cameras. + +=head1 DESCRIPTION + +You need to set "user=xxx&pwd=yyy" in the ControlDevice field +of the control tab for that monitor. +Auto TimeOut should be 1. Don't set it to less - processes +start crashing :) +NOTE: unlike HD foscam cameras, this one uses "user" not "usr" +in the control device + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +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 + diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/FI9821W_Y2k.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/FI9821W_Y2k.pm index 4177f5857..dd73a04e6 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/FI9821W_Y2k.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/FI9821W_Y2k.pm @@ -102,7 +102,6 @@ sub close sub printMsg { - my $self = shift; my $msg = shift; my $msg_len = length($msg); Debug( $msg."[".$msg_len."]" ); @@ -113,9 +112,28 @@ sub sendCmd my $self = shift; my $cmd = shift; my $result = undef; + + my ($user, $password) = split /:/, $self->{Monitor}->{ControlDevice}; + if ( ! $password ) { + $password = $user; + $user = 'admin'; + } + $user = 'admin' if ! $user; + $password = 'pwd' if ! $password; + + $cmd .= "&usr=$user&pwd=$password"; + printMsg( $cmd, "Tx" ); - my $temps = time(); - my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/cgi-bin/CGIProxy.fcgi?usr%3Dadmin%26pwd%3D".$self->{Monitor}->{ControlDevice}."%26cmd%3D".$cmd."%26".$temps ); + my $url; + if ( $self->{Monitor}->{ControlAddress} =~ /^http/ ) { + $url = $self->{Monitor}->{ControlAddress}; + } else { + $url = "http://".$self->{Monitor}->{ControlAddress}; + } + $url .= "/cgi-bin/CGIProxy.fcgi?cmd=$cmd%26".time; + printMsg( $url, "Tx" ); + + my $req = HTTP::Request->new( GET=>$url ); my $res = $self->{ua}->request($req); if ( $res->is_success ) { @@ -134,7 +152,7 @@ sub reset # Setup OSD my $cmd = "setOSDSetting%26isEnableTimeStamp%3D0%26isEnableDevName%3D1%26dispPos%3D0%26isEnabledOSDMask%3D0"; $self->sendCmd( $cmd ); - # Setup For Stream=0 Resolution=720p Bandwith=4M FPS=30 KeyFrameInterval/GOP=100 VBR=ON + # Setup For Stream=0 Resolution=720p Bandwidth=4M FPS=30 KeyFrameInterval/GOP=100 VBR=ON $cmd = "setVideoStreamParam%26streamType%3D0%26resolution%3D0%26bitRate%3D4194304%26frameRate%3D30%26GOP%3D100%26isVBR%3D1"; $self->sendCmd( $cmd ); # Setup For Infrared AUTO @@ -696,9 +714,9 @@ sub presetGoto __END__ # Below is stub documentation for your module. You'd better edit it! -=head1 FI9821W +=head1 NAME -ZoneMinder::Database - Perl extension for FOSCAM FI9821W +ZoneMinder::Control::FI9821W - Perl extension for FOSCAM FI9821W =head1 SYNOPSIS diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/FI9831W.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/FI9831W.pm new file mode 100644 index 000000000..4a7bab230 --- /dev/null +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/FI9831W.pm @@ -0,0 +1,763 @@ +# Modified by PP to clean up user/auth dependencies inside the script +# Also, you can specify your auth credentials in the Control tab of the monitor +# In "ControlDevice" put in +# usr=xxxx&pwd=xxx +# where xxx is the auth credentials to your foscam camera +# The Foscam CGI manual referred to was v1.0.10 +# All other notices below may be stale +# +# ========================================================================== +# +# ZoneMinder FOSCAM version 1.0 API Control Protocol Module, $Date$, $Revision$ +# Copyright (C) 2001-2008 Philip Coombes +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ========================================================================================= +# +# This module FI8620_Y2k.pm contains the implementation of API camera control +# For FOSCAM FI8620 Dome PTZ Camera (This cam support only H264 streaming) +# V1.0 Le 09 AOUT 2013 - production usable for the script but not for the camera "reboot itself" +# If you wan't to contact me i understand French and English, precise ZoneMinder in subject +# My name is Christophe DAPREMONT my email is christophe_y2k@yahoo.fr +# +# ========================================================================================= +# +package ZoneMinder::Control::FI9831W; + +use 5.006; +use strict; +use warnings; + +require ZoneMinder::Base; +require ZoneMinder::Control; + +our @ISA = qw(ZoneMinder::Control); +# =================================================================================================================================== +# +# FI9821 FOSCAM PT H264 Control Protocol +# with Firmware version V1.2.1.1 (latest at 09/08/2013) +# based with the latest buggy CGI doc from FOSCAM ( http://foscam.us/forum/cgi-sdk-for-hd-camera-t6045.html ) +# This IPCAM work under ZoneMinder V1.25 from alternative source of code +# from this svn at https://svn.unixmedia.net/public/zum/trunk/zum/ +# Many Thanks to "MASTERTHEKNIFE" for the excellent speed optimisation ( http://www.zoneminder.com/forums/viewtopic.php?f=9&t=17652 ) +# And to "NEXTIME" for the recent source update and incredible plugins ( http://www.zoneminder.com/forums/viewtopic.php?f=9&t=20587 ) +# And all people helping ZoneMinder dev. +# +# -FUNCTION: display on OSD +# speed is progressive in function of where you click on arrow ========> +# speed low=/ \=speed high +# =================================================================================================================================== +use ZoneMinder::Logger qw(:all); +use ZoneMinder::Config qw(:all); +use Time::HiRes qw( usleep ); + +# Set $osd to "off" if you wan't disabled OSD i need to place this variable in another script because +# this script is reload at every command ,if i want the button on/off (Focus MAN) for OSD works... +# PP - changed this to off - it achieves OSD by renaming the Device and what happens is at times +# it does not reset the name if a command fails. Net result: Your camera gets a name like "Move Left" which +# I bet you won't like +my $osd = "off"; +my $cmd; + +sub new +{ + my $class = shift; + my $id = shift; + my $self = ZoneMinder::Control->new( $id ); + bless( $self, $class ); + srand( time() ); + return $self; +} + +our $AUTOLOAD; + +sub AUTOLOAD +{ + my $self = shift; + my $class = ref($self) || croak( "$self not object" ); + my $name = $AUTOLOAD; + $name =~ s/.*://; + if ( exists($self->{$name}) ) + { + return( $self->{$name} ); + } + Fatal( "Can't access $name member of object of class $class" ); +} + +sub open +{ + my $self = shift; + $self->loadMonitor(); + use LWP::UserAgent; + $self->{ua} = LWP::UserAgent->new; + #PP + #$self->{ua}->agent( "ZoneMinder Control Agent/".ZoneMinder::Base::ZM_VERSION ); + $self->{ua}->agent( "ZoneMinder Control Agent/" ); + $self->{state} = 'open'; +} + +sub close +{ + my $self = shift; + $self->{state} = 'closed'; +} + +sub printMsg +{ + my $self = shift; + my $msg = shift; + my $msg_len = length($msg); + Debug( $msg."[".$msg_len."]" ); +} + +sub sendCmd +{ + my $self = shift; + my $cmd = shift; + my $result = undef; + printMsg( $cmd, "Tx" ); + my $temps = time(); + #PP - cleaned this up so it picks up the full auth from Control Devices + my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/cgi-bin/CGIProxy.fcgi?cmd=".$cmd."&".$self->{Monitor}->{ControlDevice} ); + #my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/cgi-bin/CGIProxy.fcgi?usr%3Dadmin%26pwd%3D".$self->{Monitor}->{ControlDevice}."%26cmd%3D".$cmd."%26".$temps ); + my $res = $self->{ua}->request($req); + if ( $res->is_success ) + { + $result = !undef; + } + else + { + Error( "Error check failed: '".$res->status_line()."'" ); + } + return( $result ); +} + +# PP - changed this to a system reboot. Its harmful to reset here. Settings may change +# with different firmware versions. Better to make this a reboot and use the camera +# interface to reset streams +sub reset +{ my $self = shift; + Debug ( "Reboot= setup camera FoscamHD" ); + $cmd = "rebootSystem"; + #my $cmd = "setOSDSetting%26isEnableTimeStamp%3D0%26isEnableDevName%3D1%26dispPos%3D0%26isEnabledOSDMask%3D0"; + Info ("Sending reboot $cmd"); + $self->sendCmd( $cmd ); + # Setup For Stream=0 Resolution=720p Bandwith=4M FPS=30 KeyFrameInterval/GOP=100 VBR=ON + #$cmd = "setVideoStreamParam%26streamType%3D0%26resolution%3D0%26bitRate%3D4194304%26frameRate%3D30%26GOP%3D100%26isVBR%3D1"; + #$self->sendCmd( $cmd ); + # Setup For Infrared AUTO + #$cmd = "setInfraLedConfig%26Mode%3D1"; + #$self->sendCmd( $cmd ); + # Reset image settings + #$cmd = "resetImageSetting"; + #$self->sendCmd( $cmd ); +} + +sub moveStop +{ + my $self = shift; + Debug( "Move Stop" ); + my $cmd = "ptzStopRun"; + $self->sendCmd( $cmd ); + if ($osd eq "on") + { + $cmd = "setDevName%26devName%3D."; + $self->sendCmd( $cmd ); + $cmd = "setOSDSetting%26isEnableDevName%3D1"; + $self->sendCmd( $cmd ); + } +} + +sub autoStop +{ + my $self = shift; + my $autostop = shift; + if( $autostop ) + { + Debug( "Auto Stop" ); + usleep( $autostop ); + my $cmd = "ptzStopRun"; + $self->sendCmd( $cmd ); + } +} + +sub moveConUp +{ + my $self = shift; + my $params = shift; + my $tiltspeed = $self->getParam( $params, 'tiltspeed' ); + # speed inverter 4-->0 , 3-->1 , 2-->2 , 1-->3 , 0-->4 + $tiltspeed = abs($tiltspeed - 4); + # Normalisation en cas de valeur erronée dans la base de données + if ( $tiltspeed > 4 ) { + $tiltspeed = 4; + } + if ( $tiltspeed < 0 ) { + $tiltspeed = 0; + } + Debug( "Move Up" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DMove Up $tiltspeed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setPTZSpeed%26speed%3D$tiltspeed"; + $self->sendCmd( $cmd ); + $cmd = "ptzMoveUp"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub moveConDown +{ + my $self = shift; + my $params = shift; + my $tiltspeed = $self->getParam( $params, 'tiltspeed' ); + # speed inverter 4-->0 , 3-->1 , 2-->2 , 1-->3 , 0-->4 + $tiltspeed = abs($tiltspeed - 4); + # Normalization + if ( $tiltspeed > 4 ) { + $tiltspeed = 4; + } + if ( $tiltspeed < 0 ) { + $tiltspeed = 0; + } + Debug( "Move Down" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DMove Down $tiltspeed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setPTZSpeed%26speed%3D$tiltspeed"; + $self->sendCmd( $cmd ); + $cmd = "ptzMoveDown"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub moveConLeft +{ + my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed' ); + # Normalisation en cas de valeur erronée dans la base de données + if ( $panspeed > 4 ) { + $panspeed = 4; + } + if ( $panspeed < 0 ) { + $panspeed = 0; + } + Debug( "Move Left" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DMove Left $panspeed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setPTZSpeed%26speed%3D$panspeed"; + $self->sendCmd( $cmd ); + $cmd = "ptzMoveLeft"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + + +sub moveConRight +{ + my $self = shift; + my $params = shift; + my $panspeed = $self->getParam( $params, 'panspeed' ); + # speed inverter 4-->0 , 3-->1 , 2-->2 , 1-->3 , 0-->4 + $panspeed = abs($panspeed - 4); + # Normalisation en cas de valeur erronée dans la base de données + if ( $panspeed > 4 ) { + $panspeed = 4; + } + if ( $panspeed < 0 ) { + $panspeed = 0; + } + Debug( "Move Right" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DMove Right $panspeed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setPTZSpeed%26speed%3D$panspeed"; + $self->sendCmd( $cmd ); + $cmd = "ptzMoveRight"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub moveConUpLeft +{ + my $self = shift; + my $params = shift; + my $tiltspeed = $self->getParam( $params, 'tiltspeed' ); + # speed inverter 4-->0 , 3-->1 , 2-->2 , 1-->3 , 0-->4 + $tiltspeed = abs($tiltspeed - 4); + # Normalisation en cas de valeur erronée dans la base de données + if ( $tiltspeed > 4 ) { + $tiltspeed = 4; + } + if ( $tiltspeed < 0 ) { + $tiltspeed = 0; + } + Debug( "Move Con Up Left" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DMove Up Left $tiltspeed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setPTZSpeed%26speed%3D$tiltspeed"; + $self->sendCmd( $cmd ); + $cmd = "ptzMoveTopLeft"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub moveConUpRight +{ + my $self = shift; + my $params = shift; + my $tiltspeed = $self->getParam( $params, 'tiltspeed' ); + # speed inverter 4-->0 , 3-->1 , 2-->2 , 1-->3 , 0-->4 + $tiltspeed = abs($tiltspeed - 4); + # Normalisation en cas de valeur erronée dans la base de données + if ( $tiltspeed > 4 ) { + $tiltspeed = 4; + } + if ( $tiltspeed < 0 ) { + $tiltspeed = 0; + } + Debug( "Move Con Up Right" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DMove Up Right $tiltspeed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setPTZSpeed%26speed%3D$tiltspeed"; + $self->sendCmd( $cmd ); + $cmd = "ptzMoveTopRight"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub moveConDownLeft +{ + my $self = shift; + my $params = shift; + my $tiltspeed = $self->getParam( $params, 'tiltspeed' ); + # speed inverter 4-->0 , 3-->1 , 2-->2 , 1-->3 , 0-->4 + $tiltspeed = abs($tiltspeed - 4); + # Normalisation en cas de valeur erronée dans la base de données + if ( $tiltspeed > 4 ) { + $tiltspeed = 4; + } + if ( $tiltspeed < 0 ) { + $tiltspeed = 0; + } + Debug( "Move Con Down Left" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DMove Down Left $tiltspeed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setPTZSpeed%26speed%3D$tiltspeed"; + $self->sendCmd( $cmd ); + $cmd = "ptzMoveBottomLeft"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub moveConDownRight +{ + my $self = shift; + my $params = shift; + my $tiltspeed = $self->getParam( $params, 'tiltspeed' ); + # speed inverter 4-->0 , 3-->1 , 2-->2 , 1-->3 , 0-->4 + $tiltspeed = abs($tiltspeed - 4); + # Normalisation en cas de valeur erronée dans la base de données + if ( $tiltspeed > 4 ) { + $tiltspeed = 4; + } + if ( $tiltspeed < 0 ) { + $tiltspeed = 0; + } + Debug( "Move Con Down Right" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DMove Down Right $tiltspeed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setPTZSpeed%26speed%3D$tiltspeed"; + $self->sendCmd( $cmd ); + $cmd = "ptzMoveBottomRight"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub zoomConTele +{ + my $self = shift; + Debug( "Zoom-Tele=MANU IR LED ON" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DManual IR LED Switch ON"; + $self->sendCmd( $cmd ); + } + my $cmd = "setInfraLedConfig%26mode%3D1"; + $self->sendCmd( $cmd ); + $cmd = "openInfraLed"; + $self->sendCmd( $cmd ); +} + +sub zoomConWide +{ + my $self = shift; + Debug( "Zoom-Wide=MANU IR LED OFF" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DManual IR LED Switch OFF"; + $self->sendCmd( $cmd ); + } + my $cmd = "setInfraLedConfig%26mode%3D1"; + $self->sendCmd( $cmd ); + $cmd = "closeInfraLed"; + $self->sendCmd( $cmd ); +} + +sub wake +{ + my $self = shift; + Debug( "Wake=AUTO IR LED" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DAuto IR LED Mode"; + $self->sendCmd( $cmd ); + } + my $cmd = "setInfraLedConfig%26mode%3D0"; + $self->sendCmd( $cmd ); +} + +sub focusConNear +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'speed' ); + # Normalisation en cas de valeur erronée dans la base de données + if ( $speed > 100 ) { + $speed = 100; + } + if ( $speed < 0 ) { + $speed = 0; + } + Debug( "Focus Near=Sharpness" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DSharpness $speed"; + $self->sendCmd( $cmd ); + $cmd = "setOSDSetting%26isEnableDevName%3D1"; + $self->sendCmd( $cmd ); + } + my $cmd = "setSharpness%26sharpness%3D$speed"; + $self->sendCmd( $cmd ); + # La variable speed ne fonctionne pas en paramètre du focus, alors je l'utilise pour définir la durée de la commande + # le résulat est identique + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub focusConFar +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'speed' ); + # Normalisation en cas de valeur erronée dans la base de données + if ( $speed > 100 ) { + $speed = 100; + } + if ( $speed < 0 ) { + $speed = 0; + } + Debug( "Focus Far" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DSharpness $speed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setSharpness%26sharpness%3D$speed"; + $self->sendCmd( $cmd ); + # La variable speed ne fonctionne pas en paramètre du focus alors je l'utilise pour définir la durée de la commande + # le résulat est identique + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub focusAuto +{ + my $self = shift; + Debug( "Focus Auto=Reset Sharpness" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DReset Sharpness"; + $self->sendCmd( $cmd ); + } + my $cmd = "setSharpness%26sharpness%3D10"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub focusMan +{ + my $self = shift; + Debug( "Focus Manu=Reset Sharpness" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DFOSCAM FI9821W Script V1.0 By Christophe_y2k"; + $self->sendCmd( $cmd ); + } +} + +sub whiteConIn +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'speed' ); + # Normalisation en cas de valeur erronée dans la base de données + if ( $speed > 100 ) { + $speed = 100; + } + if ( $speed < 0 ) { + $speed = 0; + } + Debug( "White ConIn=brightness" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DBrightness $speed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setBrightness%26brightness%3D$speed"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub whiteConOut +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'speed' ); + # Normalisation en cas de valeur erronée dans la base de données + if ( $speed > 100 ) { + $speed = 100; + } + if ( $speed < 0 ) { + $speed = 0; + } + Debug( "White ConOut=Contrast" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DContrast $speed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setContrast%26constrast%3D$speed"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub whiteAuto +{ + my $self = shift; + Debug( "White Auto=Brightness Reset" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DBrightness Reset"; + $self->sendCmd( $cmd ); + } + my $cmd = "setBrightness%26brightness%3D50"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub whiteMan +{ + my $self = shift; + Debug( "White Manuel=Contrast Reset" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DContrast Reset"; + $self->sendCmd( $cmd ); + } + my $cmd = "setContrast%26constrast%3D44"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub irisConOpen +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'speed' ); + # Normalisation en cas de valeur erronée dans la base de données + if ( $speed > 100 ) { + $speed = 100; + } + if ( $speed < 0 ) { + $speed = 0; + } + Debug( "Iris ConOpen=Saturation" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DSaturation $speed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setSaturation%26saturation%3D$speed"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub irisConClose +{ + my $self = shift; + my $params = shift; + my $speed = $self->getParam( $params, 'speed' ); + # Normalisation en cas de valeur erronée dans la base de données + if ( $speed > 100 ) { + $speed = 100; + } + if ( $speed < 0 ) { + $speed = 0; + } + Debug( "Iris ConClose=Hue" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DHue $speed"; + $self->sendCmd( $cmd ); + } + my $cmd = "setHue%26hue%3D$speed"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub irisAuto +{ + my $self = shift; + Debug( "Iris Auto=Saturation Reset" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DSaturation Reset"; + $self->sendCmd( $cmd ); + } + my $cmd = "setSaturation%26saturation%3D30"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub irisMan +{ + my $self = shift; + Debug( "Iris Manuel=Hue Reset" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DHue Reset"; + $self->sendCmd( $cmd ); + } + my $cmd = "setHue%26hue%3D6"; + $self->sendCmd( $cmd ); + $self->autoStop( $self->{Monitor}->{AutoStopTimeout} ); +} + +sub presetSet +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset' ); + if ( ( $preset >= 1 ) && ( $preset <= 16 ) ) { + Debug( "Clear Preset $preset" ); + my $cmd = "ptzDeletePresetPoint%26name%3D$preset"; + $self->sendCmd( $cmd ); + Debug( "Set Preset $preset" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DSet Preset $preset"; + $self->sendCmd( $cmd ); + } + $cmd = "ptzAddPresetPoint%26name%3D$preset"; + $self->sendCmd( $cmd ); + } +} + +sub presetGoto +{ + my $self = shift; + my $params = shift; + my $preset = $self->getParam( $params, 'preset' ); + if ( ( $preset >= 1 ) && ( $preset <= 16 ) ) { + Debug( "Goto Preset $preset" ); + if ( $osd eq "on" ) + { + my $cmd = "setDevName%26devName%3DGoto Preset $preset"; + $self->sendCmd( $cmd ); + } + my $cmd = "setPTZSpeed%26speed%3D0"; + $self->sendCmd( $cmd ); + $cmd = "ptzGotoPresetPoint%26name%3D$preset"; + $self->sendCmd( $cmd ); + } +} + +1; +__END__ +# Below is stub documentation for your module. You'd better edit it! + +=head1 FI9831W + +ZoneMinder::Database - Perl extension for FOSCAM FI9831W + +=head1 SYNOPSIS + +Control script for Foscam HD cameras. Tested on 9831W but +should work on others too. + +=head1 DESCRIPTION + +Control script for Foscam HD cameras. Tested on 9831W but +should work on others too. +You need to set "usr=xxx&pwd=yyy" in the ControlDevice field +of the control tab for that monitor. +Auto TimeOut should be 1. Don't set it to less - processes +start crashing :) + +=head2 EXPORT + +None by default. + + + +=head1 SEE ALSO + +=head1 AUTHOR + +Philip Coombes, Ephilip.coombes@zoneminder.comE + +=head1 COPYRIGHT AND LICENSE + +Copyright (C) 2001-2008 Philip Coombes + +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 + diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/M8640.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/M8640.pm index 584e04dd1..10bbea5de 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/M8640.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/M8640.pm @@ -107,14 +107,18 @@ sub sendCmd { printMsg( $cmd, "Tx" ); #print( "http://$address/$cmd\n" ); #my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/$cmd" ); - - my $url; - if ( $self->{Monitor}->{ControlAddress} =~ /^http/ ) { - $url = $self->{Monitor}->{ControlAddress}.'/cgi-bin/setGPIO.cgi?preventCache='.time; - } else { - $url = 'http://'.$self->{Monitor}->{ControlAddress}.'/cgi-bin/setGPIO.cgi?preventCache='.time; - } # en dif - Error("Url: $url $cmd"); + + my $url; + if ( $self->{Monitor}->{ControlAddress} =~ /^http/ ) { + $url = $self->{Monitor}->{ControlAddress} + .'/cgi-bin/setGPIO.cgi?preventCache='.time + ; + } else { + $url = 'http://'.$self->{Monitor}->{ControlAddress} + .'/cgi-bin/setGPIO.cgi?preventCache='.time + ; + } # en dif + Error("Url: $url $cmd"); my $uri = URI::Encode->new( { encode_reserved => 0 } ); my $encoded = $uri->encode( $cmd ); my $res = $self->{ua}->post( $url, Content=>"data=$encoded" ); @@ -203,7 +207,11 @@ sub moveMap my $xcoord = $self->getParam( $params, 'xcoord' ); my $ycoord = $self->getParam( $params, 'ycoord' ); Debug( "Move Map to $xcoord,$ycoord" ); - my $cmd = "/axis-cgi/com/ptz.cgi?center=$xcoord,$ycoord&imagewidth=".$self->{Monitor}->{Width}."&imageheight=".$self->{Monitor}->{Height}; + my $cmd = "/axis-cgi/com/ptz.cgi?center=$xcoord,$ycoord&imagewidth=" + .$self->{Monitor}->{Width} + ."&imageheight=" + .$self->{Monitor}->{Height} + ; $self->sendCmd( $cmd ); } diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/PelcoP.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/PelcoP.pm index c9d9d907d..c8fafe023 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/PelcoP.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/PelcoP.pm @@ -22,7 +22,7 @@ # This module contains the implementation of the Pelco-P camera control # protocol # -package ZoneMinder::Control::PelcoD; +package ZoneMinder::Control::PelcoP; use 5.006; use strict; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/TVIP862.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/TVIP862.pm index 7f5058dec..050e2bb75 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/TVIP862.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/TVIP862.pm @@ -60,16 +60,16 @@ our @ISA = qw(ZoneMinder::Control); # # ******** YOU MUST CHANGE THE FOLLOWING LINES TO MATCH YOUR CAMERA! ********** -# +# # I assume that "TV-IP672WI" would work for the TV-IP672WI, but can't test since I don't own one. -# +# # TV-IP672PI works for the PI version, of course. # # Finally, the username is the username you'd like to authenticate as. # our $REALM = 'TV-IP862IC'; our $USERNAME = 'admin'; -our $PASSWORD = ''; +our $PASSWORD = ''; our $ADDRESS = ''; # ========================================================================== @@ -111,26 +111,32 @@ sub open my $self = shift; $self->loadMonitor(); - my ( $protocol, $username, $password, $address ) = $self->{Monitor}->{ControlAddress} =~ /^(https?:\/\/)?([^:]+):([^\/@]+)@(.*)$/; - if ( $username ) { - $USERNAME = $username; - $PASSWORD = $password; - $ADDRESS = $address; - } else { - Error( "Failed to parse auth from address"); - $ADDRESS = $self->{Monitor}->{ControlAddress}; - } - if ( ! $ADDRESS =~ /:/ ) { - Error( "You generally need to also specify the port. I will append :80" ); - $ADDRESS .= ':80'; - } + my ( $protocol, $username, $password, $address ) + = $self->{Monitor}->{ControlAddress} =~ /^(https?:\/\/)?([^:]+):([^\/@]+)@(.*)$/; + if ( $username ) { + $USERNAME = $username; + $PASSWORD = $password; + $ADDRESS = $address; + } else { + Error( "Failed to parse auth from address"); + $ADDRESS = $self->{Monitor}->{ControlAddress}; + } + if ( ! $ADDRESS =~ /:/ ) { + Error( "You generally need to also specify the port. I will append :80" ); + $ADDRESS .= ':80'; + } use LWP::UserAgent; $self->{ua} = LWP::UserAgent->new; $self->{ua}->agent( "ZoneMinder Control Agent/".$ZoneMinder::Base::ZM_VERSION ); $self->{state} = 'open'; -# credentials: ("ip:port" (no prefix!), realm (string), username (string), password (string) - Debug ( "sendCmd credentials control address:'".$ADDRESS."' realm:'" . $REALM . "' username:'" . $USERNAME . "' password:'".$PASSWORD."'"); +# credentials: ("ip:port" (no prefix!), realm (string), username (string), password (string) + Debug ( "sendCmd credentials control address:'".$ADDRESS + ."' realm:'" . $REALM + . "' username:'" . $USERNAME + . "' password:'".$PASSWORD + ."'" + ); $self->{ua}->credentials($ADDRESS,$REALM,$USERNAME,$PASSWORD); } @@ -159,29 +165,29 @@ sub sendCmd my $result = undef; - my $url = "http://".$ADDRESS."/cgi/ptdc.cgi?command=".$cmd; + my $url = "http://".$ADDRESS."/cgi/ptdc.cgi?command=".$cmd; my $req = HTTP::Request->new( GET=>$url ); Debug ("sendCmd command: " . $url ); - + my $res = $self->{ua}->request($req); if ( $res->is_success ) { $result = !undef; } else { - if ( $res->status_line() eq '401 Unauthorized' ) { - Error( "Error check failed, trying again: USERNAME: $USERNAME realm: $REALM password: " . $PASSWORD ); - Error("Content was " . $res->content() ); - my $res = $self->{ua}->request($req); - if ( $res->is_success ) { - $result = !undef; - } else { - Error("Content was " . $res->content() ); - } - } - if ( ! $result ) { - Error( "Error check failed: '".$res->status_line()."' cmd:'".$cmd."'" ); - } + if ( $res->status_line() eq '401 Unauthorized' ) { + Error( "Error check failed, trying again: USERNAME: $USERNAME realm: $REALM password: " . $PASSWORD ); + Error("Content was " . $res->content() ); + my $res = $self->{ua}->request($req); + if ( $res->is_success ) { + $result = !undef; + } else { + Error("Content was " . $res->content() ); + } + } + if ( ! $result ) { + Error( "Error check failed: '".$res->status_line()."' cmd:'".$cmd."'" ); + } } return( $result ); @@ -203,10 +209,10 @@ sub sendCmdPost my $result = undef; if ($url eq undef) - { - Error ("url passed to sendCmdPost is undefined."); - return(-1); - } + { + Error ("url passed to sendCmdPost is undefined."); + return(-1); + } Debug ("sendCmdPost url: " . $url . " cmd: " . $cmd); @@ -215,7 +221,7 @@ sub sendCmdPost $req->content($cmd); Debug ( "sendCmdPost credentials control address:'".$ADDRESS."' realm:'" . $REALM . "' username:'" . $USERNAME . "' password:'".$PASSWORD."'"); - + my $res = $self->{ua}->request($req); if ( $res->is_success ) @@ -225,11 +231,11 @@ sub sendCmdPost else { Error( "sendCmdPost Error check failed: '".$res->status_line()."' cmd:'".$cmd."'" ); - if ( $res->status_line() eq '401 Unauthorized' ) { - Error( "sendCmdPost Error check failed: USERNAME: $USERNAME realm: $REALM password: " . $PASSWORD ); - } else { - Error( "sendCmdPost Error check failed: USERNAME: $USERNAME realm: $REALM password: " . $PASSWORD ); - } # endif + if ( $res->status_line() eq '401 Unauthorized' ) { + Error( "sendCmdPost Error check failed: USERNAME: $USERNAME realm: $REALM password: " . $PASSWORD ); + } else { + Error( "sendCmdPost Error check failed: USERNAME: $USERNAME realm: $REALM password: " . $PASSWORD ); + } # endif } return( $result ); diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/Wanscam.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/Wanscam.pm index b2ed3e2b5..f419aacfc 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/Wanscam.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/Wanscam.pm @@ -16,8 +16,8 @@ # Rename to Wanscam # Pan Left/Right switched # IR On/Off switched -# Brightness Increase/Decrease in 16 steps -# +# Brightness Increase/Decrease in 16 steps +# # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/mjpgStreamer.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/mjpgStreamer.pm index 255dac056..18a73cae8 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/mjpgStreamer.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/mjpgStreamer.pm @@ -126,32 +126,32 @@ sub sendCmd sub Up { my $self = shift; - $self->moveConUp(); + $self->moveConUp(); } sub Down { my $self = shift; - $self->moveConDown(); + $self->moveConDown(); } sub Left { my $self = shift; - $self->moveConLeft(); + $self->moveConLeft(); } sub Right { my $self = shift; - $self->moveConRight(); + $self->moveConRight(); } sub reset { my $self = shift; - $self->cameraReset(); + $self->cameraReset(); } diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Control/onvif.pm b/scripts/ZoneMinder/lib/ZoneMinder/Control/onvif.pm index 09ef59c8e..76b161582 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Control/onvif.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Control/onvif.pm @@ -36,7 +36,7 @@ our %CamParams = (); # ========================================================================== # # ONVIF Control Protocol -# +# # On ControlAddress use the format : # USERNAME:PASSWORD@ADDRESS:PORT # eg : admin:@10.1.2.1:80 @@ -50,7 +50,7 @@ use ZoneMinder::Config qw(:all); use Time::HiRes qw( usleep ); sub new -{ +{ my $class = shift; my $id = shift; @@ -90,7 +90,7 @@ sub open } sub close -{ +{ my $self = shift; $self->{state} = 'closed'; } @@ -133,7 +133,7 @@ sub getCamParams my $req = HTTP::Request->new( GET=>"http://".$self->{Monitor}->{ControlAddress}."/get_camera_params.cgi" ); my $res = $self->{ua}->request($req); - if ( $res->is_success ) + if ( $res->is_success ) { # Parse results setting values in %FCParams my $content = $res->decoded_content; @@ -141,7 +141,7 @@ sub getCamParams while ($content =~ s/var\s+([^=]+)=([^;]+);//ms) { $CamParams{$1} = $2; } - } + } else { Error( "Error check failed:'".$res->status_line()."'" ); diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Database.pm b/scripts/ZoneMinder/lib/ZoneMinder/Database.pm index 29b3c8b2a..7dfe0654b 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Database.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Database.pm @@ -19,7 +19,7 @@ # # ========================================================================== # -# This module contains the common definitions and functions used by the rest +# This module contains the common definitions and functions used by the rest # of the ZoneMinder scripts # package ZoneMinder::Database; @@ -37,17 +37,17 @@ our @ISA = qw(Exporter ZoneMinder::Base); # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. -# This allows declaration use ZoneMinder ':all'; +# This allows declaration use ZoneMinder ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. our %EXPORT_TAGS = ( 'functions' => [ qw( - zmDbConnect - zmDbDisconnect - zmDbGetMonitors - zmDbGetMonitor - zmDbGetMonitorAndControl - ) ] + zmDbConnect + zmDbDisconnect + zmDbGetMonitors + zmDbGetMonitor + zmDbGetMonitorAndControl + ) ] ); push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; @@ -70,37 +70,46 @@ use Carp; our $dbh = undef; -sub zmDbConnect( ;$ ) +sub zmDbConnect { - my $force = shift; - if ( $force ) - { - zmDbDisconnect(); - } - if ( !defined( $dbh ) ) - { + my $force = shift; + if ( $force ) + { + zmDbDisconnect(); + } + if ( !defined( $dbh ) ) + { my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); if ( defined($port) ) { - $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$host.";port=".$port, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ); + $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} + .";host=".$host + .";port=".$port + , $Config{ZM_DB_USER} + , $Config{ZM_DB_PASS} + ); } else { - $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$Config{ZM_DB_HOST}, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ); + $dbh = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} + .";host=".$Config{ZM_DB_HOST} + , $Config{ZM_DB_USER} + , $Config{ZM_DB_PASS} + ); } $dbh->trace( 0 ); - } - return( $dbh ); + } + return( $dbh ); } -sub zmDbDisconnect() +sub zmDbDisconnect { - if ( defined( $dbh ) ) - { - $dbh->disconnect(); - $dbh = undef; - } + if ( defined( $dbh ) ) + { + $dbh->disconnect(); + $dbh = undef; + } } use constant DB_MON_ALL => 0; # All monitors @@ -110,78 +119,88 @@ use constant DB_MON_MOTION => 3; # All monitors that are doing motion detection use constant DB_MON_RECORD => 4; # All monitors that are doing unconditional recording use constant DB_MON_PASSIVE => 5; # All monitors that are in nodect state -sub zmDbGetMonitors( ;$ ) +sub zmDbGetMonitors { - zmDbConnect(); + zmDbConnect(); - my $function = shift || DB_MON_ALL; - my $sql = "select * from Monitors"; + my $function = shift || DB_MON_ALL; + my $sql = "select * from Monitors"; - if ( $function ) - { - if ( $function == DB_MON_CAPT ) - { - $sql .= " where Function >= 'Monitor'"; - } - elsif ( $function == DB_MON_ACTIVE ) - { - $sql .= " where Function > 'Monitor'"; - } - elsif ( $function == DB_MON_MOTION ) - { - $sql .= " where Function = 'Modect' or Function = 'Mocord'"; - } - elsif ( $function == DB_MON_RECORD ) - { - $sql .= " where Function = 'Record' or Function = 'Mocord'"; - } - elsif ( $function == DB_MON_PASSIVE ) - { - $sql .= " where Function = 'Nodect'"; - } - } - my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute() or croak( "Can't execute '$sql': ".$sth->errstr() ); + if ( $function ) + { + if ( $function == DB_MON_CAPT ) + { + $sql .= " where Function >= 'Monitor'"; + } + elsif ( $function == DB_MON_ACTIVE ) + { + $sql .= " where Function > 'Monitor'"; + } + elsif ( $function == DB_MON_MOTION ) + { + $sql .= " where Function = 'Modect' or Function = 'Mocord'"; + } + elsif ( $function == DB_MON_RECORD ) + { + $sql .= " where Function = 'Record' or Function = 'Mocord'"; + } + elsif ( $function == DB_MON_PASSIVE ) + { + $sql .= " where Function = 'Nodect'"; + } + } + my $sth = $dbh->prepare_cached( $sql ) + or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() + or croak( "Can't execute '$sql': ".$sth->errstr() ); - my @monitors; + my @monitors; while( my $monitor = $sth->fetchrow_hashref() ) { - push( @monitors, $monitor ); - } - $sth->finish(); - return( \@monitors ); + push( @monitors, $monitor ); + } + $sth->finish(); + return( \@monitors ); } -sub zmDbGetMonitor( $ ) +sub zmDbGetMonitor { - zmDbConnect(); + zmDbConnect(); - my $id = shift; + my $id = shift; - return( undef ) if ( !defined($id) ); + return( undef ) if ( !defined($id) ); - my $sql = "select * from Monitors where Id = ?"; - my $sth = $dbh->prepare_cached( $sql ) or croak( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $id ) or croak( "Can't execute '$sql': ".$sth->errstr() ); + my $sql = "select * from Monitors where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) + or croak( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $id ) + or croak( "Can't execute '$sql': ".$sth->errstr() ); my $monitor = $sth->fetchrow_hashref(); - return( $monitor ); + return( $monitor ); } -sub zmDbGetMonitorAndControl( $ ) +sub zmDbGetMonitorAndControl { - zmDbConnect(); + zmDbConnect(); - my $id = shift; + my $id = shift; - return( undef ) if ( !defined($id) ); + return( undef ) if ( !defined($id) ); - my $sql = "select C.*,M.*,C.Protocol from Monitors as M inner join Controls as C on (M.ControlId = C.Id) where M.Id = ?"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $id ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + my $sql = "SELECT C.*,M.*,C.Protocol + FROM Monitors as M + INNER JOIN Controls as C on (M.ControlId = C.Id) + WHERE M.Id = ?" + ; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $id ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); my $monitor = $sth->fetchrow_hashref(); - return( $monitor ); + return( $monitor ); } 1; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/General.pm b/scripts/ZoneMinder/lib/ZoneMinder/General.pm index 4d60852a7..195bd265f 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/General.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/General.pm @@ -19,7 +19,7 @@ # # ========================================================================== # -# This module contains the common definitions and functions used by the rest +# This module contains the common definitions and functions used by the rest # of the ZoneMinder scripts # package ZoneMinder::General; @@ -76,7 +76,7 @@ use ZoneMinder::Database qw(:all); use POSIX; # For running general shell commands -sub executeShellCommand( $ ) +sub executeShellCommand { my $command = shift; my $output = qx( $command ); @@ -90,7 +90,7 @@ sub executeShellCommand( $ ) return( $status ); } -sub getCmdFormat() +sub getCmdFormat { Debug( "Testing valid shell syntax\n" ); @@ -162,7 +162,7 @@ our $testedShellSyntax = 0; our ( $cmdPrefix, $cmdSuffix ); # For running ZM daemons etc -sub runCommand( $ ) +sub runCommand { if ( !$testedShellSyntax ) { @@ -196,30 +196,45 @@ sub runCommand( $ ) return( $output ); } -sub getEventPath( $ ) +sub getEventPath { my $event = shift; my $event_path = ""; if ( $Config{ZM_USE_DEEP_STORAGE} ) { - $event_path = $Config{ZM_DIR_EVENTS}.'/'.$event->{MonitorId}.'/'.strftime( "%y/%m/%d/%H/%M/%S", localtime($event->{Time}) ); + $event_path = $Config{ZM_DIR_EVENTS} + .'/'.$event->{MonitorId} + .'/'.strftime( "%y/%m/%d/%H/%M/%S", + localtime($event->{Time}) + ) + ; } else { - $event_path = $Config{ZM_DIR_EVENTS}.'/'.$event->{MonitorId}.'/'.$event->{Id}; + $event_path = $Config{ZM_DIR_EVENTS} + .'/'.$event->{MonitorId} + .'/'.$event->{Id} + ; + } + + if ( index($Config{ZM_DIR_EVENTS},'/') != 0 ){ + $event_path = $Config{ZM_PATH_WEB} + .'/'.$event_path + ; } - $event_path = $Config{ZM_PATH_WEB}.'/'.$event_path if ( index($Config{ZM_DIR_EVENTS},'/') != 0 ); return( $event_path ); } -sub createEventPath( $ ) +sub createEventPath { # # WARNING assumes running from events directory # my $event = shift; - my $eventRootPath = ($Config{ZM_DIR_EVENTS}=~m|/|)?$Config{ZM_DIR_EVENTS}:($Config{ZM_PATH_WEB}.'/'.$Config{ZM_DIR_EVENTS}); + my $eventRootPath = ($Config{ZM_DIR_EVENTS}=~m|/|) + ? $Config{ZM_DIR_EVENTS} + : ($Config{ZM_PATH_WEB}.'/'.$Config{ZM_DIR_EVENTS}); my $eventPath = $eventRootPath.'/'.$event->{MonitorId}; if ( $Config{ZM_USE_DEEP_STORAGE} ) @@ -242,7 +257,8 @@ sub createEventPath( $ ) # Create event id symlink my $idFile = sprintf( "%s/.%d", $eventPath, $event->{Id} ); - symlink( $timePath, $idFile ) or Fatal( "Can't symlink $idFile -> $eventPath: $!" ); + symlink( $timePath, $idFile ) + or Fatal( "Can't symlink $idFile -> $eventPath: $!" ); makePath( $timePath, $eventPath ); $eventPath .= '/'.$timePath; @@ -250,8 +266,9 @@ sub createEventPath( $ ) # Create empty id tag file $idFile = sprintf( "%s/.%d", $eventPath, $event->{Id} ); - open( ID_FP, ">$idFile" ) or Fatal( "Can't open $idFile: $!" ); - close( ID_FP ); + open( my $ID_FP, ">", $idFile ) + or Fatal( "Can't open $idFile: $!" ); + close( $ID_FP ); setFileOwner( $idFile ); } else @@ -260,8 +277,9 @@ sub createEventPath( $ ) $eventPath .= '/'.$event->{Id}; my $idFile = sprintf( "%s/.%d", $eventPath, $event->{Id} ); - open( ID_FP, ">$idFile" ) or Fatal( "Can't open $idFile: $!" ); - close( ID_FP ); + open( my $ID_FP, ">", $idFile ) + or Fatal( "Can't open $idFile: $!" ); + close( $ID_FP ); setFileOwner( $idFile ); } return( $eventPath ); @@ -272,15 +290,20 @@ use Data::Dumper; our $_setFileOwner = undef; our ( $_ownerUid, $_ownerGid ); -sub _checkProcessOwner() +sub _checkProcessOwner { if ( !defined($_setFileOwner) ) { my ( $processOwner ) = getpwuid( $> ); if ( $processOwner ne $Config{ZM_WEB_USER} ) { - # Not running as web user, so should be root in whch case chown the temporary directory - ( my $ownerName, my $ownerPass, $_ownerUid, $_ownerGid ) = getpwnam( $Config{ZM_WEB_USER} ) or Fatal( "Can't get user details for web user '".$Config{ZM_WEB_USER}."': $!" ); + # Not running as web user, so should be root in which case chown + # the temporary directory + ( my $ownerName, my $ownerPass, $_ownerUid, $_ownerGid ) + = getpwnam( $Config{ZM_WEB_USER} ) + or Fatal( "Can't get user details for web user '" + .$Config{ZM_WEB_USER}."': $!" + ); $_setFileOwner = 1; } else @@ -291,19 +314,22 @@ sub _checkProcessOwner() return( $_setFileOwner ); } -sub setFileOwner( $ ) +sub setFileOwner { my $file = shift; if ( _checkProcessOwner() ) { - chown( $_ownerUid, $_ownerGid, $file ) or Fatal( "Can't change ownership of file '$file' to '".$Config{ZM_WEB_USER}.":".$Config{ZM_WEB_GROUP}."': $!" ); + chown( $_ownerUid, $_ownerGid, $file ) + or Fatal( "Can't change ownership of file '$file' to '" + .$Config{ZM_WEB_USER}.":".$Config{ZM_WEB_GROUP}."': $!" + ); } } our $_hasImageInfo = undef; -sub _checkForImageInfo() +sub _checkForImageInfo { if ( !defined($_hasImageInfo) ) { @@ -317,7 +343,7 @@ sub _checkForImageInfo() return( $_hasImageInfo ); } -sub createEvent( $;$ ) +sub createEvent { my $event = shift; @@ -335,9 +361,14 @@ sub createEvent( $;$ ) elsif ( $event->{MonitorId} ) { my $sql = "select * from Monitors where Id = ?"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $event->{MonitorId} ) or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); - $event->{monitor} = $sth->fetchrow_hashref() or Fatal( "Unable to create event, can't load monitor with id '".$event->{MonitorId}."'" ); + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{MonitorId} ) + or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); + $event->{monitor} = $sth->fetchrow_hashref() + or Fatal( "Unable to create event, can't load monitor with id '" + .$event->{MonitorId}."'" + ); $sth->finish(); } else @@ -358,7 +389,9 @@ sub createEvent( $;$ ) my $imageInfo = Image::Info::image_info( $frame->{imagePath} ); if ( $imageInfo->{error} ) { - Error( "Unable to extract image info from '".$frame->{imagePath}."': ".$imageInfo->{error} ); + Error( "Unable to extract image info from '" + .$frame->{imagePath}."': ".$imageInfo->{error} + ); } else { @@ -394,18 +427,25 @@ sub createEvent( $;$ ) push( @values, $event->{$field} ); } - my $sql = "insert into Events (".join(',',@fields).") values (".join(',',@formats).")"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( @values ) or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); + my $sql = "INSERT INTO Events (".join(',',@fields) + .") VALUES (".join(',',@formats).")" + ; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( @values ) + or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); $event->{Id} = $dbh->{mysql_insertid}; Info( "Created event ".$event->{Id} ); if ( $event->{EndTime} ) { - $event->{Name} = $event->{monitor}->{EventPrefix}.$event->{Id} if ( $event->{Name} eq 'New Event' ); + $event->{Name} = $event->{monitor}->{EventPrefix}.$event->{Id} + if ( $event->{Name} eq 'New Event' ); my $sql = "update Events set Name = ? where Id = ?"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $event->{Name}, $event->{Id} ) or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Name}, $event->{Id} ) + or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); } my $eventPath = createEventPath( $event ); @@ -428,26 +468,46 @@ sub createEvent( $;$ ) push( @values, $frame->{$field} ); } - my $sql = "insert into Frames (".join(',',@fields).") values (".join(',',@formats).")"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( @values ) or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); + my $sql = "insert into Frames (".join(',',@fields) + .") values (".join(',',@formats).")" + ; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( @values ) + or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); #$frame->{FrameId} = $dbh->{mysql_insertid}; if ( $frame->{imagePath} ) { - $frame->{capturePath} = sprintf( "%s/%0".$Config{ZM_EVENT_IMAGE_DIGITS}."d-capture.jpg", $eventPath, $frame->{FrameId} ); - rename( $frame->{imagePath}, $frame->{capturePath} ) or Fatal( "Can't copy ".$frame->{imagePath}." to ".$frame->{capturePath}.": $!" ); + $frame->{capturePath} = sprintf( + "%s/%0".$Config{ZM_EVENT_IMAGE_DIGITS} + ."d-capture.jpg" + , $eventPath + , $frame->{FrameId} + ); + rename( $frame->{imagePath}, $frame->{capturePath} ) + or Fatal( "Can't copy ".$frame->{imagePath} + ." to ".$frame->{capturePath}.": $!" + ); setFileOwner( $frame->{capturePath} ); if ( 0 && $Config{ZM_CREATE_ANALYSIS_IMAGES} ) { - $frame->{analysePath} = sprintf( "%s/%0".$Config{ZM_EVENT_IMAGE_DIGITS}."d-analyse.jpg", $eventPath, $frame->{FrameId} ); - link( $frame->{capturePath}, $frame->{analysePath} ) or Fatal( "Can't link ".$frame->{capturePath}." to ".$frame->{analysePath}.": $!" ); + $frame->{analysePath} = sprintf( + "%s/%0".$Config{ZM_EVENT_IMAGE_DIGITS} + ."d-analyse.jpg" + , $eventPath + , $frame->{FrameId} + ); + link( $frame->{capturePath}, $frame->{analysePath} ) + or Fatal( "Can't link ".$frame->{capturePath} + ." to ".$frame->{analysePath}.": $!" + ); setFileOwner( $frame->{analysePath} ); } } } } -sub addEventImage( $$ ) +sub addEventImage { my $event = shift; my $frame = shift; @@ -455,7 +515,7 @@ sub addEventImage( $$ ) # TBD } -sub updateEvent( $ ) +sub updateEvent { my $event = shift; @@ -467,7 +527,8 @@ sub updateEvent( $ ) my $dbh = zmDbConnect(); - $event->{Name} = $event->{monitor}->{EventPrefix}.$event->{Id} if ( $event->{Name} eq 'New Event' ); + $event->{Name} = $event->{monitor}->{EventPrefix}.$event->{Id} + if ( $event->{Name} eq 'New Event' ); my %formats = ( StartTime => 'from_unixtime(?)', @@ -484,11 +545,13 @@ sub updateEvent( $ ) my $sql = "update Events set ".join(',',@sets)." where Id = ?"; push( @values, $event->{Id} ); - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( @values ) or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare sql '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( @values ) + or Fatal( "Can't execute sql '$sql': ".$sth->errstr() ); } -sub deleteEventFiles( $;$ ) +sub deleteEventFiles { # # WARNING assumes running from events directory @@ -541,7 +604,7 @@ sub deleteEventFiles( $;$ ) } } -sub makePath( $;$ ) +sub makePath { my $path = shift; my $root = shift; @@ -585,7 +648,7 @@ sub _testJSON $hasJSONAny = 1 if ( $result ); } -sub _getJSONType( $ ) +sub _getJSONType { my $value = shift; return( 'null' ) unless( defined($value) ); @@ -596,9 +659,9 @@ sub _getJSONType( $ ) return( 'string' ); } -sub jsonEncode( $ ); +sub jsonEncode; -sub jsonEncode( $ ) +sub jsonEncode { my $value = shift; @@ -649,7 +712,7 @@ sub jsonEncode( $ ) } } -sub jsonDecode( $ ) +sub jsonDecode { my $value = shift; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm b/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm index 5b4438c72..a6a82db87 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Logger.pm @@ -19,7 +19,7 @@ # # ========================================================================== # -# This module contains the debug definitions and functions used by the rest +# This module contains the debug definitions and functions used by the rest # of the ZoneMinder scripts # package ZoneMinder::Logger; @@ -126,6 +126,7 @@ our %priorities = ( ); our $logger; +our $LOGFILE; sub new { @@ -257,7 +258,12 @@ sub initialise( @ ) { foreach my $target ( split( /\|/, $Config{ZM_LOG_DEBUG_TARGET} ) ) { - if ( $target eq $this->{id} || $target eq "_".$this->{id} || $target eq $this->{idRoot} || $target eq "_".$this->{idRoot} || $target eq "" ) + if ( $target eq $this->{id} + || $target eq "_".$this->{id} + || $target eq $this->{idRoot} + || $target eq "_".$this->{idRoot} + || $target eq "" + ) { if ( $Config{ZM_LOG_DEBUG_LEVEL} > NOLOG ) { @@ -286,11 +292,18 @@ sub initialise( @ ) $this->{autoFlush} = $ENV{'LOG_FLUSH'}?1:0 if ( defined($ENV{'LOG_FLUSH'}) ); $this->{initialised} = !undef; - - Debug( "LogOpts: level=".$codes{$this->{level}}."/".$codes{$this->{effectiveLevel}}.", screen=".$codes{$this->{termLevel}}.", database=".$codes{$this->{databaseLevel}}.", logfile=".$codes{$this->{fileLevel}}."->".$this->{logFile}.", syslog=".$codes{$this->{syslogLevel}} ); + + Debug( "LogOpts: level=".$codes{$this->{level}} + ."/".$codes{$this->{effectiveLevel}} + .", screen=".$codes{$this->{termLevel}} + .", database=".$codes{$this->{databaseLevel}} + .", logfile=".$codes{$this->{fileLevel}} + ."->".$this->{logFile} + .", syslog=".$codes{$this->{syslogLevel}} + ); } -sub terminate() +sub terminate { my $this = shift; return unless ( $this->{initialised} ); @@ -300,7 +313,7 @@ sub terminate() $this->termLevel( NOLOG ); } -sub reinitialise() +sub reinitialise { my $this = shift; @@ -322,7 +335,7 @@ sub reinitialise() $this->databaseLevel( $databaseLevel ) if ( $databaseLevel > NOLOG ); } -sub limit( $ ) +sub limit { my $this = shift; my $level = shift; @@ -331,7 +344,7 @@ sub limit( $ ) return( $level ); } -sub getTargettedEnv( $ ) +sub getTargettedEnv { my $this = shift; my $name = shift; @@ -354,7 +367,7 @@ sub getTargettedEnv( $ ) return( $value ); } -sub fetch() +sub fetch { if ( !$logger ) { @@ -364,7 +377,7 @@ sub fetch() return( $logger ); } -sub id( ;$ ) +sub id { my $this = shift; my $id = shift; @@ -388,7 +401,7 @@ sub id( ;$ ) return( $this->{id} ); } -sub level( ;$ ) +sub level { my $this = shift; my $level = shift; @@ -405,20 +418,20 @@ sub level( ;$ ) return( $this->{level} ); } -sub debugOn() +sub debugOn { my $this = shift; return( $this->{effectiveLevel} >= DEBUG ); } -sub trace( ;$ ) +sub trace { my $this = shift; $this->{trace} = $_[0] if ( @_ ); return( $this->{trace} ); } -sub termLevel( ;$ ) +sub termLevel { my $this = shift; my $termLevel = shift; @@ -434,7 +447,7 @@ sub termLevel( ;$ ) return( $this->{termLevel} ); } -sub databaseLevel( ;$ ) +sub databaseLevel { my $this = shift; my $databaseLevel = shift; @@ -451,23 +464,39 @@ sub databaseLevel( ;$ ) if ( defined($port) ) { - $this->{dbh} = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$host.";port=".$port, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ); + $this->{dbh} = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} + .";host=".$host + .";port=".$port + , $Config{ZM_DB_USER} + , $Config{ZM_DB_PASS} + ); } else { - $this->{dbh} = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME}.";host=".$Config{ZM_DB_HOST}, $Config{ZM_DB_USER}, $Config{ZM_DB_PASS} ); + $this->{dbh} = DBI->connect( "DBI:mysql:database=".$Config{ZM_DB_NAME} + .";host=".$Config{ZM_DB_HOST} + , $Config{ZM_DB_USER} + , $Config{ZM_DB_PASS} + ); } if ( !$this->{dbh} ) { $databaseLevel = NOLOG; - Error( "Unable to write log entries to DB, can't connect to database '".$Config{ZM_DB_NAME}."' on host '".$Config{ZM_DB_HOST}."'" ); + Error( "Unable to write log entries to DB, can't connect to database '" + .$Config{ZM_DB_NAME} + ."' on host '" + .$Config{ZM_DB_HOST} + ."'" + ); } else { $this->{dbh}->{AutoCommit} = 1; - Fatal( "Can't set AutoCommit on in database connection" ) unless( $this->{dbh}->{AutoCommit} ); + Fatal( "Can't set AutoCommit on in database connection" ) + unless( $this->{dbh}->{AutoCommit} ); $this->{dbh}->{mysql_auto_reconnect} = 1; - Fatal( "Can't set mysql_auto_reconnect on in database connection" ) unless( $this->{dbh}->{mysql_auto_reconnect} ); + Fatal( "Can't set mysql_auto_reconnect on in database connection" ) + unless( $this->{dbh}->{mysql_auto_reconnect} ); $this->{dbh}->trace( 0 ); } } @@ -486,7 +515,7 @@ sub databaseLevel( ;$ ) return( $this->{databaseLevel} ); } -sub fileLevel( ;$ ) +sub fileLevel { my $this = shift; my $fileLevel = shift; @@ -503,7 +532,7 @@ sub fileLevel( ;$ ) return( $this->{fileLevel} ); } -sub syslogLevel( ;$ ) +sub syslogLevel { my $this = shift; my $syslogLevel = shift; @@ -520,19 +549,19 @@ sub syslogLevel( ;$ ) return( $this->{syslogLevel} ); } -sub openSyslog() +sub openSyslog { my $this = shift; openlog( $this->{id}, "pid", "local1" ); } -sub closeSyslog() +sub closeSyslog { my $this = shift; #closelog(); } -sub logFile( $ ) +sub logFile { my $this = shift; my $logFile = shift; @@ -546,18 +575,21 @@ sub logFile( $ ) } } -sub openFile() +sub openFile { my $this = shift; - if ( open( LOGFILE, ">>".$this->{logFile} ) ) + if ( open( $LOGFILE, ">>", $this->{logFile} ) ) { - LOGFILE->autoflush() if ( $this->{autoFlush} ); + $LOGFILE->autoflush() if ( $this->{autoFlush} ); my $webUid = (getpwnam( $Config{ZM_WEB_USER} ))[2]; my $webGid = (getgrnam( $Config{ZM_WEB_GROUP} ))[2]; if ( $> == 0 ) { - chown( $webUid, $webGid, $this->{logFile} ) or Fatal( "Can't change permissions on log file '".$this->{logFile}."': $!" ) + chown( $webUid, $webGid, $this->{logFile} ) + or Fatal( "Can't change permissions on log file '" + .$this->{logFile}."': $!" + ) } } else @@ -567,13 +599,13 @@ sub openFile() } } -sub closeFile() +sub closeFile { my $this = shift; - close( LOGFILE ) if ( fileno(LOGFILE) ); + close( $LOGFILE ) if ( fileno($LOGFILE) ); } -sub logPrint( $;$ ) +sub logPrint { my $this = shift; my $level = shift; @@ -586,7 +618,17 @@ sub logPrint( $;$ ) my $code = $codes{$level}; my ($seconds, $microseconds) = gettimeofday(); - my $message = sprintf( "%s.%06d %s[%d].%s [%s]", strftime( "%x %H:%M:%S", localtime( $seconds ) ), $microseconds, $this->{id}, $$, $code, $string ); + my $message = sprintf( + "%s.%06d %s[%d].%s [%s]" + , strftime( "%x %H:%M:%S" + ,localtime( $seconds ) + ) + , $microseconds + , $this->{id} + , $$ + , $code + , $string + ); if ( $this->{trace} ) { $message = Carp::shortmess( $message ); @@ -595,8 +637,9 @@ sub logPrint( $;$ ) { $message = $message."\n"; } - syslog( $priorities{$level}, $code." [%s]", $string ) if ( $level <= $this->{syslogLevel} ); - print( LOGFILE $message ) if ( $level <= $this->{fileLevel} ); + syslog( $priorities{$level}, $code." [%s]", $string ) + if ( $level <= $this->{syslogLevel} ); + print( $LOGFILE $message ) if ( $level <= $this->{fileLevel} ); if ( $level <= $this->{databaseLevel} ) { my $sql = "insert into Logs ( TimeKey, Component, Pid, Level, Code, Message, File, Line ) values ( ?, ?, ?, ?, ?, ?, ?, NULL )"; @@ -606,7 +649,14 @@ sub logPrint( $;$ ) $this->{databaseLevel} = NOLOG; Fatal( "Can't prepare log entry '$sql': ".$this->{dbh}->errstr() ); } - my $res = $this->{sth}->execute( $seconds+($microseconds/1000000.0), $this->{id}, $$, $level, $code, $string, $this->{fileName} ); + my $res = $this->{sth}->execute( $seconds+($microseconds/1000000.0) + , $this->{id} + , $$ + , $level + , $code + , $string + , $this->{fileName} + ); if ( !$res ) { $this->{databaseLevel} = NOLOG; @@ -624,7 +674,7 @@ sub logInit( ;@ ) $logger->initialise( %options ); } -sub logReinit() +sub logReinit { fetch()->reinitialise(); } @@ -636,7 +686,7 @@ sub logTerm $logger = undef; } -sub logHupHandler() +sub logHupHandler { my $savedErrno = $!; return unless( $logger ); @@ -645,47 +695,47 @@ sub logHupHandler() $! = $savedErrno; } -sub logSetSignal() +sub logSetSignal { $SIG{HUP} = \&logHupHandler; } -sub logClearSignal() +sub logClearSignal { $SIG{HUP} = 'DEFAULT'; } -sub logLevel( ;$ ) +sub logLevel { return( fetch()->level( @_ ) ); } -sub logDebugging() +sub logDebugging { return( fetch()->debugOn() ); } -sub logTermLevel( ;$ ) +sub logTermLevel { return( fetch()->termLevel( @_ ) ); } -sub logDatabaseLevel( ;$ ) +sub logDatabaseLevel { return( fetch()->databaseLevel( @_ ) ); } -sub logFileLevel( ;$ ) +sub logFileLevel { return( fetch()->fileLevel( @_ ) ); } -sub logSyslogLevel( ;$ ) +sub logSyslogLevel { return( fetch()->syslogLevel( @_ ) ); } -sub Mark( ;$$ ) +sub Mark { my $level = shift; $level = DEBUG unless( defined($level) ); @@ -693,7 +743,7 @@ sub Mark( ;$$ ) fetch()->logPrint( $level, $tag ); } -sub Dump( \$;$ ) +sub Dump { my $var = shift; my $label = shift; @@ -756,11 +806,19 @@ ZoneMinder::Logger - ZoneMinder Logger module =head1 DESCRIPTION -The ZoneMinder:Logger module contains the common debug and error reporting routines used by the ZoneMinder scripts. +The ZoneMinder:Logger module contains the common debug and error reporting +routines used by the ZoneMinder scripts. -To use debug in your scripts you need to include this module, and call logInit. Thereafter you can sprinkle Debug or Error calls etc throughout the code safe in the knowledge that they will be reported to your error log, and possibly the syslogger, in a meaningful and consistent format. +To use debug in your scripts you need to include this module, and call +logInit. Thereafter you can sprinkle Debug or Error calls etc throughout +the code safe in the knowledge that they will be reported to your error +log, and possibly the syslogger, in a meaningful and consistent format. -Debug is discussed in terms of levels where 1 and above (currently only 1 for scripts) is considered debug, 0 is considered as informational, -1 is a warning, -2 is an error and -3 is a fatal error or panic. Where levels are mentioned below as thresholds the value given and anything with a lower level (ie. more serious) will be included. +Debug is discussed in terms of levels where 1 and above (currently only 1 +for scripts) is considered debug, 0 is considered as informational, -1 is a +warning, -2 is an error and -3 is a fatal error or panic. Where levels are +mentioned below as thresholds the value given and anything with a lower +level (ie. more serious) will be included. =head1 METHODS @@ -768,7 +826,12 @@ Debug is discussed in terms of levels where 1 and above (currently only 1 for sc =item logInit ( $id, %options ); -Initialises the debug and prepares the logging for forthcoming operations. If not called explicitly it will be called by the first debug call in your script, but with default (and probably meaningless) options. The only compulsory arguments are $id which must be a string that will identify debug coming from this script in mixed logs. Other options may be provided as below, +Initialises the debug and prepares the logging for forthcoming operations. +If not called explicitly it will be called by the first debug call in your +script, but with default (and probably meaningless) options. The only +compulsory arguments are $id which must be a string that will identify +debug coming from this script in mixed logs. Other options may be provided +as below, Option Default Description --------- --------- ----------- @@ -805,27 +868,41 @@ These methods can be used to get and set the current settings as defined in logI =item Debug( $string ); -This method will output a debug message if the current debug level permits it, otherwise does nothing. This message will be tagged with the DBG string in the logs. +This method will output a debug message if the current debug level permits +it, otherwise does nothing. This message will be tagged with the DBG string +in the logs. =item Info( $string ); -This method will output an informational message if the current debug level permits it, otherwise does nothing. This message will be tagged with the INF string in the logs. +This method will output an informational message if the current debug level +permits it, otherwise does nothing. This message will be tagged with the +INF string in the logs. =item Warning( $string ); -This method will output a warning message if the current debug level permits it, otherwise does nothing. This message will be tagged with the WAR string in the logs. +This method will output a warning message if the current debug level +permits it, otherwise does nothing. This message will be tagged with the +WAR string in the logs. =item Error( $string ); -This method will output an error message if the current debug level permits it, otherwise does nothing. This message will be tagged with the ERR string in the logs. +This method will output an error message if the current debug level permits +it, otherwise does nothing. This message will be tagged with the ERR string +in the logs. =item Fatal( $string ); -This method will output a fatal error message and then die if the current debug level permits it, otherwise does nothing. This message will be tagged with the FAT string in the logs. +This method will output a fatal error message and then die if the current +debug level permits it, otherwise does nothing. This message will be tagged +with the FAT string in the logs. =item Panic( $string ); -This method will output a panic error message and then die with a stack trace if the current debug level permits it, otherwise does nothing. This message will be tagged with the PNC string in the logs. +This method will output a panic error message and then die with a stack +trace if the current debug level permits it, otherwise does nothing. This +message will be tagged with the PNC string in the logs. + +=back =head2 EXPORT @@ -841,7 +918,8 @@ The :all tag will export all above symbols. Carp Sys::Syslog -The ZoneMinder README file Troubleshooting section for an extended discussion on the use and configuration of syslog with ZoneMinder. +The ZoneMinder README file Troubleshooting section for an extended +discussion on the use and configuration of syslog with ZoneMinder. http://www.zoneminder.com diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Memory.pm.in b/scripts/ZoneMinder/lib/ZoneMinder/Memory.pm.in index df32e7608..8e7b9228e 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Memory.pm.in +++ b/scripts/ZoneMinder/lib/ZoneMinder/Memory.pm.in @@ -19,7 +19,7 @@ # # ========================================================================== # -# This module contains the common definitions and functions used by the rest +# This module contains the common definitions and functions used by the rest # of the ZoneMinder scripts # package ZoneMinder::Memory; @@ -37,48 +37,48 @@ our @ISA = qw(Exporter ZoneMinder::Base); # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. -# This allows declaration use ZoneMinder ':all'; +# This allows declaration use ZoneMinder ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. our %EXPORT_TAGS = ( - 'constants' => [ qw( - STATE_IDLE - STATE_PREALARM - STATE_ALARM - STATE_ALERT - STATE_TAPE - ACTION_GET - ACTION_SET - ACTION_RELOAD - ACTION_SUSPEND - ACTION_RESUME - TRIGGER_CANCEL - TRIGGER_ON - TRIGGER_OFF - ) ], - 'functions' => [ qw( - zmMemVerify - zmMemInvalidate - zmMemRead - zmMemWrite - zmMemTidy - zmGetMonitorState - zmGetAlarmLocation - zmIsAlarmed - zmInAlarm - zmHasAlarmed - zmGetLastEvent - zmGetLastWriteTime - zmGetLastReadTime - zmMonitorEnable - zmMonitorDisable - zmMonitorSuspend - zmMonitorResume - zmTriggerEventOn - zmTriggerEventOff - zmTriggerEventCancel - zmTriggerShowtext - ) ], + 'constants' => [ qw( + STATE_IDLE + STATE_PREALARM + STATE_ALARM + STATE_ALERT + STATE_TAPE + ACTION_GET + ACTION_SET + ACTION_RELOAD + ACTION_SUSPEND + ACTION_RESUME + TRIGGER_CANCEL + TRIGGER_ON + TRIGGER_OFF + ) ], + 'functions' => [ qw( + zmMemVerify + zmMemInvalidate + zmMemRead + zmMemWrite + zmMemTidy + zmGetMonitorState + zmGetAlarmLocation + zmIsAlarmed + zmInAlarm + zmHasAlarmed + zmGetLastEvent + zmGetLastWriteTime + zmGetLastReadTime + zmMonitorEnable + zmMonitorDisable + zmMonitorSuspend + zmMonitorResume + zmTriggerEventOn + zmTriggerEventOff + zmTriggerEventCancel + zmTriggerShowtext + ) ], ); push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; @@ -144,42 +144,42 @@ our $mem_seq = 0; our $mem_data = { - "shared_data" => { "type"=>"SharedData", "seq"=>$mem_seq++, "contents"=> { - "size" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "last_write_index" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "last_read_index" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "state" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "last_event" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "action" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "brightness" => { "type"=>"int32", "seq"=>$mem_seq++ }, - "hue" => { "type"=>"int32", "seq"=>$mem_seq++ }, - "colour" => { "type"=>"int32", "seq"=>$mem_seq++ }, - "contrast" => { "type"=>"int32", "seq"=>$mem_seq++ }, - "alarm_x" => { "type"=>"int32", "seq"=>$mem_seq++ }, - "alarm_y" => { "type"=>"int32", "seq"=>$mem_seq++ }, - "valid" => { "type"=>"uint8", "seq"=>$mem_seq++ }, - "active" => { "type"=>"uint8", "seq"=>$mem_seq++ }, - "signal" => { "type"=>"uint8", "seq"=>$mem_seq++ }, - "format" => { "type"=>"uint8", "seq"=>$mem_seq++ }, - "imagesize" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "epadding1" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "epadding2" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "last_write_time" => { "type"=>"time_t64", "seq"=>$mem_seq++ }, - "last_read_time" => { "type"=>"time_t64", "seq"=>$mem_seq++ }, - "control_state" => { "type"=>"uint8[256]", "seq"=>$mem_seq++ }, - } - }, - "trigger_data" => { "type"=>"TriggerData", "seq"=>$mem_seq++, "contents"=> { - "size" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "trigger_state" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "trigger_score" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "padding" => { "type"=>"uint32", "seq"=>$mem_seq++ }, - "trigger_cause" => { "type"=>"int8[32]", "seq"=>$mem_seq++ }, - "trigger_text" => { "type"=>"int8[256]", "seq"=>$mem_seq++ }, - "trigger_showtext" => { "type"=>"int8[256]", "seq"=>$mem_seq++ }, - } - }, - "end" => { "seq"=>$mem_seq++, "size"=> 0 } + "shared_data" => { "type"=>"SharedData", "seq"=>$mem_seq++, "contents"=> { + "size" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "last_write_index" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "last_read_index" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "state" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "last_event" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "action" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "brightness" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "hue" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "colour" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "contrast" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "alarm_x" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "alarm_y" => { "type"=>"int32", "seq"=>$mem_seq++ }, + "valid" => { "type"=>"uint8", "seq"=>$mem_seq++ }, + "active" => { "type"=>"uint8", "seq"=>$mem_seq++ }, + "signal" => { "type"=>"uint8", "seq"=>$mem_seq++ }, + "format" => { "type"=>"uint8", "seq"=>$mem_seq++ }, + "imagesize" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "epadding1" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "epadding2" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "last_write_time" => { "type"=>"time_t64", "seq"=>$mem_seq++ }, + "last_read_time" => { "type"=>"time_t64", "seq"=>$mem_seq++ }, + "control_state" => { "type"=>"uint8[256]", "seq"=>$mem_seq++ }, + } + }, + "trigger_data" => { "type"=>"TriggerData", "seq"=>$mem_seq++, "contents"=> { + "size" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "trigger_state" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "trigger_score" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "padding" => { "type"=>"uint32", "seq"=>$mem_seq++ }, + "trigger_cause" => { "type"=>"int8[32]", "seq"=>$mem_seq++ }, + "trigger_text" => { "type"=>"int8[256]", "seq"=>$mem_seq++ }, + "trigger_showtext" => { "type"=>"int8[256]", "seq"=>$mem_seq++ }, + } + }, + "end" => { "seq"=>$mem_seq++, "size"=> 0 } }; our $mem_size = 0; @@ -187,209 +187,248 @@ our $mem_verified = {}; sub zmMemInit { - my $offset = 0; + my $offset = 0; - foreach my $section_data ( sort { $a->{seq} <=> $b->{seq} } values( %$mem_data ) ) - { - $section_data->{offset} = $offset; - $section_data->{align} = 0; + foreach my $section_data ( sort { $a->{seq} <=> $b->{seq} } values( %$mem_data ) ) + { + $section_data->{offset} = $offset; + $section_data->{align} = 0; - if ( $section_data->{align} > 1 ) - { - my $rem = $offset % $section_data->{align}; - if ( $rem > 0 ) - { - $offset += ($section_data->{align} - $rem); - } - } - foreach my $member_data ( sort { $a->{seq} <=> $b->{seq} } values( %{$section_data->{contents}} ) ) - { - if ( $member_data->{type} eq "long" || $member_data->{type} eq "ulong" || $member_data->{type} eq "size_t") - { - $member_data->{size} = $member_data->{align} = $native; - } - elsif( $member_data->{type} eq "int64" || $member_data->{type} eq "uint64" || $member_data->{type} eq "time_t64") - { - $member_data->{size} = $member_data->{align} = 8; - } - elsif ( $member_data->{type} eq "int32" || $member_data->{type} eq "uint32" || $member_data->{type} eq "bool4" ) - { - $member_data->{size} = $member_data->{align} = 4; - } - elsif ($member_data->{type} eq "int16" || $member_data->{type} eq "uint16") - { - $member_data->{size} = $member_data->{align} = 2; - } - elsif ( $member_data->{type} eq "int8" || $member_data->{type} eq "uint8" || $member_data->{type} eq "bool1" ) - { - $member_data->{size} = $member_data->{align} = 1; - } - elsif ( $member_data->{type} =~ /^u?int8\[(\d+)\]$/ ) - { - $member_data->{size} = $1; - $member_data->{align} = 1; - } - else - { - Fatal( "Unexpected type '".$member_data->{type}."' found in shared data definition." ); - } + if ( $section_data->{align} > 1 ) + { + my $rem = $offset % $section_data->{align}; + if ( $rem > 0 ) + { + $offset += ($section_data->{align} - $rem); + } + } + foreach my $member_data ( sort { $a->{seq} <=> $b->{seq} } values( %{$section_data->{contents}} ) ) + { + if ( $member_data->{type} eq "long" + || $member_data->{type} eq "ulong" + || $member_data->{type} eq "size_t" + ) + { + $member_data->{size} = $member_data->{align} = $native; + } + elsif( $member_data->{type} eq "int64" + || $member_data->{type} eq "uint64" + || $member_data->{type} eq "time_t64" + ) + { + $member_data->{size} = $member_data->{align} = 8; + } + elsif ( $member_data->{type} eq "int32" + || $member_data->{type} eq "uint32" + || $member_data->{type} eq "bool4" + ) + { + $member_data->{size} = $member_data->{align} = 4; + } + elsif ($member_data->{type} eq "int16" + || $member_data->{type} eq "uint16" + ) + { + $member_data->{size} = $member_data->{align} = 2; + } + elsif ( $member_data->{type} eq "int8" + || $member_data->{type} eq "uint8" + || $member_data->{type} eq "bool1" + ) + { + $member_data->{size} = $member_data->{align} = 1; + } + elsif ( $member_data->{type} =~ /^u?int8\[(\d+)\]$/ ) + { + $member_data->{size} = $1; + $member_data->{align} = 1; + } + else + { + Fatal( "Unexpected type '".$member_data->{type} + ."' found in shared data definition." + ); + } - if ( $member_data->{align} > 1 && ($offset%$member_data->{align}) > 0 ) - { - $offset += ($member_data->{align} - ($offset%$member_data->{align})); - } - $member_data->{offset} = $offset; - $offset += $member_data->{size} - } - $section_data->{size} = $offset - $section_data->{offset}; - } + if ( $member_data->{align} > 1 && ($offset%$member_data->{align}) > 0 ) + { + $offset += ($member_data->{align} - ($offset%$member_data->{align})); + } + $member_data->{offset} = $offset; + $offset += $member_data->{size} + } + $section_data->{size} = $offset - $section_data->{offset}; + } - $mem_size = $offset; + $mem_size = $offset; } &zmMemInit(); -sub zmMemVerify( $ ) +sub zmMemVerify { - my $monitor = shift; - if ( !zmMemAttach( $monitor, $mem_size ) ) - { - return( undef ); - } + my $monitor = shift; + if ( !zmMemAttach( $monitor, $mem_size ) ) + { + return( undef ); + } my $mem_key = zmMemKey( $monitor ); - if ( !defined($mem_verified->{$mem_key}) ) - { - my $sd_size = zmMemRead( $monitor, "shared_data:size", 1 ); - if ( $sd_size != $mem_data->{shared_data}->{size} ) - { - if ( $sd_size ) - { - Error( "Shared data size conflict in shared_data for monitor ".$monitor->{Name}.", expected ".$mem_data->{shared_data}->{size}.", got ".$sd_size ); - } - else - { - Debug( "Shared data size conflict in shared_data for monitor ".$monitor->{Name}.", expected ".$mem_data->{shared_data}->{size}.", got ".$sd_size ); - } - return( undef ); - } - my $td_size = zmMemRead( $monitor, "trigger_data:size", 1 ); - if ( $td_size != $mem_data->{trigger_data}->{size} ) - { - if ( $td_size ) - { - Error( "Shared data size conflict in trigger_data for monitor ".$monitor->{Name}.", expected ".$mem_data->{triggger_data}->{size}.", got ".$td_size ); - } - else - { - Debug( "Shared data size conflict in trigger_data for monitor ".$monitor->{Name}.", expected ".$mem_data->{triggger_data}->{size}.", got ".$td_size ); - } - return( undef ); - } - $mem_verified->{$mem_key} = !undef; - } - return( !undef ); + if ( !defined($mem_verified->{$mem_key}) ) + { + my $sd_size = zmMemRead( $monitor, "shared_data:size", 1 ); + if ( $sd_size != $mem_data->{shared_data}->{size} ) + { + if ( $sd_size ) + { + Error( "Shared data size conflict in shared_data for monitor " + .$monitor->{Name} + .", expected " + .$mem_data->{shared_data}->{size} + .", got " + .$sd_size + ); + } + else + { + Debug( "Shared data size conflict in shared_data for monitor " + .$monitor->{Name} + .", expected " + .$mem_data->{shared_data}->{size} + .", got ".$sd_size + ); + } + return( undef ); + } + my $td_size = zmMemRead( $monitor, "trigger_data:size", 1 ); + if ( $td_size != $mem_data->{trigger_data}->{size} ) + { + if ( $td_size ) + { + Error( "Shared data size conflict in trigger_data for monitor " + .$monitor->{Name} + .", expected " + .$mem_data->{triggger_data}->{size} + .", got " + .$td_size + ); + } + else + { + Debug( "Shared data size conflict in trigger_data for monitor " + .$monitor->{Name} + .", expected " + .$mem_data->{triggger_data}->{size} + .", got " + .$td_size + ); + } + return( undef ); + } + $mem_verified->{$mem_key} = !undef; + } + return( !undef ); } -sub zmMemRead( $$;$ ) +sub zmMemRead { - my $monitor = shift; - my $fields = shift; - my $nocheck = shift; + my $monitor = shift; + my $fields = shift; + my $nocheck = shift; - if ( !($nocheck || zmMemVerify( $monitor )) ) - { - return( undef ); - } + if ( !($nocheck || zmMemVerify( $monitor )) ) + { + return( undef ); + } - if ( !ref($fields) ) - { - $fields = [ $fields ]; - } - my @values; - foreach my $field ( @$fields ) - { - my ( $section, $element ) = split( /[\/:.]/, $field ); - Fatal( "Invalid shared data selector '$field'" ) if ( !$section || !$element ); + if ( !ref($fields) ) + { + $fields = [ $fields ]; + } + my @values; + foreach my $field ( @$fields ) + { + my ( $section, $element ) = split( /[\/:.]/, $field ); + Fatal( "Invalid shared data selector '$field'" ) if ( !$section || !$element ); - my $offset = $mem_data->{$section}->{contents}->{$element}->{offset}; - my $type = $mem_data->{$section}->{contents}->{$element}->{type}; - my $size = $mem_data->{$section}->{contents}->{$element}->{size}; + my $offset = $mem_data->{$section}->{contents}->{$element}->{offset}; + my $type = $mem_data->{$section}->{contents}->{$element}->{type}; + my $size = $mem_data->{$section}->{contents}->{$element}->{size}; - my $data = zmMemGet( $monitor, $offset, $size ); + my $data = zmMemGet( $monitor, $offset, $size ); if ( !defined($data) ) { Error( "Unable to read '$field' from memory for monitor ".$monitor->{Id} ); zmMemInvalidate( $monitor ); return( undef ); } - my $value; - if ( $type eq "long" ) - { - ( $value ) = unpack( "l!", $data ); - } - elsif ( $type eq "ulong" || $type eq "size_t" ) - { - ( $value ) = unpack( "L!", $data ); - } - elsif ( $type eq "int64" || $type eq "time_t64" ) - { - # The "q" type is only available on 64bit platforms, so use native. - ( $value ) = unpack( "l!", $data ); - } - elsif ( $type eq "uint64" ) - { - # The "q" type is only available on 64bit platforms, so use native. - ( $value ) = unpack( "L!", $data ); - } - elsif ( $type eq "int32" ) - { - ( $value ) = unpack( "l", $data ); - } - elsif ( $type eq "uint32" || $type eq "bool4" ) - { - ( $value ) = unpack( "L", $data ); - } - elsif ( $type eq "int16" ) - { - ( $value ) = unpack( "s", $data ); - } - elsif ( $type eq "uint16" ) - { - ( $value ) = unpack( "S", $data ); - } - elsif ( $type eq "int8" ) - { - ( $value ) = unpack( "c", $data ); - } - elsif ( $type eq "uint8" || $type eq "bool1" ) - { - ( $value ) = unpack( "C", $data ); - } - elsif ( $type =~ /^int8\[\d+\]$/ ) - { - ( $value ) = unpack( "Z".$size, $data ); - } - elsif ( $type =~ /^uint8\[\d+\]$/ ) - { - ( $value ) = unpack( "C".$size, $data ); - } - else - { - Fatal( "Unexpected type '".$type."' found for '".$field."'" ); - } - push( @values, $value ); - } - if ( wantarray() ) - { - return( @values ) - } - return( $values[0] ); + my $value; + if ( $type eq "long" ) + { + ( $value ) = unpack( "l!", $data ); + } + elsif ( $type eq "ulong" || $type eq "size_t" ) + { + ( $value ) = unpack( "L!", $data ); + } + elsif ( $type eq "int64" || $type eq "time_t64" ) + { + # The "q" type is only available on 64bit platforms, so use native. + ( $value ) = unpack( "l!", $data ); + } + elsif ( $type eq "uint64" ) + { + # The "q" type is only available on 64bit platforms, so use native. + ( $value ) = unpack( "L!", $data ); + } + elsif ( $type eq "int32" ) + { + ( $value ) = unpack( "l", $data ); + } + elsif ( $type eq "uint32" || $type eq "bool4" ) + { + ( $value ) = unpack( "L", $data ); + } + elsif ( $type eq "int16" ) + { + ( $value ) = unpack( "s", $data ); + } + elsif ( $type eq "uint16" ) + { + ( $value ) = unpack( "S", $data ); + } + elsif ( $type eq "int8" ) + { + ( $value ) = unpack( "c", $data ); + } + elsif ( $type eq "uint8" || $type eq "bool1" ) + { + ( $value ) = unpack( "C", $data ); + } + elsif ( $type =~ /^int8\[\d+\]$/ ) + { + ( $value ) = unpack( "Z".$size, $data ); + } + elsif ( $type =~ /^uint8\[\d+\]$/ ) + { + ( $value ) = unpack( "C".$size, $data ); + } + else + { + Fatal( "Unexpected type '".$type."' found for '".$field."'" ); + } + push( @values, $value ); + } + if ( wantarray() ) + { + return( @values ) + } + return( $values[0] ); } -sub zmMemInvalidate( $ ) +sub zmMemInvalidate { - my $monitor = shift; + my $monitor = shift; my $mem_key = zmMemKey($monitor); if ( $mem_key ) { @@ -398,307 +437,313 @@ sub zmMemInvalidate( $ ) } } -sub zmMemTidy() +sub zmMemTidy { zmMemClean(); } -sub zmMemWrite( $$;$ ) +sub zmMemWrite { - my $monitor = shift; - my $field_values = shift; - my $nocheck = shift; + my $monitor = shift; + my $field_values = shift; + my $nocheck = shift; - if ( !($nocheck || zmMemVerify( $monitor )) ) - { - return( undef ); - } + if ( !($nocheck || zmMemVerify( $monitor )) ) + { + return( undef ); + } - while ( my ( $field, $value ) = each( %$field_values ) ) - { - my ( $section, $element ) = split( /[\/:.]/, $field ); - Fatal( "Invalid shared data selector '$field'" ) if ( !$section || !$element ); + while ( my ( $field, $value ) = each( %$field_values ) ) + { + my ( $section, $element ) = split( /[\/:.]/, $field ); + Fatal( "Invalid shared data selector '$field'" ) + if ( !$section || !$element ); - my $offset = $mem_data->{$section}->{contents}->{$element}->{offset}; - my $type = $mem_data->{$section}->{contents}->{$element}->{type}; - my $size = $mem_data->{$section}->{contents}->{$element}->{size}; + my $offset = $mem_data->{$section}->{contents}->{$element}->{offset}; + my $type = $mem_data->{$section}->{contents}->{$element}->{type}; + my $size = $mem_data->{$section}->{contents}->{$element}->{size}; - my $data; - if ( $type eq "long" ) - { - $data = pack( "l!", $value ); - } - elsif ( $type eq "ulong" || $type eq "size_t" ) - { - $data = pack( "L!", $value ); - } - elsif ( $type eq "int64" || $type eq "time_t64" ) - { - # The "q" type is only available on 64bit platforms, so use native. - $data = pack( "l!", $value ); - } - elsif ( $type eq "uint64" ) - { - # The "q" type is only available on 64bit platforms, so use native. - $data = pack( "L!", $value ); - } - elsif ( $type eq "int32" ) - { - $data = pack( "l", $value ); - } - elsif ( $type eq "uint32" || $type eq "bool4" ) - { - $data = pack( "L", $value ); - } - elsif ( $type eq "int16" ) - { - $data = pack( "s", $value ); - } - elsif ( $type eq "uint16" ) - { - $data = pack( "S", $value ); - } - elsif ( $type eq "int8" ) - { - $data = pack( "c", $value ); - } - elsif ( $type eq "uint8" || $type eq "bool1" ) - { - $data = pack( "C", $value ); - } - elsif ( $type =~ /^int8\[\d+\]$/ ) - { - $data = pack( "Z".$size, $value ); - } - elsif ( $type =~ /^uint8\[\d+\]$/ ) - { - $data = pack( "C".$size, $value ); - } - else - { - Fatal( "Unexpected type '".$type."' found for '".$field."'" ); - } + my $data; + if ( $type eq "long" ) + { + $data = pack( "l!", $value ); + } + elsif ( $type eq "ulong" || $type eq "size_t" ) + { + $data = pack( "L!", $value ); + } + elsif ( $type eq "int64" || $type eq "time_t64" ) + { + # The "q" type is only available on 64bit platforms, so use native. + $data = pack( "l!", $value ); + } + elsif ( $type eq "uint64" ) + { + # The "q" type is only available on 64bit platforms, so use native. + $data = pack( "L!", $value ); + } + elsif ( $type eq "int32" ) + { + $data = pack( "l", $value ); + } + elsif ( $type eq "uint32" || $type eq "bool4" ) + { + $data = pack( "L", $value ); + } + elsif ( $type eq "int16" ) + { + $data = pack( "s", $value ); + } + elsif ( $type eq "uint16" ) + { + $data = pack( "S", $value ); + } + elsif ( $type eq "int8" ) + { + $data = pack( "c", $value ); + } + elsif ( $type eq "uint8" || $type eq "bool1" ) + { + $data = pack( "C", $value ); + } + elsif ( $type =~ /^int8\[\d+\]$/ ) + { + $data = pack( "Z".$size, $value ); + } + elsif ( $type =~ /^uint8\[\d+\]$/ ) + { + $data = pack( "C".$size, $value ); + } + else + { + Fatal( "Unexpected type '".$type."' found for '".$field."'" ); + } if ( !zmMemPut( $monitor, $offset, $size, $data ) ) { - Error( "Unable to write '$value' to '$field' in memory for monitor ".$monitor->{Id} ); + Error( "Unable to write '$value' to '$field' in memory for monitor " + .$monitor->{Id} + ); zmMemInvalidate( $monitor ); return( undef ); } - } - return( !undef ); + } + return( !undef ); } -sub zmGetMonitorState( $ ) +sub zmGetMonitorState { - my $monitor = shift; + my $monitor = shift; - return( zmMemRead( $monitor, "shared_data:state" ) ); + return( zmMemRead( $monitor, "shared_data:state" ) ); } -sub zmGetAlarmLocation( $ ) +sub zmGetAlarmLocation { - my $monitor = shift; + my $monitor = shift; - return( zmMemRead( $monitor, [ "shared_data:alarm_x", "shared_data:alarm_y" ] ) ); + return( zmMemRead( $monitor, [ "shared_data:alarm_x", "shared_data:alarm_y" ] ) ); } -sub zmSetControlState( $$ ) +sub zmSetControlState { - my $monitor = shift; - my $control_state = shift; + my $monitor = shift; + my $control_state = shift; - zmMemWrite( $monitor, { "shared_data:control_state" => $control_state } ); + zmMemWrite( $monitor, { "shared_data:control_state" => $control_state } ); } -sub zmGetControlState( $ ) +sub zmGetControlState { - my $monitor = shift; + my $monitor = shift; - return( zmMemRead( $monitor, "shared_data:control_state" ) ); + return( zmMemRead( $monitor, "shared_data:control_state" ) ); } -sub zmSaveControlState( $$ ) +sub zmSaveControlState { - my $monitor = shift; - my $control_state = shift; + my $monitor = shift; + my $control_state = shift; - zmSetControlState( $monitor, freeze( $control_state ) ); + zmSetControlState( $monitor, freeze( $control_state ) ); } -sub zmRestoreControlState( $ ) +sub zmRestoreControlState { - my $monitor = shift; + my $monitor = shift; - return( thaw( zmGetControlState( $monitor ) ) ); + return( thaw( zmGetControlState( $monitor ) ) ); } -sub zmIsAlarmed( $ ) +sub zmIsAlarmed { - my $monitor = shift; + my $monitor = shift; - my $state = zmGetMonitorState( $monitor ); + my $state = zmGetMonitorState( $monitor ); - return( $state == STATE_ALARM ); + return( $state == STATE_ALARM ); } -sub zmInAlarm( $ ) +sub zmInAlarm { - my $monitor = shift; + my $monitor = shift; - my $state = zmGetMonitorState( $monitor ); + my $state = zmGetMonitorState( $monitor ); - return( $state == STATE_ALARM || $state == STATE_ALERT ); + return( $state == STATE_ALARM || $state == STATE_ALERT ); } -sub zmHasAlarmed( $$ ) +sub zmHasAlarmed { - my $monitor = shift; - my $last_event_id = shift; + my $monitor = shift; + my $last_event_id = shift; - my ( $state, $last_event ) = zmMemRead( $monitor, [ "shared_data:state", "shared_data:last_event" ] ); + my ( $state, $last_event ) = zmMemRead( $monitor, [ "shared_data:state" + ,"shared_data:last_event" + ] + ); - if ( $state == STATE_ALARM || $state == STATE_ALERT ) - { - return( $last_event ); - } - elsif( $last_event != $last_event_id ) - { - return( $last_event ); - } - return( undef ); + if ( $state == STATE_ALARM || $state == STATE_ALERT ) + { + return( $last_event ); + } + elsif( $last_event != $last_event_id ) + { + return( $last_event ); + } + return( undef ); } -sub zmGetLastEvent( $ ) +sub zmGetLastEvent { - my $monitor = shift; + my $monitor = shift; - return( zmMemRead( $monitor, "shared_data:last_event" ) ); + return( zmMemRead( $monitor, "shared_data:last_event" ) ); } -sub zmGetLastWriteTime( $ ) +sub zmGetLastWriteTime { - my $monitor = shift; + my $monitor = shift; - return( zmMemRead( $monitor, "shared_data:last_write_time" ) ); + return( zmMemRead( $monitor, "shared_data:last_write_time" ) ); } -sub zmGetLastReadTime( $ ) +sub zmGetLastReadTime { - my $monitor = shift; + my $monitor = shift; - return( zmMemRead( $monitor, "shared_data:last_read_time" ) ); + return( zmMemRead( $monitor, "shared_data:last_read_time" ) ); } -sub zmGetMonitorActions( $ ) +sub zmGetMonitorActions { - my $monitor = shift; + my $monitor = shift; - return( zmMemRead( $monitor, "shared_data:action" ) ); + return( zmMemRead( $monitor, "shared_data:action" ) ); } -sub zmMonitorEnable( $ ) +sub zmMonitorEnable { - my $monitor = shift; + my $monitor = shift; - my $action = zmMemRead( $monitor, "shared_data:action" ); - $action |= ACTION_SUSPEND; - zmMemWrite( $monitor, { "shared_data:action" => $action } ); + my $action = zmMemRead( $monitor, "shared_data:action" ); + $action |= ACTION_SUSPEND; + zmMemWrite( $monitor, { "shared_data:action" => $action } ); } -sub zmMonitorDisable( $ ) +sub zmMonitorDisable { - my $monitor = shift; + my $monitor = shift; - my $action = zmMemRead( $monitor, "shared_data:action" ); - $action |= ACTION_RESUME; - zmMemWrite( $monitor, { "shared_data:action" => $action } ); + my $action = zmMemRead( $monitor, "shared_data:action" ); + $action |= ACTION_RESUME; + zmMemWrite( $monitor, { "shared_data:action" => $action } ); } -sub zmMonitorSuspend( $ ) +sub zmMonitorSuspend { - my $monitor = shift; + my $monitor = shift; - my $action = zmMemRead( $monitor, "shared_data:action" ); - $action |= ACTION_SUSPEND; - zmMemWrite( $monitor, { "shared_data:action" => $action } ); + my $action = zmMemRead( $monitor, "shared_data:action" ); + $action |= ACTION_SUSPEND; + zmMemWrite( $monitor, { "shared_data:action" => $action } ); } -sub zmMonitorResume( $ ) +sub zmMonitorResume { - my $monitor = shift; + my $monitor = shift; - my $action = zmMemRead( $monitor, "shared_data:action" ); - $action |= ACTION_RESUME; - zmMemWrite( $monitor, { "shared_data:action" => $action } ); + my $action = zmMemRead( $monitor, "shared_data:action" ); + $action |= ACTION_RESUME; + zmMemWrite( $monitor, { "shared_data:action" => $action } ); } -sub zmGetTriggerState( $ ) +sub zmGetTriggerState { - my $monitor = shift; + my $monitor = shift; - return( zmMemRead( $monitor, "trigger_data:trigger_state" ) ); + return( zmMemRead( $monitor, "trigger_data:trigger_state" ) ); } -sub zmTriggerEventOn( $$$;$$ ) +sub zmTriggerEventOn { - my $monitor = shift; - my $score = shift; - my $cause = shift; - my $text = shift; - my $showtext = shift; + my $monitor = shift; + my $score = shift; + my $cause = shift; + my $text = shift; + my $showtext = shift; - my $values = { - "trigger_data:trigger_score" => $score, - "trigger_data:trigger_cause" => $cause, - }; - $values->{"trigger_data:trigger_text"} = $text if ( defined($text) ); - $values->{"trigger_data:trigger_showtext"} = $showtext if ( defined($showtext) ); - $values->{"trigger_data:trigger_state"} = TRIGGER_ON; # Write state last so event not read incomplete + my $values = { + "trigger_data:trigger_score" => $score, + "trigger_data:trigger_cause" => $cause, + }; + $values->{"trigger_data:trigger_text"} = $text if ( defined($text) ); + $values->{"trigger_data:trigger_showtext"} = $showtext if ( defined($showtext) ); + $values->{"trigger_data:trigger_state"} = TRIGGER_ON; # Write state last so event not read incomplete - zmMemWrite( $monitor, $values ); + zmMemWrite( $monitor, $values ); } -sub zmTriggerEventOff( $ ) +sub zmTriggerEventOff { - my $monitor = shift; + my $monitor = shift; - my $values = { - "trigger_data:trigger_state" => TRIGGER_OFF, - "trigger_data:trigger_score" => 0, - "trigger_data:trigger_cause" => "", - "trigger_data:trigger_text" => "", - "trigger_data:trigger_showtext" => "", - }; + my $values = { + "trigger_data:trigger_state" => TRIGGER_OFF, + "trigger_data:trigger_score" => 0, + "trigger_data:trigger_cause" => "", + "trigger_data:trigger_text" => "", + "trigger_data:trigger_showtext" => "", + }; - zmMemWrite( $monitor, $values ); + zmMemWrite( $monitor, $values ); } -sub zmTriggerEventCancel( $ ) +sub zmTriggerEventCancel { - my $monitor = shift; + my $monitor = shift; - my $values = { - "trigger_data:trigger_state" => TRIGGER_CANCEL, - "trigger_data:trigger_score" => 0, - "trigger_data:trigger_cause" => "", - "trigger_data:trigger_text" => "", - "trigger_data:trigger_showtext" => "", - }; + my $values = { + "trigger_data:trigger_state" => TRIGGER_CANCEL, + "trigger_data:trigger_score" => 0, + "trigger_data:trigger_cause" => "", + "trigger_data:trigger_text" => "", + "trigger_data:trigger_showtext" => "", + }; - zmMemWrite( $monitor, $values ); + zmMemWrite( $monitor, $values ); } -sub zmTriggerShowtext( $$ ) +sub zmTriggerShowtext { - my $monitor = shift; - my $showtext = shift; + my $monitor = shift; + my $showtext = shift; - my $values = { - "trigger_data:trigger_showtext" => $showtext, - }; + my $values = { + "trigger_data:trigger_showtext" => $showtext, + }; - zmMemWrite( $monitor, $values ); + zmMemWrite( $monitor, $values ); } 1; @@ -722,44 +767,76 @@ ZoneMinder::MappedMem - ZoneMinder Mapped Memory access module } } - ( $lri, $lwi ) = zmMemRead( $monitor, [ "shared_data:last_read_index", "shared_data:last_write_index" ] ); + ( $lri, $lwi ) = zmMemRead( $monitor, [ "shared_data:last_read_index", + "shared_data:last_write_index" + ] + ); zmMemWrite( $monitor, { "trigger_data:trigger_showtext" => "Some Text" } ); =head1 DESCRIPTION -The ZoneMinder:MappedMem module contains methods for accessing and writing to mapped memory as well as helper methods for common operations. +The ZoneMinder:MappedMem module contains methods for accessing and writing +to mapped memory as well as helper methods for common operations. -The core elements of ZoneMinder used mapped memory to allow multiple access to resources. Although ZoneMinder scripts have used this information before, up until now it was difficult to access and prone to errors. This module introduces a common API for mapped memory access (both reading and writing) making it a lot easier to customise scripts or even create your own. +The core elements of ZoneMinder used mapped memory to allow multiple access +to resources. Although ZoneMinder scripts have used this information +before, up until now it was difficult to access and prone to errors. This +module introduces a common API for mapped memory access (both reading and +writing) making it a lot easier to customise scripts or even create your +own. -All the methods listed below require a 'monitor' parameter. This must be a reference to a hash with at least the 'Id' field set to the monitor id of the mapped memory you wish to access. Using database methods to select the monitor details will also return this kind of data. Some of the mapped memory methods will add and amend new fields to this hash. - -=over 4 +All the methods listed below require a 'monitor' parameter. This must be a +reference to a hash with at least the 'Id' field set to the monitor id of +the mapped memory you wish to access. Using database methods to select the +monitor details will also return this kind of data. Some of the mapped +memory methods will add and amend new fields to this hash. =head1 METHODS +=over 4 + =item zmMemVerify ( $monitor ); -Verify that the mapped memory of the monitor given exists and is valid. It will return an undefined value if it is not valid. You should generally call this method first before using any of the other methods, but most of the remaining methods will also do so if the memory has not already been verified. +Verify that the mapped memory of the monitor given exists and is valid. It +will return an undefined value if it is not valid. You should generally +call this method first before using any of the other methods, but most of +the remaining methods will also do so if the memory has not already been +verified. =item zmMemInvalidate ( $monitor ); -Following an error, reset the mapped memory ids and attempt to reverify on the next operation. This is mostly used when a mapped memory segment has gone away and been recreated with a different id. +Following an error, reset the mapped memory ids and attempt to reverify on +the next operation. This is mostly used when a mapped memory segment has +gone away and been recreated with a different id. =item zmMemRead ( $monitor, $readspec ); -This method is used to read data from mapped memory attached to the given monitor. The mapped memory will be verified if it has not already been. The 'readspec' must either be a string of the form "
:" or a reference to an array of strings of the same format. In the first case a single value is returned, in the latter case a list of values is return. Errors will cause undefined to be returned. The allowable sections and field names are described below. +This method is used to read data from mapped memory attached to the given +monitor. The mapped memory will be verified if it has not already been. The +'readspec' must either be a string of the form "
:" or a +reference to an array of strings of the same format. In the first case a +single value is returned, in the latter case a list of values is return. +Errors will cause undefined to be returned. The allowable sections and +field names are described below. =item zmMemWrite ( $monitor, $writespec ); -This method is used to write data to mapped memory attached to the given monitor. The mapped memory will be verified if it has not already been. The 'writespec' must be a reference to a hash with keys of the form "
:" and values as the data to be written. Errors will cause undefined to be returned, otherwise a non-undefined value will be returned. The allowable sections and field names are described below. +This method is used to write data to mapped memory attached to the given +monitor. The mapped memory will be verified if it has not already been. The +'writespec' must be a reference to a hash with keys of the form +"
:" and values as the data to be written. Errors will cause +undefined to be returned, otherwise a non-undefined value will be returned. +The allowable sections and field names are described below. =item $state = zmGetMonitorState ( $monitor ); -Return the current state of the given monitor. This is an integer value and can be compared with the STATE constants given below. +Return the current state of the given monitor. This is an integer value and +can be compared with the STATE constants given below. =item $event_id = zmGetLastEvent ( $monitor ); -Return the event id of the last event that the monitor generated, or 0 if no event has been generated by the current monitor process. +Return the event id of the last event that the monitor generated, or 0 if +no event has been generated by the current monitor process. =item zmIsAlarmed ( $monitor ); @@ -767,27 +844,38 @@ Return 1 if the monitor given is currently in an alarm state, 0 otherwise. =item zmInAlarm ( $monitor ); -Return 1 if the monitor given is currently in an alarm or alerted state, 0 otherwise. +Return 1 if the monitor given is currently in an alarm or alerted state, 0 +otherwise. =item zmHasAlarmed ( $monitor ); -Return 1 if the given monitor is in an alarm state, or has been in an alarm state since the last call to this method. +Return 1 if the given monitor is in an alarm state, or has been in an alarm +state since the last call to this method. =item ( $x, $y ) = zmGetAlarmLocation ( $monitor ); -Return an x,y pair indicating the image co-ordinates of the centre of the last motion event generated by the given monitor. If no event has been generated by the current monitor process, or the alarm was not motion related, returns -1,-1. +Return an x,y pair indicating the image co-ordinates of the centre of the +last motion event generated by the given monitor. If no event has been +generated by the current monitor process, or the alarm was not motion +related, returns -1,-1. =item zmGetLastWriteTime ( $monitor ); -Returns the time (in utc seconds) since the last image was captured by the given monitor and written to shared memory, or 0 otherwise. +Returns the time (in utc seconds) since the last image was captured by the +given monitor and written to shared memory, or 0 otherwise. =item zmGetLastReadTime ( $monitor ); -Returns the time (in utc seconds) since the last image was read from shared memory by the analysis daemon of the given monitor, or 0 otherwise or if the monitor is in monitor only mode. +Returns the time (in utc seconds) since the last image was read from shared +memory by the analysis daemon of the given monitor, or 0 otherwise or if +the monitor is in monitor only mode. =item zmMonitorSuspend ( $monitor ); -Suspend the given monitor from generating events caused by motion. This method can be used to prevent camera actions such as panning or zooming from causing events. If configured to do so, the monitor may automatically resume after a defined period. +Suspend the given monitor from generating events caused by motion. This +method can be used to prevent camera actions such as panning or zooming +from causing events. If configured to do so, the monitor may automatically +resume after a defined period. =item zmMonitorResume ( $monitor ); @@ -795,23 +883,43 @@ Allow the given monitor to resume generating events caused by motion. =item zmTriggerEventOn ( $monitor, $score, $cause [, $text, $showtext ] ); -Trigger the given monitor to generate an event. You must supply an event score and a cause string indicating the reason for the event. You may also supply a text string containing further details about the event and a showtext string which may be included in the timestamp annotation on any images captured during the event, if configured to do so. +Trigger the given monitor to generate an event. You must supply an event +score and a cause string indicating the reason for the event. You may also +supply a text string containing further details about the event and a +showtext string which may be included in the timestamp annotation on any +images captured during the event, if configured to do so. =item zmTriggerEventOff ( $monitor ); -Trigger the given monitor to not generate any events. This method does not cancel zmTriggerEventOn, but is exclusive to it. This method is intended to allow external triggers to prevent normal events being generated by monitors in the same way as zmMonitorSuspend but applies to all events and not just motion, and is intended for longer timescales than are appropriate for suspension. +Trigger the given monitor to not generate any events. This method does not +cancel zmTriggerEventOn, but is exclusive to it. This method is intended to +allow external triggers to prevent normal events being generated by +monitors in the same way as zmMonitorSuspend but applies to all events and +not just motion, and is intended for longer timescales than are appropriate +for suspension. =item zmTriggerEventCancel ( $monitor ); -Cancel any previous trigger on or off requests. This stops a triggered alarm if it exists from a previous 'on' and allows events to be generated once more following a previous 'off'. +Cancel any previous trigger on or off requests. This stops a triggered +alarm if it exists from a previous 'on' and allows events to be generated +once more following a previous 'off'. =item zmTriggerShowtext ( $monitor, $showtest ); -Indicate that the given text should be displayed in the timestamp annotation on any images captured, if the format of the annotation string defined for the monitor permits. +Indicate that the given text should be displayed in the timestamp +annotation on any images captured, if the format of the annotation string +defined for the monitor permits. + +=back =head1 DATA -The data fields in mapped memory that may be accessed are as follows. There are two main sections, shared_data which is general data and trigger_data which is used for event triggering. Whilst reading from these fields is harmless, extreme care must be taken when writing to mapped memory, especially in the shared_data section as this is normally written to only by monitor capture and analysis processes. +The data fields in mapped memory that may be accessed are as follows. There +are two main sections, shared_data which is general data and trigger_data +which is used for event triggering. Whilst reading from these fields is +harmless, extreme care must be taken when writing to mapped memory, +especially in the shared_data section as this is normally written to only +by monitor capture and analysis processes. shared_data The general mapped memory section size The size, in bytes, of this section @@ -842,19 +950,40 @@ The data fields in mapped memory that may be accessed are as follows. There are =head1 CONSTANTS -The following constants are used by the methods above, but can also be used by user scripts if required. +The following constants are used by the methods above, but can also be used +by user scripts if required. + +=over 4 =item STATE_IDLE STATE_PREALARM STATE_ALARM STATE_ALERT STATE_TAPE -These constants define the state of the monitor with respect to alarms and events. They are used in the shared_data:state field. +These constants define the state of the monitor with respect to alarms and +events. They are used in the shared_data:state field. =item ACTION_GET ACTION_SET ACTION_RELOAD ACTION_SUSPEND ACTION_RESUME -These constants defines the various values that can exist in the shared_data:action field. This is a bitmask which when non-zero defines an action that an executing monitor process should take. ACTION_GET requires that the current values of brightness, contrast, colour and hue are taken from the camera and written to the equivalent mapped memory fields. ACTION_SET implies the reverse, that the values in mapped memory should be written to the camera. ACTION_RELOAD signal that the monitor process should reload itself from the database in case any settings have changed there. ACTION_SUSPEND signals that a monitor should stop exaiming images for motion, though other alarms may still occur. ACTION_RESUME sigansl that a monitor should resume motion detectiom. +These constants defines the various values that can exist in the +shared_data:action field. This is a bitmask which when non-zero defines an +action that an executing monitor process should take. ACTION_GET requires +that the current values of brightness, contrast, colour and hue are taken +from the camera and written to the equivalent mapped memory fields. +ACTION_SET implies the reverse, that the values in mapped memory should be +written to the camera. ACTION_RELOAD signal that the monitor process should +reload itself from the database in case any settings have changed there. +ACTION_SUSPEND signals that a monitor should stop exaiming images for +motion, though other alarms may still occur. ACTION_RESUME sigansl that a +monitor should resume motion detectiom. -=item TRIGGER_CANCEL TRIGGER_ON TRIGGER_OFF +=item TRIGGER_CANCEL TRIGGER_ON TRIGGER_OFF -These constants are used in the definition of external triggers. TRIGGER_CANCEL is used to indicated that any previous trigger settings should be cancelled, TRIGGER_ON signals that an alarm should be created (or continued)) as a result of the current trigger and TRIGGER_OFF signals that the trigger should prevent any alarms from being generated. See the trigger methods above for further details. +These constants are used in the definition of external triggers. +TRIGGER_CANCEL is used to indicated that any previous trigger settings +should be cancelled, TRIGGER_ON signals that an alarm should be created (or +continued)) as a result of the current trigger and TRIGGER_OFF signals that +the trigger should prevent any alarms from being generated. See the trigger +methods above for further details. + +=back =head1 EXPORT diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Memory/Mapped.pm b/scripts/ZoneMinder/lib/ZoneMinder/Memory/Mapped.pm index 173c48493..017b5aa8c 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Memory/Mapped.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Memory/Mapped.pm @@ -36,18 +36,18 @@ our @ISA = qw(Exporter ZoneMinder::Base); # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. -# This allows declaration use ZoneMinder ':all'; +# This allows declaration use ZoneMinder ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. our %EXPORT_TAGS = ( - 'functions' => [ qw( - zmMemKey - zmMemAttach - zmMemDetach - zmMemGet - zmMemPut - zmMemClean - ) ], + 'functions' => [ qw( + zmMemKey + zmMemAttach + zmMemDetach + zmMemGet + zmMemPut + zmMemClean + ) ], ); push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; @@ -68,117 +68,131 @@ use ZoneMinder::Logger qw(:all); use Sys::Mmap; -sub zmMemKey( $ ) +sub zmMemKey { - my $monitor = shift; + my $monitor = shift; return( defined($monitor->{MMapAddr})?$monitor->{MMapAddr}:undef ); } -sub zmMemAttach( $$ ) +sub zmMemAttach { - my ( $monitor, $size ) = @_; - if ( ! $size ) { - Error( "No size passed to zmMemAttach for monitor $$monitor{Id}\n" ); - return( undef ); - } - if ( !defined($monitor->{MMapAddr}) ) - { + my ( $monitor, $size ) = @_; + if ( ! $size ) { + Error( "No size passed to zmMemAttach for monitor $$monitor{Id}\n" ); + return( undef ); + } + if ( !defined($monitor->{MMapAddr}) ) + { my $mmap_file = $Config{ZM_PATH_MAP}."/zm.mmap.".$monitor->{Id}; - if ( ! -e $mmap_file ) { - Error( sprintf( "Memory map file '%s' does not exist. zmc might not be running.", $mmap_file ) ); - return ( undef ); - } + if ( ! -e $mmap_file ) { + Error( sprintf( "Memory map file '%s' does not exist. zmc might not be running." + , $mmap_file + ) + ); + return ( undef ); + } - my $mmap_file_size = -s $mmap_file; + my $mmap_file_size = -s $mmap_file; - if ( $mmap_file_size < $size ) { - Error( sprintf( "Memory map file '%s' should have been %d but was instead %d", $mmap_file, $size, $mmap_file_size ) ); - return ( undef ); - } - if ( !open( MMAP, "+<".$mmap_file ) ) + if ( $mmap_file_size < $size ) { + Error( sprintf( "Memory map file '%s' should have been %d but was instead %d" + , $mmap_file + , $size + , $mmap_file_size + ) + ); + return ( undef ); + } + if ( !open( MMAP, "+<", $mmap_file ) ) { - Error( sprintf( "Can't open memory map file '%s': $!\n", $mmap_file ) ); - return( undef ); + Error( sprintf( "Can't open memory map file '%s': $!\n", $mmap_file ) ); + return( undef ); } my $mmap = undef; my $mmap_addr = mmap( $mmap, $size, PROT_READ|PROT_WRITE, MAP_SHARED, \*MMAP ); if ( !$mmap_addr || !$mmap ) { - Error( sprintf( "Can't mmap to file '%s': $!\n", $mmap_file ) ); - close( MMAP ); - return( undef ); + Error( sprintf( "Can't mmap to file '%s': $!\n", $mmap_file ) ); + close( MMAP ); + return( undef ); } - $monitor->{MMapHandle} = \*MMAP; - $monitor->{MMapAddr} = $mmap_addr; - $monitor->{MMap} = \$mmap; - } - return( !undef ); + $monitor->{MMapHandle} = \*MMAP; + $monitor->{MMapAddr} = $mmap_addr; + $monitor->{MMap} = \$mmap; + } + return( !undef ); } -sub zmMemDetach( $ ) +sub zmMemDetach { - my $monitor = shift; + my $monitor = shift; if ( $monitor->{MMap} ) { if ( ! munmap( ${$monitor->{MMap}} ) ) { - Warn( "Unable to munmap for monitor $$monitor{Id}\n"); - } - delete $monitor->{MMap}; + Warn( "Unable to munmap for monitor $$monitor{Id}\n"); + } + delete $monitor->{MMap}; } if ( $monitor->{MMapAddr} ) { - delete $monitor->{MMapAddr}; + delete $monitor->{MMapAddr}; } if ( $monitor->{MMapHandle} ) { close( $monitor->{MMapHandle} ); - delete $monitor->{MMapHandle}; + delete $monitor->{MMapHandle}; } } -sub zmMemGet( $$$ ) +sub zmMemGet { - my $monitor = shift; - my $offset = shift; - my $size = shift; + my $monitor = shift; + my $offset = shift; + my $size = shift; - my $mmap = $monitor->{MMap}; + my $mmap = $monitor->{MMap}; if ( !$mmap || !$$mmap ) { - Error( sprintf( "Can't read from mapped memory for monitor '%d', gone away?", $monitor->{Id} ) ); + Error( sprintf( "Can't read from mapped memory for monitor '%d', gone away?" + , $monitor->{Id} + ) + ); return( undef ); } - my $data = substr( $$mmap, $offset, $size ); + my $data = substr( $$mmap, $offset, $size ); return( $data ); } -sub zmMemPut( $$$$ ) +sub zmMemPut { - my $monitor = shift; - my $offset = shift; - my $size = shift; - my $data = shift; + my $monitor = shift; + my $offset = shift; + my $size = shift; + my $data = shift; - my $mmap = $monitor->{MMap}; + my $mmap = $monitor->{MMap}; if ( !$mmap || !$$mmap ) { - Error( sprintf( "Can't write mapped memory for monitor '%d', gone away?", $monitor->{Id} ) ); + Error( sprintf( "Can't write mapped memory for monitor '%d', gone away?" + , $monitor->{Id} + ) + ); return( undef ); } - substr( $$mmap, $offset, $size ) = $data; - return( !undef ); + substr( $$mmap, $offset, $size ) = $data; + return( !undef ); } sub zmMemClean { - Debug( "Removing memory map files\n" ); + Debug( "Removing memory map files\n" ); my $mapPath = $Config{ZM_PATH_MAP}."/zm.mmap.*"; foreach my $mapFile( glob( $mapPath ) ) { ( $mapFile ) = $mapFile =~ /^(.+)$/; - Debug( "Removing memory map file '$mapFile'\n" ); + Debug( "Removing memory map file '$mapFile'\n" ); unlink( $mapFile ); } } diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Memory/Shared.pm b/scripts/ZoneMinder/lib/ZoneMinder/Memory/Shared.pm index 59dc399f1..301327095 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Memory/Shared.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Memory/Shared.pm @@ -19,7 +19,7 @@ # # ========================================================================== # -# This module contains the common definitions and functions used by the rest +# This module contains the common definitions and functions used by the rest # of the ZoneMinder scripts # package ZoneMinder::Memory::Shared; @@ -39,18 +39,18 @@ eval 'sub IPC_CREAT {0001000}' unless defined &IPC_CREAT; # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. -# This allows declaration use ZoneMinder ':all'; +# This allows declaration use ZoneMinder ':all'; # If you do not need this, moving things directly into @EXPORT or @EXPORT_OK # will save memory. our %EXPORT_TAGS = ( - 'functions' => [ qw( + 'functions' => [ qw( zmMemKey zmMemAttach zmMemDetach zmMemGet zmMemPut zmMemClean - ) ], + ) ], ); push( @{$EXPORT_TAGS{all}}, @{$EXPORT_TAGS{$_}} ) foreach keys %EXPORT_TAGS; @@ -69,82 +69,98 @@ our $VERSION = $ZoneMinder::Base::VERSION; use ZoneMinder::Config qw(:all); use ZoneMinder::Logger qw(:all); -sub zmMemKey( $ ) +sub zmMemKey { - my $monitor = shift; - return( defined($monitor->{ShmKey})?$monitor->{ShmKey}:undef ); + my $monitor = shift; + return( defined($monitor->{ShmKey})?$monitor->{ShmKey}:undef ); } -sub zmMemAttach( $$ ) +sub zmMemAttach { - my $monitor = shift; - my $size = shift; - if ( !defined($monitor->{ShmId}) ) - { - my $shm_key = (hex($Config{ZM_SHM_KEY})&0xffff0000)|$monitor->{Id}; - my $shm_id = shmget( $shm_key, $size, &IPC_CREAT | 0777 ); - if ( !defined($shm_id) ) - { - Error( sprintf( "Can't get shared memory id '%x', %d: $!\n", $shm_key, $monitor->{Id} ) ); - return( undef ); - } - $monitor->{ShmKey} = $shm_key; - $monitor->{ShmId} = $shm_id; - } - return( !undef ); + my $monitor = shift; + my $size = shift; + if ( !defined($monitor->{ShmId}) ) + { + my $shm_key = (hex($Config{ZM_SHM_KEY})&0xffff0000)|$monitor->{Id}; + my $shm_id = shmget( $shm_key, $size, &IPC_CREAT | 0777 ); + if ( !defined($shm_id) ) + { + Error( sprintf( "Can't get shared memory id '%x', %d: $!\n" + , $shm_key + , $monitor->{Id} + ) + ); + return( undef ); + } + $monitor->{ShmKey} = $shm_key; + $monitor->{ShmId} = $shm_id; + } + return( !undef ); } -sub zmMemDetach( $ ) +sub zmMemDetach { - my $monitor = shift; + my $monitor = shift; - delete $monitor->{ShmId}; + delete $monitor->{ShmId}; } -sub zmMemGet( $$$ ) +sub zmMemGet { - my $monitor = shift; - my $offset = shift; - my $size = shift; + my $monitor = shift; + my $offset = shift; + my $size = shift; + + my $shm_key = $monitor->{ShmKey}; + my $shm_id = $monitor->{ShmId}; - my $shm_key = $monitor->{ShmKey}; - my $shm_id = $monitor->{ShmId}; - my $data; if ( !shmread( $shm_id, $data, $offset, $size ) ) { - Error( sprintf( "Can't read from shared memory '%x/%d': $!", $shm_key, $shm_id ) ); + Error( sprintf( "Can't read from shared memory '%x/%d': $!" + , $shm_key + , $shm_id + ) + ); return( undef ); } - return( $data ); + return( $data ); } -sub zmMemPut( $$$$ ) +sub zmMemPut { - my $monitor = shift; - my $offset = shift; - my $size = shift; - my $data = shift; + my $monitor = shift; + my $offset = shift; + my $size = shift; + my $data = shift; + + my $shm_key = $monitor->{ShmKey}; + my $shm_id = $monitor->{ShmId}; - my $shm_key = $monitor->{ShmKey}; - my $shm_id = $monitor->{ShmId}; - if ( !shmwrite( $shm_id, $data, $offset, $size ) ) { - Error( sprintf( "Can't write to shared memory '%x/%d': $!", $shm_key, $shm_id ) ); + Error( sprintf( "Can't write to shared memory '%x/%d': $!" + , $shm_key + , $shm_id + ) + ); return( undef ); } - return( !undef ); + return( !undef ); } sub zmMemClean { Debug( "Removing shared memory\n" ); # Find ZoneMinder shared memory - my $command = "ipcs -m | grep '^".substr( sprintf( "0x%x", hex($Config{ZM_SHM_KEY}) ), 0, -2 )."'"; + my $command = "ipcs -m | grep '^" + .substr( sprintf( "0x%x", hex($Config{ZM_SHM_KEY}) ), 0, -2 ) + ."'" + ; Debug( "Checking for shared memory with '$command'\n" ); - open( CMD, "$command |" ) or Fatal( "Can't execute '$command': $!" ); - while( ) + open( my $CMD, '<', "$command |" ) + or Fatal( "Can't execute '$command': $!" ); + while( <$CMD> ) { chomp; my ( $key, $id ) = split( /\s+/ ); @@ -156,7 +172,7 @@ sub zmMemClean qx( $command ); } } - close( CMD ); + close( $CMD ); } 1; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel.pm b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel.pm index 0344e6d94..8b746ac3d 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel.pm @@ -46,53 +46,53 @@ our $AUTOLOAD; sub new { - my $class = shift; - my $self = {}; - $self->{readable} = !undef; - $self->{writeable} = !undef; - $self->{selectable} = undef; - $self->{state} = 'closed'; - bless( $self, $class ); - return $self; + my $class = shift; + my $self = {}; + $self->{readable} = !undef; + $self->{writeable} = !undef; + $self->{selectable} = undef; + $self->{state} = 'closed'; + bless( $self, $class ); + return $self; } sub clone { - my $self = shift; - my $clone = { %$self }; - bless $clone, ref $self; + my $self = shift; + my $clone = { %$self }; + bless $clone, ref $self; } -sub open() +sub open { - my $self = shift; - my $class = ref($self) or croak( "Can't get class for non object $self" ); - croak( "Abstract base class method called for object of class $class" ); + my $self = shift; + my $class = ref($self) or croak( "Can't get class for non object $self" ); + croak( "Abstract base class method called for object of class $class" ); } -sub close() +sub close { - my $self = shift; - my $class = ref($self) or croak( "Can't get class for non object $self" ); - croak( "Abstract base class method called for object of class $class" ); + my $self = shift; + my $class = ref($self) or croak( "Can't get class for non object $self" ); + croak( "Abstract base class method called for object of class $class" ); } -sub getState() +sub getState { - my $self = shift; - return( $self->{state} ); + my $self = shift; + return( $self->{state} ); } -sub isOpen() +sub isOpen { - my $self = shift; - return( $self->{state} eq "open" ); + my $self = shift; + return( $self->{state} eq "open" ); } -sub isConnected() +sub isConnected { - my $self = shift; - return( $self->{state} eq "connected" ); + my $self = shift; + return( $self->{state} eq "connected" ); } sub DESTROY @@ -101,15 +101,15 @@ sub DESTROY sub AUTOLOAD { - my $self = shift; - my $class = ref($self) || croak( "$self not object" ); - my $name = $AUTOLOAD; - $name =~ s/.*://; - if ( !exists($self->{$name}) ) - { - croak( "Can't access $name member of object of class $class" ); - } - return( $self->{$name} ); + my $self = shift; + my $class = ref($self) || croak( "$self not object" ); + my $name = $AUTOLOAD; + $name =~ s/.*://; + if ( !exists($self->{$name}) ) + { + croak( "Can't access $name member of object of class $class" ); + } + return( $self->{$name} ); } 1; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/File.pm b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/File.pm index 234dae3d7..6c4254a7e 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/File.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/File.pm @@ -48,23 +48,23 @@ use Fcntl; sub new { - my $class = shift; - my %params = @_; - my $self = ZoneMinder::Trigger::Channel::Handle->new; - $self->{path} = $params{path}; - bless( $self, $class ); - return $self; + my $class = shift; + my %params = @_; + my $self = ZoneMinder::Trigger::Channel::Handle->new; + $self->{path} = $params{path}; + bless( $self, $class ); + return $self; } -sub open() +sub open { - my $self = shift; - local *sfh; - #sysopen( *sfh, $conn->{path}, O_NONBLOCK|O_RDONLY ) or croak( "Can't sysopen: $!" ); - #open( *sfh, "<".$conn->{path} ) or croak( "Can't open: $!" ); - open( *sfh, "+<".$self->{path} ) or croak( "Can't open: $!" ); - $self->{state} = 'open'; - $self->{handle} = *sfh; + my $self = shift; + local *sfh; + #sysopen( *sfh, $conn->{path}, O_NONBLOCK|O_RDONLY ) or croak( "Can't sysopen: $!" ); + #open( *sfh, "<".$conn->{path} ) or croak( "Can't open: $!" ); + open( *sfh, "+<", $self->{path} ) or croak( "Can't open: $!" ); + $self->{state} = 'open'; + $self->{handle} = *sfh; } 1; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Handle.pm b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Handle.pm index 353dc4a32..d26924476 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Handle.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Handle.pm @@ -46,12 +46,12 @@ use POSIX; sub new { - my $class = shift; - my $port = shift; - my $self = ZoneMinder::Trigger::Channel->new(); - $self->{handle} = undef; - bless( $self, $class ); - return $self; + my $class = shift; + my $port = shift; + my $self = ZoneMinder::Trigger::Channel->new(); + $self->{handle} = undef; + bless( $self, $class ); + return $self; } sub spawns @@ -59,45 +59,51 @@ sub spawns return( undef ); } -sub close() +sub close { - my $self = shift; - close( $self->{handle} ); - $self->{state} = 'closed'; - $self->{handle} = undef; + my $self = shift; + close( $self->{handle} ); + $self->{state} = 'closed'; + $self->{handle} = undef; } -sub read() +sub read { - my $self = shift; - my $buffer; - my $nbytes = sysread( $self->{handle}, $buffer, POSIX::BUFSIZ ); - if ( !$nbytes ) - { - return( undef ); - } - Debug( "Read '$buffer' ($nbytes bytes)\n" ); - return( $buffer ); + my $self = shift; + my $buffer; + my $nbytes = sysread( $self->{handle}, $buffer, POSIX::BUFSIZ ); + if ( !$nbytes ) + { + return( undef ); + } + Debug( "Read '$buffer' ($nbytes bytes)\n" ); + return( $buffer ); } -sub write() +sub write { - my $self = shift; - my $buffer = shift; - my $nbytes = syswrite( $self->{handle}, $buffer ); - if ( !defined( $nbytes) || $nbytes < length($buffer) ) - { - Error( "Unable to write buffer '".$buffer.", expected ".length($buffer)." bytes, sent ".($nbytes?$nbytes:'undefined').": $!\n" ); - return( undef ); - } - Debug( "Wrote '$buffer' ($nbytes bytes)\n" ); - return( !undef ); + my $self = shift; + my $buffer = shift; + my $nbytes = syswrite( $self->{handle}, $buffer ); + if ( !defined( $nbytes) || $nbytes < length($buffer) ) + { + Error( "Unable to write buffer '".$buffer + .", expected " + .length($buffer) + ." bytes, sent " + .($nbytes?$nbytes:'undefined') + .": $!\n" + ); + return( undef ); + } + Debug( "Wrote '$buffer' ($nbytes bytes)\n" ); + return( !undef ); } -sub fileno() +sub fileno { - my $self = shift; - return( defined($self->{handle})?fileno($self->{handle}):-1 ); + my $self = shift; + return( defined($self->{handle})?fileno($self->{handle}):-1 ); } 1; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Inet.pm b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Inet.pm index 68df0980f..6c5f21961 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Inet.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Inet.pm @@ -48,44 +48,45 @@ use Socket; sub new { - my $class = shift; - my %params = @_; - my $self = ZoneMinder::Trigger::Channel::Spawning->new(); - $self->{selectable} = !undef; - $self->{port} = $params{port}; - bless( $self, $class ); - return $self; + my $class = shift; + my %params = @_; + my $self = ZoneMinder::Trigger::Channel::Spawning->new(); + $self->{selectable} = !undef; + $self->{port} = $params{port}; + bless( $self, $class ); + return $self; } -sub open() +sub open { - my $self = shift; - local *sfh; - my $saddr = sockaddr_in( $self->{port}, INADDR_ANY ); - socket( *sfh, PF_INET, SOCK_STREAM, getprotobyname('tcp') ) or croak( "Can't open socket: $!" ); - setsockopt( *sfh, SOL_SOCKET, SO_REUSEADDR, 1 ); - bind( *sfh, $saddr ) or croak( "Can't bind: $!" ); - listen( *sfh, SOMAXCONN ) or croak( "Can't listen: $!" ); - $self->{state} = 'open'; - $self->{handle} = *sfh; + my $self = shift; + local *sfh; + my $saddr = sockaddr_in( $self->{port}, INADDR_ANY ); + socket( *sfh, PF_INET, SOCK_STREAM, getprotobyname('tcp') ) + or croak( "Can't open socket: $!" ); + setsockopt( *sfh, SOL_SOCKET, SO_REUSEADDR, 1 ); + bind( *sfh, $saddr ) or croak( "Can't bind: $!" ); + listen( *sfh, SOMAXCONN ) or croak( "Can't listen: $!" ); + $self->{state} = 'open'; + $self->{handle} = *sfh; } -sub _spawn( $ ) +sub _spawn { - my $self = shift; - my $new_handle = shift; - my $clone = $self->clone(); - $clone->{handle} = $new_handle; - $clone->{state} = 'connected'; - return( $clone ); + my $self = shift; + my $new_handle = shift; + my $clone = $self->clone(); + $clone->{handle} = $new_handle; + $clone->{state} = 'connected'; + return( $clone ); } -sub accept() +sub accept { - my $self = shift; - local *cfh; - my $paddr = accept( *cfh, $self->{handle} ); - return( $self->_spawn( *cfh ) ); + my $self = shift; + local *cfh; + my $paddr = accept( *cfh, $self->{handle} ); + return( $self->_spawn( *cfh ) ); } 1; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Serial.pm b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Serial.pm index 7e4ad4730..a3709b5bb 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Serial.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Serial.pm @@ -46,64 +46,70 @@ use Device::SerialPort; sub new { - my $class = shift; - my %params = @_; - my $self = ZoneMinder::Trigger::Channel->new; - $self->{path} = $params{path}; - bless( $self, $class ); - return $self; + my $class = shift; + my %params = @_; + my $self = ZoneMinder::Trigger::Channel->new; + $self->{path} = $params{path}; + bless( $self, $class ); + return $self; } -sub open() +sub open { - my $self = shift; - my $device = new Device::SerialPort( $self->{path} ); - $device->baudrate(9600); - $device->databits(8); - $device->parity('none'); - $device->stopbits(1); - $device->handshake('none'); + my $self = shift; + my $device = new Device::SerialPort( $self->{path} ); + $device->baudrate(9600); + $device->databits(8); + $device->parity('none'); + $device->stopbits(1); + $device->handshake('none'); - $device->read_const_time(50); - $device->read_char_time(10); + $device->read_const_time(50); + $device->read_char_time(10); - $self->{device} = $device; - $self->{state} = 'open'; - $self->{state} = 'connected'; + $self->{device} = $device; + $self->{state} = 'open'; + $self->{state} = 'connected'; } -sub close() +sub close { - my $self = shift; - $self->{device}->close(); - $self->{state} = 'closed'; + my $self = shift; + $self->{device}->close(); + $self->{state} = 'closed'; } -sub read() +sub read { - my $self = shift; - my $buffer = $self->{device}->lookfor(); - if ( !$buffer || !length($buffer) ) - { - return( undef ); - } - Debug( "Read '$buffer' (".length($buffer)." bytes)\n" ); - return( $buffer ); + my $self = shift; + my $buffer = $self->{device}->lookfor(); + if ( !$buffer || !length($buffer) ) + { + return( undef ); + } + Debug( "Read '$buffer' (".length($buffer)." bytes)\n" ); + return( $buffer ); } -sub write() +sub write { - my $self = shift; - my $buffer = shift; - my $nbytes = $self->{device}->write( $buffer ); - $self->{device}->write_drain(); - if ( !defined( $nbytes) || $nbytes < length($buffer) ) - { - Error( "Unable to write buffer '".$buffer.", expected ".length($buffer)." bytes, sent ".$nbytes.": $!\n" ); - return( undef ); - } - Debug( "Wrote '$buffer' ($nbytes bytes)\n" ); - return( !undef ); + my $self = shift; + my $buffer = shift; + my $nbytes = $self->{device}->write( $buffer ); + $self->{device}->write_drain(); + if ( !defined( $nbytes) || $nbytes < length($buffer) ) + { + Error( "Unable to write buffer '".$buffer + .", expected " + .length($buffer) + ." bytes, sent " + .$nbytes + .": $!\n" + ); + return( undef ); + } + Debug( "Wrote '$buffer' ($nbytes bytes)\n" ); + return( !undef ); } 1; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Spawning.pm b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Spawning.pm index ff726ac38..aeaca182e 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Spawning.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Spawning.pm @@ -45,12 +45,12 @@ use ZoneMinder::Logger qw(:all); sub new { - my $class = shift; - my $port = shift; - my $self = ZoneMinder::Trigger::Channel::Handle->new(); - $self->{spawns} = !undef; - bless( $self, $class ); - return $self; + my $class = shift; + my $port = shift; + my $self = ZoneMinder::Trigger::Channel::Handle->new(); + $self->{spawns} = !undef; + bless( $self, $class ); + return $self; } sub spawns diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Unix.pm b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Unix.pm index a671ccd66..71d6e89fc 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Unix.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Channel/Unix.pm @@ -48,28 +48,28 @@ use Socket; sub new { - my $class = shift; - my %params = @_; - my $self = ZoneMinder::Trigger::Channel->new; - $self->{selectable} = !undef; - $self->{path} = $params{path}; - bless( $self, $class ); - return $self; + my $class = shift; + my %params = @_; + my $self = ZoneMinder::Trigger::Channel->new; + $self->{selectable} = !undef; + $self->{path} = $params{path}; + bless( $self, $class ); + return $self; } -sub open() +sub open { - my $self = shift; - local *sfh; - unlink( $self->{path} ); - my $saddr = sockaddr_un( $self->{path} ); - socket( *sfh, PF_UNIX, SOCK_STREAM, 0 ) or croak( "Can't open socket: $!" ); - bind( *sfh, $saddr ) or croak( "Can't bind: $!" ); - listen( *sfh, SOMAXCONN ) or croak( "Can't listen: $!" ); - $self->{handle} = *sfh; + my $self = shift; + local *sfh; + unlink( $self->{path} ); + my $saddr = sockaddr_un( $self->{path} ); + socket( *sfh, PF_UNIX, SOCK_STREAM, 0 ) or croak( "Can't open socket: $!" ); + bind( *sfh, $saddr ) or croak( "Can't bind: $!" ); + listen( *sfh, SOMAXCONN ) or croak( "Can't listen: $!" ); + $self->{handle} = *sfh; } -sub _spawn( $ ) +sub _spawn { my $self = shift; my $new_handle = shift; @@ -79,7 +79,7 @@ sub _spawn( $ ) return( $clone ); } -sub accept() +sub accept { my $self = shift; local *cfh; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Connection.pm b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Connection.pm index 41b332d46..12cf3136d 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Connection.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Connection.pm @@ -46,115 +46,121 @@ our $AUTOLOAD; sub new { - my $class = shift; - my %params = @_; - my $self = {}; - $self->{name} = $params{name}; - $self->{channel} = $params{channel}; - $self->{input} = $params{mode} =~ /r/i; - $self->{output} = $params{mode} =~ /w/i; - bless( $self, $class ); - return $self; + my $class = shift; + my %params = @_; + my $self = {}; + $self->{name} = $params{name}; + $self->{channel} = $params{channel}; + $self->{input} = $params{mode} =~ /r/i; + $self->{output} = $params{mode} =~ /w/i; + bless( $self, $class ); + return $self; } sub clone { - my $self = shift; - my $clone = { %$self }; - bless $clone, ref $self; - return( $clone ); + my $self = shift; + my $clone = { %$self }; + bless $clone, ref $self; + return( $clone ); } sub spawns { - my $self = shift; + my $self = shift; return( $self->{channel}->spawns() ); } -sub _spawn( $ ) +sub _spawn { - my $self = shift; - my $new_channel = shift; - my $clone = $self->clone(); - $clone->{channel} = $new_channel; - return( $clone ); + my $self = shift; + my $new_channel = shift; + my $clone = $self->clone(); + $clone->{channel} = $new_channel; + return( $clone ); } -sub accept() +sub accept { - my $self = shift; - my $new_channel = $self->{channel}->accept(); - return( $self->_spawn( $new_channel ) ); + my $self = shift; + my $new_channel = $self->{channel}->accept(); + return( $self->_spawn( $new_channel ) ); } -sub open() +sub open { - my $self = shift; - return( $self->{channel}->open() ); + my $self = shift; + return( $self->{channel}->open() ); } -sub close() +sub close { - my $self = shift; - return( $self->{channel}->close() ); + my $self = shift; + return( $self->{channel}->close() ); } -sub fileno() +sub fileno { - my $self = shift; - return( $self->{channel}->fileno() ); + my $self = shift; + return( $self->{channel}->fileno() ); } -sub isOpen() +sub isOpen { - my $self = shift; - return( $self->{channel}->isOpen() ); + my $self = shift; + return( $self->{channel}->isOpen() ); } -sub isConnected() +sub isConnected { - my $self = shift; - return( $self->{channel}->isConnected() ); + my $self = shift; + return( $self->{channel}->isConnected() ); } -sub canRead() +sub canRead { - my $self = shift; - return( $self->{input} && $self->isConnected() ); + my $self = shift; + return( $self->{input} && $self->isConnected() ); } -sub canWrite() +sub canWrite { - my $self = shift; - return( $self->{output} && $self->isConnected() ); + my $self = shift; + return( $self->{output} && $self->isConnected() ); } sub getMessages { - my $self = shift; - my $buffer = $self->{channel}->read(); + my $self = shift; + my $buffer = $self->{channel}->read(); - return( undef ) if ( !defined($buffer) ); + return( undef ) if ( !defined($buffer) ); - my @messages = split( /\r?\n/, $buffer ); - return( \@messages ); + my @messages = split( /\r?\n/, $buffer ); + return( \@messages ); } sub putMessages { - my $self = shift; - my $messages = shift; + my $self = shift; + my $messages = shift; - if ( @$messages ) - { - my $buffer = join( "\n", @$messages ); - $buffer .= "\n"; - if ( !$self->{channel}->write( $buffer ) ) - { - Error( "Unable to write buffer '".$buffer." to connection ".$self->{name}." (".$self->fileno().")\n" ); - } - } - return( undef ); + if ( @$messages ) + { + my $buffer = join( "\n", @$messages ); + $buffer .= "\n"; + if ( !$self->{channel}->write( $buffer ) ) + { + Error( "Unable to write buffer '".$buffer + ." to connection " + .$self->{name} + ." (" + .$self->fileno() + .")\n" + ); + } + } + return( undef ); } sub timedActions @@ -167,22 +173,22 @@ sub DESTROY sub AUTOLOAD { - my $self = shift; - my $class = ref($self) || croak( "$self not object" ); - my $name = $AUTOLOAD; - $name =~ s/.*://; - if ( exists($self->{$name}) ) - { - return( $self->{$name} ); - } - elsif ( defined($self->{channel}) ) - { - if ( exists($self->{channel}->{$name}) ) - { - return( $self->{channel}->{$name} ); - } - } - croak( "Can't access $name member of object of class $class" ); + my $self = shift; + my $class = ref($self) || croak( "$self not object" ); + my $name = $AUTOLOAD; + $name =~ s/.*://; + if ( exists($self->{$name}) ) + { + return( $self->{$name} ); + } + elsif ( defined($self->{channel}) ) + { + if ( exists($self->{channel}->{$name}) ) + { + return( $self->{channel}->{$name} ); + } + } + croak( "Can't access $name member of object of class $class" ); } 1; diff --git a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Connection/Example.pm b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Connection/Example.pm index 3bed2b351..6f3a86575 100644 --- a/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Connection/Example.pm +++ b/scripts/ZoneMinder/lib/ZoneMinder/Trigger/Connection/Example.pm @@ -44,40 +44,40 @@ use ZoneMinder::Logger qw(:all); sub new { - my $class = shift; - my $path = shift; - my $self = ZoneMinder::Trigger::Connection->new( @_ ); - bless( $self, $class ); - return $self; + my $class = shift; + my $path = shift; + my $self = ZoneMinder::Trigger::Connection->new( @_ ); + bless( $self, $class ); + return $self; } sub getMessages { - my $self = shift; - my $buffer = $self->{channel}->read(); + my $self = shift; + my $buffer = $self->{channel}->read(); - return( undef ) if ( !defined($buffer) ); + return( undef ) if ( !defined($buffer) ); - Debug( "Handling buffer '$buffer'\n" ); - my @messages = grep { s/-/|/g; 1; } split( /\r?\n/, $buffer ); - return( \@messages ); + Debug( "Handling buffer '$buffer'\n" ); + my @messages = grep { s/-/|/g; 1; } split( /\r?\n/, $buffer ); + return( \@messages ); } sub putMessages { - my $self = shift; - my $messages = shift; + my $self = shift; + my $messages = shift; - if ( @$messages ) - { - my $buffer = join( "\n", grep{ s/\|/-/; 1; } @$messages ); - $buffer .= "\n"; - if ( !$self->{channel}->write( $buffer ) ) - { - Error( "Unable to write buffer '".$buffer." to connection ".$self->{name}." (".$self->fileno().")\n" ); - } - } - return( undef ); + if ( @$messages ) + { + my $buffer = join( "\n", grep{ s/\|/-/; 1; } @$messages ); + $buffer .= "\n"; + if ( !$self->{channel}->write( $buffer ) ) + { + Error( "Unable to write buffer '".$buffer." to connection ".$self->{name}." (".$self->fileno().")\n" ); + } + } + return( undef ); } 1; diff --git a/scripts/zm.in b/scripts/zm.in index 33c32ac6c..b600cd983 100755 --- a/scripts/zm.in +++ b/scripts/zm.in @@ -16,12 +16,12 @@ LOCKFILE=/var/lock/subsys/zm loadconf() { - if [ -f $ZM_CONFIG ]; then - . $ZM_CONFIG - else - echo "ERROR: $ZM_CONFIG not found." - return 1 - fi + if [ -f $ZM_CONFIG ]; then + . $ZM_CONFIG + else + echo "ERROR: $ZM_CONFIG not found." + return 1 + fi } loadconf @@ -30,95 +30,95 @@ command="$ZM_PATH_BIN/zmpkg.pl" start() { # Commenting out as it is not needed. Leaving as a placeholder for future use. -# zmupdate || return $? - loadconf || return $? - #Make sure the directory for our PID folder exists or create one. - [ ! -d $pidfile ] \ - && mkdir -m 774 $pidfile \ - && chown $ZM_WEB_USER:$ZM_WEB_GROUP $pidfile - #Make sure the folder for the socks file exists or create one - GetPath="select Value from Config where Name='ZM_PATH_SOCKS'" +# zmupdate || return $? + loadconf || return $? + #Make sure the directory for our PID folder exists or create one. + [ ! -d $pidfile ] \ + && mkdir -m 774 $pidfile \ + && chown $ZM_WEB_USER:$ZM_WEB_GROUP $pidfile + #Make sure the folder for the socks file exists or create one + GetPath="select Value from Config where Name='ZM_PATH_SOCKS'" dbHost=`echo $ZM_DB_HOST | cut -d: -f1` dbPort=`echo $ZM_DB_HOST | cut -d: -s -f2` if [ "$dbPort" = "" ] then - ZM_PATH_SOCK=`echo $GetPath | mysql -B -h$ZM_DB_HOST -u$ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME | grep -v '^Value'` + ZM_PATH_SOCK=`echo $GetPath | mysql -B -h$ZM_DB_HOST -u$ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME | grep -v '^Value'` else - ZM_PATH_SOCK=`echo $GetPath | mysql -B -h$dbHost -P$dbPort -u$ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME | grep -v '^Value'` + ZM_PATH_SOCK=`echo $GetPath | mysql -B -h$dbHost -P$dbPort -u$ZM_DB_USER -p$ZM_DB_PASS $ZM_DB_NAME | grep -v '^Value'` fi - [ ! -d $ZM_PATH_SOCK ] \ - && mkdir -m 774 $ZM_PATH_SOCK \ - && chown $ZM_WEB_USER:$ZM_WEB_GROUP $ZM_PATH_SOCK - echo -n $"Starting $prog: " - $command start - RETVAL=$? - [ $RETVAL = 0 ] && success || failure - echo - [ $RETVAL = 0 ] && touch $LOCKFILE - return $RETVAL + [ ! -d $ZM_PATH_SOCK ] \ + && mkdir -m 774 $ZM_PATH_SOCK \ + && chown $ZM_WEB_USER:$ZM_WEB_GROUP $ZM_PATH_SOCK + echo -n $"Starting $prog: " + $command start + RETVAL=$? + [ $RETVAL = 0 ] && success || failure + echo + [ $RETVAL = 0 ] && touch $LOCKFILE + return $RETVAL } stop() { - loadconf - echo -n $"Stopping $prog: " - $command stop - RETVAL=$? - [ $RETVAL = 0 ] && success || failure - echo - [ $RETVAL = 0 ] && rm -f $LOCKFILE + loadconf + echo -n $"Stopping $prog: " + $command stop + RETVAL=$? + [ $RETVAL = 0 ] && success || failure + echo + [ $RETVAL = 0 ] && rm -f $LOCKFILE } zmstatus() { - loadconf - result=`$command status` - if [ "$result" = "running" ]; then - echo "ZoneMinder is running" - $ZM_PATH_BIN/zmu -l - RETVAL=0 - else - echo "ZoneMinder is stopped" - RETVAL=1 - fi + loadconf + result=`$command status` + if [ "$result" = "running" ]; then + echo "ZoneMinder is running" + $ZM_PATH_BIN/zmu -l + RETVAL=0 + else + echo "ZoneMinder is stopped" + RETVAL=1 + fi } zmupdate() { - if [ -x $ZM_PATH_BIN/zmupdate.pl ]; then - $ZM_PATH_BIN/zmupdate.pl -f - fi + if [ -x $ZM_PATH_BIN/zmupdate.pl ]; then + $ZM_PATH_BIN/zmupdate.pl -f + fi } case "$1" in - 'start') - start - ;; - 'stop') - stop - ;; - 'restart') - stop - start - ;; - 'condrestart') - loadconf - result=`$ZM_PATH_BIN/zmdc.pl check` - if [ "$result" = "running" ]; then - $ZM_PATH_BIN/zmdc.pl shutdown > /dev/null - rm -f $LOCKFILE - start - fi - ;; - 'status') - status httpd - status mysqld - zmstatus - ;; - *) - echo "Usage: $0 { start | stop | restart | condrestart | status }" - RETVAL=1 - ;; + 'start') + start + ;; + 'stop') + stop + ;; + 'restart') + stop + start + ;; + 'condrestart') + loadconf + result=`$ZM_PATH_BIN/zmdc.pl check` + if [ "$result" = "running" ]; then + $ZM_PATH_BIN/zmdc.pl shutdown > /dev/null + rm -f $LOCKFILE + start + fi + ;; + 'status') + status httpd + status mysqld + zmstatus + ;; + *) + echo "Usage: $0 { start | stop | restart | condrestart | status }" + RETVAL=1 + ;; esac exit $RETVAL diff --git a/scripts/zmaudit.pl.in b/scripts/zmaudit.pl.in index f7bd18540..7a74303fc 100644 --- a/scripts/zmaudit.pl.in +++ b/scripts/zmaudit.pl.in @@ -20,15 +20,33 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This script checks for consistency between the event filesystem and -# the database. If events are found in one and not the other they are -# deleted (optionally). Additionally any monitor event directories that -# do not correspond to a database monitor are similarly disposed of. -# However monitors in the database that don't have a directory are left -# alone as this is valid if they are newly created and have no events -# yet. -# + +=head1 NAME + +zmaudit.pl - ZoneMinder event file system and database consistency checker + +=head1 SYNOPSIS + + zmaudit.pl [-r,-report|-i,-interactive] + +=head1 DESCRIPTION + +This script checks for consistency between the event filesystem and +the database. If events are found in one and not the other they are +deleted (optionally). Additionally any monitor event directories that +do not correspond to a database monitor are similarly disposed of. +However monitors in the database that don't have a directory are left +alone as this is valid if they are newly created and have no events +yet. + +=head1 OPTIONS + + -r, --report - Just report don't actually do anything + -i, --interactive - Ask before applying any changes + -c, --continuous - Run continuously + -v, --version - Print the installed version of ZoneMinder + +=cut use strict; use bytes; @@ -38,7 +56,6 @@ use bytes; # # ========================================================================== -use constant MIN_AGE => 300; # Minimum age when we will delete anything use constant MAX_AGED_DIRS => 10; # Number of event dirs to check age on use constant RECOVER_TAG => "(r)"; # Tag to append to event name when recovered use constant RECOVER_TEXT => "Recovered."; # Text to append to event notes when recovered @@ -56,9 +73,13 @@ use POSIX; use File::Find; use Time::HiRes qw/gettimeofday/; use Getopt::Long; +use autouse 'Pod::Usage'=>qw(pod2usage); use constant IMAGE_PATH => $Config{ZM_PATH_WEB}.'/'.$Config{ZM_DIR_IMAGES}; -use constant EVENT_PATH => ($Config{ZM_DIR_EVENTS}=~m|/|)?$Config{ZM_DIR_EVENTS}:($Config{ZM_PATH_WEB}.'/'.$Config{ZM_DIR_EVENTS}); +use constant EVENT_PATH => ($Config{ZM_DIR_EVENTS}=~m|/|) + ? $Config{ZM_DIR_EVENTS} + : ($Config{ZM_PATH_WEB}.'/'.$Config{ZM_DIR_EVENTS}) +; $| = 1; @@ -71,39 +92,24 @@ my $interactive = 0; my $continuous = 0; my $version; -sub usage -{ - print( " -Usage: zmaudit.pl [-r,-report|-i,-interactive] -Parameters are :- --r, --report - Just report don't actually do anything --i, --interactive - Ask before applying any changes --c, --continuous - Run continuously --v, --version - Print the installed version of ZoneMinder -"); - exit( -1 ); -} - -sub aud_print( $ ); -sub confirm( ;$$ ); -sub deleteSwapImage(); - logInit(); logSetSignal(); -if ( !GetOptions( report=>\$report, interactive=>\$interactive, continuous=>\$continuous, version=>\$version ) ) -{ - usage(); -} +GetOptions( + 'report' =>\$report, + 'interactive' =>\$interactive, + 'continuous' =>\$continuous, + 'version' =>\$version +) or pod2usage(-exitstatus => -1); if ( $version ) { - print( ZoneMinder::Base::ZM_VERSION . "\n"); - exit(0); + print( ZoneMinder::Base::ZM_VERSION . "\n"); + exit(0); } if ( ($report + $interactive + $continuous) > 1 ) { print( STDERR "Error, only one option may be specified\n" ); - usage(); + pod2usage(-exitstatus => -1); } my $dbh = zmDbConnect(); @@ -113,36 +119,46 @@ chdir( EVENT_PATH ); my $max_image_age = 6/24; # 6 hours my $max_swap_age = 24/24; # 24 hours my $image_path = IMAGE_PATH; -my $swap_image_path = $Config{ZM_PATH_SWAP}; my $loop = 1; my $cleaned = 0; MAIN: while( $loop ) { - while ( ! ( $dbh and $dbh->ping() ) ) { - $dbh = zmDbConnect(); + while ( ! ( $dbh and $dbh->ping() ) ) { + $dbh = zmDbConnect(); - last if $dbh; - if ( $continuous ) { - # if we are running continuously, then just skip to the next interval, otherwise we are a one off run, so wait a second and retry until someone kills us. - sleep( $Config{ZM_AUDIT_CHECK_INTERVAL} ); - } else { - sleep 1; - } # end if - } # end while can't connect to the db + last if $dbh; + if ( $continuous ) { + # if we are running continuously, then just skip to the next + # interval, otherwise we are a one off run, so wait a second and + # retry until someone kills us. + sleep( $Config{ZM_AUDIT_CHECK_INTERVAL} ); + } else { + sleep 1; + } # end if + } # end while can't connect to the db - my $db_monitors; + if ( ! exists $Config{ZM_AUDIT_MIN_AGE} ) { + Fatal("ZM_AUDIT_MIN_AGE is not set in config."); + } + + my $db_monitors; my $monitorSelectSql = "select Id from Monitors order by Id"; - my $monitorSelectSth = $dbh->prepare_cached( $monitorSelectSql ) or Fatal( "Can't prepare '$monitorSelectSql': ".$dbh->errstr() ); - my $eventSelectSql = "select Id, (unix_timestamp() - unix_timestamp(StartTime)) as Age from Events where MonitorId = ? order by Id"; - my $eventSelectSth = $dbh->prepare_cached( $eventSelectSql ) or Fatal( "Can't prepare '$eventSelectSql': ".$dbh->errstr() ); + my $monitorSelectSth = $dbh->prepare_cached( $monitorSelectSql ) + or Fatal( "Can't prepare '$monitorSelectSql': ".$dbh->errstr() ); + my $eventSelectSql = "SELECT Id, (unix_timestamp() - unix_timestamp(StartTime)) as Age + FROM Events WHERE MonitorId = ? ORDER BY Id"; + my $eventSelectSth = $dbh->prepare_cached( $eventSelectSql ) + or Fatal( "Can't prepare '$eventSelectSql': ".$dbh->errstr() ); $cleaned = 0; - my $res = $monitorSelectSth->execute() or Fatal( "Can't execute: ".$monitorSelectSth->errstr() ); + my $res = $monitorSelectSth->execute() + or Fatal( "Can't execute: ".$monitorSelectSth->errstr() ); while( my $monitor = $monitorSelectSth->fetchrow_hashref() ) { Debug( "Found database monitor '$monitor->{Id}'" ); my $db_events = $db_monitors->{$monitor->{Id}} = {}; - my $res = $eventSelectSth->execute( $monitor->{Id} ) or Fatal( "Can't execute: ".$eventSelectSth->errstr() ); + my $res = $eventSelectSth->execute( $monitor->{Id} ) + or Fatal( "Can't execute: ".$eventSelectSth->errstr() ); while ( my $event = $eventSelectSth->fetchrow_hashref() ) { $db_events->{$event->{Id}} = $event->{Age}; @@ -151,7 +167,7 @@ MAIN: while( $loop ) { } my $fs_monitors; - foreach my $monitor ( <[0-9]*> ) + foreach my $monitor ( glob("[0-9]*") ) { Debug( "Found filesystem monitor '$monitor'" ); my $fs_events = $fs_monitors->{$monitor} = {}; @@ -159,12 +175,13 @@ MAIN: while( $loop ) { if ( $Config{ZM_USE_DEEP_STORAGE} ) { - foreach my $day_dir ( <$monitor_dir/*/*/*> ) + foreach my $day_dir ( glob("$monitor_dir/*/*/*") ) { Debug( "Checking $day_dir" ); ( $day_dir ) = ( $day_dir =~ /^(.*)$/ ); # De-taint chdir( $day_dir ); - opendir( DIR, "." ) or Fatal( "Can't open directory '$day_dir': $!" ); + opendir( DIR, "." ) + or Fatal( "Can't open directory '$day_dir': $!" ); my @event_links = sort { $b <=> $a } grep { -l $_ } readdir( DIR ); closedir( DIR ); my $count = 0; @@ -231,7 +248,7 @@ MAIN: while( $loop ) { { while ( my ( $fs_event, $age ) = each(%$fs_events ) ) { - if ( !defined($db_events->{$fs_event}) && ($age < 0 || ($age > MIN_AGE)) ) + if ( !defined($db_events->{$fs_event}) && ($age < 0 || ($age > $Config{ZM_AUDIT_MIN_AGE})) ) { aud_print( "Filesystem event '$fs_monitor/$fs_event' does not exist in database" ); if ( confirm() ) @@ -256,7 +273,7 @@ MAIN: while( $loop ) { } my $monitor_links; - foreach my $link ( <*> ) + foreach my $link ( glob("*") ) { next if ( !-l $link ); next if ( -e $link ); @@ -274,13 +291,17 @@ MAIN: while( $loop ) { $cleaned = 0; my $deleteMonitorSql = "delete low_priority from Monitors where Id = ?"; - my $deleteMonitorSth = $dbh->prepare_cached( $deleteMonitorSql ) or Fatal( "Can't prepare '$deleteMonitorSql': ".$dbh->errstr() ); + my $deleteMonitorSth = $dbh->prepare_cached( $deleteMonitorSql ) + or Fatal( "Can't prepare '$deleteMonitorSql': ".$dbh->errstr() ); my $deleteEventSql = "delete low_priority from Events where Id = ?"; - my $deleteEventSth = $dbh->prepare_cached( $deleteEventSql ) or Fatal( "Can't prepare '$deleteEventSql': ".$dbh->errstr() ); + my $deleteEventSth = $dbh->prepare_cached( $deleteEventSql ) + or Fatal( "Can't prepare '$deleteEventSql': ".$dbh->errstr() ); my $deleteFramesSql = "delete low_priority from Frames where EventId = ?"; - my $deleteFramesSth = $dbh->prepare_cached( $deleteFramesSql ) or Fatal( "Can't prepare '$deleteFramesSql': ".$dbh->errstr() ); + my $deleteFramesSth = $dbh->prepare_cached( $deleteFramesSql ) + or Fatal( "Can't prepare '$deleteFramesSql': ".$dbh->errstr() ); my $deleteStatsSql = "delete low_priority from Stats where EventId = ?"; - my $deleteStatsSth = $dbh->prepare_cached( $deleteStatsSql ) or Fatal( "Can't prepare '$deleteStatsSql': ".$dbh->errstr() ); + my $deleteStatsSth = $dbh->prepare_cached( $deleteStatsSql ) + or Fatal( "Can't prepare '$deleteStatsSql': ".$dbh->errstr() ); while ( my ( $db_monitor, $db_events ) = each(%$db_monitors) ) { if ( my $fs_events = $fs_monitors->{$db_monitor} ) @@ -289,27 +310,33 @@ MAIN: while( $loop ) { { while ( my ( $db_event, $age ) = each(%$db_events ) ) { - if ( !defined($fs_events->{$db_event}) && ($age > MIN_AGE) ) - { - aud_print( "Database event '$db_monitor/$db_event' does not exist in filesystem" ); - if ( confirm() ) - { - my $res = $deleteEventSth->execute( $db_event ) or Fatal( "Can't execute: ".$deleteEventSth->errstr() ); - $res = $deleteFramesSth->execute( $db_event ) or Fatal( "Can't execute: ".$deleteFramesSth->errstr() ); - $res = $deleteStatsSth->execute( $db_event ) or Fatal( "Can't execute: ".$deleteStatsSth->errstr() ); - $cleaned = 1; - } + if ( !defined($fs_events->{$db_event}) ) { + if ( $age > $Config{ZM_AUDIT_MIN_AGE} ) { + aud_print( "Database event '$db_monitor/$db_event' does not exist in filesystem" ); + if ( confirm() ) { + my $res = $deleteEventSth->execute( $db_event ) + or Fatal( "Can't execute: ".$deleteEventSth->errstr() ); + $res = $deleteFramesSth->execute( $db_event ) + or Fatal( "Can't execute: ".$deleteFramesSth->errstr() ); + $res = $deleteStatsSth->execute( $db_event ) + or Fatal( "Can't execute: ".$deleteStatsSth->errstr() ); + $cleaned = 1; + } + } else { + aud_print( "Database event '$db_monitor/$db_event' does not exist in filesystem but too young to delete." ); + } } } } } else { - #aud_print( "Database monitor '$db_monitor' does not exist in filesystem" ); + aud_print( "Database monitor '$db_monitor' does not exist in filesystem" ); #if ( confirm() ) #{ # We don't actually do this in case it's new - #my $res = $deleteMonitorSth->execute( $db_monitor ) or Fatal( "Can't execute: ".$deleteMonitorSth->errstr() ); + #my $res = $deleteMonitorSth->execute( $db_monitor ) + # or Fatal( "Can't execute: ".$deleteMonitorSth->errstr() ); #$cleaned = 1; #} } @@ -318,15 +345,20 @@ MAIN: while( $loop ) { # Remove orphaned events (with no monitor) $cleaned = 0; - my $selectOrphanedEventsSql = "select Events.Id, Events.Name from Events left join Monitors on (Events.MonitorId = Monitors.Id) where isnull(Monitors.Id)"; - my $selectOrphanedEventsSth = $dbh->prepare_cached( $selectOrphanedEventsSql ) or Fatal( "Can't prepare '$selectOrphanedEventsSql': ".$dbh->errstr() ); - $res = $selectOrphanedEventsSth->execute() or Fatal( "Can't execute: ".$selectOrphanedEventsSth->errstr() ); + my $selectOrphanedEventsSql = "SELECT Events.Id, Events.Name + FROM Events LEFT JOIN Monitors ON (Events.MonitorId = Monitors.Id) + WHERE isnull(Monitors.Id)"; + my $selectOrphanedEventsSth = $dbh->prepare_cached( $selectOrphanedEventsSql ) + or Fatal( "Can't prepare '$selectOrphanedEventsSql': ".$dbh->errstr() ); + $res = $selectOrphanedEventsSth->execute() + or Fatal( "Can't execute: ".$selectOrphanedEventsSth->errstr() ); while( my $event = $selectOrphanedEventsSth->fetchrow_hashref() ) { aud_print( "Found orphaned event with no monitor '$event->{Id}'" ); if ( confirm() ) { - $res = $deleteEventSth->execute( $event->{Id} ) or Fatal( "Can't execute: ".$deleteEventSth->errstr() ); + $res = $deleteEventSth->execute( $event->{Id} ) + or Fatal( "Can't execute: ".$deleteEventSth->errstr() ); $cleaned = 1; } } @@ -334,15 +366,19 @@ MAIN: while( $loop ) { # Remove empty events (with no frames) $cleaned = 0; - my $selectEmptyEventsSql = "select * from Events as E left join Frames as F on (E.Id = F.EventId) where isnull(F.EventId) and now() - interval ".MIN_AGE." second > E.StartTime"; - my $selectEmptyEventsSth = $dbh->prepare_cached( $selectEmptyEventsSql ) or Fatal( "Can't prepare '$selectEmptyEventsSql': ".$dbh->errstr() ); - $res = $selectEmptyEventsSth->execute() or Fatal( "Can't execute: ".$selectEmptyEventsSth->errstr() ); + my $selectEmptyEventsSql = "SELECT * FROM Events as E LEFT JOIN Frames as F ON (E.Id = F.EventId) + WHERE isnull(F.EventId) AND now() - interval ".$Config{ZM_AUDIT_MIN_AGE}." second > E.StartTime"; + my $selectEmptyEventsSth = $dbh->prepare_cached( $selectEmptyEventsSql ) + or Fatal( "Can't prepare '$selectEmptyEventsSql': ".$dbh->errstr() ); + $res = $selectEmptyEventsSth->execute() + or Fatal( "Can't execute: ".$selectEmptyEventsSth->errstr() ); while( my $event = $selectEmptyEventsSth->fetchrow_hashref() ) { aud_print( "Found empty event with no frame records '$event->{Id}'" ); if ( confirm() ) { - $res = $deleteEventSth->execute( $event->{Id} ) or Fatal( "Can't execute: ".$deleteEventSth->errstr() ); + $res = $deleteEventSth->execute( $event->{Id} ) + or Fatal( "Can't execute: ".$deleteEventSth->errstr() ); $cleaned = 1; } } @@ -350,15 +386,19 @@ MAIN: while( $loop ) { # Remove orphaned frame records $cleaned = 0; - my $selectOrphanedFramesSql = "select distinct EventId from Frames where EventId not in (select Id from Events)"; - my $selectOrphanedFramesSth = $dbh->prepare_cached( $selectOrphanedFramesSql ) or Fatal( "Can't prepare '$selectOrphanedFramesSql': ".$dbh->errstr() ); - $res = $selectOrphanedFramesSth->execute() or Fatal( "Can't execute: ".$selectOrphanedFramesSth->errstr() ); + my $selectOrphanedFramesSql = "SELECT DISTINCT EventId FROM Frames + WHERE EventId NOT IN (SELECT Id FROM Events)"; + my $selectOrphanedFramesSth = $dbh->prepare_cached( $selectOrphanedFramesSql ) + or Fatal( "Can't prepare '$selectOrphanedFramesSql': ".$dbh->errstr() ); + $res = $selectOrphanedFramesSth->execute() + or Fatal( "Can't execute: ".$selectOrphanedFramesSth->errstr() ); while( my $frame = $selectOrphanedFramesSth->fetchrow_hashref() ) { aud_print( "Found orphaned frame records for event '$frame->{EventId}'" ); if ( confirm() ) { - $res = $deleteFramesSth->execute( $frame->{EventId} ) or Fatal( "Can't execute: ".$deleteFramesSth->errstr() ); + $res = $deleteFramesSth->execute( $frame->{EventId} ) + or Fatal( "Can't execute: ".$deleteFramesSth->errstr() ); $cleaned = 1; } } @@ -366,32 +406,84 @@ MAIN: while( $loop ) { # Remove orphaned stats records $cleaned = 0; - my $selectOrphanedStatsSql = "select distinct EventId from Stats where EventId not in (select Id from Events)"; - my $selectOrphanedStatsSth = $dbh->prepare_cached( $selectOrphanedStatsSql ) or Fatal( "Can't prepare '$selectOrphanedStatsSql': ".$dbh->errstr() ); - $res = $selectOrphanedStatsSth->execute() or Fatal( "Can't execute: ".$selectOrphanedStatsSth->errstr() ); + my $selectOrphanedStatsSql = "SELECT DISTINCT EventId FROM Stats + WHERE EventId NOT IN (SELECT Id FROM Events)"; + my $selectOrphanedStatsSth = $dbh->prepare_cached( $selectOrphanedStatsSql ) + or Fatal( "Can't prepare '$selectOrphanedStatsSql': ".$dbh->errstr() ); + $res = $selectOrphanedStatsSth->execute() + or Fatal( "Can't execute: ".$selectOrphanedStatsSth->errstr() ); while( my $stat = $selectOrphanedStatsSth->fetchrow_hashref() ) { aud_print( "Found orphaned statistic records for event '$stat->{EventId}'" ); if ( confirm() ) { - $res = $deleteStatsSth->execute( $stat->{EventId} ) or Fatal( "Can't execute: ".$deleteStatsSth->errstr() ); + $res = $deleteStatsSth->execute( $stat->{EventId} ) + or Fatal( "Can't execute: ".$deleteStatsSth->errstr() ); $cleaned = 1; } } redo MAIN if ( $cleaned ); # New audit to close any events that were left open for longer than MIN_AGE seconds - my $selectUnclosedEventsSql = "select E.Id, max(F.TimeStamp) as EndTime, unix_timestamp(max(F.TimeStamp)) - unix_timestamp(E.StartTime) as Length, max(F.FrameId) as Frames, count(if(F.Score>0,1,NULL)) as AlarmFrames, sum(F.Score) as TotScore, max(F.Score) as MaxScore, M.EventPrefix as Prefix from Events as E left join Monitors as M on E.MonitorId = M.Id inner join Frames as F on E.Id = F.EventId where isnull(E.Frames) or isnull(E.EndTime) group by E.Id having EndTime < (now() - interval ".MIN_AGE." second)"; - my $selectUnclosedEventsSth = $dbh->prepare_cached( $selectUnclosedEventsSql ) or Fatal( "Can't prepare '$selectUnclosedEventsSql': ".$dbh->errstr() ); - my $updateUnclosedEventsSql = "update low_priority Events set Name = ?, EndTime = ?, Length = ?, Frames = ?, AlarmFrames = ?, TotScore = ?, AvgScore = ?, MaxScore = ?, Notes = concat_ws( ' ', Notes, ? ) where Id = ?"; - my $updateUnclosedEventsSth = $dbh->prepare_cached( $updateUnclosedEventsSql ) or Fatal( "Can't prepare '$updateUnclosedEventsSql': ".$dbh->errstr() ); - $res = $selectUnclosedEventsSth->execute() or Fatal( "Can't execute: ".$selectUnclosedEventsSth->errstr() ); + my $selectUnclosedEventsSql = + "SELECT E.Id, + max(F.TimeStamp) as EndTime, + unix_timestamp(max(F.TimeStamp)) - unix_timestamp(E.StartTime) as Length, + max(F.FrameId) as Frames, + count(if(F.Score>0,1,NULL)) as AlarmFrames, + sum(F.Score) as TotScore, + max(F.Score) as MaxScore, + M.EventPrefix as Prefix + FROM Events as E + LEFT JOIN Monitors as M on E.MonitorId = M.Id + INNER JOIN Frames as F on E.Id = F.EventId + WHERE isnull(E.Frames) or isnull(E.EndTime) + GROUP BY E.Id HAVING EndTime < (now() - interval ".$Config{ZM_AUDIT_MIN_AGE}." second)" + ; + my $selectUnclosedEventsSth = $dbh->prepare_cached( $selectUnclosedEventsSql ) + or Fatal( "Can't prepare '$selectUnclosedEventsSql': ".$dbh->errstr() ); + my $updateUnclosedEventsSql = + "UPDATE low_priority Events + SET Name = ?, + EndTime = ?, + Length = ?, + Frames = ?, + AlarmFrames = ?, + TotScore = ?, + AvgScore = ?, + MaxScore = ?, + Notes = concat_ws( ' ', Notes, ? ) + WHERE Id = ?" + ; + my $updateUnclosedEventsSth = $dbh->prepare_cached( $updateUnclosedEventsSql ) + or Fatal( "Can't prepare '$updateUnclosedEventsSql': ".$dbh->errstr() ); + $res = $selectUnclosedEventsSth->execute() + or Fatal( "Can't execute: ".$selectUnclosedEventsSth->errstr() ); while( my $event = $selectUnclosedEventsSth->fetchrow_hashref() ) { aud_print( "Found open event '$event->{Id}'" ); if ( confirm( 'close', 'closing' ) ) { - $res = $updateUnclosedEventsSth->execute( sprintf( "%s%d%s", $event->{Prefix}, $event->{Id}, RECOVER_TAG ), $event->{EndTime}, $event->{Length}, $event->{Frames}, $event->{AlarmFrames}, $event->{TotScore}, $event->{AlarmFrames}?int($event->{TotScore}/$event->{AlarmFrames}):0, $event->{MaxScore}, RECOVER_TEXT, $event->{Id} ) or Fatal( "Can't execute: ".$updateUnclosedEventsSth->errstr() ); + $res = $updateUnclosedEventsSth->execute + ( + sprintf("%s%d%s", + $event->{Prefix}, + $event->{Id}, + RECOVER_TAG + ), + $event->{EndTime}, + $event->{Length}, + $event->{Frames}, + $event->{AlarmFrames}, + $event->{TotScore}, + $event->{AlarmFrames} + ? int($event->{TotScore} / $event->{AlarmFrames}) + : 0 + , + $event->{MaxScore}, + RECOVER_TEXT, + $event->{Id} + ) or Fatal( "Can't execute: ".$updateUnclosedEventsSth->errstr() ); } } @@ -405,7 +497,7 @@ MAIN: while( $loop ) { } # Now delete any old swap files - ( my $swap_image_root ) = ( $swap_image_path =~ /^(.*)$/ ); # De-taint + ( my $swap_image_root ) = ( $Config{ZM_PATH_SWAP} =~ /^(.*)$/ ); # De-taint File::Find::find( { wanted=>\&deleteSwapImage, untaint=>1 }, $swap_image_root ); # Prune the Logs table if required @@ -414,26 +506,43 @@ MAIN: while( $loop ) { if ( $Config{ZM_LOG_DATABASE_LIMIT} =~ /^\d+$/ ) { # Number of rows - my $selectLogRowCountSql = "select count(*) as Rows from Logs"; - my $selectLogRowCountSth = $dbh->prepare_cached( $selectLogRowCountSql ) or Fatal( "Can't prepare '$selectLogRowCountSql': ".$dbh->errstr() ); - $res = $selectLogRowCountSth->execute() or Fatal( "Can't execute: ".$selectLogRowCountSth->errstr() ); + my $selectLogRowCountSql = "SELECT count(*) as Rows from Logs"; + my $selectLogRowCountSth = $dbh->prepare_cached( $selectLogRowCountSql ) + or Fatal( "Can't prepare '$selectLogRowCountSql': ".$dbh->errstr() ); + $res = $selectLogRowCountSth->execute() + or Fatal( "Can't execute: ".$selectLogRowCountSth->errstr() ); my $row = $selectLogRowCountSth->fetchrow_hashref(); my $logRows = $row->{Rows}; if ( $logRows > $Config{ZM_LOG_DATABASE_LIMIT} ) { - my $deleteLogByRowsSql = "delete low_priority from Logs order by TimeKey asc limit ?"; - my $deleteLogByRowsSth = $dbh->prepare_cached( $deleteLogByRowsSql ) or Fatal( "Can't prepare '$deleteLogByRowsSql': ".$dbh->errstr() ); - $res = $deleteLogByRowsSth->execute( $logRows - $Config{ZM_LOG_DATABASE_LIMIT} ) or Fatal( "Can't execute: ".$deleteLogByRowsSth->errstr() ); - aud_print( "Deleted ".$deleteLogByRowsSth->rows()." log table entries by count\n" ) if ( $deleteLogByRowsSth->rows() ); + my $deleteLogByRowsSql = "DELETE low_priority FROM Logs ORDER BY TimeKey ASC LIMIT ?"; + my $deleteLogByRowsSth = $dbh->prepare_cached( $deleteLogByRowsSql ) + or Fatal( "Can't prepare '$deleteLogByRowsSql': ".$dbh->errstr() ); + $res = $deleteLogByRowsSth->execute( $logRows - $Config{ZM_LOG_DATABASE_LIMIT} ) + or Fatal( "Can't execute: ".$deleteLogByRowsSth->errstr() ); + if ( $deleteLogByRowsSth->rows() ) + { + aud_print( "Deleted ".$deleteLogByRowsSth->rows() + ." log table entries by count\n" ) + ; + } } } else { # Time of record - my $deleteLogByTimeSql = "delete low_priority from Logs where TimeKey < unix_timestamp(now() - interval ".$Config{ZM_LOG_DATABASE_LIMIT}.")"; - my $deleteLogByTimeSth = $dbh->prepare_cached( $deleteLogByTimeSql ) or Fatal( "Can't prepare '$deleteLogByTimeSql': ".$dbh->errstr() ); - $res = $deleteLogByTimeSth->execute() or Fatal( "Can't execute: ".$deleteLogByTimeSth->errstr() ); - aud_print( "Deleted ".$deleteLogByTimeSth->rows()." log table entries by time\n" ) if ( $deleteLogByTimeSth->rows() ); + my $deleteLogByTimeSql = + "DELETE low_priority FROM Logs + WHERE TimeKey < unix_timestamp(now() - interval ".$Config{ZM_LOG_DATABASE_LIMIT}.")"; + my $deleteLogByTimeSth = $dbh->prepare_cached( $deleteLogByTimeSql ) + or Fatal( "Can't prepare '$deleteLogByTimeSql': ".$dbh->errstr() ); + $res = $deleteLogByTimeSth->execute() + or Fatal( "Can't execute: ".$deleteLogByTimeSth->errstr() ); + if ( $deleteLogByTimeSth->rows() ){ + aud_print( "Deleted ".$deleteLogByTimeSth->rows() + ." log table entries by time\n" ) + ; + } } } $loop = $continuous; @@ -443,7 +552,7 @@ MAIN: while( $loop ) { exit( 0 ); -sub aud_print( $ ) +sub aud_print { my $string = shift; if ( !$continuous ) @@ -456,7 +565,7 @@ sub aud_print( $ ) } } -sub confirm( ;$$ ) +sub confirm { my $prompt = shift || "delete"; my $action = shift || "deleting"; @@ -496,7 +605,7 @@ sub confirm( ;$$ ) return( $yesno ); } -sub deleteSwapImage() +sub deleteSwapImage { my $file = $_; diff --git a/scripts/zmcamtool.pl.in b/scripts/zmcamtool.pl.in index cb4e036a9..eaa32edef 100644 --- a/scripts/zmcamtool.pl.in +++ b/scripts/zmcamtool.pl.in @@ -20,12 +20,43 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This script provides a way to import new ptz camera controls & camera presets -# into existing zoneminder systems. This script also provides a way to export -# ptz camera controls & camera presets from an existing zoneminder system into -# a sql file, which can then be easily imported to another zoneminder system. -# + +=head1 NAME + +zmcamtool.pl - ZoneMinder tool to import camera controls and presets + +=head1 SYNOPSIS + + zmcamtool.pl [--user= --pass=] + [--import [file.sql] [--overwrite]] + [--export [name]] + [--topreset id [--noregex]] + +=head1 DESCRIPTION + +This script provides a way to import new ptz camera controls & camera presets +into existing zoneminder systems. This script also provides a way to export +ptz camera controls & camera presets from an existing zoneminder system into +a sql file, which can then be easily imported to another zoneminder system. + +=head1 OPTIONS + + --export - Export all camera controls and presets to STDOUT. + Optionally specify a control or preset name. + --import [file.sql] - Import new camera controls and presets found in + zm_create.sql into the ZoneMinder dB. + Optionally specify an alternate sql file to read from. + --overwrite - Overwrite any existing controls or presets. + with the same name as the new controls or presets. + --topreset id - Copy a monitor to a Camera Preset given the monitor id. + --noregex - Do not try to find and replace fields such as usernames, + passwords, IP addresses, etc with generic placeholders + when converting a monitor to a preset. + --help - Print usage information. + --user= - Alternate dB user with privileges to alter dB. + --pass= - Password of alternate dB user with privileges to alter dB. + +=cut use strict; use bytes; @@ -35,6 +66,7 @@ use ZoneMinder::Logger qw(:all); use ZoneMinder::Database qw(:all); use DBI; use Getopt::Long; +use autouse 'Pod::Usage'=>qw(pod2usage); $ENV{PATH} = '/bin:/usr/bin:/usr/local/bin'; $ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; @@ -57,256 +89,258 @@ my $dbUser = $Config{ZM_DB_USER}; my $dbPass = $Config{ZM_DB_PASS}; my $version = 0; -# Process commandline parameters with getopt long -if ( !GetOptions( 'export'=>\$export, 'import'=>\$import, 'overwrite'=>\$overwrite, 'help'=>\$help, 'topreset'=>\$topreset, 'noregex'=>\$noregex, 'user:s'=>\$dbUser, 'pass:s'=>\$dbPass, 'version'=>\$version ) ) { - Usage(); -} +GetOptions( + 'export' =>\$export, + 'import' =>\$import, + 'overwrite' =>\$overwrite, + 'help' =>\$help, + 'topreset' =>\$topreset, + 'noregex' =>\$noregex, + 'user:s' =>\$dbUser, + 'pass:s' =>\$dbPass, + 'version' =>\$version +) or pod2usage(-exitstatus => -1); $Config{ZM_DB_USER} = $dbUser; $Config{ZM_DB_PASS} = $dbPass; if ( $version ) { - print( ZoneMinder::Base::ZM_VERSION . "\n"); - exit(0); + print( ZoneMinder::Base::ZM_VERSION . "\n"); + exit(0); } # Check to make sure commandline params make sense if ( ((!$help) && ($import + $export + $topreset) != 1 )) { - print( STDERR qq/Please give only one of the following: "import", "export", or "topreset".\n/ ); - Usage(); + print( STDERR qq/Please give only one of the following: "import", "export", or "topreset".\n/ ); + pod2usage(-exitstatus => -1); } if ( ($export)&&($overwrite) ) { - print( "Warning: Overwrite parameter ignored during an export.\n"); + print( "Warning: Overwrite parameter ignored during an export.\n"); } if ( ($noregex)&&(!$topreset) ) { - print( qq/Warning: Noregex parameter only applies when "topreset" parameter is also set. Ignoring.\n/); + print( qq/Warning: Noregex parameter only applies when "topreset" parameter is also set. Ignoring.\n/); } if ( ($topreset)&&($ARGV[0] !~ /\d\d*/) ) { - print( STDERR qq/Parameter "topreset" requires a valid monitor ID.\n/ ); - Usage(); + print( STDERR qq/Parameter "topreset" requires a valid monitor ID.\n/ ); + pod2usage(-exitstatus => -1); } # Call the appropriate subroutine based on the params given on the commandline if ($help) { - Usage(); + pod2usage(-exitstatus => -1); } if ($export) { - exportsql(); + exportsql(); } if ($import) { - importsql(); + importsql(); } if ($topreset) { - toPreset(); + toPreset(); } ############### # SUBROUTINES # ############### -# Usage subroutine help text -sub Usage -{ -die(" -USAGE: -zmcamtool.pl [--user= --pass=] - [--import [file.sql] [--overwrite]] - [--export [name]] - [--topreset id [--noregex]] - -PARAMETERS: ---export - Export all camera controls and presets to STDOUT. - Optionally specify a control or preset name. ---import [file.sql] - Import new camera controls and presets found in - zm_create.sql into the ZoneMinder dB. - Optionally specify an alternate sql file to read from. ---overwrite - Overwrite any existing controls or presets. - with the same name as the new controls or presets. ---topreset id - Copy a monitor to a Camera Preset given the monitor id. ---noregex - Do not try to find and replace fields such as usernames, - passwords, ip addresses, etc with generic placeholders - when converting a monitor to a preset. ---help - Print usage information. ---user= - Alternate dB user with privileges to alter dB. ---pass= - Password of alternate dB user with privileges to alter dB. -\n"); -} - # Execute a pre-built sql select query sub selectQuery { - my $dbh = shift; - my $sql = shift; - my $monitorid = shift; + my $dbh = shift; + my $sql = shift; + my $monitorid = shift; - my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute($monitorid) or die( "Can't execute: ".$sth->errstr() ); + my $sth = $dbh->prepare_cached( $sql ) + or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute($monitorid) + or die( "Can't execute: ".$sth->errstr() ); - my @data = $sth->fetchrow_array(); - $sth->finish(); + my @data = $sth->fetchrow_array(); + $sth->finish(); - return @data; + return @data; } # Exectute a pre-built sql query sub runQuery { - my $dbh = shift; - my $sql = shift; - my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute() or die( "Can't execute: ".$sth->errstr() ); - $sth->finish(); + my $dbh = shift; + my $sql = shift; + my $sth = $dbh->prepare_cached( $sql ) + or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() + or die( "Can't execute: ".$sth->errstr() ); + $sth->finish(); - return $res; + return $res; } # Build and execute a sql insert query sub insertQuery { - my $dbh = shift; - my $tablename = shift; - my @data = @_; + my $dbh = shift; + my $tablename = shift; + my @data = @_; - my $sql = "insert into $tablename values (NULL,".(join ", ", ("?") x @data).")"; # Add "?" for each array element + my $sql = "INSERT INTO $tablename VALUES (NULL," + .(join ", ", ("?") x @data).")"; # Add "?" for each array element - my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute(@data) or die( "Can't execute: ".$sth->errstr() ); - $sth->finish(); + my $sth = $dbh->prepare_cached( $sql ) + or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute(@data) + or die( "Can't execute: ".$sth->errstr() ); + $sth->finish(); - return $res; + return $res; } # Build and execute a sql delete query sub deleteQuery { - my $dbh = shift; - my $sqltable = shift; - my $sqlname = shift; + my $dbh = shift; + my $sqltable = shift; + my $sqlname = shift; - my $sql = "delete from $sqltable where Name = ?"; - my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute($sqlname) or die( "Can't execute: ".$sth->errstr() ); - $sth->finish(); + my $sql = "DELETE FROM $sqltable WHERE Name = ?"; + my $sth = $dbh->prepare_cached( $sql ) + or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute($sqlname) + or die( "Can't execute: ".$sth->errstr() ); + $sth->finish(); - return $res; + return $res; } # Build and execute a sql select count query sub checkExists { - my $dbh = shift; - my $sqltable = shift; - my $sqlname = shift; - my $result = 0; + my $dbh = shift; + my $sqltable = shift; + my $sqlname = shift; + my $result = 0; - my $sql = "select count(*) from $sqltable where Name = ?"; - my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute($sqlname) or die( "Can't execute: ".$sth->errstr() ); + my $sql = "SELECT count(*) FROM $sqltable WHERE Name = ?"; + my $sth = $dbh->prepare_cached( $sql ) + or die( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute($sqlname) + or die( "Can't execute: ".$sth->errstr() ); - my $rows = $sth->fetchrow_arrayref(); - $sth->finish(); + my $rows = $sth->fetchrow_arrayref(); + $sth->finish(); - if ($rows->[0] > 0) { - $result = 1; - } + if ($rows->[0] > 0) { + $result = 1; + } - return $result; + return $result; } # Import camera control & presets into the zoneminder dB sub importsql { - my @newcontrols; - my @overwritecontrols; - my @skippedcontrols; - my @newpresets; - my @overwritepresets; - my @skippedpresets; - my %controls; - my %monitorpresets; + my @newcontrols; + my @overwritecontrols; + my @skippedcontrols; + my @newpresets; + my @overwritepresets; + my @skippedpresets; + my %controls; + my %monitorpresets; - if ($ARGV[0]) { - $sqlfile = $ARGV[0]; - } else { - $sqlfile = $Config{ZM_PATH_DATA}.'/db/zm_create.sql'; - } + if ($ARGV[0]) { + $sqlfile = $ARGV[0]; + } else { + $sqlfile = $Config{ZM_PATH_DATA}.'/db/zm_create.sql'; + } - open(my $SQLFILE,"<",$sqlfile) or die( "Can't Open file: $!\n" ); + open(my $SQLFILE,"<",$sqlfile) + or die( "Can't Open file: $!\n" ); - # Find and extract ptz control and monitor preset records - while (<$SQLFILE>) { - # Our regex replaces the primary key with NULL - if (s/^(INSERT INTO .*?Controls.*? VALUES \().*?(,')(.*?)(',.*)/$1NULL$2$3$4/i) { - $controls{$3} = $_; - } elsif (s/^(INSERT INTO .*?MonitorPresets.*? VALUES \().*?(,')(.*?)(',.*)/$1NULL$2$3$4/i) { - $monitorpresets{$3} = $_; - } - } - close $SQLFILE; + # Find and extract ptz control and monitor preset records + while (<$SQLFILE>) { + # Our regex replaces the primary key with NULL + if (s/^(INSERT INTO .*?Controls.*? VALUES \().*?(,')(.*?)(',.*)/$1NULL$2$3$4/i) { + $controls{$3} = $_; + } elsif (s/^(INSERT INTO .*?MonitorPresets.*? VALUES \().*?(,')(.*?)(',.*)/$1NULL$2$3$4/i) { + $monitorpresets{$3} = $_; + } + } + close $SQLFILE; - if ( ! (%controls || %monitorpresets) ) { - die( "Error: No relevant data found in $sqlfile.\n" ); - } + if ( ! (%controls || %monitorpresets) ) { + die( "Error: No relevant data found in $sqlfile.\n" ); + } - # Now that we've got what we were looking for, compare to what is already in the dB + # Now that we've got what we were looking for, + # compare to what is already in the dB - my $dbh = zmDbConnect(); - foreach (keys %controls) { - if (!checkExists($dbh,"Controls",$_)) { - # No existing Control was found. Add new control to dB. - runQuery($dbh,$controls{$_}); - push @newcontrols, $_; - } elsif ($overwrite) { - # An existing Control was found and the overwrite flag is set. Overwrite the control. - deleteQuery($dbh,"Controls",$_); - runQuery($dbh,$controls{$_}); - push @overwritecontrols, $_; - } else { - # An existing Control was found and the overwrite flag was not set. Do nothing. - push @skippedcontrols, $_; - } - } + my $dbh = zmDbConnect(); + foreach (keys %controls) { + if (!checkExists($dbh,"Controls",$_)) { + # No existing Control was found. Add new control to dB. + runQuery($dbh,$controls{$_}); + push @newcontrols, $_; + } elsif ($overwrite) { + # An existing Control was found and the overwrite flag is set. + # Overwrite the control. + deleteQuery($dbh,"Controls",$_); + runQuery($dbh,$controls{$_}); + push @overwritecontrols, $_; + } else { + # An existing Control was found and the overwrite flag was not set. + # Do nothing. + push @skippedcontrols, $_; + } + } - foreach (keys %monitorpresets) { - if (!checkExists($dbh,"MonitorPresets",$_)) { - # No existing MonitorPreset was found. Add new MonitorPreset to dB. - runQuery($dbh,$monitorpresets{$_}); - push @newpresets, $_; - } elsif ($overwrite) { - # An existing MonitorPreset was found and the overwrite flag is set. Overwrite the MonitorPreset. - deleteQuery($dbh,"MonitorPresets",$_); - runQuery($dbh,$monitorpresets{$_}); - push @overwritepresets, $_; - } else { - # An existing MonitorPreset was found and the overwrite flag was not set. Do nothing. - push @skippedpresets, $_; - } - } + foreach (keys %monitorpresets) { + if (!checkExists($dbh,"MonitorPresets",$_)) { + # No existing MonitorPreset was found. Add new MonitorPreset to dB. + runQuery($dbh,$monitorpresets{$_}); + push @newpresets, $_; + } elsif ($overwrite) { + # An existing MonitorPreset was found and the overwrite flag is set. + # Overwrite the MonitorPreset. + deleteQuery($dbh,"MonitorPresets",$_); + runQuery($dbh,$monitorpresets{$_}); + push @overwritepresets, $_; + } else { + # An existing MonitorPreset was found and the overwrite flag was + # not set. Do nothing. + push @skippedpresets, $_; + } + } - if (@newcontrols) { - print "Number of ptz camera controls added: ".scalar(@newcontrols)."\n"; - } - if (@overwritecontrols) { - print "Number of existing ptz camera controls overwritten: ".scalar(@overwritecontrols)."\n"; - } - if (@skippedcontrols) { - print "Number of existing ptz camera controls skipped: ".scalar(@skippedcontrols)."\n"; - } + if (@newcontrols) { + print "Number of ptz camera controls added: " + .scalar(@newcontrols)."\n"; + } + if (@overwritecontrols) { + print "Number of existing ptz camera controls overwritten: " + .scalar(@overwritecontrols)."\n"; + } + if (@skippedcontrols) { + print "Number of existing ptz camera controls skipped: " + .scalar(@skippedcontrols)."\n"; + } - if (@newpresets) { - print "Number of monitor presets added: ".scalar(@newpresets)."\n"; - } - if (@overwritepresets) { - print "Number of existing monitor presets overwritten: ".scalar(@overwritepresets)."\n"; - } - if (@skippedpresets) { - print "Number of existing presets skipped: ".scalar(@skippedpresets)."\n"; - } + if (@newpresets) { + print "Number of monitor presets added: " + .scalar(@newpresets)."\n"; + } + if (@overwritepresets) { + print "Number of existing monitor presets overwritten: " + .scalar(@overwritepresets)."\n"; + } + if (@skippedpresets) { + print "Number of existing presets skipped: " + .scalar(@skippedpresets)."\n"; + } } # Export camera controls & presets from the zoneminder dB to STDOUT @@ -317,14 +351,14 @@ my ( $host, $port ) = ( $Config{ZM_DB_HOST} =~ /^([^:]+)(?::(.+))?$/ ); my $command = "mysqldump -t --skip-opt --compact -h".$host; $command .= " -P".$port if defined($port); if ( $dbUser ) { - $command .= " -u".$dbUser; - if ( $dbPass ) { - $command .= " -p".$dbPass; - } - } + $command .= " -u".$dbUser; + if ( $dbPass ) { + $command .= " -p".$dbPass; + } + } if ($ARGV[0]) { - $command .= qq( --where="Name = '$ARGV[0]'"); + $command .= qq( --where="Name = '$ARGV[0]'"); } $command .= " zm Controls MonitorPresets"; @@ -332,78 +366,81 @@ $command .= " zm Controls MonitorPresets"; my $output = qx($command); my $status = $? >> 8; if ( $status || logDebugging() ) { - chomp( $output ); - print( "Output: $output\n" ); + chomp( $output ); + print( "Output: $output\n" ); } if ( $status ) { - die( "Command '$command' exited with status: $status\n" ); + die( "Command '$command' exited with status: $status\n" ); } else { - # NULLify the primary keys before printing the output to STDOUT - $output =~ s/VALUES \((.*?),'/VALUES \(NULL,'/ig; - print $output; - } + # NULLify the primary keys before printing the output to STDOUT + $output =~ s/VALUES \((.*?),'/VALUES \(NULL,'/ig; + print $output; + } } sub toPreset { - my $dbh = zmDbConnect(); - my $monitorid = $ARGV[0]; + my $dbh = zmDbConnect(); + my $monitorid = $ARGV[0]; - # Grap the following fields from the Monitors table - my $sql = "select - Name, - Type, - Device, - Channel, - Format, - Protocol, - Method, - Host, - Port, - Path, - SubPath, - Width, - Height, - Palette, - MaxFPS, - Controllable, - ControlId, - ControlDevice, - ControlAddress, - DefaultRate, - DefaultScale - from Monitors where Id = ?"; - my @data = selectQuery($dbh,$sql,$monitorid); + # Grap the following fields from the Monitors table + my $sql = "SELECT + Name, + Type, + Device, + Channel, + Format, + Protocol, + Method, + Host, + Port, + Path, + SubPath, + Width, + Height, + Palette, + MaxFPS, + Controllable, + ControlId, + ControlDevice, + ControlAddress, + DefaultRate, + DefaultScale + FROM Monitors WHERE Id = ?"; + my @data = selectQuery($dbh,$sql,$monitorid); - if (!@data) { - die( "Error: Monitor Id $monitorid does not appear to exist in the database.\n" ); - } + if (!@data) { + die( "Error: Monitor Id $monitorid does not appear to exist in the database.\n" ); + } - # Attempt to search for and replace system specific values such as ip addresses, ports, usernames, etc. with generic placeholders - if (!$noregex) { - foreach (@data) { - s/\b(?:\d{1,3}\.){3}\d{1,3}\b//; # ip address - s/:(6553[0-5]|655[0-2]\d|65[0-4]\d\d|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0)$/:/; # tcpip port - s/\/\/.*:.*@/\/\/:@/; # user & pwd preceeding an ip address - s/(&|\?)(user|username)=\w\w*(&|\?)/$1$2=$3/i; # username embeded in url - s/(&|\?)(pwd|password)=\w\w*(&|\?)/$1$2=$3/i; # password embeded in url - s/\w\w*:\w\w*/:/; # user & pwd in their own field - s/\/dev\/video\d\d*/\/dev\/video/; # local video devices - } - } + # Attempt to search for and replace system specific values such as + # ip addresses, ports, usernames, etc. with generic placeholders + if (!$noregex) { + foreach (@data) { + s/\b(?:\d{1,3}\.){3}\d{1,3}\b//; # ip address + s/:(6553[0-5]|655[0-2]\d|65[0-4]\d\d|6[0-4]\d{3}|[1-5]\d{4}|[1-9]\d{0,3}|0)$/:/; # tcpip port + s/\/\/.*:.*@/\/\/:@/; # user & pwd preceeding an ip address + s/(&|\?)(user|username)=\w\w*(&|\?)/$1$2=$3/i; # username embeded in url + s/(&|\?)(pwd|password)=\w\w*(&|\?)/$1$2=$3/i; # password embeded in url + s/\w\w*:\w\w*/:/; # user & pwd in their own field + s/\/dev\/video\d\d*/\/dev\/video/; # local video devices + } + } - if (!checkExists($dbh,"MonitorPresets",$data[0])) { - # No existing Preset was found. Add new Preset to dB. - print "Adding new preset: $data[0]\n"; - insertQuery($dbh,"MonitorPresets",@data); - } elsif ($overwrite) { - # An existing Control was found and the overwrite flag is set. Overwrite the control. - print "Existing preset $data[0] detected.\nOverwriting...\n"; - deleteQuery($dbh,"MonitorPresets",$data[0]); - insertQuery($dbh,"MonitorPresets",@data); - } else { - # An existing Control was found and the overwrite flag was not set. Do nothing. - print "Existing preset $data[0] detected and overwrite flag not set.\nSkipping...\n"; - } + if (!checkExists($dbh,"MonitorPresets",$data[0])) { + # No existing Preset was found. Add new Preset to dB. + print "Adding new preset: $data[0]\n"; + insertQuery($dbh,"MonitorPresets",@data); + } elsif ($overwrite) { + # An existing Control was found and the overwrite flag is set. + # Overwrite the control. + print "Existing preset $data[0] detected.\nOverwriting...\n"; + deleteQuery($dbh,"MonitorPresets",$data[0]); + insertQuery($dbh,"MonitorPresets",@data); + } else { + # An existing Control was found and the overwrite flag was not set. + # Do nothing. + print "Existing preset $data[0] detected and overwrite flag not set.\nSkipping...\n"; + } } diff --git a/scripts/zmcontrol.pl.in b/scripts/zmcontrol.pl.in index 817b80cf6..ee078f9a0 100644 --- a/scripts/zmcontrol.pl.in +++ b/scripts/zmcontrol.pl.in @@ -20,16 +20,39 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This script continuously monitors the recorded events for the given -# monitor and applies any filters which would delete and/or upload -# matching events -# + +=head1 NAME + +zmcontrol.pl - ZoneMinder control script + +=head1 SYNOPSIS + + zmcontrol.pl --id {monitor_id} --command={command} [various options] + +=head1 DESCRIPTION + +FIXME FIXME + +=head1 OPTIONS + + --autostop - + --xcoord [ arg ] - X-coord + --ycoord [ arg ] - Y-coord + --speed [ arg ] - Speed + --step [ arg ] - + --panspeed [ arg ] - + --panstep [ arg ] - + --tiltspeed [ arg ] - + --tiltstep [ arg ] - + --preset [ arg ] - + +=cut use strict; @EXTRA_PERL_LIB@ use ZoneMinder; use Getopt::Long; +use autouse 'Pod::Usage'=>qw(pod2usage); use POSIX qw/strftime EPIPE/; use Socket; #use Data::Dumper; @@ -44,14 +67,6 @@ $ENV{PATH} = '/bin:/usr/bin'; $ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; -sub Usage -{ - print( " -Usage: zmcontrol.pl --id --command= -"); - exit(); -} - logInit(); my $arg_string = join( " ", @ARGV ); @@ -59,29 +74,25 @@ my $arg_string = join( " ", @ARGV ); my $id; my %options; -if ( !GetOptions( - 'id=i'=>\$id, - 'command=s'=>\$options{command}, - 'xcoord=i'=>\$options{xcoord}, - 'ycoord=i'=>\$options{ycoord}, - 'speed=i'=>\$options{speed}, - 'step=i'=>\$options{step}, - 'panspeed=i'=>\$options{panspeed}, - 'tiltspeed=i'=>\$options{tiltspeed}, - 'panstep=i'=>\$options{panstep}, - 'tiltstep=i'=>\$options{tiltstep}, - 'preset=i'=>\$options{preset}, - 'autostop'=>\$options{autostop}, - ) -) -{ - Usage(); -} +GetOptions( + 'id=i' =>\$id, + 'command=s' =>\$options{command}, + 'xcoord=i' =>\$options{xcoord}, + 'ycoord=i' =>\$options{ycoord}, + 'speed=i' =>\$options{speed}, + 'step=i' =>\$options{step}, + 'panspeed=i' =>\$options{panspeed}, + 'tiltspeed=i' =>\$options{tiltspeed}, + 'panstep=i' =>\$options{panstep}, + 'tiltstep=i' =>\$options{tiltstep}, + 'preset=i' =>\$options{preset}, + 'autostop' =>\$options{autostop}, +) or pod2usage(-exitstatus => -1); if ( !$id || !$options{command} ) { print( STDERR "Please give a valid monitor id and command\n" ); - Usage(); + pod2usage(-exitstatus => -1); } ( $id ) = $id =~ /^(\w+)$/; @@ -90,13 +101,14 @@ Debug( $arg_string ); my $sock_file = $Config{ZM_PATH_SOCKS}.'/zmcontrol-'.$id.'.sock'; -socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); +socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) + or Fatal( "Can't open socket: $!" ); my $saddr = sockaddr_un( $sock_file ); my $server_up = connect( CLIENT, $saddr ); if ( !$server_up ) { - # The server isn't there + # The server isn't there my $monitor = zmDbGetMonitorAndControl( $id ); if ( !$monitor ) { @@ -129,16 +141,17 @@ if ( !$server_up ) Info( "Starting control server $id/$protocol" ); close( CLIENT ); - if ( ! can_load( modules => { "ZoneMinder::Control::$protocol" => undef } ) ) { - Fatal("Can't load ZoneMinder::Control::$protocol"); - } + if ( ! can_load( modules => { "ZoneMinder::Control::$protocol" => undef } ) ) { + Fatal("Can't load ZoneMinder::Control::$protocol"); + } if ( my $cpid = fork() ) { logReinit(); # Parent process just sleep and fall through - socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) or die( "Can't open socket: $!" ); + socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) + or die( "Can't open socket: $!" ); my $attempts = 0; while (!connect( CLIENT, $saddr )) { @@ -156,7 +169,9 @@ if ( !$server_up ) logReinit(); - Info( "Control server $id/$protocol starting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() ) ); + Info( "Control server $id/$protocol starting at " + .strftime( '%y/%m/%d %H:%M:%S', localtime() ) + ); $0 = $0." --id $id"; @@ -166,7 +181,8 @@ if ( !$server_up ) $control->open(); - socket( SERVER, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); + socket( SERVER, PF_UNIX, SOCK_STREAM, 0 ) + or Fatal( "Can't open socket: $!" ); unlink( $sock_file ); bind( SERVER, $saddr ) or Fatal( "Can't bind: $!" ); listen( SERVER, SOMAXCONN ) or Fatal( "Can't listen: $!" ); @@ -193,9 +209,9 @@ if ( !$server_up ) my $command = $params->{command}; close( CLIENT ); - if ( $command eq 'quit' ) { - last; - } + if ( $command eq 'quit' ) { + last; + } $control->$command( $params ); } else @@ -220,7 +236,9 @@ if ( !$server_up ) last; } } - Info( "Control server $id/$protocol exiting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() ) ); + Info( "Control server $id/$protocol exiting at " + .strftime( '%y/%m/%d %H:%M:%S', localtime() ) + ); unlink( $sock_file ); $control->close(); exit( 0 ); diff --git a/scripts/zmdc.pl.in b/scripts/zmdc.pl.in index c209ae63f..3284674fe 100644 --- a/scripts/zmdc.pl.in +++ b/scripts/zmdc.pl.in @@ -20,13 +20,30 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This script is the gateway for controlling the various ZoneMinder -# daemons. All starting, stopping and restarting goes through here. -# On the first invocation it starts up a server which subsequently -# records what's running and what's not. Other invocations just -# connect to the server and pass instructions to it. -# + +=head1 NAME + +zmdc.pl - ZoneMinder Daemon Control script + +=head1 SYNOPSIS + + zmdc.pl {command} [daemon [options]] + +=head1 DESCRIPTION + +This script is the gateway for controlling the various ZoneMinder +daemons. All starting, stopping and restarting goes through here. +On the first invocation it starts up a server which subsequently +records what's running and what's not. Other invocations just +connect to the server and pass instructions to it. + +=head1 OPTIONS + + {command} - One of 'startup|shutdown|status|check|logrot' or + 'start|stop|restart|reload|version'. + [daemon [options]] - Daemon name and options, required for second group of commands + +=cut use strict; use bytes; @@ -49,6 +66,7 @@ use ZoneMinder; use POSIX; use Socket; use IO::Handle; +use autouse 'Pod::Usage'=>qw(pod2usage); #use Data::Dumper; use constant SOCK_FILE => $Config{ZM_PATH_SOCKS}.'/zmdc.sock'; @@ -72,34 +90,22 @@ my @daemons = ( 'zmtrack.pl' ); -sub Usage -{ - print( " -Usage: zmdc.pl [daemon [options]] -Parameters are :- - - One of 'startup|shutdown|status|check|logrot' or - 'start|stop|restart|reload|version'. -[daemon [options]] - Daemon name and options, required for second group of commands -"); - exit( -1 ); -} - my $command = shift @ARGV; if( !$command ) { print( STDERR "No command given\n" ); - Usage(); + pod2usage(-exitstatus => -1); } if ( $command eq 'version' ) { - print ZoneMinder::Base::ZM_VERSION."\n"; - exit( 0 ); + print ZoneMinder::Base::ZM_VERSION."\n"; + exit( 0 ); } my $needs_daemon = $command !~ /(?:startup|shutdown|status|check|logrot|version)/; my $daemon = shift( @ARGV ); if( $needs_daemon && !$daemon ) { print( STDERR "No daemon given\n" ); - Usage(); + pod2usage(-exitstatus => -1); } my @args; @@ -113,7 +119,7 @@ if ( $needs_daemon ) else { print( STDERR "Invalid daemon '$daemon' specified" ); - Usage(); + pod2usage(-exitstatus => -1); } } @@ -152,7 +158,7 @@ if ( !$server_up ) print( "Unable to connect to server\n" ); exit( -1 ); } - # The server isn't there + # The server isn't there print( "Starting server\n" ); close( CLIENT ); @@ -235,12 +241,15 @@ sub run logInit(); - dPrint( ZoneMinder::Logger::INFO, "Server starting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); + dPrint( ZoneMinder::Logger::INFO, "Server starting at " + .strftime( '%y/%m/%d %H:%M:%S', localtime() ) + ."\n" + ); - if ( open( PID, ">".ZM_PID ) ) + if ( open( my $PID, '>', ZM_PID ) ) { - print( PID $$ ); - close( PID ); + print( $PID $$ ); + close( $PID ); } killAll( 1 ); @@ -354,7 +363,10 @@ sub run restartPending(); } } - dPrint( ZoneMinder::Logger::INFO, "Server exiting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); + dPrint( ZoneMinder::Logger::INFO, "Server exiting at " + .strftime( '%y/%m/%d %H:%M:%S', localtime() ) + ."\n" + ); unlink( main::SOCK_FILE ); unlink( ZM_PID ); exit(); @@ -402,8 +414,7 @@ sub start my $daemon = shift; my @args = @_; - my $command = $daemon; - $command .= ' '.join( ' ', ( @args ) ) if ( @args ); + my $command = join(' ', $daemon, @args ); my $process = $cmd_hash{$command}; if ( !$process ) @@ -413,7 +424,10 @@ sub start } elsif ( $process->{pid} && $pid_hash{$process->{pid}} ) { - dPrint( ZoneMinder::Logger::INFO, "'$process->{command}' already running at ".strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{started}) ).", pid = $process->{pid}\n" ); + dPrint( ZoneMinder::Logger::INFO, "'$process->{command}' already running at " + .strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{started}) ) + .", pid = $process->{pid}\n" + ); return(); } @@ -428,7 +442,10 @@ sub start $process->{started} = time(); delete( $process->{pending} ); - dPrint( ZoneMinder::Logger::INFO, "'$command' starting at ".strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{started}) ).", pid = $process->{pid}\n" ); + dPrint( ZoneMinder::Logger::INFO, "'$command' starting at " + .strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{started}) ) + .", pid = $process->{pid}\n" + ); $cmd_hash{$process->{command}} = $pid_hash{$cpid} = $process; sigprocmask( SIG_SETMASK, $sigset ) or Fatal( "Can't restore SIGCHLD: $!" ); @@ -437,7 +454,11 @@ sub start { logReinit(); - dPrint( ZoneMinder::Logger::INFO, "'".join( ' ', ( $daemon, @args ) )."' started at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); + dPrint( ZoneMinder::Logger::INFO, "'".join( ' ', ( $daemon, @args ) ) + ."' started at " + .strftime( '%y/%m/%d %H:%M:%S', localtime() ) + ."\n" + ); if ( $daemon =~ /^${daemon_patt}$/ ) { @@ -484,54 +505,78 @@ sub start } } -sub _stop -{ - my $final = shift; - my $daemon = shift; - my @args = @_; +# Sends the stop signal, without waiting around to see if the process died. +sub send_stop { + my ( $final, $process ) = @_; - my $command = $daemon; - $command .= ' '.join( ' ', ( @args ) ) if ( @args ); + my $command = $process->{command}; + if ( $process->{pending} ) { + + delete( $cmd_hash{$command} ); + dPrint( ZoneMinder::Logger::INFO, "Command '$command' removed from pending list at " + .strftime( '%y/%m/%d %H:%M:%S', localtime() ) + ."\n" + ); + return(); + } + + my $pid = $process->{pid}; + if ( !$pid_hash{$pid} ) + { + dPrint( ZoneMinder::Logger::ERROR, "No process with command of '$command' pid $pid is running\n" ); + return(); + } + + dPrint( ZoneMinder::Logger::INFO, "'$command' sending stop to pid $pid at " + .strftime( '%y/%m/%d %H:%M:%S', localtime() ) + ."\n" + ); + $process->{keepalive} = !$final; + kill( 'TERM', $pid ); + return $pid; +} # end sub send_stop + +sub kill_until_dead { + my ( $process ) = @_; + # Now check it has actually gone away, if not kill -9 it + my $count = 0; + while( $process and $$process{pid} and kill( 0, $$process{pid} ) ) + { + if ( $count++ > 5 ) + { + dPrint( ZoneMinder::Logger::WARNING, "'$$process{command}' has not stopped at " + .strftime( '%y/%m/%d %H:%M:%S', localtime() ) + .". Sending KILL to pid $$process{pid}\n" + ); + kill( 'KILL', $$process{pid} ); + } + + sleep( 1 ); + } +} + +sub _stop { + my ($final, $process ) = @_; + + delete( $cmd_hash{$$process{command}} ); + my $pid = send_stop( $final, $process ); + return if ! $pid; + + kill_until_dead( $process ); +} + +sub stop +{ + my ( $daemon, @args ) = @_; + my $command = join(' ', $daemon, @args ); my $process = $cmd_hash{$command}; if ( !$process ) { dPrint( ZoneMinder::Logger::WARNING, "Can't find process with command of '$command'\n" ); return(); } - elsif ( $process->{pending} ) - { - delete( $cmd_hash{$command} ); - dPrint( ZoneMinder::Logger::INFO, "Command '$command' removed from pending list at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); - return(); - } - my $cpid = $process->{pid}; - if ( !$pid_hash{$cpid} ) - { - dPrint( ZoneMinder::Logger::ERROR, "No process with command of '$command' is running\n" ); - return(); - } - - dPrint( ZoneMinder::Logger::INFO, "'$daemon ".join( ' ', @args )."' stopping at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); - $process->{keepalive} = !$final; - kill( 'TERM', $cpid ); - delete( $cmd_hash{$command} ); - - # Now check it has actually gone away, if not kill -9 it - my $count = 0; - while( $cpid && kill( 0, $cpid ) ) - { - if ( $count++ > 5 ) - { - kill( 'KILL', $cpid ); - } - sleep( 1 ); - } -} - -sub stop -{ - _stop( 1, @_ ); + _stop( 1, $process ); } sub restart @@ -549,7 +594,7 @@ sub restart my $cpid = $process->{pid}; if ( defined($pid_hash{$cpid}) ) { - _stop( 0, $daemon, @args ); + _stop( 0, $process ); return; } } @@ -610,7 +655,7 @@ sub reaper my $exit_signal = $status&0xfe; my $core_dumped = $status&0x01; - my $out_str = "'$process->{daemon} ".join( ' ', @{$process->{args}} )."' "; + my $out_str = "'$process->{command}' "; if ( $exit_signal ) { if ( $exit_signal == 15 || $exit_signal == 14 ) # TERM or ALRM @@ -649,17 +694,16 @@ sub reaper if ( $process->{keepalive} ) { + # Schedule for immediate restart + $cmd_hash{$process->{command}} = $process; if ( !$process->{delay} || ($process->{runtime} > $Config{ZM_MAX_RESTART_DELAY} ) ) { #start( $process->{daemon}, @{$process->{args}} ); - # Schedule for immediate restart - $cmd_hash{$process->{command}} = $process; $process->{pending} = $process->{stopped}; $process->{delay} = 5; } else { - $cmd_hash{$process->{command}} = $process; $process->{pending} = $process->{stopped}+$process->{delay}; $process->{delay} *= 2; # Limit the start delay to 15 minutes max @@ -689,12 +733,26 @@ sub restartPending sub shutdownAll { - foreach my $process ( values( %pid_hash ) ) - { - stop( $process->{daemon}, @{$process->{args}} ); + foreach my $pid ( keys %pid_hash ) { + # This is a quick fix because a SIGCHLD can happen and alter pid_hash while we are in here. + next if ! $pid_hash{$pid}; + send_stop( 1, $pid_hash{$pid} ); + } + foreach my $pid ( keys %pid_hash ) { + # This is a quick fix because a SIGCHLD can happen and alter pid_hash while we are in here. + next if ! $pid_hash{$pid}; + + my $process = $pid_hash{$pid}; + + kill_until_dead( $process ); + delete( $cmd_hash{$$process{command}} ); + delete( $pid_hash{$pid} ); } killAll( 5 ); - dPrint( ZoneMinder::Logger::INFO, "Server shutdown at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); + dPrint( ZoneMinder::Logger::INFO, "Server shutdown at " + .strftime( '%y/%m/%d %H:%M:%S', localtime() ) + ."\n" + ); unlink( main::SOCK_FILE ); unlink( ZM_PID ); close( CLIENT ); @@ -750,7 +808,10 @@ sub status if ( $process->{pending} ) { - dPrint( ZoneMinder::Logger::DEBUG, "'$process->{command}' pending at ".strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{pending}) )."\n" ); + dPrint( ZoneMinder::Logger::DEBUG, "'$process->{command}' pending at " + .strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{pending}) ) + ."\n" + ); } else { @@ -761,13 +822,19 @@ sub status return(); } } - dPrint( ZoneMinder::Logger::DEBUG, "'$process->{command}' running since ".strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{started}) ).", pid = $process->{pid}" ); + dPrint( ZoneMinder::Logger::DEBUG, "'$process->{command}' running since " + .strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{started}) ) + .", pid = $process->{pid}" + ); } else { foreach my $process ( values(%pid_hash) ) { - my $out_str = "'$process->{command}' running since ".strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{started}) ).", pid = $process->{pid}"; + my $out_str = "'$process->{command}' running since " + .strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{started}) ) + .", pid = $process->{pid}" + ; $out_str .= ", valid" if ( kill( 0, $process->{pid} ) ); $out_str .= "\n"; dPrint( ZoneMinder::Logger::DEBUG, $out_str ); @@ -776,7 +843,10 @@ sub status { if ( $process->{pending} ) { - dPrint( ZoneMinder::Logger::DEBUG, "'$process->{command}' pending at ".strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{pending}) )."\n" ); + dPrint( ZoneMinder::Logger::DEBUG, "'$process->{command}' pending at " + .strftime( '%y/%m/%d %H:%M:%S', localtime( $process->{pending}) ) + ."\n" + ); } } } @@ -786,19 +856,22 @@ sub killAll { my $delay = shift; sleep( $delay ); - my $killall; - if ( '@HOST_OS@' eq 'BSD' ) { - $killall = 'killall -'; - } else { - $killall = 'killall -q -s '; - } - foreach my $daemon ( @daemons ) { - - my $cmd = $killall ."TERM $daemon"; - Debug( $cmd ); - qx( $cmd ); - } - sleep( $delay ); + my $killall; + if ( '@HOST_OS@' eq 'BSD' ) + { + $killall = 'killall -'; + } elsif ( '@HOST_OS@' eq 'solaris' ) { + $killall = 'pkill -'; + } else { + $killall = 'killall -q -s '; + } + foreach my $daemon ( @daemons ) + { + my $cmd = $killall ."TERM $daemon"; + Debug( $cmd ); + qx( $cmd ); + } + sleep( $delay ); foreach my $daemon ( @daemons ) { my $cmd = $killall."KILL $daemon"; diff --git a/scripts/zmfilter.pl.in b/scripts/zmfilter.pl.in index e8f8d998f..54f372262 100755 --- a/scripts/zmfilter.pl.in +++ b/scripts/zmfilter.pl.in @@ -20,11 +20,27 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This script continuously monitors the recorded events for the given -# monitor and applies any filters which would delete and/or upload -# matching events -# + +=head1 NAME + +zmfilter.pl - ZoneMinder tool to filter events + +=head1 SYNOPSIS + + zmfilter.pl [-f ,--filter=] | -v, --version + +=head1 DESCRIPTION + +This script continuously monitors the recorded events for the given +monitor and applies any filters which would delete and/or upload +matching events. + +=head1 OPTIONS + + -f{filter name}, --filter={filter name} - The name of a specific filter to run + -v, --version - Print ZoneMinder version + +=cut use strict; use bytes; @@ -49,9 +65,13 @@ use POSIX; use Time::HiRes qw/gettimeofday/; use Date::Manip; use Getopt::Long; -use Data::Dumper; +use autouse 'Pod::Usage'=>qw(pod2usage); +use autouse 'Data::Dumper'=>qw(Dumper); -use constant EVENT_PATH => ($Config{ZM_DIR_EVENTS}=~m|/|)?$Config{ZM_DIR_EVENTS}:($Config{ZM_PATH_WEB}.'/'.$Config{ZM_DIR_EVENTS}); +use constant EVENT_PATH => ($Config{ZM_DIR_EVENTS}=~m|/|) + ? $Config{ZM_DIR_EVENTS} + : ($Config{ZM_PATH_WEB}.'/'.$Config{ZM_DIR_EVENTS}) +; logInit(); logSetSignal(); @@ -105,7 +125,6 @@ if ( $Config{ZM_OPT_MESSAGE} ) } } - $| = 1; $ENV{PATH} = '/bin:/usr/bin'; @@ -117,16 +136,6 @@ my $event_id = 0; my $filter_parm = ""; my $version = 0; -sub Usage -{ - print( " -Usage: zmfilter.pl [-f ,--filter=] | -v, --version -Parameters are :- --f, --filter= - The name of a specific filter to run -"); - exit( -1 ); -} - # # More or less replicates the equivalent PHP function # @@ -159,13 +168,14 @@ sub DateTimeToSQL return( strftime( "%Y-%m-%d %H:%M:%S", localtime( $dt_val ) ) ); } -if ( !GetOptions( 'filter=s'=>\$filter_parm, version=>\$version ) ) -{ - Usage(); -} +GetOptions( + 'filter=s' =>\$filter_parm, + 'version' =>\$version +) or pod2usage(-exitstatus => -1); + if ( $version ) { - print ZoneMinder::Base::ZM_VERSION . "\n"; - exit(0); + print ZoneMinder::Base::ZM_VERSION . "\n"; + exit(0); } if ( ! EVENT_PATH ) { @@ -196,7 +206,7 @@ my $last_action = 0; while( 1 ) { - my $now = time; + my $now = time; if ( ($now - $last_action) > $Config{ZM_FILTER_RELOAD_DELAY} ) { Debug( "Reloading filters\n" ); @@ -257,7 +267,7 @@ sub getFilters my $filter_name = shift; my @filters; - my $sql = "select * from Filters where"; + my $sql = "SELECT * FROM Filters WHERE"; if ( $filter_name ) { $sql .= " Name = ? and"; @@ -266,22 +276,56 @@ sub getFilters { $sql .= " Background = 1 and"; } - $sql .= " (AutoArchive = 1 or AutoVideo = 1 or AutoUpload = 1 or AutoEmail = 1 or AutoMessage = 1 or AutoExecute = 1 or AutoDelete = 1) order by Name"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + $sql .= "( AutoArchive = 1 + or AutoVideo = 1 + or AutoUpload = 1 + or AutoEmail = 1 + or AutoMessage = 1 + or AutoExecute = 1 + or AutoDelete = 1 + ) ORDER BY Name"; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); my $res; if ( $filter_name ) { - $res = $sth->execute( $filter_name ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + $res = $sth->execute( $filter_name ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); } else { - $res = $sth->execute() or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + $res = $sth->execute() + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); } FILTER: while( my $db_filter = $sth->fetchrow_hashref() ) { Debug( "Found filter '$db_filter->{Name}'\n" ); my $filter_expr = jsonDecode( $db_filter->{Query} ); - my $sql = "select E.Id,E.MonitorId,M.Name as MonitorName,M.DefaultRate,M.DefaultScale,E.Name,E.Cause,E.Notes,E.StartTime,unix_timestamp(E.StartTime) as Time,E.Length,E.Frames,E.AlarmFrames,E.TotScore,E.AvgScore,E.MaxScore,E.Archived,E.Videoed,E.Uploaded,E.Emailed,E.Messaged,E.Executed from Events as E inner join Monitors as M on M.Id = E.MonitorId"; + my $sql = "SELECT E.Id, + E.MonitorId, + M.Name as MonitorName, + M.DefaultRate, + M.DefaultScale, + E.Name, + E.Cause, + E.Notes, + E.StartTime, + unix_timestamp(E.StartTime) as Time, + E.Length, + E.Frames, + E.AlarmFrames, + E.TotScore, + E.AvgScore, + E.MaxScore, + E.Archived, + E.Videoed, + E.Uploaded, + E.Emailed, + E.Messaged, + E.Executed + FROM Events as E + INNER JOIN Monitors as M on M.Id = E.MonitorId + "; $db_filter->{Sql} = ''; if ( $filter_expr->{terms} ) @@ -348,7 +392,10 @@ sub getFilters { $value = "'$temp_value'"; } - elsif ( $filter_expr->{terms}[$i]->{attr} eq 'Name' || $filter_expr->{terms}[$i]->{attr} eq 'Cause' || $filter_expr->{terms}[$i]->{attr} eq 'Notes' ) + elsif ( $filter_expr->{terms}[$i]->{attr} eq 'Name' + || $filter_expr->{terms}[$i]->{attr} eq 'Cause' + || $filter_expr->{terms}[$i]->{attr} eq 'Notes' + ) { $value = "'$temp_value'"; } @@ -357,7 +404,8 @@ sub getFilters $value = DateTimeToSQL( $temp_value ); if ( !$value ) { - Error( "Error parsing date/time '$temp_value', skipping filter '$db_filter->{Name}'\n" ); + Error( "Error parsing date/time '$temp_value', " + ."skipping filter '$db_filter->{Name}'\n" ); next FILTER; } $value = "'$value'"; @@ -367,7 +415,8 @@ sub getFilters $value = DateTimeToSQL( $temp_value ); if ( !$value ) { - Error( "Error parsing date/time '$temp_value', skipping filter '$db_filter->{Name}'\n" ); + Error( "Error parsing date/time '$temp_value', " + ."skipping filter '$db_filter->{Name}'\n" ); next FILTER; } $value = "to_days( '$value' )"; @@ -377,7 +426,8 @@ sub getFilters $value = DateTimeToSQL( $temp_value ); if ( !$value ) { - Error( "Error parsing date/time '$temp_value', skipping filter '$db_filter->{Name}'\n" ); + Error( "Error parsing date/time '$temp_value', " + ."skipping filter '$db_filter->{Name}'\n" ); next FILTER; } $value = "extract( hour_second from '$value' )"; @@ -469,7 +519,7 @@ sub getFilters my $sort_column = ''; if ( $filter_expr->{sort_field} eq 'Id' ) { - $sort_column = "E.Id"; + $sort_column = "E.Id"; } elsif ( $filter_expr->{sort_field} eq 'MonitorName' ) { @@ -525,13 +575,15 @@ sub getFilters $script =~ s/\s.*$//; if ( !-e $script ) { - Error( "Auto execute script '$script' not found, skipping filter '$db_filter->{Name}'\n" ); + Error( "Auto execute script '$script' not found, " + ."skipping filter '$db_filter->{Name}'\n" ); next FILTER; } elsif ( !-x $script ) { - Error( "Auto execute script '$script' not executable, skipping filter '$db_filter->{Name}'\n" ); + Error( "Auto execute script '$script' not executable, " + ."skipping filter '$db_filter->{Name}'\n" ); next FILTER; } } @@ -557,7 +609,7 @@ sub checkFilter "\n" ); my $sql = $filter->{Sql}; - + if ( $filter->{HasDiskPercent} ) { my $disk_percent = getDiskPercent(); @@ -574,7 +626,8 @@ sub checkFilter $sql =~ s/zmSystemLoad/$load/g; } - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); my $res = $sth->execute(); if ( !$res ) { @@ -591,8 +644,10 @@ sub checkFilter Info( "Archiving event $event->{Id}\n" ); # Do it individually to avoid locking up the table for new events my $sql = "update Events set Archived = 1 where Id = ?"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); } if ( $Config{ZM_OPT_FFMPEG} && $filter->{AutoVideo} ) { @@ -636,18 +691,24 @@ sub checkFilter Info( "Deleting event $event->{Id} from Monitor $event->{MonitorId}\n" ); # Do it individually to avoid locking up the table for new events my $sql = "delete from Events where Id = ?"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); if ( ! $Config{ZM_OPT_FAST_DELETE} ) { my $sql = "delete from Frames where EventId = ?"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); $sql = "delete from Stats where EventId = ?"; - $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + $res = $sth->execute( $event->{Id} ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); deleteEventFiles( $event->{Id}, $event->{MonitorId} ); } @@ -699,7 +760,8 @@ sub generateVideo $format = $ffmpeg_formats[0]; } - my $command = $Config{ZM_PATH_BIN}."/zmvideo.pl -e ".$event->{Id}." -r ".$rate." -s ".$scale." -f ".$format; + my $command = $Config{ZM_PATH_BIN}."/zmvideo.pl -e " + .$event->{Id}." -r ".$rate." -s ".$scale." -f ".$format; my $output = qx($command); chomp( $output ); my $status = $? >> 8; @@ -719,11 +781,13 @@ sub generateVideo else { my $sql = "update Events set Videoed = 1 where Id = ?"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); if ( wantarray() ) { - return( $format, sprintf( "%s/%s", getEventPath( $event ), $output ) ); + return( $format, sprintf( "%s/%s", getEventPath( $event ), $output ) ); } } return( 1 ); @@ -741,7 +805,15 @@ sub uploadArchFile } my $archFile = $event->{MonitorName}.'-'.$event->{Id}; - my $archImagePath = getEventPath( $event )."/".(( $Config{ZM_UPLOAD_ARCH_ANALYSE} )?'{*analyse,*capture}':'*capture').".jpg"; + my $archImagePath = getEventPath( $event ) + ."/" + .( + ( $Config{ZM_UPLOAD_ARCH_ANALYSE} ) + ? '{*analyse,*capture}' + : '*capture' + ) + .".jpg" + ; my @archImageFiles = glob($archImagePath); my $archLocPath; @@ -764,7 +836,10 @@ sub uploadArchFile $archError = 1; last; } - $member->desiredCompressionMethod( $Config{ZM_UPLOAD_ARCH_COMPRESS} ? &COMPRESSION_DEFLATED : &COMPRESSION_STORED ); + $member->desiredCompressionMethod( $Config{ZM_UPLOAD_ARCH_COMPRESS} + ? &COMPRESSION_DEFLATED + : &COMPRESSION_STORED + ); } if ( !$archError ) { @@ -793,7 +868,12 @@ sub uploadArchFile $archLocPath = $Config{ZM_UPLOAD_LOC_DIR}.'/'.$archFile; Info( "Creating upload file '$archLocPath', ".int(@archImageFiles)." files\n" ); - if ( $archError = !Archive::Tar->create_archive( $archLocPath, $Config{ZM_UPLOAD_ARCH_COMPRESS}, @archImageFiles ) ) + if ( $archError = !Archive::Tar->create_archive( + $archLocPath, + $Config{ZM_UPLOAD_ARCH_COMPRESS}, + @archImageFiles + ) + ) { Error( "Tar error: ".Archive::Tar->error()."\n " ); } @@ -808,42 +888,63 @@ sub uploadArchFile if ( $Config{ZM_UPLOAD_PROTOCOL} eq "ftp" ) { Info( "Uploading to ".$Config{ZM_UPLOAD_HOST}." using FTP\n" ); - my $ftp = Net::FTP->new( $Config{ZM_UPLOAD_HOST}, Timeout=>$Config{ZM_UPLOAD_TIMEOUT}, Passive=>$Config{ZM_UPLOAD_FTP_PASSIVE}, Debug=>$Config{ZM_UPLOAD_DEBUG} ); + my $ftp = Net::FTP->new( + $Config{ZM_UPLOAD_HOST}, + Timeout=>$Config{ZM_UPLOAD_TIMEOUT}, + Passive=>$Config{ZM_UPLOAD_FTP_PASSIVE}, + Debug=>$Config{ZM_UPLOAD_DEBUG} + ); if ( !$ftp ) { Error( "Can't create FTP connection: $@" ); return( 0 ); } - $ftp->login( $Config{ZM_UPLOAD_USER}, $Config{ZM_UPLOAD_PASS} ) or Error( "FTP - Can't login" ); - $ftp->binary() or Error( "FTP - Can't go binary" ); - $ftp->cwd( $Config{ZM_UPLOAD_REM_DIR} ) or Error( "FTP - Can't cwd" ) if ( $Config{ZM_UPLOAD_REM_DIR} ); - $ftp->put( $archLocPath ) or Error( "FTP - Can't upload '$archLocPath'" ); - $ftp->quit() or Error( "FTP - Can't quit" ); + $ftp->login( $Config{ZM_UPLOAD_USER}, $Config{ZM_UPLOAD_PASS} ) + or Error( "FTP - Can't login" ); + $ftp->binary() + or Error( "FTP - Can't go binary" ); + $ftp->cwd( $Config{ZM_UPLOAD_REM_DIR} ) + or Error( "FTP - Can't cwd" ) + if ( $Config{ZM_UPLOAD_REM_DIR} ); + $ftp->put( $archLocPath ) + or Error( "FTP - Can't upload '$archLocPath'" ); + $ftp->quit() + or Error( "FTP - Can't quit" ); } else { my $host = $Config{ZM_UPLOAD_HOST}; - $host .= ":".$Config{ZM_UPLOAD_PORT} if $Config{ZM_UPLOAD_PORT}; + $host .= ":".$Config{ZM_UPLOAD_PORT} + if $Config{ZM_UPLOAD_PORT}; Info( "Uploading to ".$host." using SFTP\n" ); my %sftpOptions = ( host=>$Config{ZM_UPLOAD_HOST}, user=>$Config{ZM_UPLOAD_USER} ); - $sftpOptions{password} = $Config{ZM_UPLOAD_PASS} if $Config{ZM_UPLOAD_PASS}; - $sftpOptions{port} = $Config{ZM_UPLOAD_PORT} if $Config{ZM_UPLOAD_PORT}; - $sftpOptions{timeout} = $Config{ZM_UPLOAD_TIMEOUT} if $Config{ZM_UPLOAD_TIMEOUT}; + $sftpOptions{password} = $Config{ZM_UPLOAD_PASS} + if $Config{ZM_UPLOAD_PASS}; + $sftpOptions{port} = $Config{ZM_UPLOAD_PORT} + if $Config{ZM_UPLOAD_PORT}; + $sftpOptions{timeout} = $Config{ZM_UPLOAD_TIMEOUT} + if $Config{ZM_UPLOAD_TIMEOUT}; $sftpOptions{more} = [ '-o'=>'StrictHostKeyChecking=no' ]; - $Net::SFTP::Foreign::debug = -1 if $Config{ZM_UPLOAD_DEBUG}; + $Net::SFTP::Foreign::debug = -1 + if $Config{ZM_UPLOAD_DEBUG}; my $sftp = Net::SFTP::Foreign->new( $Config{ZM_UPLOAD_HOST}, %sftpOptions ); if ( $sftp->error ) { Error( "Can't create SFTP connection: ".$sftp->error ); return( 0 ); } - $sftp->setcwd( $Config{ZM_UPLOAD_REM_DIR} ) or Error( "SFTP - Can't setcwd: ".$sftp->error ) if $Config{ZM_UPLOAD_REM_DIR}; - $sftp->put( $archLocPath, $archFile ) or Error( "SFTP - Can't upload '$archLocPath': ".$sftp->error ); + $sftp->setcwd( $Config{ZM_UPLOAD_REM_DIR} ) + or Error( "SFTP - Can't setcwd: ".$sftp->error ) + if $Config{ZM_UPLOAD_REM_DIR}; + $sftp->put( $archLocPath, $archFile ) + or Error( "SFTP - Can't upload '$archLocPath': ".$sftp->error ); } unlink( $archLocPath ); my $sql = "update Events set Uploaded = 1 where Id = ?"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); } return( 1 ); } @@ -864,9 +965,28 @@ sub substituteTags if ( $need_monitor ) { my $db_now = strftime( "%Y-%m-%d %H:%M:%S", localtime() ); - my $sql = "select M.Id, count(E.Id) as EventCount, count(if(E.Archived,1,NULL)) as ArchEventCount, count(if(E.StartTime>'$db_now' - INTERVAL 1 HOUR && E.Archived = 0,1,NULL)) as HourEventCount, count(if(E.StartTime>'$db_now' - INTERVAL 1 DAY && E.Archived = 0,1,NULL)) as DayEventCount, count(if(E.StartTime>'$db_now' - INTERVAL 7 DAY && E.Archived = 0,1,NULL)) as WeekEventCount, count(if(E.StartTime>'$db_now' - INTERVAL 1 MONTH && E.Archived = 0,1,NULL)) as MonthEventCount from Monitors as M left join Events as E on E.MonitorId = M.Id where MonitorId = ? group by E.MonitorId order by Id"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $event->{MonitorId} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + my $sql = "SELECT + M.Id, + count(E.Id) as EventCount, + count(if(E.Archived,1,NULL)) + as ArchEventCount, + count(if(E.StartTime>'$db_now' - INTERVAL 1 HOUR && E.Archived = 0,1,NULL)) + as HourEventCount, + count(if(E.StartTime>'$db_now' - INTERVAL 1 DAY && E.Archived = 0,1,NULL)) + as DayEventCount, + count(if(E.StartTime>'$db_now' - INTERVAL 7 DAY && E.Archived = 0,1,NULL)) + as WeekEventCount, + count(if(E.StartTime>'$db_now' - INTERVAL 1 MONTH && E.Archived = 0,1,NULL)) + as MonthEventCount + FROM Monitors as M LEFT JOIN Events as E on E.MonitorId = M.Id + WHERE MonitorId = ? + GROUP BY E.MonitorId + ORDER BY Id" + ; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{MonitorId} ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); $monitor = $sth->fetchrow_hashref(); $sth->finish(); return() if ( !$monitor ); @@ -879,9 +999,14 @@ sub substituteTags my $max_alarm_score = 0; if ( $need_images ) { - my $sql = "select * from Frames where EventId = ? and Type = 'Alarm' order by FrameId"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + my $sql = "SELECT * FROM Frames + WHERE EventId = ? AND Type = 'Alarm' + ORDER BY FrameId" + ; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); while( my $frame = $sth->fetchrow_hashref() ) { if ( !$first_alarm_frame ) @@ -929,14 +1054,34 @@ sub substituteTags $text =~ s/%EPIM%/$url?view=frame&mid=$event->{MonitorId}&eid=$event->{Id}&fid=$max_alarm_frame->{FrameId}/g; if ( $attachments_ref && $text =~ s/%EI1%//g ) { - push( @$attachments_ref, { type=>"image/jpeg", path=>sprintf( "%s/%0".$Config{ZM_EVENT_IMAGE_DIGITS}."d-capture.jpg", getEventPath( $event ), $first_alarm_frame->{FrameId} ) } ); + push( @$attachments_ref, + { + type=>"image/jpeg", + path=>sprintf( + "%s/%0".$Config{ZM_EVENT_IMAGE_DIGITS}."d-capture.jpg", + getEventPath( $event ), + $first_alarm_frame->{FrameId} + ) + } + ); } if ( $attachments_ref && $text =~ s/%EIM%//g ) { # Don't attach the same image twice - if ( !@$attachments_ref || ($first_alarm_frame->{FrameId} != $max_alarm_frame->{FrameId} ) ) + if ( !@$attachments_ref + || ($first_alarm_frame->{FrameId} != $max_alarm_frame->{FrameId} ) + ) { - push( @$attachments_ref, { type=>"image/jpeg", path=>sprintf( "%s/%0".$Config{ZM_EVENT_IMAGE_DIGITS}."d-capture.jpg", getEventPath( $event ), $max_alarm_frame->{FrameId} ) } ); + push( @$attachments_ref, + { + type=>"image/jpeg", + path=>sprintf( + "%s/%0".$Config{ZM_EVENT_IMAGE_DIGITS}."d-capture.jpg", + getEventPath( $event ), + $max_alarm_frame->{FrameId} + ) + } + ); } } } @@ -964,7 +1109,7 @@ sub substituteTags $text =~ s/%FN%/$filter->{Name}/g; ( my $filter_name = $filter->{Name} ) =~ s/ /+/g; $text =~ s/%FP%/$url?view=filter&mid=$event->{MonitorId}&filter_name=$filter_name/g; - + return( $text ); } @@ -1023,7 +1168,7 @@ sub sendEmail ### Send the Message MIME::Lite->send( "smtp", $Config{ZM_EMAIL_HOST}, Timeout=>60 ); $mail->send(); - } + } else { my $mail = MIME::Entity->build( @@ -1056,8 +1201,10 @@ sub sendEmail Info( "Notification email sent\n" ); } my $sql = "update Events set Emailed = 1 where Id = ?"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); return( 1 ); } @@ -1117,7 +1264,7 @@ sub sendMessage ### Send the Message MIME::Lite->send( "smtp", $Config{ZM_EMAIL_HOST}, Timeout=>60 ); $mail->send(); - } + } else { my $mail = MIME::Entity->build( @@ -1137,7 +1284,9 @@ sub sendMessage Encoding => "base64" ); } - $mail->smtpsend( Host => $Config{ZM_EMAIL_HOST}, MailFrom => $Config{ZM_FROM_EMAIL} ); + $mail->smtpsend( Host => $Config{ZM_EMAIL_HOST}, + MailFrom => $Config{ZM_FROM_EMAIL} + ); } }; if ( $@ ) @@ -1150,8 +1299,10 @@ sub sendMessage Info( "Notification message sent\n" ); } my $sql = "update Events set Messaged = 1 where Id = ?"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); return( 1 ); } @@ -1182,8 +1333,10 @@ sub executeCommand else { my $sql = "update Events set Executed = 1 where Id = ?"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $event->{Id} ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $event->{Id} ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); } return( 1 ); } diff --git a/scripts/zmpkg.pl.in b/scripts/zmpkg.pl.in index 084747bad..46ea825c4 100644 --- a/scripts/zmpkg.pl.in +++ b/scripts/zmpkg.pl.in @@ -20,10 +20,21 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This script is used to start and stop the ZoneMinder package primarily to -# allow command line control for automatic restart on reboot (see zm script) -# + +=head1 NAME + +zmpkg.pl - ZoneMinder Package Control Script + +=head1 SYNOPSIS + + zmpkg.pl {start|stop|restart|status|logrot|'state'|version} + +=head1 DESCRIPTION + +This script is used to start and stop the ZoneMinder package primarily to +allow command line control for automatic restart on reboot (see zm script) + +=cut use strict; use bytes; @@ -38,18 +49,20 @@ use ZoneMinder; use DBI; use POSIX; use Time::HiRes qw/gettimeofday/; +use autouse 'Pod::Usage'=>qw(pod2usage); # Detaint our environment $ENV{PATH} = '/bin:/usr/bin'; $ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; +my $store_state=""; # PP - will remember state name passed logInit(); -my $command = $ARGV[0]; +my $command = $ARGV[0]||''; if ( $command eq 'version' ) { - print ZoneMinder::Base::ZM_VERSION . "\n"; - exit(0); + print ZoneMinder::Base::ZM_VERSION . "\n"; + exit(0); } my $state; @@ -58,39 +71,44 @@ my $dbh; if ( !$command || $command !~ /^(?:start|stop|restart|status|logrot|version)$/ ) { - if ( $command ) - { - $dbh = zmDbConnect(); - # Check to see if it's a valid run state - my $sql = 'select * from States where Name = ?'; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $command ) or Fatal( "Can't execute: ".$sth->errstr() ); - if ( $state = $sth->fetchrow_hashref() ) - { - $state->{Name} = $command; - $state->{Definitions} = []; - foreach( split( /,/, $state->{Definition} ) ) - { - my ( $id, $function, $enabled ) = split( /:/, $_ ); - push( @{$state->{Definitions}}, { Id=>$id, Function=>$function, Enabled=>$enabled } ); - } - $command = 'state'; - } - else - { - $command = undef; - } - } - if ( !$command ) - { - print( "Usage: zmpkg.pl \n" ); - exit( -1 ); - } + if ( $command ) + { + $dbh = zmDbConnect(); + # Check to see if it's a valid run state + my $sql = 'select * from States where Name = ?'; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $command ) + or Fatal( "Can't execute: ".$sth->errstr() ); + if ( $state = $sth->fetchrow_hashref() ) + { + $state->{Name} = $command; + $state->{Definitions} = []; + foreach( split( /,/, $state->{Definition} ) ) + { + my ( $id, $function, $enabled ) = split( /:/, $_ ); + push( @{$state->{Definitions}}, + { Id=>$id, Function=>$function, Enabled=>$enabled } + ); + } + $store_state=$command; # PP - Remember the name that was passed to search in DB + $command = 'state'; + } + else + { + $command = undef; + } + } + if ( !$command ) + { + pod2usage(-exitstatus => -1); + } } $dbh = zmDbConnect() if ! $dbh; # Move to the right place -chdir( $Config{ZM_PATH_WEB} ) or Fatal( "Can't chdir to '".$Config{ZM_PATH_WEB}."': $!" ); +chdir( $Config{ZM_PATH_WEB} ) + or Fatal( "Can't chdir to '".$Config{ZM_PATH_WEB}."': $!" ); my $dbg_id = ""; @@ -100,209 +118,260 @@ my $retval = 0; if ( $command eq "state" ) { - Info( "Updating DB: $state->{Name}\n" ); - my $sql = "select * from Monitors order by Id asc"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); - while( my $monitor = $sth->fetchrow_hashref() ) - { - foreach my $definition ( @{$state->{Definitions}} ) - { - if ( $monitor->{Id} =~ /^$definition->{Id}$/ ) - { - $monitor->{NewFunction} = $definition->{Function}; - $monitor->{NewEnabled} = $definition->{Enabled}; - } - } - #next if ( !$monitor->{NewFunction} ); - $monitor->{NewFunction} = 'None' if ( !$monitor->{NewFunction} ); - $monitor->{NewEnabled} = 0 if ( !$monitor->{NewEnabled} ); - if ( $monitor->{Function} ne $monitor->{NewFunction} || $monitor->{Enabled} ne $monitor->{NewEnabled} ) - { - my $sql = "update Monitors set Function = ?, Enabled = ? where Id = ?"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute( $monitor->{NewFunction}, $monitor->{NewEnabled}, $monitor->{Id} ) or Fatal( "Can't execute: ".$sth->errstr() ); - } - } - $sth->finish(); + Info( "Updating DB: $state->{Name}\n" ); + my $sql = "select * from Monitors order by Id asc"; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() + or Fatal( "Can't execute: ".$sth->errstr() ); + while( my $monitor = $sth->fetchrow_hashref() ) + { + foreach my $definition ( @{$state->{Definitions}} ) + { + if ( $monitor->{Id} =~ /^$definition->{Id}$/ ) + { + $monitor->{NewFunction} = $definition->{Function}; + $monitor->{NewEnabled} = $definition->{Enabled}; + } + } + #next if ( !$monitor->{NewFunction} ); + $monitor->{NewFunction} = 'None' + if ( !$monitor->{NewFunction} ); + $monitor->{NewEnabled} = 0 + if ( !$monitor->{NewEnabled} ); + if ( $monitor->{Function} ne $monitor->{NewFunction} + || $monitor->{Enabled} ne $monitor->{NewEnabled} + ) + { + my $sql = "update Monitors set Function = ?, Enabled = ? where Id = ?"; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute( $monitor->{NewFunction}, $monitor->{NewEnabled}, $monitor->{Id} ) + or Fatal( "Can't execute: ".$sth->errstr() ); + } + } + $sth->finish(); + #PP - lets go ahead and modify States DB - $command = "restart"; + + Debug ("Marking $store_state as Enabled"); + # PP - Zero out other states being active + resetStates(); + # PP - Now mark a specific state as active + $sql = "update States set IsActive = '1' where Name = ?"; + $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + $res = $sth->execute( $store_state ) + or Fatal( "Can't execute: ".$sth->errstr() ); + + $command = "restart"; } # Check if we are running systemd and if we have been called by the system if ( $command =~ /^(start|stop|restart)$/ ) { - # We have to detaint to keep perl from complaining - $command = $1; + # We have to detaint to keep perl from complaining + $command = $1; - if ( systemdRunning() && !calledBysystem() ) { - qx(@BINDIR@/zmsystemctl.pl $command); - $command = ""; - } + # PP - if we are not switching to a custom state, zero out all isActive + resetStates() if (!$store_state); + + if ( systemdRunning() && !calledBysystem() ) { + qx(@BINDIR@/zmsystemctl.pl $command); + $command = ""; + } } if ( $command =~ /^(?:stop|restart)$/ ) { - my $status = runCommand( "zmdc.pl check" ); + my $status = runCommand( "zmdc.pl check" ); - if ( $status eq "running" ) - { - runCommand( "zmdc.pl shutdown" ); - zmMemTidy(); - } - else - { - $retval = 1; - } + if ( $status eq "running" ) + { + runCommand( "zmdc.pl shutdown" ); + zmMemTidy(); + } + else + { + $retval = 1; + } } #runCommand( "zmupdate.pl -f" ); if ( $command =~ /^(?:start|restart)$/ ) { - my $status = runCommand( "zmdc.pl check" ); + my $status = runCommand( "zmdc.pl check" ); - if ( $status eq "stopped" ) - { - if ( $Config{ZM_DYN_DB_VERSION} and ( $Config{ZM_DYN_DB_VERSION} ne ZM_VERSION ) ) + if ( $status eq "stopped" ) + { + if ( $Config{ZM_DYN_DB_VERSION} + and ( $Config{ZM_DYN_DB_VERSION} ne ZM_VERSION ) + ) { - Fatal( "Version mismatch, system is version ".ZM_VERSION.", database is ".$Config{ZM_DYN_DB_VERSION}.", please run zmupdate.pl to update." ); + Fatal( "Version mismatch, system is version ".ZM_VERSION + .", database is ".$Config{ZM_DYN_DB_VERSION} + .", please run zmupdate.pl to update." + ); exit( -1 ); } # Recreate the temporary directory if it's been wiped - verifyFolder("@ZM_TMPDIR@"); + verifyFolder("@ZM_TMPDIR@"); # Recreate the run directory if it's been wiped - verifyFolder("@ZM_RUNDIR@"); + verifyFolder("@ZM_RUNDIR@"); # Recreate the sock directory if it's been wiped - verifyFolder("@ZM_SOCKDIR@"); + verifyFolder("@ZM_SOCKDIR@"); - zmMemTidy(); - runCommand( "zmdc.pl startup" ); + zmMemTidy(); + runCommand( "zmdc.pl startup" ); - my $sql = "select * from Monitors"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); - while( my $monitor = $sth->fetchrow_hashref() ) - { - if ( $monitor->{Function} ne 'None' ) - { - if ( $monitor->{Type} eq 'Local' ) - { - runCommand( "zmdc.pl start zmc -d $monitor->{Device}" ); - } - else - { - runCommand( "zmdc.pl start zmc -m $monitor->{Id}" ); - } - if ( $monitor->{Function} ne 'Monitor' ) - { - if ( $Config{ZM_OPT_FRAME_SERVER} ) - { - runCommand( "zmdc.pl start zmf -m $monitor->{Id}" ); - } - runCommand( "zmdc.pl start zma -m $monitor->{Id}" ); - } - if ( $Config{ZM_OPT_CONTROL} ) - { - if ( $monitor->{Function} eq 'Modect' || $monitor->{Function} eq 'Mocord' ) - { - if ( $monitor->{Controllable} && $monitor->{TrackMotion} ) - { - runCommand( "zmdc.pl start zmtrack.pl -m $monitor->{Id}" ); - } - } - } - } - } - $sth->finish(); + my $sql = "select * from Monitors"; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() + or Fatal( "Can't execute: ".$sth->errstr() ); + while( my $monitor = $sth->fetchrow_hashref() ) + { + if ( $monitor->{Function} ne 'None' ) + { + if ( $monitor->{Type} eq 'Local' ) + { + runCommand( "zmdc.pl start zmc -d $monitor->{Device}" ); + } + else + { + runCommand( "zmdc.pl start zmc -m $monitor->{Id}" ); + } + if ( $monitor->{Function} ne 'Monitor' ) + { + if ( $Config{ZM_OPT_FRAME_SERVER} ) + { + runCommand( "zmdc.pl start zmf -m $monitor->{Id}" ); + } + runCommand( "zmdc.pl start zma -m $monitor->{Id}" ); + } + if ( $Config{ZM_OPT_CONTROL} ) + { + if ( $monitor->{Function} eq 'Modect' || $monitor->{Function} eq 'Mocord' ) + { + if ( $monitor->{Controllable} && $monitor->{TrackMotion} ) + { + runCommand( "zmdc.pl start zmtrack.pl -m $monitor->{Id}" ); + } + } + } + } + } + $sth->finish(); - # This is now started unconditionally - runCommand( "zmdc.pl start zmfilter.pl" ); - if ( $Config{ZM_RUN_AUDIT} ) - { - runCommand( "zmdc.pl start zmaudit.pl -c" ); - } - if ( $Config{ZM_OPT_TRIGGERS} ) - { - runCommand( "zmdc.pl start zmtrigger.pl" ); - } - if ( $Config{ZM_OPT_X10} ) - { - runCommand( "zmdc.pl start zmx10.pl -c start" ); - } - runCommand( "zmdc.pl start zmwatch.pl" ); - if ( $Config{ZM_CHECK_FOR_UPDATES} ) - { - runCommand( "zmdc.pl start zmupdate.pl -c" ); - } - } - else - { - $retval = 1; - } + # This is now started unconditionally + runCommand( "zmdc.pl start zmfilter.pl" ); + if ( $Config{ZM_RUN_AUDIT} ) + { + runCommand( "zmdc.pl start zmaudit.pl -c" ); + } + if ( $Config{ZM_OPT_TRIGGERS} ) + { + runCommand( "zmdc.pl start zmtrigger.pl" ); + } + if ( $Config{ZM_OPT_X10} ) + { + runCommand( "zmdc.pl start zmx10.pl -c start" ); + } + runCommand( "zmdc.pl start zmwatch.pl" ); + if ( $Config{ZM_CHECK_FOR_UPDATES} ) + { + runCommand( "zmdc.pl start zmupdate.pl -c" ); + } + } + else + { + $retval = 1; + } } if ( $command eq "status" ) { - my $status = runCommand( "zmdc.pl check" ); + my $status = runCommand( "zmdc.pl check" ); - print( STDOUT $status."\n" ); + print( STDOUT $status."\n" ); } if ( $command eq "logrot" ) { - runCommand( "zmdc.pl logrot" ); + runCommand( "zmdc.pl logrot" ); } exit( $retval ); +# PP - when the system is restarted/started/stopped, it will +# not be in a custom state, so lets keep the DB consistent +sub resetStates +{ + $dbh = zmDbConnect() if ! $dbh; + my $sql = "update States set IsActive = '0'"; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() + or Fatal( "Can't execute: ".$sth->errstr() ); + +} + sub systemdRunning { - my $result = 0; + my $result = 0; - my $output = qx(ps -o comm="" 1); - chomp( $output ); + my $output = qx(ps -o comm="" -p 1); + chomp( $output ); - if ($output =~ /systemd/) { - $result = 1; - } + if ($output =~ /systemd/) { + $result = 1; + } - return $result; + return $result; } sub calledBysystem { - my $result = 0; - my $ppid = getppid(); + my $result = 0; + my $ppid = getppid(); - my $output = qx(ps -o comm="" $ppid); - chomp( $output ); + my $output = qx(ps -o comm="" -p $ppid); + chomp( $output ); - if ($output =~ /^(?:systemd|init)$/) { - $result = 1; - } + if ($output =~ /^(?:systemd|init)$/) { + $result = 1; + } - return $result; + return $result; } sub verifyFolder { - my $folder = shift; + my $folder = shift; # Recreate the temporary directory if it's been wiped if ( !-e $folder ) { Debug( "Recreating directory '$folder'" ); - mkdir( "$folder", 0774 ) or Fatal( "Can't create missing temporary directory '$folder': $!" ); + mkdir( "$folder", 0774 ) + or Fatal( "Can't create missing temporary directory '$folder': $!" ); my ( $runName ) = getpwuid( $> ); if ( $runName ne $Config{ZM_WEB_USER} ) { - # Not running as web user, so should be root in which case chown the directory - my ( $webName, $webPass, $webUid, $webGid ) = getpwnam( $Config{ZM_WEB_USER} ) or Fatal( "Can't get user details for web user '".$Config{ZM_WEB_USER}."': $!" ); - chown( $webUid, $webGid, "$folder" ) or Fatal( "Can't change ownership of directory '$folder' to '".$Config{ZM_WEB_USER}.":".$Config{ZM_WEB_GROUP}."': $!" ); + # Not running as web user, so should be root in which case + # chown the directory + my ( $webName, $webPass, $webUid, $webGid ) = getpwnam( $Config{ZM_WEB_USER} ) + or Fatal( "Can't get user details for web user '" + .$Config{ZM_WEB_USER}."': $!" + ); + chown( $webUid, $webGid, "$folder" ) + or Fatal( "Can't change ownership of directory '$folder' to '" + .$Config{ZM_WEB_USER}.":".$Config{ZM_WEB_GROUP}."': $!" + ); } } } diff --git a/scripts/zmsystemctl.pl.in b/scripts/zmsystemctl.pl.in index 450fc2189..c825d891b 100644 --- a/scripts/zmsystemctl.pl.in +++ b/scripts/zmsystemctl.pl.in @@ -2,7 +2,7 @@ # # ========================================================================== # -# ZoneMinder Update Script, $Date$, $Revision$ +# ZoneMinder systemctl wrapper, $Date$, $Revision$ # Copyright (C) 2001-2008 Philip Coombes # # This program is free software; you can redistribute it and/or @@ -20,25 +20,39 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This is a wrapper script that allows zoneminder to start and stop itself -# in a manner that keeps it in-sync with systemd. This script is intended -# to be called internally by zoneminder and may not give the desired results -# if run from the command line. -# + +=head1 NAME + +zmsystemctl.pl - ZoneMinder systemctl wrapper + +=head1 SYNOPSIS + + zmsystemctl.pl {start|stop|restart|version} + +=head1 DESCRIPTION + +This is a wrapper script that allows zoneminder to start and stop itself +in a manner that keeps it in-sync with systemd. This script is intended +to be called internally by zoneminder and may not give the desired results +if run from the command line. + +=cut use warnings; use strict; use bytes; +use autouse 'Pod::Usage'=>qw(pod2usage); @EXTRA_PERL_LIB@ use ZoneMinder::Logger qw(:all); my $command = $ARGV[0]; -if ( (scalar(@ARGV) == 1) && ($command =~ /^(start|stop|restart|version)$/ )) { - $command = $1; +if ( (scalar(@ARGV) == 1) + && ($command =~ /^(start|stop|restart|version)$/ ) +){ + $command = $1; } else { - die(" USAGE: zmsystemctl.pl \n"); + pod2usage(-exitstatus => -1); } my $path = qx(which systemctl); @@ -46,7 +60,7 @@ chomp($path); my $status = $? >> 8; if ( !$path || $status ) { - Fatal( "Unable to determine systemctl executable. Is systemd in use?" ); + Fatal( "Unable to determine systemctl executable. Is systemd in use?" ); } Info( "Redirecting command through systemctl\n" ); diff --git a/scripts/zmtrack.pl.in b/scripts/zmtrack.pl.in index f3a5a0e15..b1eec2d7e 100644 --- a/scripts/zmtrack.pl.in +++ b/scripts/zmtrack.pl.in @@ -20,10 +20,26 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This script is used to trigger and cancel alarms from external sources -# using an arbitrary text based format -# + +=head1 NAME + +zmtrack.pl - ZoneMinder Experimental PTZ Tracking Script + +=head1 SYNOPSIS + + zmtrack.pl -m + zmtrack.pl --monitor= + +=head1 OPTIONS + + -m, --monitor= - Id of the monitor to track + +=head1 DESCRIPTION + +This script is used to trigger and cancel alarms from external sources +using an arbitrary text based format. + +=cut use strict; use bytes; @@ -45,8 +61,9 @@ use constant SLEEP_TIME => 10000; # In microseconds use ZoneMinder; use DBI; use POSIX; -use Data::Dumper; +use autouse 'Data::Dumper'=>qw(Dumper); use Getopt::Long; +use autouse 'Pod::Usage'=>qw(pod2usage); use Time::HiRes qw( usleep ); $| = 1; @@ -57,20 +74,8 @@ delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; my $mid = 0; -sub Usage -{ - print( " - Usage: zmtrack.pl -m ,--monitor=] - Parameters are :- - -m, --monitor= - Id of the monitor to track - "); - exit( -1 ); -} - -if ( !GetOptions( 'monitor=s'=>\$mid ) ) -{ - Usage(); -} +GetOptions( 'monitor=s'=>\$mid ) + or pod2usage(-exitstatus => -1); logInit(); logSetSignal(); @@ -78,44 +83,52 @@ logSetSignal(); my ( $detaint_mid ) = $mid =~ /^(\d+)$/; $mid = $detaint_mid; -print( "Tracker daemon $mid (experimental) starting at ".strftime( '%y/%m/%d %H:%M:%S', localtime() )."\n" ); +print( "Tracker daemon $mid (experimental) starting at " + .strftime( '%y/%m/%d %H:%M:%S', localtime() ) + ."\n" +); my $dbh = zmDbConnect(); -my $sql = "select C.*,M.* from Monitors as M left join Controls as C on M.ControlId = C.Id where M.Id = ?"; -my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); +my $sql = "SELECT C.*,M.* FROM Monitors as M + LEFT JOIN Controls as C on M.ControlId = C.Id + WHERE M.Id = ?" +; +my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); -my $res = $sth->execute( $mid ) or Fatal( "Can't execute '$sql': ".$sth->errstr() ); +my $res = $sth->execute( $mid ) + or Fatal( "Can't execute '$sql': ".$sth->errstr() ); my $monitor = $sth->fetchrow_hashref(); if ( !$monitor ) { - print( "Can't find monitor '$mid'\n" ); - exit( -1 ); + print( "Can't find monitor '$mid'\n" ); + exit( -1 ); } if ( !$monitor->{Controllable} ) { - print( "Monitor '$mid' is not controllable\n" ); - exit( -1 ); + print( "Monitor '$mid' is not controllable\n" ); + exit( -1 ); } if ( !$monitor->{TrackMotion} ) { - print( "Monitor '$mid' is not configured to track motion\n" ); - exit( -1 ); + print( "Monitor '$mid' is not configured to track motion\n" ); + exit( -1 ); } if ( !$monitor->{CanMoveMap} ) { - print( "Monitor '$mid' cannot move in map mode" ); - if ( $monitor->{CanMoveRel} ) - { - print( ", falling back to pseudo map mode\n" ); - } - else - { - print( "\n" ); - exit( -1 ); - } + print( "Monitor '$mid' cannot move in map mode" ); + if ( $monitor->{CanMoveRel} ) + { + print( ", falling back to pseudo map mode\n" ); + } + else + { + print( "\n" ); + exit( -1 ); + } } Debug( "Found monitor for id '$monitor'\n" ); @@ -123,84 +136,100 @@ exit( -1 ) if ( !zmMemVerify( $monitor ) ); sub Suspend { - my $monitor = shift; - zmMonitorSuspend( $monitor ); + my $monitor = shift; + zmMonitorSuspend( $monitor ); } sub Resume { - my $monitor = shift; - sleep( $monitor->{TrackDelay} ); - zmMonitorResume( $monitor ); + my $monitor = shift; + sleep( $monitor->{TrackDelay} ); + zmMonitorResume( $monitor ); } sub Track { - my $monitor = shift; - my ( $x, $y ) = @_; - my ( $detaint_x ) = $x =~ /^(\d+)$/; $x = $detaint_x; - my ( $detaint_y ) = $y =~ /^(\d+)$/; $y = $detaint_y; + my $monitor = shift; + my ( $x, $y ) = @_; + my ( $detaint_x ) = $x =~ /^(\d+)$/; $x = $detaint_x; + my ( $detaint_y ) = $y =~ /^(\d+)$/; $y = $detaint_y; - my $ctrlCommand = $Config{ZM_PATH_BIN}."/zmcontrol.pl -i ".$monitor->{Id}; - $ctrlCommand .= " --command=".($monitor->{CanMoveMap}?"moveMap":"movePseudoMap")." --xcoord=$x --ycoord=$y"; - executeShellCommand( $ctrlCommand ); + my $ctrlCommand = $Config{ZM_PATH_BIN} + ."/zmcontrol.pl -i " + .$monitor->{Id} + ; + $ctrlCommand .= " --command=" + .( $monitor->{CanMoveMap} ? "moveMap" + : "movePseudoMap" + ) + ." --xcoord=$x --ycoord=$y" + ; + executeShellCommand( $ctrlCommand ); } sub Return { - my $monitor = shift; + my $monitor = shift; - my $ctrlCommand = $Config{ZM_PATH_BIN}."/zmcontrol.pl -i ".$monitor->{Id}; - if ( $monitor->{ReturnLocation} > 0 ) - { - $ctrlCommand .= " --command=presetGoto --preset=".$monitor->{ReturnLocation}; - } - else - { - $ctrlCommand .= " --command=presetHome"; - } - executeShellCommand( $ctrlCommand ); + my $ctrlCommand = $Config{ZM_PATH_BIN} + ."/zmcontrol.pl -i " + .$monitor->{Id} + ; + if ( $monitor->{ReturnLocation} > 0 ) + { + $ctrlCommand .= " --command=presetGoto --preset=" + .$monitor->{ReturnLocation} + ; + } + else + { + $ctrlCommand .= " --command=presetHome"; + } + executeShellCommand( $ctrlCommand ); } my $last_alarm = 0; if ( ($monitor->{ReturnLocation} >= 0) ) { - Suspend( $monitor ); - Return( $monitor ); - Resume( $monitor ); + Suspend( $monitor ); + Return( $monitor ); + Resume( $monitor ); } my $alarmed = undef; while( 1 ) { - if ( zmIsAlarmed( $monitor ) ) - { - my ( $alarm_x, $alarm_y ) = zmGetAlarmLocation( $monitor ); - if ( $alarm_x >= 0 && $alarm_y >= 0 ) - { - Debug( "Got alarm at $alarm_x, $alarm_y\n" ); - Suspend( $monitor ); - Track( $monitor, $alarm_x, $alarm_y ); - Resume( $monitor ); - $last_alarm = time(); - $alarmed = !undef; - } - } - else - { - if ( logDebugging() && $alarmed ) - { - print( "Left alarm state\n" ); - $alarmed = undef; - } - if ( ($monitor->{ReturnLocation} >= 0) && ($last_alarm > 0) && ((time()-$last_alarm) > $monitor->{ReturnDelay}) ) - { - Debug( "Returning to location ".$monitor->{ReturnLocation}."\n" ); - Suspend( $monitor ); - Return( $monitor ); - Resume( $monitor ); - $last_alarm = 0; - } - } - usleep( SLEEP_TIME ); + if ( zmIsAlarmed( $monitor ) ) + { + my ( $alarm_x, $alarm_y ) = zmGetAlarmLocation( $monitor ); + if ( $alarm_x >= 0 && $alarm_y >= 0 ) + { + Debug( "Got alarm at $alarm_x, $alarm_y\n" ); + Suspend( $monitor ); + Track( $monitor, $alarm_x, $alarm_y ); + Resume( $monitor ); + $last_alarm = time(); + $alarmed = !undef; + } + } + else + { + if ( logDebugging() && $alarmed ) + { + print( "Left alarm state\n" ); + $alarmed = undef; + } + if ( ($monitor->{ReturnLocation} >= 0) + && ($last_alarm > 0) + && ((time()-$last_alarm) > $monitor->{ReturnDelay}) + ) + { + Debug( "Returning to location ".$monitor->{ReturnLocation}."\n" ); + Suspend( $monitor ); + Return( $monitor ); + Resume( $monitor ); + $last_alarm = 0; + } + } + usleep( SLEEP_TIME ); } diff --git a/scripts/zmtrigger.pl.in b/scripts/zmtrigger.pl.in index 7dbca9898..e43b00bbb 100644 --- a/scripts/zmtrigger.pl.in +++ b/scripts/zmtrigger.pl.in @@ -20,11 +20,17 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This script is used to trigger and cancel alarms from external connections -# using an arbitrary text based format -# -# ========================================================================== + +=head1 NAME + +zmtrigger.pl - ZoneMinder External Trigger Script + +=head1 DESCRIPTION + +This script is used to trigger and cancel alarms from external connections +using an arbitrary text based format + +=cut use strict; use bytes; @@ -52,8 +58,22 @@ use ZoneMinder::Trigger::Channel::Serial; use ZoneMinder::Trigger::Connection; my @connections; -push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan1", channel=>ZoneMinder::Trigger::Channel::Inet->new( port=>6802 ), mode=>"rw" ) ); -push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan2", channel=>ZoneMinder::Trigger::Channel::Unix->new( path=>$Config{ZM_PATH_SOCKS}.'/zmtrigger.sock' ), mode=>"rw" ) ); +push( @connections, + ZoneMinder::Trigger::Connection->new( + name=>"Chan1", + channel=>ZoneMinder::Trigger::Channel::Inet->new( port=>6802 ), + mode=>"rw" + ) +); +push( @connections, + ZoneMinder::Trigger::Connection->new( + name=>"Chan2", + channel=>ZoneMinder::Trigger::Channel::Unix->new( + path=>$Config{ZM_PATH_SOCKS}.'/zmtrigger.sock' + ), + mode=>"rw" + ) +); #push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan3", channel=>ZoneMinder::Trigger::Channel::File->new( path=>'/tmp/zmtrigger.out' ), mode=>"w" ) ); #push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan4", channel=>ZoneMinder::Trigger::Channel::Serial->new( path=>'/dev/ttyS0' ), mode=>"rw" ) ); @@ -65,7 +85,7 @@ push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan2", channel use DBI; #use Socket; -use Data::Dumper; +use autouse 'Data::Dumper'=>qw(Dumper); use POSIX qw( EINTR ); use Time::HiRes qw( usleep ); @@ -85,8 +105,8 @@ my $dbh = zmDbConnect(); my $base_rin = ''; foreach my $connection ( @connections ) { - Info( "Opening connection '$connection->{name}'\n" ); - $connection->open(); + Info( "Opening connection '$connection->{name}'\n" ); + $connection->open(); } my @in_select_connections = grep { $_->input() && $_->selectable() } @connections; @@ -95,7 +115,7 @@ my @out_connections = grep { $_->output() } @connections; foreach my $connection ( @in_select_connections ) { - vec( $base_rin, $connection->fileno(), 1 ) = 1; + vec( $base_rin, $connection->fileno(), 1 ) = 1; } my %spawned_connections; @@ -111,332 +131,387 @@ my $timeout = SELECT_TIMEOUT; my %actions; while( 1 ) { - $rin = $base_rin; - # Add the file descriptors of any spawned connections - foreach my $fileno ( keys(%spawned_connections) ) - { - vec( $rin, $fileno, 1 ) = 1; - } + $rin = $base_rin; + # Add the file descriptors of any spawned connections + foreach my $fileno ( keys(%spawned_connections) ) + { + vec( $rin, $fileno, 1 ) = 1; + } - my $nfound = select( my $rout = $rin, undef, my $eout = $ein, $timeout ); - if ( $nfound > 0 ) - { - Debug( "Got input from $nfound connections\n" ); - foreach my $connection ( @in_select_connections ) - { - if ( vec( $rout, $connection->fileno(), 1 ) ) - { - Debug( "Got input from connection ".$connection->name()." (".$connection->fileno().")\n" ); - if ( $connection->spawns() ) - { - my $new_connection = $connection->accept(); - $spawned_connections{$new_connection->fileno()} = $new_connection; - Debug( "Added new spawned connection (".$new_connection->fileno()."), ".int(keys(%spawned_connections))." spawned connections\n" ); - } - else - { - my $messages = $connection->getMessages(); - if ( defined($messages) ) - { - foreach my $message ( @$messages ) - { - handleMessage( $connection, $message ); - } - } - } - } - } - foreach my $connection ( values(%spawned_connections) ) - { - if ( vec( $rout, $connection->fileno(), 1 ) ) - { - Debug( "Got input from spawned connection ".$connection->name()." (".$connection->fileno().")\n" ); - my $messages = $connection->getMessages(); - if ( defined($messages) ) - { - foreach my $message ( @$messages ) - { - handleMessage( $connection, $message ); - } - } - else - { - delete( $spawned_connections{$connection->fileno()} ); - Debug( "Removed spawned connection (".$connection->fileno()."), ".int(keys(%spawned_connections))." spawned connections\n" ); - $connection->close(); - } - } - } - } - elsif ( $nfound < 0 ) - { - if ( $! == EINTR ) - { - # Do nothing - } - else - { - Fatal( "Can't select: $!" ); - } - } + my $nfound = select( my $rout = $rin, undef, my $eout = $ein, $timeout ); + if ( $nfound > 0 ) + { + Debug( "Got input from $nfound connections\n" ); + foreach my $connection ( @in_select_connections ) + { + if ( vec( $rout, $connection->fileno(), 1 ) ) + { + Debug( "Got input from connection " + .$connection->name() + ." (" + .$connection->fileno() + .")\n" + ); + if ( $connection->spawns() ) + { + my $new_connection = $connection->accept(); + $spawned_connections{$new_connection->fileno()} = $new_connection; + Debug( "Added new spawned connection (" + .$new_connection->fileno() + ."), " + .int(keys(%spawned_connections)) + ." spawned connections\n" + ); + } + else + { + my $messages = $connection->getMessages(); + if ( defined($messages) ) + { + foreach my $message ( @$messages ) + { + handleMessage( $connection, $message ); + } + } + } + } + } + foreach my $connection ( values(%spawned_connections) ) + { + if ( vec( $rout, $connection->fileno(), 1 ) ) + { + Debug( "Got input from spawned connection " + .$connection->name() + ." (" + .$connection->fileno() + .")\n" + ); + my $messages = $connection->getMessages(); + if ( defined($messages) ) + { + foreach my $message ( @$messages ) + { + handleMessage( $connection, $message ); + } + } + else + { + delete( $spawned_connections{$connection->fileno()} ); + Debug( "Removed spawned connection (" + .$connection->fileno() + ."), " + .int(keys(%spawned_connections)) + ." spawned connections\n" + ); + $connection->close(); + } + } + } + } + elsif ( $nfound < 0 ) + { + if ( $! == EINTR ) + { + # Do nothing + } + else + { + Fatal( "Can't select: $!" ); + } + } - # Check polled connections - foreach my $connection ( @in_poll_connections ) - { - my $messages = $connection->getMessages(); - if ( defined($messages) ) - { - foreach my $message ( @$messages ) - { - handleMessage( $connection, $message ); - } - } - } + # Check polled connections + foreach my $connection ( @in_poll_connections ) + { + my $messages = $connection->getMessages(); + if ( defined($messages) ) + { + foreach my $message ( @$messages ) + { + handleMessage( $connection, $message ); + } + } + } - # Check for alarms that might have happened - my @out_messages; - foreach my $monitor ( values(%monitors) ) - { - my ( $state, $last_event ) = zmMemRead( $monitor, [ "shared_data:state", "shared_data:last_event" ] ); + # Check for alarms that might have happened + my @out_messages; + foreach my $monitor ( values(%monitors) ) + { + my ( $state, $last_event ) + = zmMemRead( $monitor, + [ "shared_data:state", + "shared_data:last_event" + ] + ); - #print( "$monitor->{Id}: S:$state, LE:$last_event\n" ); - #print( "$monitor->{Id}: mS:$monitor->{LastState}, mLE:$monitor->{LastEvent}\n" ); - if ( $state == STATE_ALARM || $state == STATE_ALERT ) # In alarm state - { - if ( !defined($monitor->{LastEvent}) || ($last_event != $monitor->{LastEvent}) ) # A new event - { - push( @out_messages, $monitor->{Id}."|on|".time()."|".$last_event ); - } - else # The same one as last time, so ignore it - { - # Do nothing - } - } - elsif ( ($state == STATE_IDLE && $monitor->{LastState} != STATE_IDLE) || ($state == STATE_TAPE && $monitor->{LastState} != STATE_TAPE) ) # Out of alarm state - { - push( @out_messages, $monitor->{Id}."|off|".time()."|".$last_event ); - } - elsif ( defined($monitor->{LastEvent}) && ($last_event != $monitor->{LastEvent}) ) # We've missed a whole event - { - push( @out_messages, $monitor->{Id}."|on|".time()."|".$last_event ); - push( @out_messages, $monitor->{Id}."|off|".time()."|".$last_event ); - } - $monitor->{LastState} = $state; - $monitor->{LastEvent} = $last_event; - } - foreach my $connection ( @out_connections ) - { - if ( $connection->canWrite() ) - { - $connection->putMessages( \@out_messages ); - } - } - foreach my $connection ( values(%spawned_connections) ) - { - if ( $connection->canWrite() ) - { - $connection->putMessages( \@out_messages ); - } - } + #print( "$monitor->{Id}: S:$state, LE:$last_event\n" ); + #print( "$monitor->{Id}: mS:$monitor->{LastState}, mLE:$monitor->{LastEvent}\n" ); + if ( $state == STATE_ALARM + || $state == STATE_ALERT + ) # In alarm state + { + if ( !defined($monitor->{LastEvent}) + || ($last_event != $monitor->{LastEvent}) + ) # A new event + { + push( @out_messages, $monitor->{Id}."|on|".time()."|".$last_event ); + } + else # The same one as last time, so ignore it + { + # Do nothing + } + } + elsif ( ($state == STATE_IDLE + && $monitor->{LastState} != STATE_IDLE + ) + || ($state == STATE_TAPE + && $monitor->{LastState} != STATE_TAPE + ) + ) # Out of alarm state + { + push( @out_messages, $monitor->{Id}."|off|".time()."|".$last_event ); + } + elsif ( defined($monitor->{LastEvent}) + && ($last_event != $monitor->{LastEvent}) + ) # We've missed a whole event + { + push( @out_messages, $monitor->{Id}."|on|".time()."|".$last_event ); + push( @out_messages, $monitor->{Id}."|off|".time()."|".$last_event ); + } + $monitor->{LastState} = $state; + $monitor->{LastEvent} = $last_event; + } + foreach my $connection ( @out_connections ) + { + if ( $connection->canWrite() ) + { + $connection->putMessages( \@out_messages ); + } + } + foreach my $connection ( values(%spawned_connections) ) + { + if ( $connection->canWrite() ) + { + $connection->putMessages( \@out_messages ); + } + } - Debug( "Checking for timed actions\n" ) if ( int(keys(%actions)) ); - my $now = time(); - foreach my $action_time ( sort( grep { $_ < $now } keys( %actions ) ) ) - { - Info( "Found actions expiring at $action_time\n" ); - foreach my $action ( @{$actions{$action_time}} ) - { - my $connection = $action->{connection}; - my $message = $action->{message}; - Info( "Found action '$message'\n" ); - handleMessage( $connection, $message ); - } - delete( $actions{$action_time} ); - } + Debug( "Checking for timed actions\n" ) + if ( int(keys(%actions)) ); + my $now = time(); + foreach my $action_time ( sort( grep { $_ < $now } keys( %actions ) ) ) + { + Info( "Found actions expiring at $action_time\n" ); + foreach my $action ( @{$actions{$action_time}} ) + { + my $connection = $action->{connection}; + my $message = $action->{message}; + Info( "Found action '$message'\n" ); + handleMessage( $connection, $message ); + } + delete( $actions{$action_time} ); + } # Allow connections to do their own timed actions - foreach my $connection ( @connections ) - { - my $messages = $connection->timedActions(); - if ( defined($messages) ) - { - foreach my $message ( @$messages ) - { - handleMessage( $connection, $message ); - } - } - } - foreach my $connection ( values(%spawned_connections) ) - { - my $messages = $connection->timedActions(); - if ( defined($messages) ) - { - foreach my $message ( @$messages ) - { - handleMessage( $connection, $message ); - } - } - } + foreach my $connection ( @connections ) + { + my $messages = $connection->timedActions(); + if ( defined($messages) ) + { + foreach my $message ( @$messages ) + { + handleMessage( $connection, $message ); + } + } + } + foreach my $connection ( values(%spawned_connections) ) + { + my $messages = $connection->timedActions(); + if ( defined($messages) ) + { + foreach my $message ( @$messages ) + { + handleMessage( $connection, $message ); + } + } + } - # If necessary reload monitors - if ( (time() - $monitor_reload_time) > MONITOR_RELOAD_INTERVAL ) - { - foreach my $monitor ( values(%monitors) ) + # If necessary reload monitors + if ( (time() - $monitor_reload_time) > MONITOR_RELOAD_INTERVAL ) + { + foreach my $monitor ( values(%monitors) ) { # Free up any used memory handle zmMemInvalidate( $monitor ); } - loadMonitors(); - } + loadMonitors(); + } } Info( "Trigger daemon exiting\n" ); exit; sub loadMonitors { - Debug( "Loading monitors\n" ); - $monitor_reload_time = time(); + Debug( "Loading monitors\n" ); + $monitor_reload_time = time(); - my %new_monitors = (); + my %new_monitors = (); - my $sql = "select * from Monitors where find_in_set( Function, 'Modect,Mocord,Nodect' )"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); - while( my $monitor = $sth->fetchrow_hashref() ) - { - next if ( !zmMemVerify( $monitor ) ); # Check shared memory ok + my $sql = "SELECT * FROM Monitors + WHERE find_in_set( Function, 'Modect,Mocord,Nodect' )" + ; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() + or Fatal( "Can't execute: ".$sth->errstr() ); + while( my $monitor = $sth->fetchrow_hashref() ) + { + next if ( !zmMemVerify( $monitor ) ); # Check shared memory ok - if ( defined($monitors{$monitor->{Id}}->{LastState}) ) - { - $monitor->{LastState} = $monitors{$monitor->{Id}}->{LastState}; - } - else - { - $monitor->{LastState} = zmGetMonitorState( $monitor ); - } - if ( defined($monitors{$monitor->{Id}}->{LastEvent}) ) - { - $monitor->{LastEvent} = $monitors{$monitor->{Id}}->{LastEvent}; - } - else - { - $monitor->{LastEvent} = zmGetLastEvent( $monitor ); - } - $new_monitors{$monitor->{Id}} = $monitor; - } - %monitors = %new_monitors; + if ( defined($monitors{$monitor->{Id}}->{LastState}) ) + { + $monitor->{LastState} = $monitors{$monitor->{Id}}->{LastState}; + } + else + { + $monitor->{LastState} = zmGetMonitorState( $monitor ); + } + if ( defined($monitors{$monitor->{Id}}->{LastEvent}) ) + { + $monitor->{LastEvent} = $monitors{$monitor->{Id}}->{LastEvent}; + } + else + { + $monitor->{LastEvent} = zmGetLastEvent( $monitor ); + } + $new_monitors{$monitor->{Id}} = $monitor; + } + %monitors = %new_monitors; } sub handleMessage { - my $connection = shift; - my $message = shift; + my $connection = shift; + my $message = shift; - my ( $id, $action, $score, $cause, $text, $showtext ) = split( /\|/, $message ); - $score = 0 if ( !defined($score) ); - $cause = "" if ( !defined($cause) ); - $text = "" if ( !defined($text) ); + my ( $id, $action, $score, $cause, $text, $showtext ) + = split( /\|/, $message ); + $score = 0 if ( !defined($score) ); + $cause = "" if ( !defined($cause) ); + $text = "" if ( !defined($text) ); - my $monitor = $monitors{$id}; - if ( !$monitor ) - { - Warning( "Can't find monitor '$id' for message '$message'\n" ); - return; - } - Debug( "Found monitor for id '$id'\n" ); + my $monitor = $monitors{$id}; + if ( !$monitor ) + { + Warning( "Can't find monitor '$id' for message '$message'\n" ); + return; + } + Debug( "Found monitor for id '$id'\n" ); - next if ( !zmMemVerify( $monitor ) ); + next if ( !zmMemVerify( $monitor ) ); - Debug( "Handling action '$action'\n" ); - if ( $action =~ /^(enable|disable)(?:\+(\d+))?$/ ) - { - my $state = $1; - my $delay = $2; - if ( $state eq "enable" ) - { - zmMonitorEnable( $monitor ); - } - else - { - zmMonitorDisable( $monitor ); - } - # Force a reload - $monitor_reload_time = 0; - Info( "Set monitor to $state\n" ); - if ( $delay ) - { - my $action_time = time()+$delay; - my $action_text = $id."|".(($state eq "enable")?"disable":"enable"); - my $action_array = $actions{$action_time}; - if ( !$action_array ) - { - $action_array = $actions{$action_time} = []; - } - push( @$action_array, { connection=>$connection, message=>$action_text } ); - Debug( "Added timed event '$action_text', expires at $action_time (+$delay secs)\n" ); - } - } - elsif ( $action =~ /^(on|off)(?:\+(\d+))?$/ ) - { - next if ( !$monitor->{Enabled} ); + Debug( "Handling action '$action'\n" ); + if ( $action =~ /^(enable|disable)(?:\+(\d+))?$/ ) + { + my $state = $1; + my $delay = $2; + if ( $state eq "enable" ) + { + zmMonitorEnable( $monitor ); + } + else + { + zmMonitorDisable( $monitor ); + } + # Force a reload + $monitor_reload_time = 0; + Info( "Set monitor to $state\n" ); + if ( $delay ) + { + my $action_time = time()+$delay; + my $action_text = $id."|".( ($state eq "enable") + ? "disable" + : "enable" + ) + ; + my $action_array = $actions{$action_time}; + if ( !$action_array ) + { + $action_array = $actions{$action_time} = []; + } + push( @$action_array, { connection=>$connection, + message=>$action_text + } + ); + Debug( "Added timed event '$action_text', expires at $action_time (+$delay secs)\n" ); + } + } + elsif ( $action =~ /^(on|off)(?:\+(\d+))?$/ ) + { + next if ( !$monitor->{Enabled} ); - my $trigger = $1; - my $delay = $2; - my $trigger_data; - if ( $trigger eq "on" ) - { - zmTriggerEventOn( $monitor, $score, $cause, $text ); - zmTriggerShowtext( $monitor, $showtext ) if defined($showtext); - Info( "Trigger '$trigger' '$cause'\n" ); - } - elsif ( $trigger eq "off" ) - { + my $trigger = $1; + my $delay = $2; + my $trigger_data; + if ( $trigger eq "on" ) + { + zmTriggerEventOn( $monitor, $score, $cause, $text ); + zmTriggerShowtext( $monitor, $showtext ) if defined($showtext); + Info( "Trigger '$trigger' '$cause'\n" ); + } + elsif ( $trigger eq "off" ) + { my $last_event = zmGetLastEvent( $monitor ); - zmTriggerEventOff( $monitor ); - zmTriggerShowtext( $monitor, $showtext ) if defined($showtext); - Info( "Trigger '$trigger'\n" ); + zmTriggerEventOff( $monitor ); + zmTriggerShowtext( $monitor, $showtext ) if defined($showtext); + Info( "Trigger '$trigger'\n" ); # Wait til it's finished - while( zmInAlarm( $monitor ) && ($last_event == zmGetLastEvent( $monitor )) ) + while( zmInAlarm( $monitor ) + && ($last_event == zmGetLastEvent( $monitor )) + ) { # Tenth of a second usleep( 100000 ); } - zmTriggerEventCancel( $monitor ); - } - else - { - Info( "Trigger '$trigger'\n" ); - zmTriggerEventCancel( $monitor ); - } - if ( $delay ) - { - my $action_time = time()+$delay; - #my $action_text = $id."|cancel|0|".$cause."|".$text; - my $action_text = $id."|cancel"; - my $action_array = $actions{$action_time}; - if ( !$action_array ) - { - $action_array = $actions{$action_time} = []; - } - push( @$action_array, { connection=>$connection, message=>$action_text } ); - Debug( "Added timed event '$action_text', expires at $action_time (+$delay secs)\n" ); - } - } - elsif( $action eq "cancel" ) - { - zmTriggerEventCancel( $monitor ); - zmTriggerShowtext( $monitor, $showtext ) if defined($showtext); - Info( "Cancelled event\n" ); - } - elsif( $action eq "show" ) - { - zmTriggerShowtext( $monitor, $showtext ); - Info( "Updated show text to '$showtext'\n" ); - } - else - { - Error( "Unrecognised action '$action' in message '$message'\n" ); - } + zmTriggerEventCancel( $monitor ); + } + else + { + Info( "Trigger '$trigger'\n" ); + zmTriggerEventCancel( $monitor ); + } + if ( $delay ) + { + my $action_time = time()+$delay; + #my $action_text = $id."|cancel|0|".$cause."|".$text; + my $action_text = $id."|cancel"; + my $action_array = $actions{$action_time}; + if ( !$action_array ) + { + $action_array = $actions{$action_time} = []; + } + push( @$action_array, { connection=>$connection, + message=>$action_text + } + ); + Debug( "Added timed event '$action_text', expires at $action_time (+$delay secs)\n" ); + } + } + elsif( $action eq "cancel" ) + { + zmTriggerEventCancel( $monitor ); + zmTriggerShowtext( $monitor, $showtext ) if defined($showtext); + Info( "Cancelled event\n" ); + } + elsif( $action eq "show" ) + { + zmTriggerShowtext( $monitor, $showtext ); + Info( "Updated show text to '$showtext'\n" ); + } + else + { + Error( "Unrecognised action '$action' in message '$message'\n" ); + } } # end sub handleMessage 1; diff --git a/scripts/zmupdate.pl.in b/scripts/zmupdate.pl.in index 41a081fc1..75ac52fa0 100644 --- a/scripts/zmupdate.pl.in +++ b/scripts/zmupdate.pl.in @@ -20,11 +20,34 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This script just checks what the most recent release of ZoneMinder is -# at the the moment. It will eventually be responsible for applying and -# configuring upgrades etc, including on the fly upgrades. -# + +=head1 NAME + +zmupdate.pl - check and upgrade Zoneminer database + +=head1 SYNOPSIS + + zmupdate.pl -c,--check | -f,--freshen | -v,--version= [-u -p] + +=head1 DESCRIPTION + +This script just checks what the most recent release of ZoneMinder is +at the the moment. It will eventually be responsible for applying and +configuring upgrades etc, including on the fly upgrades. + +=head1 OPTIONS + + -c, --check - Check for updated versions of ZoneMinder + -f, --freshen - Freshen the configuration in the database. Equivalent of old zmconfig.pl -noi + --migrate-events - Update database structures as per USE_DEEP_STORAGE setting. + -v, --version= - Force upgrade to the current version from + -u, --user= - Alternate DB user with privileges to alter DB + -p, --pass= - Password of alternate DB user with privileges to alter DB + -d,--dir= - Directory containing update files if not in default build location + -interactive - interact with the user + -nointeractive - do not interact with the user + +=cut use strict; use bytes; @@ -52,7 +75,8 @@ use ZoneMinder::ConfigAdmin qw( :functions ); use POSIX; use DBI; use Getopt::Long; -use Data::Dumper; +use autouse 'Pod::Usage'=>qw(pod2usage); +use autouse 'Data::Dumper'=>qw(Dumper); use constant EVENT_PATH => ($Config{ZM_DIR_EVENTS}=~m|/|)?$Config{ZM_DIR_EVENTS}:($Config{ZM_PATH_WEB}.'/'.$Config{ZM_DIR_EVENTS}); @@ -78,27 +102,19 @@ my $version = ''; my $dbUser = $Config{ZM_DB_USER}; my $dbPass = $Config{ZM_DB_PASS}; my $updateDir = ''; -sub Usage -{ - print( " -Usage: zmupdate.pl <-c,--check|-f,--freshen|-v,--version=> [-u -p]> -Parameters are :- --c, --check - Check for updated versions of ZoneMinder --f, --freshen - Freshen the configuration in the database. Equivalent of old zmconfig.pl -noi --v, --version= - Force upgrade to the current version from --u, --user= - Alternate DB user with privileges to alter DB --p, --pass= - Password of alternate DB user with privileges to alter DB --d,--dir= - Directory containing update files if not in default build location --interactive - interact with the user --nointeractive - do not interact with the user -"); - exit( -1 ); -} -if ( !GetOptions( 'check'=>\$check, 'freshen'=>\$freshen, 'rename'=>\$rename, 'zone-fix'=>\$zoneFix, 'migrate-events'=>\$migrateEvents, 'version=s'=>\$version, 'interactive!'=>\$interactive, 'user:s'=>\$dbUser, 'pass:s'=>\$dbPass, 'dir:s'=>\$updateDir ) ) -{ - Usage(); -} +GetOptions( + 'check' =>\$check, + 'freshen' =>\$freshen, + 'rename' =>\$rename, + 'zone-fix' =>\$zoneFix, + 'migrate-events' =>\$migrateEvents, + 'version=s' =>\$version, + 'interactive!' =>\$interactive, + 'user:s' =>\$dbUser, + 'pass:s' =>\$dbPass, + 'dir:s' =>\$updateDir +) or pod2usage(-exitstatus => -1); my $dbh = zmDbConnect(); $Config{ZM_DB_USER} = $dbUser; @@ -113,14 +129,14 @@ if ( ! ($check || $freshen || $rename || $zoneFix || $migrateEvents || $version) else { print( STDERR "Please give a valid option\n" ); - Usage(); + pod2usage(-exitstatus => -1); } } if ( ($check + $freshen + $rename + $zoneFix + $migrateEvents + ($version?1:0)) > 1 ) { print( STDERR "Please give only one option\n" ); - Usage(); + pod2usage(-exitstatus => -1); } if ( $check && $Config{ZM_CHECK_FOR_UPDATES} ) diff --git a/scripts/zmvideo.pl.in b/scripts/zmvideo.pl.in index 2b6765420..6a63502ee 100644 --- a/scripts/zmvideo.pl.in +++ b/scripts/zmvideo.pl.in @@ -20,10 +20,37 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This script is used to create MPEG videos of events for the web pages -# or as email attachments. -# + +=head1 NAME + +zmvideo.pl - ZoneMinder Video Creation Script + +=head1 SYNOPSIS + + zmvideo.pl -e ,--event= [--format ] + [--rate=] + [--scale=] + [--fps=] + [--size=] + [--overwrite] + +=head1 DESCRIPTION + +This script is used to create MPEG videos of events for the web pages +or as email attachments. + +=head1 OPTIONS + + -e, --event= - What event to create the video for + -f, --format= - What format to create the video in, default is mpg. For ffmpeg only. + -r, --rate= - Relative rate, 1 = realtime, 2 = double speed, 0.5 = half speed etc. + -s, --scale= - Scale, 1 = normal, 2 = double size, 0.5 = half size etc. + -F, --fps= - Absolute frame rate, in frames per second + -S, --size= - Absolute video size, WxH or other specification supported by ffmpeg + -o, --overwrite - Whether to overwrite an existing file, off by default. + -v, --version - Outputs the currently installed version of ZoneMinder + +=cut use strict; use bytes; @@ -36,9 +63,10 @@ use bytes; @EXTRA_PERL_LIB@ use ZoneMinder; use DBI; -use Data::Dumper; +use autouse 'Data::Dumper'=>qw(Dumper); use POSIX qw(strftime); use Getopt::Long qw(:config no_ignore_case ); +use autouse 'Pod::Usage'=>qw(pod2usage); $| = 1; @@ -60,77 +88,66 @@ my $version = 0; my @formats = split( /\s+/, $Config{ZM_FFMPEG_FORMATS} ); for ( my $i = 0; $i < @formats; $i++ ) { - if ( $i =~ /^(.+)\*$/ ) - { - $format = $formats[$i] = $1; - } + if ( $i =~ /^(.+)\*$/ ) + { + $format = $formats[$i] = $1; + } } -sub Usage -{ - print( " -Usage: zmvideo.pl -e ,--event= [--format ] [--rate=] [--scale=] [--fps=] [--size=] [--overwrite] -Parameters are :- --e, --event= - What event to create the video for --f, --format= - What format to create the video in, default is mpg. For ffmpeg only. --r, --rate= - Relative rate , 1 = realtime, 2 = double speed , 0.5 = half speed etc --s, --scale= - Scale, 1 = normal, 2 = double size, 0.5 = half size etc --F, --fps= - Absolute frame rate, in frames per second --S, --size= - Absolute video size, WxH or other specification supported by ffmpeg --o, --overwrite - Whether to overwrite an existing file, off by default. --v, --version - Outputs the currently installed version of ZoneMinder -"); - exit( -1 ); -} - -if ( !GetOptions( 'event=i'=>\$event_id, 'format|f=s'=>\$format, 'rate|r=f'=>\$rate, 'scale|s=f'=>\$scale, 'fps|F=f'=>\$fps, 'size|S=s'=>\$size, 'overwrite'=>\$overwrite, version=>\$version ) ) -{ - Usage(); -} +GetOptions( + 'event=i' =>\$event_id, + 'format|f=s' =>\$format, + 'rate|r=f' =>\$rate, + 'scale|s=f' =>\$scale, + 'fps|F=f' =>\$fps, + 'size|S=s' =>\$size, + 'overwrite' =>\$overwrite, + 'version' =>\$version +) or pod2usage(-exitstatus => -1); if ( $version ) { - print ZoneMinder::Base::ZM_VERSION . "\n"; - exit(0); + print ZoneMinder::Base::ZM_VERSION . "\n"; + exit(0); } if ( !$event_id || $event_id < 0 ) { - print( STDERR "Please give a valid event id\n" ); - Usage(); + print( STDERR "Please give a valid event id\n" ); + pod2usage(-exitstatus => -1); } if ( ! $Config{ZM_OPT_FFMPEG} ) { - print( STDERR "Mpeg encoding is not currently enabled\n" ); - exit(-1); + print( STDERR "Mpeg encoding is not currently enabled\n" ); + exit(-1); } if ( !$rate && !$fps ) { - $rate = 1; + $rate = 1; } if ( !$scale && !$size ) { - $scale = 1; + $scale = 1; } if ( $rate && ($rate < 0.25 || $rate > 100) ) { - print( STDERR "Rate is out of range, 0.25 >= rate <= 100\n" ); - Usage(); + print( STDERR "Rate is out of range, 0.25 >= rate <= 100\n" ); + pod2usage(-exitstatus => -1); } if ( $scale && ($scale < 0.25 || $scale > 4) ) { - print( STDERR "Scale is out of range, 0.25 >= scale <= 4\n" ); - Usage(); + print( STDERR "Scale is out of range, 0.25 >= scale <= 4\n" ); + pod2usage(-exitstatus => -1); } if ( $fps && ($fps > 30) ) { - print( STDERR "FPS is out of range, <= 30\n" ); - Usage(); + print( STDERR "FPS is out of range, <= 30\n" ); + pod2usage(-exitstatus => -1); } my ( $detaint_format ) = $format =~ /^(\w+)$/; @@ -148,9 +165,23 @@ $size = $detaint_size; my $dbh = zmDbConnect(); my @filters; -my $sql = "select max(F.Delta)-min(F.Delta) as FullLength, E.*, unix_timestamp(E.StartTime) as Time, M.Name as MonitorName, M.Width as MonitorWidth, M.Height as MonitorHeight, M.Palette from Frames as F inner join Events as E on F.EventId = E.Id inner join Monitors as M on E.MonitorId = M.Id where EventId = '$event_id' group by F.EventId"; -my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); -my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); +my $sql = " SELECT max(F.Delta)-min(F.Delta) as FullLength, + E.*, + unix_timestamp(E.StartTime) as Time, + M.Name as MonitorName, + M.Width as MonitorWidth, + M.Height as MonitorHeight, + M.Palette + FROM Frames as F + INNER JOIN Events as E on F.EventId = E.Id + INNER JOIN Monitors as M on E.MonitorId = M.Id + WHERE EventId = '$event_id' + GROUP BY F.EventId" +; +my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); +my $res = $sth->execute() + or Fatal( "Can't execute: ".$sth->errstr() ); my $event = $sth->fetchrow_hashref(); $sth->finish(); my $event_path = getEventPath( $event ); @@ -160,42 +191,42 @@ chdir( $event_path ); my @file_parts; if ( $rate ) { - my $file_rate = $rate; - $file_rate =~ s/\./_/; - $file_rate =~ s/_00//; - $file_rate =~ s/(_\d+)0+$/$1/; - $file_rate = 'r'.$file_rate; - push( @file_parts, $file_rate ); + my $file_rate = $rate; + $file_rate =~ s/\./_/; + $file_rate =~ s/_00//; + $file_rate =~ s/(_\d+)0+$/$1/; + $file_rate = 'r'.$file_rate; + push( @file_parts, $file_rate ); } elsif ( $fps ) { - my $file_fps = $fps; - $file_fps =~ s/\./_/; - $file_fps =~ s/_00//; - $file_fps =~ s/(_\d+)0+$/$1/; - $file_fps = 'R'.$file_fps; - push( @file_parts, $file_fps ); + my $file_fps = $fps; + $file_fps =~ s/\./_/; + $file_fps =~ s/_00//; + $file_fps =~ s/(_\d+)0+$/$1/; + $file_fps = 'R'.$file_fps; + push( @file_parts, $file_fps ); } if ( $scale ) { - my $file_scale = $scale; - $file_scale =~ s/\./_/; - $file_scale =~ s/_00//; - $file_scale =~ s/(_\d+)0+$/$1/; - $file_scale = 's'.$file_scale; - push( @file_parts, $file_scale ); + my $file_scale = $scale; + $file_scale =~ s/\./_/; + $file_scale =~ s/_00//; + $file_scale =~ s/(_\d+)0+$/$1/; + $file_scale = 's'.$file_scale; + push( @file_parts, $file_scale ); } elsif ( $size ) { - my $file_size = 'S'.$size; - push( @file_parts, $file_size ); + my $file_size = 'S'.$size; + push( @file_parts, $file_size ); } my $video_file = "$video_name-".$file_parts[0]."-".$file_parts[1].".$format"; if ( $overwrite || !-s $video_file ) { - Info( "Creating video file $video_file for event $event->{Id}\n" ); + Info( "Creating video file $video_file for event $event->{Id}\n" ); my $frame_rate = sprintf( "%.2f", $event->{Frames}/$event->{FullLength} ); if ( $rate ) @@ -228,22 +259,32 @@ if ( $overwrite || !-s $video_file ) $video_size = $size; } - my $command = $Config{ZM_PATH_FFMPEG}." -y -r $frame_rate ".$Config{ZM_FFMPEG_INPUT_OPTIONS}." -i %0".$Config{ZM_EVENT_IMAGE_DIGITS}."d-capture.jpg -s $video_size ".$Config{ZM_FFMPEG_OUTPUT_OPTIONS}." '$video_file' > ffmpeg.log 2>&1"; + my $command = $Config{ZM_PATH_FFMPEG} + ." -y -r $frame_rate " + .$Config{ZM_FFMPEG_INPUT_OPTIONS} + ." -i %0" + .$Config{ZM_EVENT_IMAGE_DIGITS} + ."d-capture.jpg -s $video_size " + .$Config{ZM_FFMPEG_OUTPUT_OPTIONS} + ." '$video_file' > ffmpeg.log 2>&1" + ; Debug( $command."\n" ); my $output = qx($command); my $status = $? >> 8; if ( $status ) { - Error( "Unable to generate video, check ".$event_path."/ffmpeg.log for details" ); + Error( "Unable to generate video, check " + .$event_path."/ffmpeg.log for details" + ); exit( -1 ); } - - Info( "Finished $video_file\n" ); + + Info( "Finished $video_file\n" ); } else { - Info( "Video file $video_file already exists for event $event->{Id}\n" ); + Info( "Video file $video_file already exists for event $event->{Id}\n" ); } #print( STDOUT $event->{MonitorId}.'/'.$event->{Id}.'/'.$video_file."\n" ); print( STDOUT $video_file."\n" ); diff --git a/scripts/zmwatch.pl.in b/scripts/zmwatch.pl.in index bfa8b54bd..01d15e815 100644 --- a/scripts/zmwatch.pl.in +++ b/scripts/zmwatch.pl.in @@ -20,11 +20,22 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This does some basic setup for ZoneMinder to run and then periodically -# checks the fps output of the active daemons to check they haven't -# locked up. If they have then they are killed and restarted -# + +=head1 NAME + +zmwatch.pl - ZoneMinder WatchDog Script + +=head1 SYNOPSIS + +zmwatch.pl + +=head1 DESCRIPTION + +This does some basic setup for ZoneMinder to run and then periodically +checks the fps output of the active daemons to check they haven't +locked up. If they have then they are killed and restarted + +=cut use strict; use bytes; @@ -46,7 +57,7 @@ use constant START_DELAY => 30; # To give everything else time to start use ZoneMinder; use POSIX; use DBI; -use Data::Dumper; +use autouse 'Data::Dumper'=>qw(Dumper); $| = 1; @@ -54,14 +65,6 @@ $ENV{PATH} = '/bin:/usr/bin'; $ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; -sub Usage -{ - print( " -Usage: zmwatch.pl -"); - exit( -1 ); -} - logInit(); logSetSignal(); @@ -72,77 +75,106 @@ sleep( START_DELAY ); my $dbh = zmDbConnect(); my $sql = "select * from Monitors"; -my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); +my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); while( 1 ) { - my $now = time(); - my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); - while( my $monitor = $sth->fetchrow_hashref() ) - { - if ( $monitor->{Function} ne 'None' ) - { - my $restart = 0; - if ( zmMemVerify( $monitor ) && zmMemRead( $monitor, "shared_data:valid" ) ) - { - # Check we have got an image recently - my $image_time = zmGetLastWriteTime( $monitor ); - next if ( !defined($image_time) ); # Can't read from shared data - next if ( !$image_time ); # We can't get the last capture time so can't be sure it's died. + my $now = time(); + my $res = $sth->execute() + or Fatal( "Can't execute: ".$sth->errstr() ); + while( my $monitor = $sth->fetchrow_hashref() ) + { + next if $monitor->{Function} eq 'None'; + my $restart = 0; + if ( zmMemVerify( $monitor ) + && zmMemRead( $monitor, "shared_data:valid" ) + ) + { + # Check we have got an image recently + my $image_time = zmGetLastWriteTime( $monitor ); + next if ( !defined($image_time) ); # Can't read from shared data + next if ( !$image_time ); # We can't get the last capture time so can't be sure it's died. - my $max_image_delay = ($monitor->{MaxFPS}&&($monitor->{MaxFPS}>0)&&($monitor->{MaxFPS}<1))?(3/$monitor->{MaxFPS}):$Config{ZM_WATCH_MAX_DELAY}; - my $image_delay = $now-$image_time; - Debug( "Monitor $monitor->{Id} last captured $image_delay seconds ago, max is $max_image_delay\n" ); - if ( $image_delay > $max_image_delay ) - { - Info( "Restarting capture daemon for ".$monitor->{Name}.", time since last capture $image_delay seconds ($now-$image_time)\n" ); + my $max_image_delay = ( $monitor->{MaxFPS} + &&($monitor->{MaxFPS}>0) + &&($monitor->{MaxFPS}<1) + ) ? (3/$monitor->{MaxFPS}) + : $Config{ZM_WATCH_MAX_DELAY} + ; + my $image_delay = $now-$image_time; + Debug( "Monitor $monitor->{Id} last captured $image_delay seconds ago, max is $max_image_delay\n" ); + if ( $image_delay > $max_image_delay ) + { + Info( "Restarting capture daemon for " + .$monitor->{Name}.", time since last capture $image_delay seconds ($now-$image_time)\n" + ); + $restart = 1; + } + } + else + { + Info( "Restarting capture daemon for ".$monitor->{Name}.", shared data not valid\n" ); + $restart = 1; + } + + if ( $restart ) + { + my $command; + if ( $monitor->{Type} eq 'Local' ) + { + $command = "zmdc.pl restart zmc -d $monitor->{Device}"; + } + else + { + $command = "zmdc.pl restart zmc -m $monitor->{Id}"; + } + runCommand( $command ); + } + elsif ( $monitor->{Function} ne 'Monitor' ) + { + # Now check analysis daemon + $restart = 0; + # Check we have got an image recently + my $image_time = zmGetLastReadTime( $monitor ); + if ( !defined($image_time) ) { + # Can't read from shared data + $restart = 1; + Error( "Error reading shared data for $$monitor{id} $$monitor{Name}\n"); + } elsif ( !$image_time ) { + # We can't get the last capture time so can't be sure it's died. + $restart = 1; + Error( "Error getting last capture time for $$monitor{id} $$monitor{Name}\n"); + } else { + + my $max_image_delay = ( $monitor->{MaxFPS} + &&($monitor->{MaxFPS}>0) + &&($monitor->{MaxFPS}<1) + ) ? (3/$monitor->{MaxFPS}) + : $Config{ZM_WATCH_MAX_DELAY} + ; + my $image_delay = $now-$image_time; + Debug( "Monitor $monitor->{Id} last analysed $image_delay seconds ago, max is $max_image_delay\n" ); + if ( $image_delay > $max_image_delay ) + { + Info( "Analysis daemon for $$monitor{id} $$monitor{Name} needs restarting," + ." time since last analysis $image_delay seconds ($now-$image_time)\n" + ); $restart = 1; } - } - else - { - #Info( "Restarting capture daemon for ".$monitor->{Name}.", shared data not valid\n" ); - #$restart = 1; - } + } if ( $restart ) { - my $command; - if ( $monitor->{Type} eq 'Local' ) - { - $command = "zmdc.pl restart zmc -d $monitor->{Device}"; - } - else - { - $command = "zmdc.pl restart zmc -m $monitor->{Id}"; - } + Info( "Restarting analysis daemon for $$monitor{id} $$monitor{Name}\n"); + my $command = "zmdc.pl restart zma -m ".$monitor->{Id}; runCommand( $command ); - } - elsif ( $monitor->{Function} ne 'Monitor' ) - { - if ( zmMemVerify( $monitor ) && zmMemRead( $monitor, "shared_data:valid" ) ) - { - # Check we have got an image recently - my $image_time = zmGetLastReadTime( $monitor ); - next if ( !defined($image_time) ); # Can't read from shared data - next if ( !$image_time ); # We can't get the last capture time so can't be sure it's died. - - my $max_image_delay = ($monitor->{MaxFPS}&&($monitor->{MaxFPS}>0)&&($monitor->{MaxFPS}<1))?(3/$monitor->{MaxFPS}):$Config{ZM_WATCH_MAX_DELAY}; - my $image_delay = $now-$image_time; - Debug( "Monitor $monitor->{Id} last analysed $image_delay seconds ago, max is $max_image_delay\n" ); - if ( $image_delay > $max_image_delay ) - { - Info( "Restarting analysis daemon for ".$monitor->{Name}.", time since last analysis $image_delay seconds ($now-$image_time)\n" ); - my $command = "zmdc.pl restart zma -m ".$monitor->{Id}; - runCommand( $command ); - } - } - } - } + } # end if restart + } # end if check analysis daemon # Prevent open handles building up if we have connect to shared memory zmMemInvalidate( $monitor ); - } - sleep( $Config{ZM_WATCH_CHECK_INTERVAL} ); -} + } # end foreach monitor + sleep( $Config{ZM_WATCH_CHECK_INTERVAL} ); +} # end while (1) Info( "Watchdog exiting\n" ); exit(); diff --git a/scripts/zmx10.pl.in b/scripts/zmx10.pl.in index add59034d..d25e74c8a 100644 --- a/scripts/zmx10.pl.in +++ b/scripts/zmx10.pl.in @@ -20,10 +20,28 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # ========================================================================== -# -# This script controls the monitoring of the X10 interface and the consequent -# management of the ZM daemons based on the receipt of X10 signals. -# + +=head1 NAME + +zmx10.pl - ZoneMinder X10 Control Script + +=head1 SYNOPSIS + + zmx10.pl -c ,--command= [-u ,--unit-code=] + +=head1 DESCRIPTION + +This script controls the monitoring of the X10 interface and the consequent +management of the ZM daemons based on the receipt of X10 signals. + +=head1 OPTIONS + + -c , --command= - Command to issue, one of 'on','off','dim','bright','status','shutdown' + -u , --unit-code= - Unit code to act on required for all commands + except 'status' (optional) and 'shutdown' + -v, --verison - Pirnts the currently installed version of ZoneMinder + +=cut use strict; use bytes; @@ -46,7 +64,8 @@ use ZoneMinder; use POSIX; use Socket; use Getopt::Long; -use Data::Dumper; +use autouse 'Pod::Usage'=>qw(pod2usage); +use autouse 'Data::Dumper'=>qw(Dumper); use constant SOCK_FILE => $Config{ZM_PATH_SOCKS}.'/zmx10.sock'; @@ -56,18 +75,6 @@ $ENV{PATH} = '/bin:/usr/bin'; $ENV{SHELL} = '/bin/sh' if exists $ENV{SHELL}; delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; -sub Usage -{ - print( " -Usage: zmx10.pl -c ,--command= [-u ,--unit-code=] -Parameters are :- --c , --command= - Command to issue, one of 'on','off','dim','bright','status','shutdown' --u , --unit-code= - Unit code to act on required for all commands except 'status' (optional) and 'shutdown' --v, --verison - Pirnts the currently installed version of ZoneMinder -"); - exit( -1 ); -} - logInit(); logSetSignal(); @@ -75,53 +82,59 @@ my $command; my $unit_code; my $version; -if ( !GetOptions( 'command=s'=>\$command, 'unit-code=i'=>\$unit_code, version=>\$version ) ) -{ - Usage(); -} +GetOptions( + 'command=s' =>\$command, + 'unit-code=i' =>\$unit_code, + 'version' =>\$version +) or pod2usage(-exitstatus => -1); + if ( $version ) { - print ZoneMinder::Base::ZM_VERSION; - exit(0); + print ZoneMinder::Base::ZM_VERSION; + exit(0); } die( "No command given" ) unless( $command ); -die( "No unit code given" ) unless( $unit_code || ($command =~ /(?:start|status|shutdown)/) ); +die( "No unit code given" ) + unless( $unit_code || ($command =~ /(?:start|status|shutdown)/) ); if ( $command eq "start" ) { - X10Server::runServer(); - exit(); + X10Server::runServer(); + exit(); } -socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); +socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) + or Fatal( "Can't open socket: $!" ); my $saddr = sockaddr_un( SOCK_FILE ); if ( !connect( CLIENT, $saddr ) ) { - # The server isn't there - print( "Unable to connect, starting server\n" ); - close( CLIENT ); + # The server isn't there + print( "Unable to connect, starting server\n" ); + close( CLIENT ); - if ( my $cpid = fork() ) - { - # Parent process just sleep and fall through - sleep( 2 ); + if ( my $cpid = fork() ) + { + # Parent process just sleep and fall through + sleep( 2 ); logReinit(); - socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); - connect( CLIENT, $saddr ) or Fatal( "Can't connect: $!" ); - } - elsif ( defined($cpid) ) - { - setpgrp(); + socket( CLIENT, PF_UNIX, SOCK_STREAM, 0 ) + or Fatal( "Can't open socket: $!" ); + connect( CLIENT, $saddr ) + or Fatal( "Can't connect: $!" ); + } + elsif ( defined($cpid) ) + { + setpgrp(); logReinit(); - X10Server::runServer(); - } - else - { - Fatal( "Can't fork: $!" ); - } + X10Server::runServer(); + } + else + { + Fatal( "Can't fork: $!" ); + } } # The server is there, connect to it #print( "Writing commands\n" ); @@ -132,8 +145,8 @@ print( CLIENT $message ); shutdown( CLIENT, 1 ); while ( my $line = ) { - chomp( $line ); - print( "$line\n" ); + chomp( $line ); + print( "$line\n" ); } close( CLIENT ); #print( "Finished writing, bye\n" ); @@ -156,7 +169,7 @@ use POSIX; use DBI; use Socket; use X10::ActiveHome; -use Data::Dumper; +use autouse 'Data::Dumper'=>qw(Dumper); our $dbh; our $x10; @@ -167,515 +180,599 @@ our %pending_tasks; sub runServer { - Info( "X10 server starting\n" ); + Info( "X10 server starting\n" ); - socket( SERVER, PF_UNIX, SOCK_STREAM, 0 ) or Fatal( "Can't open socket: $!" ); - unlink( main::SOCK_FILE ); - my $saddr = sockaddr_un( main::SOCK_FILE ); - bind( SERVER, $saddr ) or Fatal( "Can't bind: $!" ); - listen( SERVER, SOMAXCONN ) or Fatal( "Can't listen: $!" ); + socket( SERVER, PF_UNIX, SOCK_STREAM, 0 ) + or Fatal( "Can't open socket: $!" ); + unlink( main::SOCK_FILE ); + my $saddr = sockaddr_un( main::SOCK_FILE ); + bind( SERVER, $saddr ) or Fatal( "Can't bind: $!" ); + listen( SERVER, SOMAXCONN ) or Fatal( "Can't listen: $!" ); - $dbh = zmDbConnect(); + $dbh = zmDbConnect(); - $x10 = new X10::ActiveHome( port=>ZM_X10_DEVICE, house_code=>ZM_X10_HOUSE_CODE, debug=>0 ); + $x10 = new X10::ActiveHome( port=>$Config{ZM_X10_DEVICE}, house_code=>$Config{ZM_X10_HOUSE_CODE}, debug=>0 ); - loadTasks(); + loadTasks(); - $x10->register_listener( \&x10listen ); + $x10->register_listener( \&x10listen ); - my $rin = ''; - vec( $rin, fileno(SERVER),1) = 1; - vec( $rin, $x10->select_fds(),1) = 1; - my $timeout = 0.2; - #print( "F:".fileno(SERVER)."\n" ); - my $reload = undef; - my $reload_count = 0; - my $reload_limit = &ZM_X10_DB_RELOAD_INTERVAL / $timeout; - while( 1 ) - { - my $nfound = select( my $rout = $rin, undef, undef, $timeout ); - #print( "Off select, NF:$nfound, ER:$!\n" ); - #print( vec( $rout, fileno(SERVER),1)."\n" ); - #print( vec( $rout, $x10->select_fds(),1)."\n" ); - if ( $nfound > 0 ) - { - if ( vec( $rout, fileno(SERVER),1) ) - { - my $paddr = accept( CLIENT, SERVER ); - my $message = ; + my $rin = ''; + vec( $rin, fileno(SERVER),1) = 1; + vec( $rin, $x10->select_fds(),1) = 1; + my $timeout = 0.2; + #print( "F:".fileno(SERVER)."\n" ); + my $reload = undef; + my $reload_count = 0; + my $reload_limit = $Config{ZM_X10_DB_RELOAD_INTERVAL} / $timeout; + while( 1 ) + { + my $nfound = select( my $rout = $rin, undef, undef, $timeout ); + #print( "Off select, NF:$nfound, ER:$!\n" ); + #print( vec( $rout, fileno(SERVER),1)."\n" ); + #print( vec( $rout, $x10->select_fds(),1)."\n" ); + if ( $nfound > 0 ) + { + if ( vec( $rout, fileno(SERVER),1) ) + { + my $paddr = accept( CLIENT, SERVER ); + my $message = ; - my ( $command, $unit_code ) = split( /;/, $message ); + my ( $command, $unit_code ) = split( /;/, $message ); - my $device; - if ( defined($unit_code) ) - { - if ( $unit_code < 1 || $unit_code > 16 ) - { - dPrint( ZoneMinder::Logger::ERROR, "Invalid unit code '$unit_code'\n" ); - next; - } + my $device; + if ( defined($unit_code) ) + { + if ( $unit_code < 1 || $unit_code > 16 ) + { + dPrint( ZoneMinder::Logger::ERROR, "Invalid unit code '$unit_code'\n" ); + next; + } - $device = $device_hash{$unit_code}; - if ( !$device ) - { - $device = $device_hash{$unit_code} = { appliance=>$x10->Appliance( unit_code=>$unit_code ), status=>'unknown' }; - } - } + $device = $device_hash{$unit_code}; + if ( !$device ) + { + $device = $device_hash{$unit_code} = { appliance=>$x10->Appliance( unit_code=>$unit_code ), + status=>'unknown' + }; + } + } - my $result; - if ( $command eq 'on' ) - { - $result = $device->{appliance}->on(); - } - elsif ( $command eq 'off' ) - { - $result = $device->{appliance}->off(); - } - #elsif ( $command eq 'dim' ) - #{ - #$result = $device->{appliance}->dim(); - #} - #elsif ( $command eq 'bright' ) - #{ - #$result = $device->{appliance}->bright(); - #} - elsif ( $command eq 'status' ) - { - if ( $device ) - { - dPrint( ZoneMinder::Logger::DEBUG, $unit_code." ".$device->{status}."\n" ); - } - else - { - foreach my $unit_code ( sort( keys(%device_hash) ) ) - { - my $device = $device_hash{$unit_code}; - dPrint( ZoneMinder::Logger::DEBUG, $unit_code." ".$device->{status}."\n" ); - } - } - } - elsif ( $command eq 'shutdown' ) - { - last; - } - else - { - dPrint( ZoneMinder::Logger::ERROR, "Invalid command '$command'\n" ); - } - if ( defined($result) ) - { - if ( 1 || $result ) - { - $device->{status} = uc($command); - dPrint( ZoneMinder::Logger::DEBUG, $device->{appliance}->address()." $command, ok\n" ); - #x10listen( new X10::Event( sprintf("%s %s", $device->{appliance}->address, uc($command) ) ) ); - } - else - { - dPrint( ZoneMinder::Logger::ERROR, $device->{appliance}->address()." $command, failed\n" ); - } - } - close( CLIENT ); - } - elsif ( vec( $rout, $x10->select_fds(),1) ) - { - $x10->handle_input(); - } - else - { - Fatal( "Bogus descriptor" ); - } - } - elsif ( $nfound < 0 ) - { - if ( $! != EINTR ) - { - Fatal( "Can't select: $!" ); - } - } - else - { - #print( "Select timed out\n" ); - # Check for state changes - foreach my $monitor_id ( sort(keys(%monitor_hash) ) ) - { - my $monitor = $monitor_hash{$monitor_id}; - my $state = zmGetMonitorState( $monitor ); - if ( !defined($state) ) - { - $reload = !undef; - next; - } - if ( defined( $monitor->{LastState} ) ) - { - my $task_list; - if ( ($state == STATE_ALARM || $state == STATE_ALERT) && ($monitor->{LastState} == STATE_IDLE || $monitor->{LastState} == STATE_TAPE) ) # Gone into alarm state - { - Debug( "Applying ON_list for $monitor_id\n" ); - $task_list = $monitor->{"ON_list"}; - } - elsif ( ($state == STATE_IDLE && $monitor->{LastState} != STATE_IDLE) || ($state == STATE_TAPE && $monitor->{LastState} != STATE_TAPE) ) # Come out of alarm state - { - Debug( "Applying OFF_list for $monitor_id\n" ); - $task_list = $monitor->{"OFF_list"}; - } - if ( $task_list ) - { - foreach my $task ( @$task_list ) - { - processTask( $task ); - } - } - } - $monitor->{LastState} = $state; - } + my $result; + if ( $command eq 'on' ) + { + $result = $device->{appliance}->on(); + } + elsif ( $command eq 'off' ) + { + $result = $device->{appliance}->off(); + } + #elsif ( $command eq 'dim' ) + #{ + #$result = $device->{appliance}->dim(); + #} + #elsif ( $command eq 'bright' ) + #{ + #$result = $device->{appliance}->bright(); + #} + elsif ( $command eq 'status' ) + { + if ( $device ) + { + dPrint( ZoneMinder::Logger::DEBUG, $unit_code." ".$device->{status}."\n" ); + } + else + { + foreach my $unit_code ( sort( keys(%device_hash) ) ) + { + my $device = $device_hash{$unit_code}; + dPrint( ZoneMinder::Logger::DEBUG, $unit_code." ".$device->{status}."\n" ); + } + } + } + elsif ( $command eq 'shutdown' ) + { + last; + } + else + { + dPrint( ZoneMinder::Logger::ERROR, "Invalid command '$command'\n" ); + } + if ( defined($result) ) + { + if ( 1 || $result ) + { + $device->{status} = uc($command); + dPrint( ZoneMinder::Logger::DEBUG, $device->{appliance}->address()." $command, ok\n" ); + #x10listen( new X10::Event( sprintf("%s %s", $device->{appliance}->address, uc($command) ) ) ); + } + else + { + dPrint( ZoneMinder::Logger::ERROR, $device->{appliance}->address()." $command, failed\n" ); + } + } + close( CLIENT ); + } + elsif ( vec( $rout, $x10->select_fds(),1) ) + { + $x10->handle_input(); + } + else + { + Fatal( "Bogus descriptor" ); + } + } + elsif ( $nfound < 0 ) + { + if ( $! != EINTR ) + { + Fatal( "Can't select: $!" ); + } + } + else + { + #print( "Select timed out\n" ); + # Check for state changes + foreach my $monitor_id ( sort(keys(%monitor_hash) ) ) + { + my $monitor = $monitor_hash{$monitor_id}; + my $state = zmGetMonitorState( $monitor ); + if ( !defined($state) ) + { + $reload = !undef; + next; + } + if ( defined( $monitor->{LastState} ) ) + { + my $task_list; + if ( ($state == STATE_ALARM || $state == STATE_ALERT) + && ($monitor->{LastState} == STATE_IDLE || $monitor->{LastState} == STATE_TAPE) + ) # Gone into alarm state + { + Debug( "Applying ON_list for $monitor_id\n" ); + $task_list = $monitor->{"ON_list"}; + } + elsif ( ($state == STATE_IDLE && $monitor->{LastState} != STATE_IDLE) + || ($state == STATE_TAPE && $monitor->{LastState} != STATE_TAPE) + ) # Come out of alarm state + { + Debug( "Applying OFF_list for $monitor_id\n" ); + $task_list = $monitor->{"OFF_list"}; + } + if ( $task_list ) + { + foreach my $task ( @$task_list ) + { + processTask( $task ); + } + } + } + $monitor->{LastState} = $state; + } - # Check for pending tasks - my $now = time(); - foreach my $activation_time ( sort(keys(%pending_tasks) ) ) - { - last if ( $activation_time > $now ); - my $pending_list = $pending_tasks{$activation_time}; - foreach my $task ( @$pending_list ) - { - processTask( $task ); - } - delete( $pending_tasks{$activation_time} ); - } - if ( $reload || ++$reload_count >= $reload_limit ) - { - loadTasks(); - $reload = undef; - $reload_count = 0; - } - } - } - Info( "X10 server exiting\n" ); - close( SERVER ); - exit(); + # Check for pending tasks + my $now = time(); + foreach my $activation_time ( sort(keys(%pending_tasks) ) ) + { + last if ( $activation_time > $now ); + my $pending_list = $pending_tasks{$activation_time}; + foreach my $task ( @$pending_list ) + { + processTask( $task ); + } + delete( $pending_tasks{$activation_time} ); + } + if ( $reload || ++$reload_count >= $reload_limit ) + { + loadTasks(); + $reload = undef; + $reload_count = 0; + } + } + } + Info( "X10 server exiting\n" ); + close( SERVER ); + exit(); } sub addToDeviceList { - my $unit_code = shift; - my $event = shift; - my $monitor = shift; - my $function = shift; - my $limit = shift; + my $unit_code = shift; + my $event = shift; + my $monitor = shift; + my $function = shift; + my $limit = shift; - Debug( "Adding to device list, uc:$unit_code, ev:$event, mo:".$monitor->{Id}.", fu:$function, li:$limit\n" ); - my $device = $device_hash{$unit_code}; - if ( !$device ) - { - $device = $device_hash{$unit_code} = { appliance=>$x10->Appliance( unit_code=>$unit_code ), status=>'unknown' }; - } + Debug( "Adding to device list, uc:$unit_code, ev:$event, mo:" + .$monitor->{Id}.", fu:$function, li:$limit\n" + ); + my $device = $device_hash{$unit_code}; + if ( !$device ) + { + $device = $device_hash{$unit_code} = { appliance=>$x10->Appliance( unit_code=>$unit_code ), + status=>'unknown' + }; + } - my $task = { type=>"device", monitor=>$monitor, address=>$device->{appliance}->address(), function=>$function }; - if ( $limit ) - { - $task->{limit} = $limit - } + my $task = { type=>"device", + monitor=>$monitor, + address=>$device->{appliance}->address(), + function=>$function + }; + if ( $limit ) + { + $task->{limit} = $limit + } - my $task_list = $device->{$event."_list"}; - if ( !$task_list ) - { - $task_list = $device->{$event."_list"} = []; - } - push( @$task_list, $task ); + my $task_list = $device->{$event."_list"}; + if ( !$task_list ) + { + $task_list = $device->{$event."_list"} = []; + } + push( @$task_list, $task ); } sub addToMonitorList { - my $monitor = shift; - my $event = shift; - my $unit_code = shift; - my $function = shift; - my $limit = shift; + my $monitor = shift; + my $event = shift; + my $unit_code = shift; + my $function = shift; + my $limit = shift; - Debug( "Adding to monitor list, uc:$unit_code, ev:$event, mo:".$monitor->{Id}.", fu:$function, li:$limit\n" ); - my $device = $device_hash{$unit_code}; - if ( !$device ) - { - $device = $device_hash{$unit_code} = { appliance=>$x10->Appliance( unit_code=>$unit_code ), status=>'unknown' }; - } + Debug( "Adding to monitor list, uc:$unit_code, ev:$event, mo:".$monitor->{Id} + .", fu:$function, li:$limit\n" + ); + my $device = $device_hash{$unit_code}; + if ( !$device ) + { + $device = $device_hash{$unit_code} = { appliance=>$x10->Appliance( unit_code=>$unit_code ), + status=>'unknown' + }; + } - my $task = { type=>"monitor", device=>$device, id=>$monitor->{Id}, function=>$function }; - if ( $limit ) - { - $task->{limit} = $limit; - } + my $task = { type=>"monitor", + device=>$device, + id=>$monitor->{Id}, + function=>$function + }; + if ( $limit ) + { + $task->{limit} = $limit; + } - my $task_list = $monitor->{$event."_list"}; - if ( !$task_list ) - { - $task_list = $monitor->{$event."_list"} = []; - } - push( @$task_list, $task ); + my $task_list = $monitor->{$event."_list"}; + if ( !$task_list ) + { + $task_list = $monitor->{$event."_list"} = []; + } + push( @$task_list, $task ); } sub loadTasks { - %monitor_hash = (); + %monitor_hash = (); - Debug( "Loading tasks\n" ); - # Clear out all old device task lists - foreach my $unit_code ( sort( keys(%device_hash) ) ) - { - my $device = $device_hash{$unit_code}; - $device->{ON_list} = []; - $device->{OFF_list} = []; - } + Debug( "Loading tasks\n" ); + # Clear out all old device task lists + foreach my $unit_code ( sort( keys(%device_hash) ) ) + { + my $device = $device_hash{$unit_code}; + $device->{ON_list} = []; + $device->{OFF_list} = []; + } - my $sql = "select M.*,T.* from Monitors as M inner join TriggersX10 as T on (M.Id = T.MonitorId) where find_in_set( M.Function, 'Modect,Record,Mocord,Nodect' ) and M.Enabled = 1 and find_in_set( 'X10', M.Triggers )"; - my $sth = $dbh->prepare_cached( $sql ) or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); - my $res = $sth->execute() or Fatal( "Can't execute: ".$sth->errstr() ); - while( my $monitor = $sth->fetchrow_hashref() ) - { - next if ( !zmMemVerify( $monitor ) ); # Check shared memory ok + my $sql = "SELECT M.*,T.* from Monitors as M + INNER JOIN TriggersX10 as T on (M.Id = T.MonitorId) + WHERE find_in_set( M.Function, 'Modect,Record,Mocord,Nodect' ) + AND M.Enabled = 1 + AND find_IN_set( 'X10', M.Triggers )" + ; + my $sth = $dbh->prepare_cached( $sql ) + or Fatal( "Can't prepare '$sql': ".$dbh->errstr() ); + my $res = $sth->execute() + or Fatal( "Can't execute: ".$sth->errstr() ); + while( my $monitor = $sth->fetchrow_hashref() ) + { + next if ( !zmMemVerify( $monitor ) ); # Check shared memory ok - $monitor_hash{$monitor->{Id}} = $monitor; + $monitor_hash{$monitor->{Id}} = $monitor; - if ( $monitor->{Activation} ) - { - Debug( "$monitor->{Name} has active string '$monitor->{Activation}'\n" ); - foreach my $code_string ( split( /,/, $monitor->{Activation} ) ) - { - #Debug( "Code string: $code_string\n" ); - my ( $invert, $unit_code, $modifier, $limit ) = ( $code_string =~ /^([!~])?(\d+)(?:([+-])(\d+)?)?$/ ); - $limit = 0 if ( !$limit ); - if ( $unit_code ) - { - if ( !$modifier || $modifier eq '+' ) - { - addToDeviceList( $unit_code, "ON", $monitor, !$invert?"start_active":"stop_active", $limit ); - } - if ( !$modifier || $modifier eq '-' ) - { - addToDeviceList( $unit_code, "OFF", $monitor, !$invert?"stop_active":"start_active", $limit ); - } - } - } - } - if ( $monitor->{AlarmInput} ) - { - Debug( "$monitor->{Name} has alarm input string '$monitor->{AlarmInput}'\n" ); - foreach my $code_string ( split( /,/, $monitor->{AlarmInput} ) ) - { - #Debug( "Code string: $code_string\n" ); - my ( $invert, $unit_code, $modifier, $limit ) = ( $code_string =~ /^([!~])?(\d+)(?:([+-])(\d+)?)?$/ ); - $limit = 0 if ( !$limit ); - if ( $unit_code ) - { - if ( !$modifier || $modifier eq '+' ) - { - addToDeviceList( $unit_code, "ON", $monitor, !$invert?"start_alarm":"stop_alarm", $limit ); - } - if ( !$modifier || $modifier eq '-' ) - { - addToDeviceList( $unit_code, "OFF", $monitor, !$invert?"stop_alarm":"start_alarm", $limit ); - } - } - } - } - if ( $monitor->{AlarmOutput} ) - { - Debug( "$monitor->{Name} has alarm output string '$monitor->{AlarmOutput}'\n" ); - foreach my $code_string ( split( /,/, $monitor->{AlarmOutput} ) ) - { - #Debug( "Code string: $code_string\n" ); - my ( $invert, $unit_code, $modifier, $limit ) = ( $code_string =~ /^([!~])?(\d+)(?:([+-])(\d+)?)?$/ ); - $limit = 0 if ( !$limit ); - if ( $unit_code ) - { - if ( !$modifier || $modifier eq '+' ) - { - addToMonitorList( $monitor, "ON", $unit_code, !$invert?"on":"off", $limit ); - } - if ( !$modifier || $modifier eq '-' ) - { - addToMonitorList( $monitor, "OFF", $unit_code, !$invert?"off":"on", $limit ); - } - } - } - } + if ( $monitor->{Activation} ) + { + Debug( "$monitor->{Name} has active string '$monitor->{Activation}'\n" ); + foreach my $code_string ( split( /,/, $monitor->{Activation} ) ) + { + #Debug( "Code string: $code_string\n" ); + my ( $invert, $unit_code, $modifier, $limit ) + = ( $code_string =~ /^([!~])?(\d+)(?:([+-])(\d+)?)?$/ ); + $limit = 0 if ( !$limit ); + if ( $unit_code ) + { + if ( !$modifier || $modifier eq '+' ) + { + addToDeviceList( $unit_code, + "ON", + $monitor, + !$invert ? "start_active" + : "stop_active", + $limit + ); + } + if ( !$modifier || $modifier eq '-' ) + { + addToDeviceList( $unit_code, + "OFF", + $monitor, + !$invert ? "stop_active" + : "start_active", + $limit + ); + } + } + } + } + if ( $monitor->{AlarmInput} ) + { + Debug( "$monitor->{Name} has alarm input string '$monitor->{AlarmInput}'\n" ); + foreach my $code_string ( split( /,/, $monitor->{AlarmInput} ) ) + { + #Debug( "Code string: $code_string\n" ); + my ( $invert, $unit_code, $modifier, $limit ) + = ( $code_string =~ /^([!~])?(\d+)(?:([+-])(\d+)?)?$/ ); + $limit = 0 if ( !$limit ); + if ( $unit_code ) + { + if ( !$modifier || $modifier eq '+' ) + { + addToDeviceList( $unit_code, + "ON", + $monitor, + !$invert ? "start_alarm" + : "stop_alarm", + $limit + ); + } + if ( !$modifier || $modifier eq '-' ) + { + addToDeviceList( $unit_code, + "OFF", + $monitor, + !$invert ? "stop_alarm" + : "start_alarm", + $limit + ); + } + } + } + } + if ( $monitor->{AlarmOutput} ) + { + Debug( "$monitor->{Name} has alarm output string '$monitor->{AlarmOutput}'\n" ); + foreach my $code_string ( split( /,/, $monitor->{AlarmOutput} ) ) + { + #Debug( "Code string: $code_string\n" ); + my ( $invert, $unit_code, $modifier, $limit ) + = ( $code_string =~ /^([!~])?(\d+)(?:([+-])(\d+)?)?$/ ); + $limit = 0 if ( !$limit ); + if ( $unit_code ) + { + if ( !$modifier || $modifier eq '+' ) + { + addToMonitorList( $monitor, + "ON", + $unit_code, + !$invert ? "on" + : "off", + $limit + ); + } + if ( !$modifier || $modifier eq '-' ) + { + addToMonitorList( $monitor, + "OFF", + $unit_code, + !$invert ? "off" + : "on", + $limit + ); + } + } + } + } zmMemInvalidate( $monitor ); - } + } } sub addPendingTask { - my $task = shift; + my $task = shift; - # Check whether we are just extending a previous pending task - # and remove it if it's there - foreach my $activation_time ( sort(keys(%pending_tasks) ) ) - { - my $pending_list = $pending_tasks{$activation_time}; - my $new_pending_list = []; - foreach my $pending_task ( @$pending_list ) - { - if ( $task->{type} ne $pending_task->{type} ) - { - push( @$new_pending_list, $pending_task ) - } - elsif ( $task->{type} eq "device" ) - { - if (( $task->{monitor}->{Id} != $pending_task->{monitor}->{Id} ) - || ( $task->{function} ne $pending_task->{function} )) - { - push( @$new_pending_list, $pending_task ) - } - } - elsif ( $task->{type} eq "monitor" ) - { - if (( $task->{device}->{appliance}->unit_code() != $pending_task->{device}->{appliance}->unit_code() ) - || ( $task->{function} ne $pending_task->{function} )) - { - push( @$new_pending_list, $pending_task ) - } - } - } - if ( @$new_pending_list ) - { - $pending_tasks{$activation_time} = $new_pending_list; - } - else - { - delete( $pending_tasks{$activation_time} ); - } - } + # Check whether we are just extending a previous pending task + # and remove it if it's there + foreach my $activation_time ( sort(keys(%pending_tasks) ) ) + { + my $pending_list = $pending_tasks{$activation_time}; + my $new_pending_list = []; + foreach my $pending_task ( @$pending_list ) + { + if ( $task->{type} ne $pending_task->{type} ) + { + push( @$new_pending_list, $pending_task ) + } + elsif ( $task->{type} eq "device" ) + { + if (( $task->{monitor}->{Id} != $pending_task->{monitor}->{Id} ) + || ( $task->{function} ne $pending_task->{function} )) + { + push( @$new_pending_list, $pending_task ) + } + } + elsif ( $task->{type} eq "monitor" ) + { + if (( $task->{device}->{appliance}->unit_code() + != $pending_task->{device}->{appliance}->unit_code() + ) + || ( $task->{function} ne $pending_task->{function} ) + ) + { + push( @$new_pending_list, $pending_task ) + } + } + } + if ( @$new_pending_list ) + { + $pending_tasks{$activation_time} = $new_pending_list; + } + else + { + delete( $pending_tasks{$activation_time} ); + } + } - my $end_time = time() + $task->{limit}; - my $pending_list = $pending_tasks{$end_time}; - if ( !$pending_list ) - { - $pending_list = $pending_tasks{$end_time} = []; - } - my $pending_task; - if ( $task->{type} eq "device" ) - { - $pending_task = { type=>$task->{type}, monitor=>$task->{monitor}, function=>$task->{function} }; - $pending_task->{function} =~ s/start/stop/; - } - elsif ( $task->{type} eq "monitor" ) - { - $pending_task = { type=>$task->{type}, device=>$task->{device}, function=>$task->{function} }; - $pending_task->{function} =~ s/on/off/; - } - push( @$pending_list, $pending_task ); + my $end_time = time() + $task->{limit}; + my $pending_list = $pending_tasks{$end_time}; + if ( !$pending_list ) + { + $pending_list = $pending_tasks{$end_time} = []; + } + my $pending_task; + if ( $task->{type} eq "device" ) + { + $pending_task = { type=>$task->{type}, + monitor=>$task->{monitor}, + function=>$task->{function} + }; + $pending_task->{function} =~ s/start/stop/; + } + elsif ( $task->{type} eq "monitor" ) + { + $pending_task = { type=>$task->{type}, + device=>$task->{device}, + function=>$task->{function} + }; + $pending_task->{function} =~ s/on/off/; + } + push( @$pending_list, $pending_task ); } sub processTask { - my $task = shift; + my $task = shift; - if ( $task->{type} eq "device" ) - { - my ( $instruction, $class ) = ( $task->{function} =~ /^(.+)_(.+)$/ ); + if ( $task->{type} eq "device" ) + { + my ( $instruction, $class ) = ( $task->{function} =~ /^(.+)_(.+)$/ ); - if ( $class eq "active" ) - { - if ( $instruction eq "start" ) - { - zmMonitorEnable( $task->{monitor} ); - if ( $task->{limit} ) - { - addPendingTask( $task ); - } - } - elsif( $instruction eq "stop" ) - { - zmMonitorDisable( $task->{monitor} ); - } - } - elsif( $class eq "alarm" ) - { - if ( $instruction eq "start" ) - { - zmTriggerEventOn( $task->{monitor}, 0, main::CAUSE_STRING, $task->{address} ); - if ( $task->{limit} ) - { - addPendingTask( $task ); - } - } - elsif( $instruction eq "stop" ) - { - zmTriggerEventCancel( $task->{monitor} ); - } - } - } - elsif( $task->{type} eq "monitor" ) - { - if ( $task->{function} eq "on" ) - { - $task->{device}->{appliance}->on(); - if ( $task->{limit} ) - { - addPendingTask( $task ); - } - } - elsif ( $task->{function} eq "off" ) - { - $task->{device}->{appliance}->off(); - } - } + if ( $class eq "active" ) + { + if ( $instruction eq "start" ) + { + zmMonitorEnable( $task->{monitor} ); + if ( $task->{limit} ) + { + addPendingTask( $task ); + } + } + elsif( $instruction eq "stop" ) + { + zmMonitorDisable( $task->{monitor} ); + } + } + elsif( $class eq "alarm" ) + { + if ( $instruction eq "start" ) + { + zmTriggerEventOn( $task->{monitor}, + 0, + main::CAUSE_STRING, + $task->{address} + ); + if ( $task->{limit} ) + { + addPendingTask( $task ); + } + } + elsif( $instruction eq "stop" ) + { + zmTriggerEventCancel( $task->{monitor} ); + } + } + } + elsif( $task->{type} eq "monitor" ) + { + if ( $task->{function} eq "on" ) + { + $task->{device}->{appliance}->on(); + if ( $task->{limit} ) + { + addPendingTask( $task ); + } + } + elsif ( $task->{function} eq "off" ) + { + $task->{device}->{appliance}->off(); + } + } } sub dPrint { - my $dbg_level = shift; - if ( fileno(CLIENT) ) - { - print CLIENT @_ - } - if ( $dbg_level == ZoneMinder::Logger::DEBUG ) - { - Debug( @_ ); - } - elsif ( $dbg_level == ZoneMinder::Logger::INFO ) - { - Info( @_ ); - } - elsif ( $dbg_level == ZoneMinder::Logger::WARNING ) - { - Warning( @_ ); - } - elsif ( $dbg_level == ZoneMinder::Logger::ERROR ) - { - Error( @_ ); - } - elsif ( $dbg_level == ZoneMinder::Logger::FATAL ) - { - Fatal( @_ ); - } + my $dbg_level = shift; + if ( fileno(CLIENT) ) + { + print CLIENT @_ + } + if ( $dbg_level == ZoneMinder::Logger::DEBUG ) + { + Debug( @_ ); + } + elsif ( $dbg_level == ZoneMinder::Logger::INFO ) + { + Info( @_ ); + } + elsif ( $dbg_level == ZoneMinder::Logger::WARNING ) + { + Warning( @_ ); + } + elsif ( $dbg_level == ZoneMinder::Logger::ERROR ) + { + Error( @_ ); + } + elsif ( $dbg_level == ZoneMinder::Logger::FATAL ) + { + Fatal( @_ ); + } } sub x10listen { - foreach my $event ( @_ ) - { - #print( Data::Dumper( $_ )."\n" ); - if ( $event->house_code() eq ZM_X10_HOUSE_CODE ) - { - my $unit_code = $event->unit_code(); - my $device = $device_hash{$unit_code}; - if ( !$device ) - { - $device = $device_hash{$unit_code} = { appliance=>$x10->Appliance( unit_code=>$unit_code ), status=>'unknown' }; - } - next if ( $event->func() !~ /(?:ON|OFF)/ ); - $device->{status} = $event->func(); - my $task_list = $device->{$event->func()."_list"}; - if ( $task_list ) - { - foreach my $task ( @$task_list ) - { - processTask( $task ); - } - } - } - Info( "Got event - ".$event->as_string()."\n" ); - } + foreach my $event ( @_ ) + { + #print( Data::Dumper( $_ )."\n" ); + if ( $event->house_code() eq $Config{ZM_X10_HOUSE_CODE} ) + { + my $unit_code = $event->unit_code(); + my $device = $device_hash{$unit_code}; + if ( !$device ) + { + $device = $device_hash{$unit_code} = { appliance=>$x10->Appliance( unit_code=>$unit_code ), + status=>'unknown' + }; + } + next if ( $event->func() !~ /(?:ON|OFF)/ ); + $device->{status} = $event->func(); + my $task_list = $device->{$event->func()."_list"}; + if ( $task_list ) + { + foreach my $task ( @$task_list ) + { + processTask( $task ); + } + } + } + Info( "Got event - ".$event->as_string()."\n" ); + } } 1; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 0fedc2af9..f55967015 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -14,7 +14,6 @@ add_executable(zma zma.cpp) add_executable(zmu zmu.cpp) add_executable(zmf zmf.cpp) add_executable(zms zms.cpp) -add_executable(nph-zms zms.cpp) add_executable(zmstreamer zmstreamer.cpp) target_link_libraries(zmc zm ${ZM_EXTRA_LIBS} ${ZM_BIN_LIBS}) @@ -22,10 +21,9 @@ target_link_libraries(zma zm ${ZM_EXTRA_LIBS} ${ZM_BIN_LIBS}) target_link_libraries(zmu zm ${ZM_EXTRA_LIBS} ${ZM_BIN_LIBS}) target_link_libraries(zmf zm ${ZM_EXTRA_LIBS} ${ZM_BIN_LIBS}) target_link_libraries(zms zm ${ZM_EXTRA_LIBS} ${ZM_BIN_LIBS}) -target_link_libraries(nph-zms zm ${ZM_EXTRA_LIBS} ${ZM_BIN_LIBS}) target_link_libraries(zmstreamer zm ${ZM_EXTRA_LIBS} ${ZM_BIN_LIBS}) install(TARGETS zmc zma zmu zmf zmstreamer RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}" PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) -install(TARGETS zms nph-zms RUNTIME DESTINATION "${ZM_CGIDIR}" PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) - +install(TARGETS zms RUNTIME DESTINATION "${ZM_CGIDIR}" PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) +install(CODE "execute_process(COMMAND ln -sf zms nph-zms WORKING_DIRECTORY \"\$ENV{DESTDIR}${ZM_CGIDIR}\")") diff --git a/src/zm.h b/src/zm.h index 9e4f47b5d..a60ab655d 100644 --- a/src/zm.h +++ b/src/zm.h @@ -17,14 +17,24 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // +#if !defined(PATH_MAX) +#define PATH_MAX 1024 +#endif + #ifndef ZM_H #define ZM_H #include "zm_config.h" +#ifdef SOLARIS +#undef DEFAULT_TYPE // pthread defines this which breaks StreamType DEFAULT_TYPE +#include // define strerror() and friends +#endif #include "zm_logger.h" #include +#include + extern const char* self; #endif // ZM_H diff --git a/src/zm_box.h b/src/zm_box.h index 8a18b8847..8aa341d73 100644 --- a/src/zm_box.h +++ b/src/zm_box.h @@ -23,7 +23,11 @@ #include "zm.h" #include "zm_coord.h" +#ifndef SOLARIS #include +#else +#include +#endif // // Class used for storing a box, which is defined as a region diff --git a/src/zm_comms.cpp b/src/zm_comms.cpp index c42b7bd17..a109019bd 100644 --- a/src/zm_comms.cpp +++ b/src/zm_comms.cpp @@ -36,6 +36,10 @@ #include #include +#ifdef SOLARIS +#include // define FIONREAD +#endif + int CommsBase::readV( int iovcnt, /* const void *, int, */ ... ) { va_list arg_ptr; diff --git a/src/zm_event.cpp b/src/zm_event.cpp index 1c7e13e7d..3e723fa48 100644 --- a/src/zm_event.cpp +++ b/src/zm_event.cpp @@ -36,6 +36,12 @@ #include "zm_event.h" #include "zm_monitor.h" +// sendfile tricks +extern "C" +{ +#include "zm_sendfile.h" +} + #include "zmf.h" #if HAVE_SYS_SENDFILE_H @@ -1309,7 +1315,7 @@ bool EventStream::sendFrame( int delta_us ) if(send_raw) { #if HAVE_SENDFILE fprintf( stdout, "Content-Length: %d\r\n\r\n", (int)filestat.st_size ); - if(sendfile(fileno(stdout), fileno(fdj), 0, (int)filestat.st_size) != (int)filestat.st_size) { + if(zm_sendfile(fileno(stdout), fileno(fdj), 0, (int)filestat.st_size) != (int)filestat.st_size) { /* sendfile() failed, use standard way instead */ img_buffer_size = fread( img_buffer, 1, sizeof(temp_img_buffer), fdj ); if ( fwrite( img_buffer, img_buffer_size, 1, stdout ) != 1 ) { @@ -1422,8 +1428,10 @@ void EventStream::runStream() if ( ((curr_frame_id-1)%frame_mod) == 0 ) { delta_us = (unsigned int)(frame_data->delta * 1000000); - if ( effective_fps < base_fps ) - delta_us = (unsigned int)((delta_us * base_fps)/effective_fps); + // if effective > base we should speed up frame delivery + delta_us = (unsigned int)((delta_us * base_fps)/effective_fps); + // but must not exceed maxfps + delta_us = max(delta_us, 1000000 / maxfps); send_frame = true; } } diff --git a/src/zm_ffmpeg.cpp b/src/zm_ffmpeg.cpp index 6d08f8576..fbbd23793 100644 --- a/src/zm_ffmpeg.cpp +++ b/src/zm_ffmpeg.cpp @@ -76,13 +76,21 @@ SWScale::SWScale() : gotdefaults(false), swscale_ctx(NULL), input_avframe(NULL), Debug(4,"SWScale object created"); /* Allocate AVFrame for the input */ +#if LIBAVCODEC_VERSION_CHECK(55, 28, 1, 45, 101) + input_avframe = av_frame_alloc(); +#else input_avframe = avcodec_alloc_frame(); +#endif if(input_avframe == NULL) { Fatal("Failed allocating AVFrame for the input"); } /* Allocate AVFrame for the output */ +#if LIBAVCODEC_VERSION_CHECK(55, 28, 1, 45, 101) + output_avframe = av_frame_alloc(); +#else output_avframe = avcodec_alloc_frame(); +#endif if(output_avframe == NULL) { Fatal("Failed allocating AVFrame for the output"); } @@ -133,7 +141,7 @@ int SWScale::Convert(const uint8_t* in_buffer, const size_t in_buffer_size, uint return -3; } -#if LIBSWSCALE_VERSION_INT >= AV_VERSION_INT(0, 8, 0) +#if LIBSWSCALE_VERSION_CHECK(0, 8, 0, 8, 0) /* Warn if the input or output pixelformat is not supported */ if(!sws_isSupportedInput(in_pf)) { Warning("swscale does not support the input format: %c%c%c%c",(in_pf)&0xff,((in_pf)&0xff),((in_pf>>16)&0xff),((in_pf>>24)&0xff)); diff --git a/src/zm_ffmpeg.h b/src/zm_ffmpeg.h index fd124ca37..714665cf8 100644 --- a/src/zm_ffmpeg.h +++ b/src/zm_ffmpeg.h @@ -32,7 +32,17 @@ extern "C" { #include #include #include -#if LIBAVUTIL_VERSION_INT > AV_VERSION_INT(50, 28, 0) + +/* LIBAVUTIL_VERSION_CHECK checks for the right version of libav and FFmpeg + * The original source is vlc (in modules/codec/avcodec/avcommon_compat.h) + * a is the major version + * b and c the minor and micro versions of libav + * d and e the minor and micro versions of FFmpeg */ +#define LIBAVUTIL_VERSION_CHECK(a, b, c, d, e) \ + ( (LIBAVUTIL_VERSION_MICRO < 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(a, b, c) ) || \ + (LIBAVUTIL_VERSION_MICRO >= 100 && LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(a, d, e) ) ) + +#if LIBAVUTIL_VERSION_CHECK(50, 29, 0, 29, 0) #include #else #include @@ -42,43 +52,82 @@ extern "C" { #include #include #include -#endif +#endif /* HAVE_LIBAVUTIL_AVUTIL_H */ // AVCODEC #if HAVE_LIBAVCODEC_AVCODEC_H #include + +/* + * LIBAVCODEC_VERSION_CHECK checks for the right version of libav and FFmpeg + * The original source is vlc (in modules/codec/avcodec/avcommon_compat.h) + * a is the major version + * b and c the minor and micro versions of libav + * d and e the minor and micro versions of FFmpeg */ +#define LIBAVCODEC_VERSION_CHECK(a, b, c, d, e) \ + ( (LIBAVCODEC_VERSION_MICRO < 100 && LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(a, b, c) ) || \ + (LIBAVCODEC_VERSION_MICRO >= 100 && LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(a, d, e) ) ) + #elif HAVE_FFMPEG_AVCODEC_H #include -#endif - +#endif /* HAVE_LIBAVCODEC_AVCODEC_H */ + #if defined(HAVE_LIBAVCODEC_AVCODEC_H) -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(54,25,0) +#if LIBAVCODEC_VERSION_CHECK(54, 25, 0, 51, 100) #define _AVCODECID AVCodecID #else #define _AVCODECID CodecID #endif -#endif +#endif /* HAVE_LIBAVCODEC_AVCODEC_H */ // AVFORMAT #if HAVE_LIBAVFORMAT_AVFORMAT_H #include + +/* LIBAVFORMAT_VERSION_CHECK checks for the right version of libav and FFmpeg + * The original source is vlc (in modules/codec/avcodec/avcommon_compat.h) + * a is the major version + * b and c the minor and micro versions of libav + * d and e the minor and micro versions of FFmpeg */ +#define LIBAVFORMAT_VERSION_CHECK(a, b, c, d, e) \ + ( (LIBAVFORMAT_VERSION_MICRO < 100 && LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(a, b, c) ) || \ + (LIBAVFORMAT_VERSION_MICRO >= 100 && LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(a, d, e) ) ) + #elif HAVE_FFMPEG_AVFORMAT_H #include -#endif +#endif /* HAVE_LIBAVFORMAT_AVFORMAT_H */ // AVDEVICE #if HAVE_LIBAVDEVICE_AVDEVICE_H #include + +/* LIBAVDEVICE_VERSION_CHECK checks for the right version of libav and FFmpeg + * a is the major version + * b and c the minor and micro versions of libav + * d and e the minor and micro versions of FFmpeg */ +#define LIBAVDEVICE_VERSION_CHECK(a, b, c, d, e) \ + ( (LIBAVDEVICE_VERSION_MICRO < 100 && LIBAVDEVICE_VERSION_INT >= AV_VERSION_INT(a, b, c) ) || \ + (LIBAVDEVICE_VERSION_MICRO >= 100 && LIBAVDEVICE_VERSION_INT >= AV_VERSION_INT(a, d, e) ) ) + #elif HAVE_FFMPEG_AVDEVICE_H #include -#endif +#endif /* HAVE_LIBAVDEVICE_AVDEVICE_H */ // SWSCALE #if HAVE_LIBSWSCALE_SWSCALE_H #include + +/* LIBSWSCALE_VERSION_CHECK checks for the right version of libav and FFmpeg + * a is the major version + * b and c the minor and micro versions of libav + * d and e the minor and micro versions of FFmpeg */ +#define LIBSWSCALE_VERSION_CHECK(a, b, c, d, e) \ + ( (LIBSWSCALE_VERSION_MICRO < 100 && LIBSWSCALE_VERSION_INT >= AV_VERSION_INT(a, b, c) ) || \ + (LIBSWSCALE_VERSION_MICRO >= 100 && LIBSWSCALE_VERSION_INT >= AV_VERSION_INT(a, d, e) ) ) + #elif HAVE_FFMPEG_SWSCALE_H #include -#endif +#endif /* HAVE_LIBSWSCALE_SWSCALE_H */ #ifdef __cplusplus } @@ -86,7 +135,7 @@ extern "C" { #if ( HAVE_LIBAVUTIL_AVUTIL_H || HAVE_LIBAVCODEC_AVCODEC_H || HAVE_LIBAVFORMAT_AVFORMAT_H || HAVE_LIBAVDEVICE_AVDEVICE_H ) -#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0) +#if !LIBAVFORMAT_VERSION_CHECK(52, 107, 0, 107, 0) #if defined(AVIO_WRONLY) #define AVIO_FLAG_WRITE AVIO_WRONLY #else @@ -129,7 +178,7 @@ protected: }; #endif // HAVE_LIBSWSCALE && HAVE_LIBAVUTIL -#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54, 25, 0) +#if !LIBAVCODEC_VERSION_CHECK(54, 25, 0, 51, 100) #define AV_CODEC_ID_NONE CODEC_ID_NONE #define AV_CODEC_ID_PCM_MULAW CODEC_ID_PCM_MULAW #define AV_CODEC_ID_PCM_ALAW CODEC_ID_PCM_ALAW @@ -165,18 +214,18 @@ protected: inline static const std::string av_make_error_string(int errnum) { char errbuf[AV_ERROR_MAX_STRING_SIZE]; -#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(50, 12, 13) +#if LIBAVUTIL_VERSION_CHECK(50, 13, 0, 13, 0) av_strerror(errnum, errbuf, AV_ERROR_MAX_STRING_SIZE); #else snprintf(errbuf, AV_ERROR_MAX_STRING_SIZE, "libav error %d", errnum); #endif return (std::string)errbuf; } - + #undef av_err2str #define av_err2str(errnum) av_make_error_string(errnum).c_str() - #endif // __cplusplus + #endif // __cplusplus #endif // ( HAVE_LIBAVUTIL_AVUTIL_H || HAVE_LIBAVCODEC_AVCODEC_H || HAVE_LIBAVFORMAT_AVFORMAT_H || HAVE_LIBAVDEVICE_AVDEVICE_H ) diff --git a/src/zm_ffmpeg_camera.cpp b/src/zm_ffmpeg_camera.cpp index 9a4ea5fcb..59f554325 100644 --- a/src/zm_ffmpeg_camera.cpp +++ b/src/zm_ffmpeg_camera.cpp @@ -27,6 +27,12 @@ #define AV_ERROR_MAX_STRING_SIZE 64 #endif +#ifdef SOLARIS +#include // for ESRCH +#include +#include +#endif + FfmpegCamera::FfmpegCamera( int p_id, const std::string &p_path, const std::string &p_method, const std::string &p_options, int p_width, int p_height, int p_colours, int p_brightness, int p_contrast, int p_hue, int p_colour, bool p_capture ) : Camera( p_id, FFMPEG_SRC, p_width, p_height, p_colours, ZM_SUBPIX_ORDER_DEFAULT_FOR_COLOUR(p_colours), p_brightness, p_contrast, p_hue, p_colour, p_capture ), mPath( p_path ), @@ -120,7 +126,7 @@ int FfmpegCamera::Capture( Image &image ) void *retval = 0; int ret; - ret = pthread_tryjoin_np(mReopenThread, &retval); + ret = pthread_join(mReopenThread, &retval); if (ret != 0){ Error("Could not join reopen thread."); } @@ -164,7 +170,7 @@ int FfmpegCamera::Capture( Image &image ) Debug( 5, "Got packet from stream %d", packet.stream_index ); if ( packet.stream_index == mVideoStreamId ) { -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52, 25, 0) +#if LIBAVCODEC_VERSION_CHECK(52, 23, 0, 23, 0) if ( avcodec_decode_video2( mCodecContext, mRawFrame, &frameComplete, &packet ) < 0 ) #else if ( avcodec_decode_video( mCodecContext, mRawFrame, &frameComplete, packet.data, packet.size ) < 0 ) @@ -218,7 +224,7 @@ int FfmpegCamera::OpenFfmpeg() { mIsOpening = true; // Open the input, not necessarily a file -#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0) +#if !LIBAVFORMAT_VERSION_CHECK(53, 2, 0, 4, 0) Debug ( 1, "Calling av_open_input_file" ); if ( av_open_input_file( &mFormatContext, mPath.c_str(), NULL, 0, NULL ) !=0 ) #else @@ -269,7 +275,7 @@ int FfmpegCamera::OpenFfmpeg() { Debug ( 1, "Opened input" ); // Locate stream info from avformat_open_input -#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0) +#if !LIBAVFORMAT_VERSION_CHECK(53, 6, 0, 6, 0) Debug ( 1, "Calling av_find_stream_info" ); if ( av_find_stream_info( mFormatContext ) < 0 ) #else @@ -277,14 +283,14 @@ int FfmpegCamera::OpenFfmpeg() { if ( avformat_find_stream_info( mFormatContext, 0 ) < 0 ) #endif Fatal( "Unable to find stream info from %s due to: %s", mPath.c_str(), strerror(errno) ); - + Debug ( 1, "Got stream info" ); // Find first video stream present mVideoStreamId = -1; for (unsigned int i=0; i < mFormatContext->nb_streams; i++ ) { -#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) +#if (LIBAVCODEC_VERSION_CHECK(52, 64, 0, 64, 0) || LIBAVUTIL_VERSION_CHECK(50, 14, 0, 14, 0)) if ( mFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO ) #else if ( mFormatContext->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO ) @@ -308,7 +314,7 @@ int FfmpegCamera::OpenFfmpeg() { Debug ( 1, "Found decoder" ); // Open the codec -#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 7, 0) +#if !LIBAVFORMAT_VERSION_CHECK(53, 8, 0, 8, 0) Debug ( 1, "Calling avcodec_open" ); if ( avcodec_open( mCodecContext, mCodec ) < 0 ) #else @@ -320,11 +326,19 @@ int FfmpegCamera::OpenFfmpeg() { Debug ( 1, "Opened codec" ); // Allocate space for the native video frame +#if LIBAVCODEC_VERSION_CHECK(55, 28, 1, 45, 101) + mRawFrame = av_frame_alloc(); +#else mRawFrame = avcodec_alloc_frame(); +#endif // Allocate space for the converted video frame +#if LIBAVCODEC_VERSION_CHECK(55, 28, 1, 45, 101) + mFrame = av_frame_alloc(); +#else mFrame = avcodec_alloc_frame(); - +#endif + if(mRawFrame == NULL || mFrame == NULL) Fatal( "Unable to allocate frame for %s", mPath.c_str() ); @@ -393,7 +407,7 @@ int FfmpegCamera::CloseFfmpeg(){ } if ( mFormatContext ) { -#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0) +#if !LIBAVFORMAT_VERSION_CHECK(53, 17, 0, 25, 0) av_close_input_file( mFormatContext ); #else avformat_close_input( &mFormatContext ); @@ -427,7 +441,7 @@ void *FfmpegCamera::ReopenFfmpegThreadCallback(void *ctx){ // Close current stream. camera->CloseFfmpeg(); - // Sleep if neccessary to not reconnect too fast. + // Sleep if necessary to not reconnect too fast. int wait = config.ffmpeg_open_timeout - (time(NULL) - camera->mOpenStart); wait = wait < 0 ? 0 : wait; if (wait > 0){ diff --git a/src/zm_image.cpp b/src/zm_image.cpp index be5a50ce3..21e190ffb 100644 --- a/src/zm_image.cpp +++ b/src/zm_image.cpp @@ -104,13 +104,13 @@ Image::Image( int p_width, int p_height, int p_colours, int p_subpixelorder, uin pixels = width*height; colours = p_colours; subpixelorder = p_subpixelorder; - size = (width*height)*colours; + size = pixels*colours; buffer = 0; holdbuffer = 0; if ( p_buffer ) { - allocation = size; - buffertype = ZM_BUFTYPE_DONTFREE; + allocation = size; + buffertype = ZM_BUFTYPE_DONTFREE; buffer = p_buffer; } else @@ -129,10 +129,10 @@ Image::Image( const Image &p_image ) pixels = p_image.pixels; colours = p_image.colours; subpixelorder = p_image.subpixelorder; - size = allocation = p_image.size; + size = p_image.size; // allocation is set in AllocImgBuffer buffer = 0; holdbuffer = 0; - AllocImgBuffer(allocation); + AllocImgBuffer(size); (*fptr_imgbufcpy)(buffer, p_image.buffer, size); strncpy( text, p_image.text, sizeof(text) ); } @@ -305,7 +305,7 @@ void Image::Initialise() initialised = true; } -/* Requests a writeable buffer to the image. This is safer than buffer() because this way we can gurantee that a buffer of required size exists */ +/* Requests a writeable buffer to the image. This is safer than buffer() because this way we can guarantee that a buffer of required size exists */ uint8_t* Image::WriteBuffer(const unsigned int p_width, const unsigned int p_height, const unsigned int p_colours, const unsigned int p_subpixelorder) { unsigned int newsize; @@ -331,7 +331,7 @@ uint8_t* Image::WriteBuffer(const unsigned int p_width, const unsigned int p_hei return NULL; } else { /* Replace buffer with a bigger one */ - DumpImgBuffer(); + //DumpImgBuffer(); // Done in AllocImgBuffer too AllocImgBuffer(newsize); } } @@ -369,12 +369,12 @@ void Image::AssignDirect( const unsigned int p_width, const unsigned int p_heigh unsigned int new_buffer_size = ((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",buffer_size, p_width, p_height, p_colours ); + Error("Attempt to directly assign buffer from an undersized buffer of size: %zu, needed %dx%d*%d colours = %zu",buffer_size, p_width, p_height, p_colours, new_buffer_size ); return; } if(holdbuffer && buffer) { - if((unsigned int)((p_height*p_width)*p_colours) > allocation) { + if(new_buffer_size > allocation) { Error("Held buffer is undersized for assigned buffer"); return; } else { @@ -482,7 +482,7 @@ void Image::Assign( const Image &image ) { } } else { if(new_size > allocation || !buffer) { - DumpImgBuffer(); + // DumpImgBuffer(); This is also done in AllocImgBuffer AllocImgBuffer(new_size); } } @@ -1580,7 +1580,11 @@ Image *Image::Highlight( unsigned int n_images, Image *images[], const Rgb thres { uint8_t *psrc = images[j]->buffer+c; +#ifndef SOLARIS if ( (unsigned)abs((*psrc)-RGB_VAL(ref_colour,c)) >= RGB_VAL(threshold,c) ) +#else + if ( (unsigned)std::abs((*psrc)-RGB_VAL(ref_colour,c)) >= RGB_VAL(threshold,c) ) +#endif { count++; } @@ -1593,7 +1597,7 @@ Image *Image::Highlight( unsigned int n_images, Image *images[], const Rgb thres return( result ); } -/* New function to allow buffer re-using instead of allocationg memory for the delta image everytime */ +/* New function to allow buffer re-using instead of allocationg memory for the delta image every time */ void Image::Delta( const Image &image, Image* targetimage) const { #ifdef ZM_IMAGE_PROFILING diff --git a/src/zm_image_analyser.h b/src/zm_image_analyser.h index d1d0c1da0..74cc7a73a 100644 --- a/src/zm_image_analyser.h +++ b/src/zm_image_analyser.h @@ -6,7 +6,6 @@ #include #include #include -#include #include #include "zm.h" diff --git a/src/zm_local_camera.cpp b/src/zm_local_camera.cpp index 7b6add421..e2efa3dfb 100644 --- a/src/zm_local_camera.cpp +++ b/src/zm_local_camera.cpp @@ -32,6 +32,13 @@ #include #include +/* Workaround for GNU/kFreeBSD */ +#if defined(__FreeBSD_kernel__) +#ifndef ENODATA +#define ENODATA ENOATTR +#endif +#endif + static unsigned int BigEndian; static int vidioctl( int fd, int request, void *arg ) @@ -255,7 +262,7 @@ static PixelFormat getFfPixFormatFromV4lPalette( int v4l_version, int palette ) #if ZM_HAS_V4L2 static char palette_desc[32]; -/* Automatic format selection prefered formats */ +/* Automatic format selection preferred formats */ static const uint32_t prefered_rgb32_formats[] = {V4L2_PIX_FMT_BGR32, V4L2_PIX_FMT_RGB32, V4L2_PIX_FMT_BGR24, V4L2_PIX_FMT_RGB24, V4L2_PIX_FMT_YUYV, V4L2_PIX_FMT_UYVY, V4L2_PIX_FMT_JPEG, V4L2_PIX_FMT_MJPEG, V4L2_PIX_FMT_YUV422P, V4L2_PIX_FMT_YUV420}; static const uint32_t prefered_rgb24_formats[] = {V4L2_PIX_FMT_BGR24, V4L2_PIX_FMT_RGB24, V4L2_PIX_FMT_YUYV, V4L2_PIX_FMT_UYVY, V4L2_PIX_FMT_JPEG, V4L2_PIX_FMT_MJPEG, V4L2_PIX_FMT_YUV422P, V4L2_PIX_FMT_YUV420}; static const uint32_t prefered_gray8_formats[] = {V4L2_PIX_FMT_GREY, V4L2_PIX_FMT_YUYV, V4L2_PIX_FMT_UYVY, V4L2_PIX_FMT_JPEG, V4L2_PIX_FMT_MJPEG, V4L2_PIX_FMT_YUV422P, V4L2_PIX_FMT_YUV420}; @@ -427,7 +434,7 @@ LocalCamera::LocalCamera( int p_id, const std::string &p_device, int p_channel, Panic("Unexpected colours: %d",colours); } if( capture ) { -#if LIBSWSCALE_VERSION_INT >= AV_VERSION_INT(0, 8, 0) +#if LIBSWSCALE_VERSION_CHECK(0, 8, 0, 8, 0) if(!sws_isSupportedInput(capturePixFormat)) { Error("swscale does not support the used capture format: %c%c%c%c",(capturePixFormat)&0xff,((capturePixFormat>>8)&0xff),((capturePixFormat>>16)&0xff),((capturePixFormat>>24)&0xff)); conversion_type = 2; /* Try ZM format conversions */ @@ -615,7 +622,11 @@ LocalCamera::LocalCamera( int p_id, const std::string &p_device, int p_channel, #if HAVE_LIBSWSCALE /* Initialize swscale stuff */ if(capture && conversion_type == 1) { +#if LIBAVCODEC_VERSION_CHECK(55, 28, 1, 45, 101) + tmpPicture = av_frame_alloc(); +#else tmpPicture = avcodec_alloc_frame(); +#endif if ( !tmpPicture ) Fatal( "Could not allocate temporary picture" ); @@ -845,7 +856,11 @@ void LocalCamera::Initialise() Fatal( "Can't map video buffer %d (%d bytes) to memory: %s(%d)", i, vid_buf.length, strerror(errno), errno ); #if HAVE_LIBSWSCALE +#if LIBAVCODEC_VERSION_CHECK(55, 28, 1, 45, 101) + capturePictures[i] = av_frame_alloc(); +#else capturePictures[i] = avcodec_alloc_frame(); +#endif if ( !capturePictures[i] ) Fatal( "Could not allocate picture" ); avpicture_fill( (AVPicture *)capturePictures[i], (uint8_t*)v4l2_data.buffers[i].start, capturePixFormat, v4l2_data.fmt.fmt.pix.width, v4l2_data.fmt.fmt.pix.height ); @@ -999,7 +1014,11 @@ void LocalCamera::Initialise() v4l1_data.buffers[i].height = height; v4l1_data.buffers[i].format = palette; +#if LIBAVCODEC_VERSION_CHECK(55, 28, 1, 45, 101) + capturePictures[i] = av_frame_alloc(); +#else capturePictures[i] = avcodec_alloc_frame(); +#endif if ( !capturePictures[i] ) Fatal( "Could not allocate picture" ); avpicture_fill( (AVPicture *)capturePictures[i], (unsigned char *)v4l1_data.bufptr+v4l1_data.frames.offsets[i], capturePixFormat, width, height ); diff --git a/src/zm_local_camera.h b/src/zm_local_camera.h index 0dbe44c21..89c6799ca 100644 --- a/src/zm_local_camera.h +++ b/src/zm_local_camera.h @@ -29,6 +29,9 @@ #ifdef HAVE_LINUX_VIDEODEV_H #include #endif // HAVE_LINUX_VIDEODEV_H +#ifdef HAVE_LIBV4L1_VIDEODEV_H +#include +#endif // HAVE_LIB4VL1_VIDEODEV_H #ifdef HAVE_LINUX_VIDEODEV2_H #include #endif // HAVE_LINUX_VIDEODEV2_H diff --git a/src/zm_logger.cpp b/src/zm_logger.cpp index c64f6e7c0..c03c9bbfe 100644 --- a/src/zm_logger.cpp +++ b/src/zm_logger.cpp @@ -31,6 +31,9 @@ #include #include #include +#ifdef __FreeBSD__ +#include +#endif bool Logger::smInitialised = false; Logger *Logger::smInstance = 0; @@ -527,9 +530,25 @@ void Logger::logPrint( bool hex, const char * const file, const int line, const #endif pid_t tid; +#ifdef __FreeBSD__ + long lwpid; + thr_self(&lwpid); + tid = lwpid; + + if (tid < 0 ) // Thread/Process id +#else #ifdef HAVE_SYSCALL + #ifdef __FreeBSD_kernel__ + if ( (syscall(SYS_thr_self, &tid)) < 0 ) // Thread/Process id + + # else + // SOLARIS doesn't have SYS_gettid; don't assume + #ifdef SYS_gettid if ( (tid = syscall(SYS_gettid)) < 0 ) // Thread/Process id + #endif // SYS_gettid + #endif #endif // HAVE_SYSCALL +#endif tid = getpid(); // Process id char *logPtr = logString; @@ -585,8 +604,7 @@ void Logger::logPrint( bool hex, const char * const file, const int line, const if ( mysql_query( &mDbConnection, sql ) ) { databaseLevel( NOLOG ); - Fatal( "Can't insert log entry: %s", mysql_error( &mDbConnection ) ); - exit( mysql_errno( &mDbConnection ) ); + Error( "Can't insert log entry: %s", mysql_error( &mDbConnection ) ); } } if ( level <= mSyslogLevel ) diff --git a/src/zm_monitor.cpp b/src/zm_monitor.cpp index a61e7cfa5..906ca68f6 100644 --- a/src/zm_monitor.cpp +++ b/src/zm_monitor.cpp @@ -55,6 +55,11 @@ #include #endif // ZM_MEM_MAPPED +// SOLARIS - we don't have MAP_LOCKED on openSolaris/illumos +#ifndef MAP_LOCKED +#define MAP_LOCKED 0 +#endif + //============================================================================= std::vector split(const std::string &s, char delim) { std::vector elems; @@ -251,7 +256,6 @@ bool Monitor::MonitorLink::hasAlarmed() else if( shared_data->last_event != (unsigned int)last_event ) { last_event = shared_data->last_event; - return( true ); } return( false ); } @@ -427,7 +431,7 @@ Monitor::Monitor( } } - // Will this not happen everytime a monitor is instantiated? Seems like all the calls to the Monitor constructor pass a zero for n_zones, then load zones after.. + // Will this not happen every time a monitor is instantiated? Seems like all the calls to the Monitor constructor pass a zero for n_zones, then load zones after.. if ( !n_zones ) { Debug( 1, "Monitor %s has no zones, adding one.", name ); n_zones = 1; @@ -516,14 +520,18 @@ bool Monitor::connect() { Error( "Got unexpected memory map file size %ld, expected %d", map_stat.st_size, mem_size ); return false; } else { +#ifdef MAP_LOCKED mem_ptr = (unsigned char *)mmap( NULL, mem_size, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, map_fd, 0 ); if ( mem_ptr == MAP_FAILED ) { if ( errno == EAGAIN ) { Debug( 1, "Unable to map file %s (%d bytes) to locked memory, trying unlocked", mem_file, mem_size ); +#endif mem_ptr = (unsigned char *)mmap( NULL, mem_size, PROT_READ|PROT_WRITE, MAP_SHARED, map_fd, 0 ); Debug( 1, "Mapped file %s (%d bytes) to locked memory, unlocked", mem_file, mem_size ); +#ifdef MAP_LOCKED } } +#endif if ( mem_ptr == MAP_FAILED ) Fatal( "Can't map file %s (%d bytes) to memory: %s(%d)", mem_file, mem_size, strerror(errno), errno ); } @@ -652,7 +660,7 @@ Monitor::State Monitor::GetState() const return( (State)shared_data->state ); } -int Monitor::GetImage( int index, int scale ) const +int Monitor::GetImage( int index, int scale ) { if ( index < 0 || index > image_buffer_count ) { @@ -661,21 +669,32 @@ int Monitor::GetImage( int index, int scale ) const if ( index != image_buffer_count ) { - Snapshot *snap = &image_buffer[index]; - Image snap_image( *(snap->image) ); + Image *image; + // If we are going to be modifying the snapshot before writing, then we need to copy it + if ( ( scale != ZM_SCALE_BASE ) || ( !config.timestamp_on_capture ) ) { + Snapshot *snap = &image_buffer[index]; + Image *snap_image = snap->image; - if ( scale != ZM_SCALE_BASE ) - { - snap_image.Scale( scale ); + alarm_image.Assign( *snap_image ); + + + //write_image.Assign( *snap_image ); + + if ( scale != ZM_SCALE_BASE ) { + alarm_image.Scale( scale ); + } + + if ( !config.timestamp_on_capture ) { + TimestampImage( &alarm_image, snap->timestamp ); + } + image = &alarm_image; + } else { + image = image_buffer[index].image; } static char filename[PATH_MAX]; snprintf( filename, sizeof(filename), "Monitor%d.jpg", id ); - if ( !config.timestamp_on_capture ) - { - TimestampImage( &snap_image, snap->timestamp ); - } - snap_image.WriteJpeg( filename ); + image->WriteJpeg( filename ); } else { @@ -1539,7 +1558,7 @@ bool Monitor::Analyse() if ( config.create_analysis_images ) { bool got_anal_image = false; - Image alarm_image( *snap_image ); + alarm_image.Assign( *snap_image ); for( int i = 0; i < n_zones; i++ ) { if ( zones[i]->Alarmed() ) @@ -3007,7 +3026,7 @@ bool Monitor::closeEvent() * comparing it with ZM_COLOUR_RGB24 or ZM_COLOUR_RGB32 is the way ), and then * manage che check using RGB_VAL_RED() and so on macros instead of just RED(). * - * Be carefull that in 32 bit images we need to check also where the alpha channel is, so, + * Be careful that in 32 bit images we need to check also where the alpha channel is, so, * (RGBA and BGRA) or (ABGR and ARGB) aren't the same! * * To check black pixels in 32 bit images i can do a more efficient way using diff --git a/src/zm_monitor.h b/src/zm_monitor.h index 9b61220c8..b8326a1c4 100644 --- a/src/zm_monitor.h +++ b/src/zm_monitor.h @@ -246,6 +246,8 @@ protected: double fps; Image delta_image; Image ref_image; + Image alarm_image; // Used in creating analysis images, will be initialized in Analysis + Image write_image; // Used when creating snapshot images Purpose purpose; // What this monitor has been created to do int event_count; @@ -349,7 +351,7 @@ public: State GetState() const; - int GetImage( int index=-1, int scale=100 ) const; + int GetImage( int index=-1, int scale=100 ); struct timeval GetTimestamp( int index=-1 ) const; int GetCaptureDelay() const { return( capture_delay ); } int GetAlarmCaptureDelay() const { return( alarm_capture_delay ); } diff --git a/src/zm_mpeg.cpp b/src/zm_mpeg.cpp index 2e29880ca..eaf0952af 100644 --- a/src/zm_mpeg.cpp +++ b/src/zm_mpeg.cpp @@ -43,12 +43,12 @@ VideoStream::MimeData VideoStream::mime_data[] = { void VideoStream::Initialise( ) { if ( logDebugging() ) - av_log_set_level( AV_LOG_DEBUG ); + av_log_set_level( AV_LOG_DEBUG ); else - av_log_set_level( AV_LOG_QUIET ); - + av_log_set_level( AV_LOG_QUIET ); + av_register_all( ); -#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(53, 13, 0) +#if LIBAVFORMAT_VERSION_CHECK(53, 13, 0, 19, 0) avformat_network_init(); #endif initialised = true; @@ -58,18 +58,18 @@ void VideoStream::SetupFormat( ) { /* allocate the output media context */ ofc = NULL; -#if ((LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(53, 5, 0)) && (LIBAVFORMAT_VERSION_MICRO >= 100)) +#if (LIBAVFORMAT_VERSION_CHECK(53, 2, 0, 2, 0) && (LIBAVFORMAT_VERSION_MICRO >= 100)) avformat_alloc_output_context2( &ofc, NULL, format, filename ); #else AVFormatContext *s= avformat_alloc_context(); - if(!s) + if(!s) { Fatal( "avformat_alloc_context failed %d \"%s\"", (size_t)ofc, av_err2str((size_t)ofc) ); } - + AVOutputFormat *oformat; if (format) { -#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52, 45, 0) +#if LIBAVFORMAT_VERSION_CHECK(52, 45, 0, 45, 0) oformat = av_guess_format(format, NULL, NULL); #else oformat = guess_format(format, NULL, NULL); @@ -78,7 +78,7 @@ void VideoStream::SetupFormat( ) Fatal( "Requested output format '%s' is not a suitable output format", format ); } } else { -#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52, 45, 0) +#if LIBAVFORMAT_VERSION_CHECK(52, 45, 0, 45, 0) oformat = av_guess_format(NULL, filename, NULL); #else oformat = guess_format(NULL, filename, NULL); @@ -95,7 +95,7 @@ void VideoStream::SetupFormat( ) { Fatal( "Could not allocate private data for output format." ); } -#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52, 92, 0) +#if LIBAVFORMAT_VERSION_CHECK(52, 92, 0, 92, 0) if (s->oformat->priv_class) { *(const AVClass**)s->priv_data = s->oformat->priv_class; av_opt_set_defaults(s->priv_data); @@ -109,7 +109,7 @@ void VideoStream::SetupFormat( ) if(filename) { - snprintf( s->filename, sizeof(s->filename), filename ); + snprintf( s->filename, sizeof(s->filename), "%s", filename ); } ofc = s; @@ -186,7 +186,7 @@ void VideoStream::SetupCodec( int colours, int subpixelorder, int width, int hei } else { -#if ((LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(53, 11, 0)) && (LIBAVFORMAT_VERSION_MICRO >= 100)) +#if (LIBAVFORMAT_VERSION_CHECK(53, 8, 0, 11, 0) && (LIBAVFORMAT_VERSION_MICRO >= 100)) Debug( 1, "Could not find codec \"%s\". Using default \"%s\"", codec_name, avcodec_get_name( codec_id ) ); #else Debug( 1, "Could not find codec \"%s\". Using default \"%d\"", codec_name, codec_id ); @@ -202,20 +202,20 @@ void VideoStream::SetupCodec( int colours, int subpixelorder, int width, int hei codec = avcodec_find_encoder( codec_id ); if ( !codec ) { -#if ((LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(53, 11, 0)) && (LIBAVFORMAT_VERSION_MICRO >= 100)) +#if (LIBAVFORMAT_VERSION_CHECK(53, 8, 0, 11, 0) && (LIBAVFORMAT_VERSION_MICRO >= 100)) Fatal( "Could not find encoder for '%s'", avcodec_get_name( codec_id ) ); #else Fatal( "Could not find encoder for '%d'", codec_id ); #endif } -#if ((LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(53, 11, 0)) && (LIBAVFORMAT_VERSION_MICRO >= 100)) +#if (LIBAVFORMAT_VERSION_CHECK(53, 8, 0, 11, 0) && (LIBAVFORMAT_VERSION_MICRO >= 100)) Debug( 1, "Found encoder for '%s'", avcodec_get_name( codec_id ) ); #else Debug( 1, "Found encoder for '%d'", codec_id ); #endif -#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(53, 10, 0) +#if LIBAVFORMAT_VERSION_CHECK(53, 10, 0, 17, 0) ost = avformat_new_stream( ofc, codec ); #else ost = av_new_stream( ofc, 0 ); @@ -262,7 +262,7 @@ void VideoStream::SetupCodec( int colours, int subpixelorder, int width, int hei /* emit one intra frame every second */ c->gop_size = frame_rate; - // some formats want stream headers to be seperate + // some formats want stream headers to be separate if ( of->flags & AVFMT_GLOBALHEADER ) c->flags |= CODEC_FLAG_GLOBAL_HEADER; } @@ -311,7 +311,7 @@ void VideoStream::OpenStream( ) AVCodecContext *c = ost->codec; /* open the codec */ -#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 7, 0) +#if !LIBAVFORMAT_VERSION_CHECK(53, 8, 0, 8, 0) if ( (avRet = avcodec_open( c, codec )) < 0 ) #else if ( (avRet = avcodec_open2( c, codec, 0 )) < 0 ) @@ -323,7 +323,11 @@ void VideoStream::OpenStream( ) Debug( 1, "Opened codec" ); /* allocate the encoded raw picture */ +#if LIBAVCODEC_VERSION_CHECK(55, 28, 1, 45, 101) + opicture = av_frame_alloc( ); +#else opicture = avcodec_alloc_frame( ); +#endif if ( !opicture ) { Panic( "Could not allocate opicture" ); @@ -344,7 +348,11 @@ void VideoStream::OpenStream( ) tmp_opicture = NULL; if ( c->pix_fmt != pf ) { +#if LIBAVCODEC_VERSION_CHECK(55, 28, 1, 45, 101) + tmp_opicture = av_frame_alloc( ); +#else tmp_opicture = avcodec_alloc_frame( ); +#endif if ( !tmp_opicture ) { Panic( "Could not allocate tmp_opicture" ); @@ -364,9 +372,9 @@ void VideoStream::OpenStream( ) if ( !(of->flags & AVFMT_NOFILE) ) { int ret; -#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(53, 14, 0) +#if LIBAVFORMAT_VERSION_CHECK(53, 15, 0, 21, 0) ret = avio_open2( &ofc->pb, filename, AVIO_FLAG_WRITE, NULL, NULL ); -#elif LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52, 102, 0) +#elif LIBAVFORMAT_VERSION_CHECK(52, 102, 0, 102, 0) ret = avio_open( &ofc->pb, filename, AVIO_FLAG_WRITE ); #else ret = url_fopen( &ofc->pb, filename, AVIO_FLAG_WRITE ); @@ -395,19 +403,19 @@ void VideoStream::OpenStream( ) Fatal("Unable to malloc memory for outbuf"); } } - -#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52, 100, 1) + +#if LIBAVFORMAT_VERSION_CHECK(52, 101, 0, 101, 0) av_dump_format(ofc, 0, filename, 1); #else dump_format(ofc, 0, filename, 1); #endif - -#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0) + +#if !LIBAVFORMAT_VERSION_CHECK(53, 2, 0, 4, 0) int ret = av_write_header( ofc ); #else int ret = avformat_write_header( ofc, NULL ); #endif - + if ( ret < 0 ) { Fatal( "?_write_header failed with error %d \"%s\"", ret, av_err2str( ret ) ); @@ -525,7 +533,7 @@ VideoStream::~VideoStream( ) if ( !(of->flags & AVFMT_NOFILE) ) { /* close the output file */ -#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) +#if LIBAVFORMAT_VERSION_CHECK(52, 105, 0, 105, 0) avio_close( ofc->pb ); #else url_fclose( ofc->pb ); @@ -625,7 +633,7 @@ double VideoStream::ActuallyEncodeFrame( const uint8_t *buffer, int buffer_size, int got_packet = 0; if ( of->flags & AVFMT_RAWPICTURE ) { -#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51, 2, 1) +#if LIBAVCODEC_VERSION_CHECK(52, 30, 2, 30, 2) pkt->flags |= AV_PKT_FLAG_KEY; #else pkt->flags |= PKT_FLAG_KEY; @@ -640,7 +648,7 @@ double VideoStream::ActuallyEncodeFrame( const uint8_t *buffer, int buffer_size, opicture_ptr->pts = c->frame_number; opicture_ptr->quality = c->global_quality; -#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(54, 0, 0) +#if LIBAVFORMAT_VERSION_CHECK(54, 1, 0, 2, 100) int ret = avcodec_encode_video2( c, pkt, opicture_ptr, &got_packet ); if ( ret != 0 ) { @@ -656,7 +664,7 @@ double VideoStream::ActuallyEncodeFrame( const uint8_t *buffer, int buffer_size, { if ( c->coded_frame->key_frame ) { -#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) +#if LIBAVCODEC_VERSION_CHECK(52, 30, 2, 30, 2) pkt->flags |= AV_PKT_FLAG_KEY; #else pkt->flags |= PKT_FLAG_KEY; diff --git a/src/zm_poly.cpp b/src/zm_poly.cpp index eef5dd56a..4eee73f46 100644 --- a/src/zm_poly.cpp +++ b/src/zm_poly.cpp @@ -20,7 +20,11 @@ #include "zm.h" #include "zm_poly.h" +#ifndef SOLARIS #include +#else +#include +#endif void Polygon::calcArea() { diff --git a/src/zm_remote_camera_http.cpp b/src/zm_remote_camera_http.cpp index fdbfd69a6..119db03ca 100644 --- a/src/zm_remote_camera_http.cpp +++ b/src/zm_remote_camera_http.cpp @@ -18,6 +18,7 @@ // #include "zm_remote_camera_http.h" +#include "zm_rtsp_auth.h" #include "zm_mem_utils.h" @@ -26,6 +27,10 @@ #include #include +#ifdef SOLARIS +#include // FIONREAD and friends +#endif + RemoteCameraHttp::RemoteCameraHttp( int p_id, const std::string &p_method, const std::string &p_host, const std::string &p_port, const std::string &p_path, int p_width, int p_height, int p_colours, int p_brightness, int p_contrast, int p_hue, int p_colour, bool p_capture ) : RemoteCamera( p_id, "http", p_host, p_port, p_path, p_width, p_height, p_colours, p_brightness, p_contrast, p_hue, p_colour, p_capture ) { @@ -143,6 +148,12 @@ int RemoteCameraHttp::SendRequest() return( 0 ); } +/* Return codes are as follows: + * -1 means there was an error + * 0 means no bytes were returned but there wasn't actually an error. + * > 0 is the # of bytes read. + */ + int RemoteCameraHttp::ReadData( Buffer &buffer, int bytes_expected ) { fd_set rfds; @@ -154,8 +165,9 @@ int RemoteCameraHttp::ReadData( Buffer &buffer, int bytes_expected ) int n_found = select( sd+1, &rfds, NULL, NULL, &temp_timeout ); if( n_found == 0 ) { - Warning( "Select timed out" ); - Disconnect(); + Debug( 4, "Select timed out timeout was %d secs %d usecs", temp_timeout.tv_sec, temp_timeout.tv_usec ); + // Why are we disconnecting? It's just a timeout, meaning that data wasn't available. + //Disconnect(); return( 0 ); } else if ( n_found < 0) @@ -180,9 +192,11 @@ int RemoteCameraHttp::ReadData( Buffer &buffer, int bytes_expected ) if ( total_bytes_to_read == 0 ) { - Debug( 3, "Socket closed" ); - Disconnect(); - return( 0 ); + // If socket is closed locally, then select will fail, but if it is closed remotely + // then we have an exception on our socket.. but no data. + Debug( 3, "Socket closed remotely" ); + //Disconnect(); // Disconnect is done outside of ReadData now. + return( -1 ); } } Debug( 3, "Expecting %d bytes", total_bytes_to_read ); @@ -201,9 +215,9 @@ int RemoteCameraHttp::ReadData( Buffer &buffer, int bytes_expected ) } else if ( bytes_read == 0) { - Debug( 3, "Socket closed" ); - Disconnect(); - return( 0 ); + Debug( 2, "Socket closed" ); + //Disconnect(); // Disconnect is done outside of ReadData now. + return( -1 ); } else if ( bytes_read < bytes_to_read ) { @@ -224,6 +238,7 @@ int RemoteCameraHttp::ReadData( Buffer &buffer, int bytes_expected ) int RemoteCameraHttp::GetResponse() { + int buffer_len; #if HAVE_LIBPCRE if ( method == REGEXP ) { @@ -253,17 +268,12 @@ int RemoteCameraHttp::GetResponse() static RegExpr *content_length_expr = 0; static RegExpr *content_type_expr = 0; - int buffer_len = ReadData( buffer ); - if ( buffer_len == 0 ) - { - Error( "Connection dropped by remote end" ); - return( 0 ); - } - else if ( buffer_len < 0 ) - { - Error( "Unable to read header data" ); - return( -1 ); + while ( ! ( buffer_len = ReadData( buffer ) ) ) { } + if ( buffer_len < 0 ) { + Error( "Unable to read header data" ); + return( -1 ); + } if ( !header_expr ) header_expr = new RegExpr( "^(.+?\r?\n\r?\n)", PCRE_DOTALL ); if ( header_expr->Match( (char*)buffer, buffer.size() ) == 2 ) @@ -431,16 +441,12 @@ int RemoteCameraHttp::GetResponse() else { Debug( 3, "Unable to extract subheader from stream, retrying" ); - int buffer_len = ReadData( buffer ); - if ( buffer_len == 0 ) - { - Error( "Connection dropped by remote end" ); - return( 0 ); - } - else if ( buffer_len < 0 ) - { - return( -1 ); + while ( ! ( buffer_len = ReadData( buffer ) ) ) { } + if ( buffer_len < 0 ) { + Error( "Unable to extract subheader data" ); + return( -1 ); + } } break; } @@ -475,14 +481,8 @@ int RemoteCameraHttp::GetResponse() { while ( (long)buffer.size() < content_length ) { - int buffer_len = ReadData( buffer ); - if ( buffer_len == 0 ) - { - Error( "Connection dropped by remote end" ); - return( 0 ); - } - else if ( buffer_len < 0 ) - { +Debug(3, "Need more data buffer %d < content length %d", buffer.size(), content_length ); + if ( ReadData( buffer ) < 0 ) { Error( "Unable to read content" ); return( -1 ); } @@ -493,54 +493,26 @@ int RemoteCameraHttp::GetResponse() { while ( !content_length ) { - int buffer_len = ReadData( buffer ); - if ( buffer_len == 0 ) - { - if ( mode == MULTI_IMAGE ) - { - Error( "Connection dropped by remote end" ); - return( 0 ); - } - } - else if ( buffer_len < 0 ) - { - Error( "Unable to read content" ); - return( -1 ); + while ( ! ( buffer_len = ReadData( buffer ) ) ) { } + if ( buffer_len < 0 ) { + Error( "Unable to read content" ); + return( -1 ); + } static RegExpr *content_expr = 0; - if ( buffer_len ) - { - if ( mode == MULTI_IMAGE ) - { - if ( !content_expr ) - { - char content_pattern[256] = ""; - snprintf( content_pattern, sizeof(content_pattern), "^(.+?)(?:\r?\n)*(?:--)?%s\r?\n", content_boundary ); - content_expr = new RegExpr( content_pattern, PCRE_DOTALL ); - } - if ( content_expr->Match( buffer, buffer.size() ) == 2 ) - { - content_length = content_expr->MatchLength( 1 ); - Debug( 3, "Got end of image by pattern, content-length = %d", content_length ); - } - } - } - else - { - content_length = buffer.size(); - Debug( 3, "Got end of image by closure, content-length = %d", content_length ); - if ( mode == SINGLE_IMAGE ) - { - if ( !content_expr ) - { - content_expr = new RegExpr( "^(.+?)(?:\r?\n){1,2}?$", PCRE_DOTALL ); - } - if ( content_expr->Match( buffer, buffer.size() ) == 2 ) - { - content_length = content_expr->MatchLength( 1 ); - Debug( 3, "Trimmed end of image, new content-length = %d", content_length ); - } - } + if ( mode == MULTI_IMAGE ) + { + if ( !content_expr ) + { + char content_pattern[256] = ""; + snprintf( content_pattern, sizeof(content_pattern), "^(.+?)(?:\r?\n)*(?:--)?%s\r?\n", content_boundary ); + content_expr = new RegExpr( content_pattern, PCRE_DOTALL ); + } + if ( content_expr->Match( buffer, buffer.size() ) == 2 ) + { + content_length = content_expr->MatchLength( 1 ); + Debug( 3, "Got end of image by pattern, content-length = %d", content_length ); + } } } } @@ -646,17 +618,12 @@ int RemoteCameraHttp::GetResponse() } case HEADERCONT : { - int buffer_len = ReadData( buffer ); - if ( buffer_len == 0 ) - { - Error( "Connection dropped by remote end" ); - return( 0 ); - } - else if ( buffer_len < 0 ) - { - Error( "Unable to read header" ); - return( -1 ); + while ( ! ( buffer_len = ReadData( buffer ) ) ) { } + if ( buffer_len < 0 ) { + Error( "Unable to read header" ); + return( -1 ); + } char *crlf = 0; char *header_ptr = (char *)buffer; @@ -1000,17 +967,12 @@ int RemoteCameraHttp::GetResponse() else { Debug( 3, "Unable to extract subheader from stream, retrying" ); - int buffer_len = ReadData( buffer ); - if ( buffer_len == 0 ) - { - Error( "Connection dropped by remote end" ); - return( 0 ); - } - else if ( buffer_len < 0 ) - { - Error( "Unable to read subheader" ); - return( -1 ); + while ( ! ( buffer_len = ReadData( buffer ) ) ) { } + if ( buffer_len < 0 ) { + Error( "Unable to read subheader" ); + return( -1 ); + } state = SUBHEADERCONT; } break; @@ -1056,14 +1018,7 @@ int RemoteCameraHttp::GetResponse() while ( (long)buffer.size() < content_length ) { //int buffer_len = ReadData( buffer, content_length-buffer.size() ); - int buffer_len = ReadData( buffer ); - if ( buffer_len == 0 ) - { - Error( "Connection dropped by remote end" ); - return( 0 ); - } - else if ( buffer_len < 0 ) - { + if ( ReadData( buffer ) < 0 ) { Error( "Unable to read content" ); return( -1 ); } @@ -1075,16 +1030,8 @@ int RemoteCameraHttp::GetResponse() int content_pos = 0; while ( !content_length ) { - int buffer_len = ReadData( buffer ); - if ( buffer_len == 0 ) - { - if ( mode == MULTI_IMAGE ) - { - Error( "Connection dropped by remote end" ); - return( 0 ); - } - } - else if ( buffer_len < 0 ) + buffer_len = ReadData( buffer ); + if ( buffer_len < 0 ) { Error( "Unable to read content" ); return( -1 ); @@ -1143,7 +1090,7 @@ int RemoteCameraHttp::GetResponse() } } - Debug( 3, "Returning %d (%d) bytes of captured content", content_length, buffer.size() ); + Debug( 3, "Returning %d bytes, buffer size: (%d) bytes of captured content", content_length, buffer.size() ); return( content_length ); } } @@ -1187,7 +1134,7 @@ int RemoteCameraHttp::Capture( Image &image ) } if ( content_length < 0 ) { - Error( "Unable to get response" ); + Error( "Unable to get response, disconnecting" ); Disconnect(); return( -1 ); } diff --git a/src/zm_remote_camera_rtsp.cpp b/src/zm_remote_camera_rtsp.cpp index 910b2ac42..9f7b39227 100644 --- a/src/zm_remote_camera_rtsp.cpp +++ b/src/zm_remote_camera_rtsp.cpp @@ -162,7 +162,7 @@ int RemoteCameraRtsp::PrimeCapture() mVideoStreamId = -1; for ( unsigned int i = 0; i < mFormatContext->nb_streams; i++ ) -#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) +#if (LIBAVCODEC_VERSION_CHECK(52, 64, 0, 64, 0) || LIBAVUTIL_VERSION_CHECK(50, 14, 0, 14, 0)) if ( mFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO ) #else if ( mFormatContext->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO ) @@ -183,7 +183,7 @@ int RemoteCameraRtsp::PrimeCapture() Panic( "Unable to locate codec %d decoder", mCodecContext->codec_id ); // Open codec -#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 7, 0) +#if !LIBAVFORMAT_VERSION_CHECK(53, 8, 0, 8, 0) if ( avcodec_open( mCodecContext, mCodec ) < 0 ) #else if ( avcodec_open2( mCodecContext, mCodec, 0 ) < 0 ) @@ -191,11 +191,19 @@ int RemoteCameraRtsp::PrimeCapture() Panic( "Can't open codec" ); // Allocate space for the native video frame +#if LIBAVCODEC_VERSION_CHECK(55, 28, 1, 45, 101) + mRawFrame = av_frame_alloc(); +#else mRawFrame = avcodec_alloc_frame(); +#endif // Allocate space for the converted video frame +#if LIBAVCODEC_VERSION_CHECK(55, 28, 1, 45, 101) + mFrame = av_frame_alloc(); +#else mFrame = avcodec_alloc_frame(); - +#endif + if(mRawFrame == NULL || mFrame == NULL) Fatal( "Unable to allocate frame(s)"); @@ -292,7 +300,7 @@ int RemoteCameraRtsp::Capture( Image &image ) { packet.data = buffer.head(); packet.size = buffer.size(); -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52, 25, 0) +#if LIBAVCODEC_VERSION_CHECK(52, 23, 0, 23, 0) int len = avcodec_decode_video2( mCodecContext, mRawFrame, &frameComplete, &packet ); #else int len = avcodec_decode_video( mCodecContext, mRawFrame, &frameComplete, packet.data, packet.size ); diff --git a/src/zm_rtsp.cpp b/src/zm_rtsp.cpp index 61d24c0f8..556174291 100644 --- a/src/zm_rtsp.cpp +++ b/src/zm_rtsp.cpp @@ -211,7 +211,7 @@ RtspThread::~RtspThread() { if ( mFormatContext ) { -#if LIBAVFORMAT_VERSION_INT >= AV_VERSION_INT(52, 96, 0) +#if LIBAVFORMAT_VERSION_CHECK(52, 96, 0, 96, 0) avformat_free_context( mFormatContext ); #else av_free_format_context( mFormatContext ); @@ -340,8 +340,19 @@ int RtspThread::run() message = "OPTIONS "+mUrl+" RTSP/1.0\r\n"; if ( !sendCommand( message ) ) return( -1 ); - if ( !recvResponse( response ) ) - return( -1 ); + + // A negative return here may indicate auth failure, but we will have setup the auth mechanisms so we need to retry. + if ( !recvResponse( response ) ) { + if ( mNeedAuth ) { + Debug( 2, "Resending OPTIONS due to possible auth requirement" ); + if ( !sendCommand( message ) ) + return( -1 ); + if ( !recvResponse( response ) ) + return( -1 ); + } else { + return( -1 ); + } + } // end if failed response maybe due to auth char publicLine[256] = ""; StringVector lines = split( response, "\r\n" ); @@ -381,7 +392,7 @@ int RtspThread::run() if ( ( lines[i].size() > 13 ) && ( lines[i].substr( 0, 13 ) == "Content-Base:" ) ) { mUrl = trimSpaces( lines[i].substr( 13 ) ); - Info("Recieved new Content-Base in DESCRIBE reponse header. Updated device Url to: '%s'", mUrl.c_str() ); + Info("Received new Content-Base in DESCRIBE response header. Updated device Url to: '%s'", mUrl.c_str() ); break; } } @@ -426,7 +437,7 @@ int RtspThread::run() for ( unsigned int i = 0; i < mFormatContext->nb_streams; i++ ) { SessionDescriptor::MediaDescriptor *mediaDesc = mSessDesc->getStream( i ); -#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) +#if (LIBAVCODEC_VERSION_CHECK(52, 64, 0, 64, 0) || LIBAVUTIL_VERSION_CHECK(50, 14, 0, 14, 0)) if ( mFormatContext->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO ) #else if ( mFormatContext->streams[i]->codec->codec_type == CODEC_TYPE_VIDEO ) @@ -440,7 +451,11 @@ int RtspThread::run() } else { - trackUrl += "/" + controlUrl; + if ( *trackUrl.rbegin() != '/') { + trackUrl += "/" + controlUrl; + } else { + trackUrl += controlUrl; + } } rtpClock = mediaDesc->getClock(); codecId = mFormatContext->streams[i]->codec->codec_id; @@ -648,7 +663,7 @@ int RtspThread::run() { now = time(NULL); // Send a keepalive message if the server supports this feature and we are close to the timeout expiration -Debug(5, "sendkeepalibe %d, timeout %d, now: %d last: %d since: %d", sendKeepalive, timeout, now, lastKeepalive, (now-lastKeepalive) ); +Debug(5, "sendkeepalive %d, timeout %d, now: %d last: %d since: %d", sendKeepalive, timeout, now, lastKeepalive, (now-lastKeepalive) ); if ( sendKeepalive && (timeout > 0) && ((now-lastKeepalive) > (timeout-5)) ) { if ( !sendCommand( message ) ) @@ -793,7 +808,7 @@ Debug(5, "sendkeepalibe %d, timeout %d, now: %d last: %d since: %d", sendKeepali // FIXME: Is this really necessary when using tcp ? now = time(NULL); // Send a keepalive message if the server supports this feature and we are close to the timeout expiration -Debug(5, "sendkeepalibe %d, timeout %d, now: %d last: %d since: %d", sendKeepalive, timeout, now, lastKeepalive, (now-lastKeepalive) ); +Debug(5, "sendkeepalive %d, timeout %d, now: %d last: %d since: %d", sendKeepalive, timeout, now, lastKeepalive, (now-lastKeepalive) ); if ( sendKeepalive && (timeout > 0) && ((now-lastKeepalive) > (timeout-5)) ) { if ( !sendCommand( message ) ) diff --git a/src/zm_sdp.cpp b/src/zm_sdp.cpp index 361b58850..dbc63a82f 100644 --- a/src/zm_sdp.cpp +++ b/src/zm_sdp.cpp @@ -23,7 +23,7 @@ #include "zm_sdp.h" -#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) +#if (LIBAVCODEC_VERSION_CHECK(52, 64, 0, 64, 0) || LIBAVUTIL_VERSION_CHECK(50, 14, 0, 14, 0)) SessionDescriptor::StaticPayloadDesc SessionDescriptor::smStaticPayloads[] = { { 0, "PCMU", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW, 8000, 1 }, { 3, "GSM", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1 }, @@ -372,7 +372,7 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const for ( unsigned int i = 0; i < mMediaList.size(); i++ ) { const MediaDescriptor *mediaDesc = mMediaList[i]; -#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 8, 0) +#if !LIBAVFORMAT_VERSION_CHECK(53, 10, 0, 17, 0) AVStream *stream = av_new_stream( formatContext, i ); #else AVStream *stream = avformat_new_stream( formatContext, NULL ); @@ -380,7 +380,7 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const #endif Debug( 1, "Looking for codec for %s payload type %d / %s", mediaDesc->getType().c_str(), mediaDesc->getPayloadType(), mediaDesc->getPayloadDesc().c_str() ); -#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1) +#if (LIBAVCODEC_VERSION_CHECK(52, 64, 0, 64, 0) || LIBAVUTIL_VERSION_CHECK(50, 14, 0, 14, 0)) if ( mediaDesc->getType() == "video" ) stream->codec->codec_type = AVMEDIA_TYPE_VIDEO; else if ( mediaDesc->getType() == "audio" ) @@ -396,6 +396,9 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const stream->codec->codec_type = CODEC_TYPE_DATA; #endif +#if LIBAVCODEC_VERSION_CHECK(55, 50, 3, 60, 103) + std::string codec_name; +#endif if ( mediaDesc->getPayloadType() < PAYLOAD_TYPE_DYNAMIC ) { // Look in static table @@ -404,7 +407,11 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const if ( smStaticPayloads[i].payloadType == mediaDesc->getPayloadType() ) { Debug( 1, "Got static payload type %d, %s", smStaticPayloads[i].payloadType, smStaticPayloads[i].payloadName ); +#if LIBAVCODEC_VERSION_CHECK(55, 50, 3, 60, 103) + codec_name = std::string( smStaticPayloads[i].payloadName ); +#else strncpy( stream->codec->codec_name, smStaticPayloads[i].payloadName, sizeof(stream->codec->codec_name) );; +#endif stream->codec->codec_type = smStaticPayloads[i].codecType; stream->codec->codec_id = smStaticPayloads[i].codecId; stream->codec->sample_rate = smStaticPayloads[i].clockRate; @@ -420,7 +427,11 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const if ( smDynamicPayloads[i].payloadName == mediaDesc->getPayloadDesc() ) { Debug( 1, "Got dynamic payload type %d, %s", mediaDesc->getPayloadType(), smDynamicPayloads[i].payloadName ); +#if LIBAVCODEC_VERSION_CHECK(55, 50, 3, 60, 103) + codec_name = std::string( smStaticPayloads[i].payloadName ); +#else strncpy( stream->codec->codec_name, smDynamicPayloads[i].payloadName, sizeof(stream->codec->codec_name) );; +#endif stream->codec->codec_type = smDynamicPayloads[i].codecType; stream->codec->codec_id = smDynamicPayloads[i].codecId; stream->codec->sample_rate = mediaDesc->getClock(); @@ -428,7 +439,12 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const } } } + +#if LIBAVCODEC_VERSION_CHECK(55, 50, 3, 60, 103) + if ( codec_name.empty() ) +#else if ( !stream->codec->codec_name[0] ) +#endif { Warning( "Can't find payload details for %s payload type %d, name %s", mediaDesc->getType().c_str(), mediaDesc->getPayloadType(), mediaDesc->getPayloadDesc().c_str() ); //return( 0 ); diff --git a/src/zm_sdp.h b/src/zm_sdp.h index fb56a2886..21eb227c1 100644 --- a/src/zm_sdp.h +++ b/src/zm_sdp.h @@ -40,7 +40,7 @@ protected: { int payloadType; const char payloadName[6]; -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52, 64, 0) +#if (LIBAVCODEC_VERSION_CHECK(52, 64, 0, 64, 0) || LIBAVUTIL_VERSION_CHECK(50, 14, 0, 14, 0)) AVMediaType codecType; #else enum CodecType codecType; @@ -53,7 +53,7 @@ protected: struct DynamicPayloadDesc { const char payloadName[32]; -#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(52, 64, 0) +#if (LIBAVCODEC_VERSION_CHECK(52, 64, 0, 64, 0) || LIBAVUTIL_VERSION_CHECK(50, 14, 0, 14, 0)) AVMediaType codecType; #else enum CodecType codecType; diff --git a/src/zm_sendfile.h b/src/zm_sendfile.h new file mode 100644 index 000000000..ce3405d66 --- /dev/null +++ b/src/zm_sendfile.h @@ -0,0 +1,31 @@ +#ifdef HAVE_SENDFILE4_SUPPORT +#include +int zm_sendfile(int out_fd, int in_fd, off_t *offset, size_t size) { + int err; + + err = sendfile(out_fd, in_fd, offset, size); + if (err < 0) + return -errno; + + return err; +} +#elif HAVE_SENDFILE7_SUPPORT +#include +#include +#include +int zm_sendfile(int out_fd, int in_fd, off_t *offset, off_t size) { + int err; + err = sendfile(in_fd, out_fd, *offset, size, NULL, &size, 0); + if (err && errno != EAGAIN) + return -errno; + + if (size) { + *offset += size; + return size; + } + + return -EAGAIN; +} +#else +#error "Your platform does not support sendfile. Sorry." +#endif diff --git a/src/zm_signal.cpp b/src/zm_signal.cpp index 6db4697ed..91e1bc4ba 100644 --- a/src/zm_signal.cpp +++ b/src/zm_signal.cpp @@ -64,12 +64,19 @@ RETSIGTYPE zm_die_handler(int signal) info->si_uid, info->si_status); ucontext_t *uc = (ucontext_t *) context; + cr2 = info->si_addr; #if defined(__x86_64__) - cr2 = info->si_addr; + #ifdef __FreeBSD_kernel__ + ip = (void *)(uc->uc_mcontext.mc_rip); + #else ip = (void *)(uc->uc_mcontext.gregs[REG_RIP]); + #endif #else - cr2 = info->si_addr; + #ifdef __FreeBSD_kernel__ + ip = (void *)(uc->uc_mcontext.mc_eip); + #else ip = (void *)(uc->uc_mcontext.gregs[REG_EIP]); + #endif #endif // defined(__x86_64__) // Print the signal address and instruction pointer if available diff --git a/src/zm_thread.h b/src/zm_thread.h index 6a0d169f0..615bec6aa 100644 --- a/src/zm_thread.h +++ b/src/zm_thread.h @@ -28,12 +28,34 @@ #endif // HAVE_SYS_SYSCALL_H #include "zm_exception.h" #include "zm_utils.h" +#ifdef __FreeBSD__ +#include +#endif class ThreadException : public Exception { +private: +#ifndef SOLARIS +pid_t pid() { + pid_t tid; +#ifdef __FreeBSD__ + long lwpid; + thr_self(&lwpid); + tid = lwpid; +#else + #ifdef __FreeBSD_kernel__ + if ( (syscall(SYS_thr_self, &tid)) < 0 ) // Thread/Process id + # else + tid=syscall(SYS_gettid); + #endif +#endif + return tid; +} +#else +pthread_t pid() { return( pthread_self() ); } +#endif public: - ThreadException( const std::string &message ) : Exception( stringtf( "(%d) "+message, (long int)syscall(SYS_gettid) ) ) - { + ThreadException( const std::string &message ) : Exception( stringtf( "(%d) "+message, (long int)pid() ) ) { } }; @@ -195,7 +217,11 @@ protected: Mutex mThreadMutex; Condition mThreadCondition; +#ifndef SOLARIS pid_t mPid; +#else + pthread_t mPid; +#endif bool mStarted; bool mRunning; @@ -203,10 +229,30 @@ protected: Thread(); virtual ~Thread(); +#ifndef SOLARIS pid_t id() const { - return( (pid_t)syscall(SYS_gettid) ); + pid_t tid; +#ifdef __FreeBSD__ + long lwpid; + thr_self(&lwpid); + tid = lwpid; +#else + #ifdef __FreeBSD_kernel__ + if ( (syscall(SYS_thr_self, &tid)) < 0 ) // Thread/Process id + + #else + tid=syscall(SYS_gettid); + #endif +#endif +return tid; } +#else + pthread_t id() const + { + return( pthread_self() ); + } +#endif void exit( int status = 0 ) { //INFO( "Exiting" ); diff --git a/src/zm_timer.h b/src/zm_timer.h index 6c7663b87..7afe0a647 100644 --- a/src/zm_timer.h +++ b/src/zm_timer.h @@ -32,8 +32,28 @@ class Timer private: class TimerException : public Exception { + private: +#ifndef SOLARIS + pid_t pid() { + pid_t tid; +#ifdef __FreeBSD__ + long lwpid; + thr_self(&lwpid); + tid = lwpid; +#else + #ifdef __FreeBSD_kernel__ + if ( (syscall(SYS_thr_self, &tid)) < 0 ) // Thread/Process id + #else + tid=syscall(SYS_gettid); + #endif +#endif + return tid; + } +#else + pthread_t pid() { return( pthread_self() ); } +#endif public: - TimerException( const std::string &message ) : Exception( stringtf( "(%d) "+message, (long int)syscall(SYS_gettid) ) ) + TimerException( const std::string &message ) : Exception( stringtf( "(%d) "+message, (long int)pid() ) ) { } }; diff --git a/src/zma.cpp b/src/zma.cpp index cb6ddb4e8..e45327cc1 100644 --- a/src/zma.cpp +++ b/src/zma.cpp @@ -70,7 +70,7 @@ int main( int argc, char *argv[] ) Usage(); break; case 'v': - cout << ZM_VERSION << "\n"; + std::cout << ZM_VERSION << "\n"; exit(0); default: //fprintf( stderr, "?? getopt returned character code 0%o ??\n", c ); diff --git a/src/zmc.cpp b/src/zmc.cpp index 397468140..e159f0096 100644 --- a/src/zmc.cpp +++ b/src/zmc.cpp @@ -19,12 +19,16 @@ #include #include -#if defined(BSD) +#if defined(__FreeBSD__) #include #else #include #endif +#if !defined(MAXINT) +#define MAXINT INT_MAX +#endif + #include "zm.h" #include "zm_db.h" #include "zm_time.h" @@ -111,7 +115,7 @@ int main( int argc, char *argv[] ) Usage(); break; case 'v': - cout << ZM_VERSION << "\n"; + std::cout << ZM_VERSION << "\n"; exit(0); default: //fprintf( stderr, "?? getopt returned character code 0%o ??\n", c ); @@ -205,7 +209,7 @@ int main( int argc, char *argv[] ) exit ( -1 ); } - Info( "Starting Capture" ); + Info( "Starting Capture version %s", ZM_VERSION ); zmSetDefaultTermHandler(); zmSetDefaultDieHandler(); @@ -270,21 +274,21 @@ int main( int argc, char *argv[] ) { if ( monitors[i]->PreCapture() < 0 ) { - Error( "Failed to pre-capture monitor %d (%d/%d)", monitors[i]->Id(), i, n_monitors ); + Error( "Failed to pre-capture monitor %d %d (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors ); zm_terminate = true; result = -1; break; } if ( monitors[i]->Capture() < 0 ) { - Error( "Failed to capture image from monitor %d (%d/%d)", monitors[i]->Id(), i, n_monitors ); + Error( "Failed to capture image from monitor %d %s (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors ); zm_terminate = true; result = -1; break; } if ( monitors[i]->PostCapture() < 0 ) { - Error( "Failed to post-capture monitor %d (%d/%d)", monitors[i]->Id(), i, n_monitors ); + Error( "Failed to post-capture monitor %d %s (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors ); zm_terminate = true; result = -1; break; diff --git a/src/zmf.cpp b/src/zmf.cpp index d97a9e5d5..94bd0bdb5 100644 --- a/src/zmf.cpp +++ b/src/zmf.cpp @@ -138,7 +138,7 @@ int main( int argc, char *argv[] ) Usage(); break; case 'v': - cout << ZM_VERSION << "\n"; + std::cout << ZM_VERSION << "\n"; exit(0); default: //fprintf( stderr, "?? getopt returned character code 0%o ??\n", c ); diff --git a/src/zmstreamer.cpp b/src/zmstreamer.cpp index 5c11cfbea..7385accca 100644 --- a/src/zmstreamer.cpp +++ b/src/zmstreamer.cpp @@ -102,7 +102,7 @@ int main(int argc, char** argv) { printf("-v : This installed version of ZoneMinder\n"); return EXIT_SUCCESS; case 'v': - cout << ZM_VERSION << "\n"; + std::cout << ZM_VERSION << "\n"; exit(0); } } diff --git a/version b/version index cfc730712..450a687b2 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.28.0 +1.28.1 diff --git a/web/CMakeLists.txt b/web/CMakeLists.txt index f7bb3ec0c..b9e75a7e8 100644 --- a/web/CMakeLists.txt +++ b/web/CMakeLists.txt @@ -17,6 +17,7 @@ install(FILES "${CMAKE_CURRENT_BINARY_DIR}/includes/config.php" DESTINATION "${Z if(NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/api/app/Config/core.php" DESTINATION "${ZM_WEBDIR}/api/app/Config") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/api/app/Config/database.php" DESTINATION "${ZM_WEBDIR}/api/app/Config") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/api/app/Config/bootstrap.php" DESTINATION "${ZM_WEBDIR}/api/app/Config") endif(NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR)) # Install the mootools symlinks (if its not in the source directory) diff --git a/web/ajax/event.php b/web/ajax/event.php index d5cc2b09d..1953acab0 100644 --- a/web/ajax/event.php +++ b/web/ajax/event.php @@ -1,4 +1,6 @@ - '.$SLANG['ZoneMinderLog'].' + '.translate('ZoneMinderLog').' -

'.$SLANG['ZoneMinderLog'].'

+

'.translate('ZoneMinderLog').'

'.htmlspecialchars(preg_match( '/%/', DATE_FMT_CONSOLE_LONG )?strftime( DATE_FMT_CONSOLE_LONG ):date( DATE_FMT_CONSOLE_LONG )).'

-

'.count($logs).' '.$SLANG['Logs'].'

+

'.count($logs).' '.translate('Logs').'

- + ' ); foreach ( $logs as $log ) { @@ -288,7 +288,7 @@ tr.log-dbg td { { fwrite( $exportFP, ' - + '.$_POST['selector'].'' ); foreach ( $filter as $field=>$value ) if ( $value != '' ) @@ -298,7 +298,7 @@ tr.log-dbg td { ' ); fwrite( $exportFP, ' - '.$SLANG['DateTime'].''.$SLANG['Component'].''.$SLANG['Pid'].''.$SLANG['Level'].''.$SLANG['Message'].''.$SLANG['File'].''.$SLANG['Line'].' + '.translate('DateTime').''.translate('Component').''.translate('Pid').''.translate('Level').''.translate('Message').''.translate('File').''.translate('Line').' ' ); diff --git a/web/ajax/status.php b/web/ajax/status.php index b29460365..1cd5c766b 100644 --- a/web/ajax/status.php +++ b/web/ajax/status.php @@ -8,7 +8,7 @@ $statusData = array( "elements" => array( "MonitorCount" => array( "sql" => "count(*)" ), "ActiveMonitorCount" => array( "sql" => "count(if(Function != 'None',1,NULL))" ), - "State" => array( "func" => "daemonCheck()?".$SLANG['Running'].":".$SLANG['Stopped'] ), + "State" => array( "func" => "daemonCheck()?".translate('Running').":".translate('Stopped') ), "Load" => array( "func" => "getLoad()" ), "Disk" => array( "func" => "getDiskPercent()" ), ), diff --git a/web/ajax/stream.php b/web/ajax/stream.php index 398f81147..5e9798011 100644 --- a/web/ajax/stream.php +++ b/web/ajax/stream.php @@ -48,7 +48,7 @@ switch ( $_REQUEST['command'] ) $remSockFile = ZM_PATH_SOCKS.'/zms-'.sprintf("%06d",$_REQUEST['connkey']).'s.sock'; $max_socket_tries = 10; 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. - sleep(1); + usleep(200000); if ( !@socket_sendto( $socket, $msg, strlen($msg), 0, $remSockFile ) ) { diff --git a/web/api/CMakeFiles/CMakeDirectoryInformation.cmake b/web/api/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 000000000..3d1e4eadd --- /dev/null +++ b/web/api/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 2.8 + +# Relative path conversion top directories. +SET(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/ubuntu/zm/ZoneMinder") +SET(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/ubuntu/zm/ZoneMinder") + +# Force unix paths in dependencies. +SET(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +SET(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +SET(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +SET(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +SET(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/web/api/CMakeFiles/progress.marks b/web/api/CMakeFiles/progress.marks new file mode 100644 index 000000000..573541ac9 --- /dev/null +++ b/web/api/CMakeFiles/progress.marks @@ -0,0 +1 @@ +0 diff --git a/web/api/CMakeLists.txt b/web/api/CMakeLists.txt index 56bc82a50..3d865527b 100644 --- a/web/api/CMakeLists.txt +++ b/web/api/CMakeLists.txt @@ -10,3 +10,6 @@ configure_file(app/Config/database.php.default "${CMAKE_CURRENT_BINARY_DIR}/app/ # Configure core.php configure_file(app/Config/core.php.default "${CMAKE_CURRENT_BINARY_DIR}/app/Config/core.php" @ONLY) + +# Configure bootstrap.php +configure_file(app/Config/bootstrap.php.in "${CMAKE_CURRENT_BINARY_DIR}/app/Config/bootstrap.php" @ONLY) diff --git a/web/api/app/Config/bootstrap.php b/web/api/app/Config/bootstrap.php.in similarity index 80% rename from web/api/app/Config/bootstrap.php rename to web/api/app/Config/bootstrap.php.in index b8932f3a6..cff9a29dd 100644 --- a/web/api/app/Config/bootstrap.php +++ b/web/api/app/Config/bootstrap.php.in @@ -69,6 +69,7 @@ Cache::config('default', array('engine' => 'File')); * CakePlugin::load('DebugKit'); //Loads a single plugin named DebugKit * */ +CakePlugin::load('Crud'); /** * You can attach event listeners to the request lifecycle as Dispatcher Filter. By default CakePHP bundles two filters: @@ -106,3 +107,37 @@ CakeLog::config('error', array( 'types' => array('warning', 'error', 'critical', 'alert', 'emergency'), 'file' => 'error', )); + +Configure::write('ZM_CONFIG', '@ZM_CONFIG@'); +Configure::write('ZM_VERSION', '@VERSION@'); +Configure::write('ZM_API_VERSION', '@API_VERSION@'); + +loadConfigFile(); + +function loadConfigFile() { + $configFile = Configure::read('ZM_CONFIG'); + $localConfigFile = basename($configFile); + if ( file_exists( $localConfigFile ) && filesize( $localConfigFile ) > 0 ) + { + if ( php_sapi_name() == 'cli' && empty($_SERVER['REMOTE_ADDR']) ) + print( "Warning, overriding installed $localConfigFile file with local copy\n" ); + else + error_log( "Warning, overriding installed $localConfigFile file with local copy" ); + $configFile = $localConfigFile; + } + + $cfg = fopen( $configFile, "r") or die("Could not open config file."); + while ( !feof($cfg) ) + { + $str = fgets( $cfg, 256 ); + if ( preg_match( '/^\s*$/', $str )) + continue; + elseif ( preg_match( '/^\s*#/', $str )) + continue; + elseif ( preg_match( '/^\s*([^=\s]+)\s*=\s*(.*?)\s*$/', $str, $matches )) + Configure::write("$matches[1]", "$matches[2]"); + } + fclose( $cfg ); +} + + diff --git a/web/api/app/Config/core.php b/web/api/app/Config/core.php new file mode 100644 index 000000000..1e1b11bc7 --- /dev/null +++ b/web/api/app/Config/core.php @@ -0,0 +1,387 @@ + 0 + * and log errors with CakeLog when debug = 0. + * + * Options: + * + * - `handler` - callback - The callback to handle errors. You can set this to any callable type, + * including anonymous functions. + * Make sure you add App::uses('MyHandler', 'Error'); when using a custom handler class + * - `level` - integer - The level of errors you are interested in capturing. + * - `trace` - boolean - Include stack traces for errors in log files. + * + * @see ErrorHandler for more information on error handling and configuration. + */ + Configure::write('Error', array( + 'handler' => 'ErrorHandler::handleError', + 'level' => E_ALL & ~E_DEPRECATED, + 'trace' => true + )); + +/** + * Configure the Exception handler used for uncaught exceptions. By default, + * ErrorHandler::handleException() is used. It will display a HTML page for the exception, and + * while debug > 0, framework errors like Missing Controller will be displayed. When debug = 0, + * framework errors will be coerced into generic HTTP errors. + * + * Options: + * + * - `handler` - callback - The callback to handle exceptions. You can set this to any callback type, + * including anonymous functions. + * Make sure you add App::uses('MyHandler', 'Error'); when using a custom handler class + * - `renderer` - string - The class responsible for rendering uncaught exceptions. If you choose a custom class you + * should place the file for that class in app/Lib/Error. This class needs to implement a render method. + * - `log` - boolean - Should Exceptions be logged? + * - `skipLog` - array - list of exceptions to skip for logging. Exceptions that + * extend one of the listed exceptions will also be skipped for logging. + * Example: `'skipLog' => array('NotFoundException', 'UnauthorizedException')` + * + * @see ErrorHandler for more information on exception handling and configuration. + */ + Configure::write('Exception', array( + 'handler' => 'ErrorHandler::handleException', + 'renderer' => 'ExceptionRenderer', + 'log' => true + )); + +/** + * Application wide charset encoding + */ + Configure::write('App.encoding', 'UTF-8'); + +/** + * To configure CakePHP *not* to use mod_rewrite and to + * use CakePHP pretty URLs, remove these .htaccess + * files: + * + * /.htaccess + * /app/.htaccess + * /app/webroot/.htaccess + * + * And uncomment the App.baseUrl below. But keep in mind + * that plugin assets such as images, CSS and JavaScript files + * will not work without URL rewriting! + * To work around this issue you should either symlink or copy + * the plugin assets into you app's webroot directory. This is + * recommended even when you are using mod_rewrite. Handling static + * assets through the Dispatcher is incredibly inefficient and + * included primarily as a development convenience - and + * thus not recommended for production applications. + */ + //Configure::write('App.baseUrl', env('SCRIPT_NAME')); + +/** + * To configure CakePHP to use a particular domain URL + * for any URL generation inside the application, set the following + * configuration variable to the http(s) address to your domain. This + * will override the automatic detection of full base URL and can be + * useful when generating links from the CLI (e.g. sending emails) + */ + //Configure::write('App.fullBaseUrl', 'http://example.com'); + +/** + * Web path to the public images directory under webroot. + * If not set defaults to 'img/' + */ + //Configure::write('App.imageBaseUrl', 'img/'); + +/** + * Web path to the CSS files directory under webroot. + * If not set defaults to 'css/' + */ + //Configure::write('App.cssBaseUrl', 'css/'); + +/** + * Web path to the js files directory under webroot. + * If not set defaults to 'js/' + */ + //Configure::write('App.jsBaseUrl', 'js/'); + +/** + * Uncomment the define below to use CakePHP prefix routes. + * + * The value of the define determines the names of the routes + * and their associated controller actions: + * + * Set to an array of prefixes you want to use in your application. Use for + * admin or other prefixed routes. + * + * Routing.prefixes = array('admin', 'manager'); + * + * Enables: + * `admin_index()` and `/admin/controller/index` + * `manager_index()` and `/manager/controller/index` + * + */ + //Configure::write('Routing.prefixes', array('admin')); + +/** + * Turn off all caching application-wide. + * + */ + //Configure::write('Cache.disable', true); + +/** + * Enable cache checking. + * + * If set to true, for view caching you must still use the controller + * public $cacheAction inside your controllers to define caching settings. + * You can either set it controller-wide by setting public $cacheAction = true, + * or in each action using $this->cacheAction = true. + * + */ + //Configure::write('Cache.check', true); + +/** + * Enable cache view prefixes. + * + * If set it will be prepended to the cache name for view file caching. This is + * helpful if you deploy the same application via multiple subdomains and languages, + * for instance. Each version can then have its own view cache namespace. + * Note: The final cache file name will then be `prefix_cachefilename`. + */ + //Configure::write('Cache.viewPrefix', 'prefix'); + +/** + * Session configuration. + * + * Contains an array of settings to use for session configuration. The defaults key is + * used to define a default preset to use for sessions, any settings declared here will override + * the settings of the default config. + * + * ## Options + * + * - `Session.cookie` - The name of the cookie to use. Defaults to 'CAKEPHP' + * - `Session.timeout` - The number of minutes you want sessions to live for. This timeout is handled by CakePHP + * - `Session.cookieTimeout` - The number of minutes you want session cookies to live for. + * - `Session.checkAgent` - Do you want the user agent to be checked when starting sessions? You might want to set the + * value to false, when dealing with older versions of IE, Chrome Frame or certain web-browsing devices and AJAX + * - `Session.defaults` - The default configuration set to use as a basis for your session. + * There are four builtins: php, cake, cache, database. + * - `Session.handler` - Can be used to enable a custom session handler. Expects an array of callables, + * that can be used with `session_save_handler`. Using this option will automatically add `session.save_handler` + * to the ini array. + * - `Session.autoRegenerate` - Enabling this setting, turns on automatic renewal of sessions, and + * sessionids that change frequently. See CakeSession::$requestCountdown. + * - `Session.ini` - An associative array of additional ini values to set. + * + * The built in defaults are: + * + * - 'php' - Uses settings defined in your php.ini. + * - 'cake' - Saves session files in CakePHP's /tmp directory. + * - 'database' - Uses CakePHP's database sessions. + * - 'cache' - Use the Cache class to save sessions. + * + * To define a custom session handler, save it at /app/Model/Datasource/Session/.php. + * Make sure the class implements `CakeSessionHandlerInterface` and set Session.handler to + * + * To use database sessions, run the app/Config/Schema/sessions.php schema using + * the cake shell command: cake schema create Sessions + * + */ + Configure::write('Session', array( + 'defaults' => 'php' + )); + +/** + * A random string used in security hashing methods. + */ + Configure::write('Security.salt', 'y8s4nPwjdjrmAGRxtnbxWhOknOBX6y1etr6RD8XM'); + +/** + * A random numeric string (digits only) used to encrypt/decrypt strings. + */ + Configure::write('Security.cipherSeed', '28284715058574819699789789248'); + +/** + * Apply timestamps with the last modified time to static assets (js, css, images). + * Will append a query string parameter containing the time the file was modified. This is + * useful for invalidating browser caches. + * + * Set to `true` to apply timestamps when debug > 0. Set to 'force' to always enable + * timestamping regardless of debug value. + */ + //Configure::write('Asset.timestamp', true); + +/** + * Compress CSS output by removing comments, whitespace, repeating tags, etc. + * This requires a/var/cache directory to be writable by the web server for caching. + * and /vendors/csspp/csspp.php + * + * To use, prefix the CSS link URL with '/ccss/' instead of '/css/' or use HtmlHelper::css(). + */ + //Configure::write('Asset.filter.css', 'css.php'); + +/** + * Plug in your own custom JavaScript compressor by dropping a script in your webroot to handle the + * output, and setting the config below to the name of the script. + * + * To use, prefix your JavaScript link URLs with '/cjs/' instead of '/js/' or use JsHelper::link(). + */ + //Configure::write('Asset.filter.js', 'custom_javascript_output_filter.php'); + +/** + * The class name and database used in CakePHP's + * access control lists. + */ + Configure::write('Acl.classname', 'DbAcl'); + Configure::write('Acl.database', 'default'); + +/** + * Uncomment this line and correct your server timezone to fix + * any date & time related errors. + */ + //date_default_timezone_set('UTC'); + +/** + * `Config.timezone` is available in which you can set users' timezone string. + * If a method of CakeTime class is called with $timezone parameter as null and `Config.timezone` is set, + * then the value of `Config.timezone` will be used. This feature allows you to set users' timezone just + * once instead of passing it each time in function calls. + */ + //Configure::write('Config.timezone', 'Europe/Paris'); + +/** + * + * Cache Engine Configuration + * Default settings provided below + * + * File storage engine. + * + * Cache::config('default', array( + * 'engine' => 'File', //[required] + * 'duration' => 3600, //[optional] + * 'probability' => 100, //[optional] + * 'path' => CACHE, //[optional] use system tmp directory - remember to use absolute path + * 'prefix' => 'cake_', //[optional] prefix every cache file with this string + * 'lock' => false, //[optional] use file locking + * 'serialize' => true, //[optional] + * 'mask' => 0664, //[optional] + * )); + * + * APC (http://pecl.php.net/package/APC) + * + * Cache::config('default', array( + * 'engine' => 'Apc', //[required] + * 'duration' => 3600, //[optional] + * 'probability' => 100, //[optional] + * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string + * )); + * + * Xcache (http://xcache.lighttpd.net/) + * + * Cache::config('default', array( + * 'engine' => 'Xcache', //[required] + * 'duration' => 3600, //[optional] + * 'probability' => 100, //[optional] + * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string + * 'user' => 'user', //user from xcache.admin.user settings + * 'password' => 'password', //plaintext password (xcache.admin.pass) + * )); + * + * Memcached (http://www.danga.com/memcached/) + * + * Uses the memcached extension. See http://php.net/memcached + * + * Cache::config('default', array( + * 'engine' => 'Memcached', //[required] + * 'duration' => 3600, //[optional] + * 'probability' => 100, //[optional] + * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string + * 'servers' => array( + * '127.0.0.1:11211' // localhost, default port 11211 + * ), //[optional] + * 'persistent' => 'my_connection', // [optional] The name of the persistent connection. + * 'compress' => false, // [optional] compress data in Memcached (slower, but uses less memory) + * )); + * + * Wincache (http://php.net/wincache) + * + * Cache::config('default', array( + * 'engine' => 'Wincache', //[required] + * 'duration' => 3600, //[optional] + * 'probability' => 100, //[optional] + * 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string + * )); + */ + +/** + * Configure the cache handlers that CakePHP will use for internal + * metadata like class maps, and model schema. + * + * By default File is used, but for improved performance you should use APC. + * + * Note: 'default' and other application caches should be configured in app/Config/bootstrap.php. + * Please check the comments in bootstrap.php for more info on the cache engines available + * and their settings. + */ +$engine = 'File'; + +// In development mode, caches should expire quickly. +$duration = '+999 days'; +if (Configure::read('debug') > 0) { + $duration = '+10 seconds'; +} + +// Prefix each application on the same server with a different string, to avoid Memcache and APC conflicts. +$prefix = 'myapp_'; + +/** + * Configure the cache used for general framework caching. Path information, + * object listings, and translation cache files are stored with this configuration. + */ +Cache::config('_cake_core_', array( + 'engine' => $engine, + 'prefix' => $prefix . 'cake_core_', + 'path' => CACHE . 'persistent' . DS, + 'serialize' => ($engine === 'File'), + 'duration' => $duration +)); + +/** + * Configure the cache for model and datasource caches. This cache configuration + * is used to store schema descriptions, and table listings in connections. + */ +Cache::config('_cake_model_', array( + 'engine' => $engine, + 'prefix' => $prefix . 'cake_model_', + 'path' => CACHE . 'models' . DS, + 'serialize' => ($engine === 'File'), + 'duration' => $duration +)); diff --git a/web/api/app/Config/routes.php b/web/api/app/Config/routes.php index ed2d1f2ca..0f9343644 100644 --- a/web/api/app/Config/routes.php +++ b/web/api/app/Config/routes.php @@ -28,6 +28,14 @@ Router::mapResources('configs'); Router::mapResources('events'); Router::mapResources('frames'); + Router::mapResources('host'); + Router::mapResources('logs'); + Router::mapResources('states'); + Router::mapResources('zonepresets'); + + /* Add new API to retrieve camera controls - for PTZ */ + /* refer to https://github.com/ZoneMinder/ZoneMinder/issues/799#issuecomment-105233112 */ + Router::mapResources('controls'); Router::parseExtensions(); /** diff --git a/web/api/app/Controller/AppController.php b/web/api/app/Controller/AppController.php index a827969e1..f3011e6ff 100644 --- a/web/api/app/Controller/AppController.php +++ b/web/api/app/Controller/AppController.php @@ -18,8 +18,8 @@ * @since CakePHP(tm) v 0.2.9 * @license http://www.opensource.org/licenses/mit-license.php MIT License */ - App::uses('Controller', 'Controller'); +App::uses('CrudControllerTrait', 'Crud.Lib'); /** * Application Controller @@ -31,4 +31,20 @@ App::uses('Controller', 'Controller'); * @link http://book.cakephp.org/2.0/en/controllers.html#the-app-controller */ class AppController extends Controller { + use CrudControllerTrait; + + public $components = [ + 'RequestHandler', + 'Crud.Crud' => [ + 'actions' => [ + 'index' => 'Crud.Index', + 'add' => 'Crud.Add', + 'edit' => 'Crud.Edit', + 'view' => 'Crud.View', + 'keyvalue' => 'Crud.List', + 'category' => 'Crud.Category' + ], + 'listeners' => ['Api', 'ApiTransformation'] + ] + ]; } diff --git a/web/api/app/Controller/Component/ConfigParserComponent.php b/web/api/app/Controller/Component/ConfigParserComponent.php index 18d06fba8..56a2039a0 100644 --- a/web/api/app/Controller/Component/ConfigParserComponent.php +++ b/web/api/app/Controller/Component/ConfigParserComponent.php @@ -24,7 +24,7 @@ class ConfigParserComponent extends Component { public function getInput($name, $type, $id) { if ($type == 'checkbox') { - $string = ''; + $string = ''; } elseif ($type == 'text') { $string = ''; } elseif ($type == 'textarea') { diff --git a/web/api/app/Controller/Component/FilterComponent.php b/web/api/app/Controller/Component/FilterComponent.php new file mode 100644 index 000000000..bf6e423f7 --- /dev/null +++ b/web/api/app/Controller/Component/FilterComponent.php @@ -0,0 +1,34 @@ + $value) { + // If the named param contains an array, we want to turn it into an IN condition + // Otherwise, we add it right into the $conditions array + if (is_array($value)) { + $array = array(); + + foreach ($value as $term) { + array_push($array, $term); + } + + $query = array($attribute => $array); + array_push($conditions, $query); + } else { + array_push($conditions, array($attribute => $value)); + } + } + + } + + return $conditions; + } + +} +?> diff --git a/web/api/app/Controller/Component/ImageComponent.php b/web/api/app/Controller/Component/ImageComponent.php new file mode 100644 index 000000000..68a254031 --- /dev/null +++ b/web/api/app/Controller/Component/ImageComponent.php @@ -0,0 +1,100 @@ +getEventPath($event); + + $captImage = sprintf( "%0".$config['ZM_EVENT_IMAGE_DIGITS']."d-capture.jpg", $frame['Frame']['FrameId'] ); + $captPath = $eventPath.'/'.$captImage; + $thumbCaptPath = $config['ZM_DIR_IMAGES'].'/'.$event['Event']['Id'].'-'.$captImage; + + $analImage = sprintf( "%0".$config['ZM_EVENT_IMAGE_DIGITS']."d-analyse.jpg", $frame['Frame']['FrameId'] ); + $analPath = $eventPath.'/'.$analImage; + $analFile = $config['ZM_DIR_EVENTS']."/".$analPath; + $thumbAnalPath = $config['ZM_DIR_IMAGES'].'/'.$event['Event']['Id'].'-'.$analImage; + + $alarmFrame = $frame['Frame']['Type']=='Alarm'; + + $hasAnalImage = $alarmFrame && file_exists( $analFile ) && filesize( $analFile ); + $isAnalImage = $hasAnalImage && !$captureOnly; + + + if ( !$config['ZM_WEB_SCALE_THUMBS'] || $scale >= 100 || !function_exists( 'imagecreatefromjpeg' ) ) { + $imagePath = $thumbPath = $isAnalImage?$analPath:$captPath; + $imageFile = $config['ZM_DIR_EVENTS']."/".$imagePath; + $thumbFile = $config['ZM_DIR_EVENTS']."/".$thumbPath; + } else { + if ( version_compare( phpversion(), "4.3.10", ">=") ) + $fraction = sprintf( "%.3F", $scale/100 ); + else + $fraction = sprintf( "%.3f", $scale/100 ); + $scale = (int)round( $scale ); + + $thumbCaptPath = preg_replace( "/\.jpg$/", "-$scale.jpg", $thumbCaptPath ); + $thumbAnalPath = preg_replace( "/\.jpg$/", "-$scale.jpg", $thumbAnalPath ); + + if ( $isAnalImage ) + { + $imagePath = $analPath; + $thumbPath = $thumbAnalPath; + } + else + { + $imagePath = $captPath; + $thumbPath = $thumbCaptPath; + } + + $imageFile = $config['ZM_DIR_EVENTS']."/".$imagePath; + //$thumbFile = ZM_DIR_EVENTS."/".$thumbPath; + $thumbFile = $thumbPath; + // PP: This segment of code results in errors when trying to get Events API + // This actually seems to be generating images for the angular UI web view + // and should not be a part of the API anyway + // I've commented it so events APIs continue to work + // I did ask Kyle about this, but I don't have an answer from him + // Either way, it does no harm to remove it -- as the UI of master + // does not use API code anyway + /* + if ( $overwrite || !file_exists( $thumbFile ) || !filesize( $thumbFile ) ) + { + // Get new dimensions + list( $imageWidth, $imageHeight ) = getimagesize( $imageFile ); + $thumbWidth = $imageWidth * $fraction; + $thumbHeight = $imageHeight * $fraction; + + // Resample + $thumbImage = imagecreatetruecolor( $thumbWidth, $thumbHeight ); + $image = imagecreatefromjpeg( $imageFile ); + imagecopyresampled( $thumbImage, $image, 0, 0, 0, 0, $thumbWidth, $thumbHeight, $imageWidth, $imageHeight ); + + if ( !imagejpeg( $thumbImage, $thumbFile ) ) + Error( "Can't create thumbnail '$thumbPath'" ); + } + */ + } + + /* + $imageData = array( + 'eventPath' => $eventPath, + 'imagePath' => $imagePath, + 'thumbPath' => $thumbPath, + 'imageFile' => $imageFile, + 'thumbFile' => $thumbFile, + 'imageClass' => $alarmFrame?"alarm":"normal", + 'isAnalImage' => $isAnalImage, + 'hasAnalImage' => $hasAnalImage, + ); + + return( $imageData ); + */ + + } + + // Take the StartTime of an Event and return + // the path to its location on the filesystem + public function getEventPath( $event ) { + return $event['Event']['MonitorId'].'/'.strftime( "%y/%m/%d/%H/%M/%S", strtotime($event['Event']['StartTime']) ); + } +} +?> diff --git a/web/api/app/Controller/Component/ScalerComponent.php b/web/api/app/Controller/Component/ScalerComponent.php new file mode 100644 index 000000000..30678dad6 --- /dev/null +++ b/web/api/app/Controller/Component/ScalerComponent.php @@ -0,0 +1,27 @@ + diff --git a/web/api/app/Controller/ConfigsController.php b/web/api/app/Controller/ConfigsController.php index 3198ae58e..651f5724e 100644 --- a/web/api/app/Controller/ConfigsController.php +++ b/web/api/app/Controller/ConfigsController.php @@ -14,20 +14,6 @@ class ConfigsController extends AppController { */ public $components = array('RequestHandler'); -/** - * index method - * - * @return void - */ - public function index() { - $this->Config->recursive = 0; - $configs = $this->Config->find('all'); - $this->set(array( - 'configs' => $configs, - '_serialize' => array('configs') - )); - } - /** * view method * @@ -47,6 +33,19 @@ class ConfigsController extends AppController { )); } + public function viewByName($name = null) { + $config = $this->Config->findByName($name, array('fields' => 'Value')); + + if (!$config) { + throw new NotFoundException(__('Invalid config')); + } + + $this->set(array( + 'config' => $config['Config'], + '_serialize' => array('config') + )); + } + /** * edit method * @@ -93,45 +92,19 @@ class ConfigsController extends AppController { /** * categories method * - * Either return a list of distinct categories - * Or all configs under a certain category + * return a list of distinct categories */ public function categories($category = null) { - if ($category != null) { - if (!$this->Config->find('first', array( 'conditions' => array('Config.Category' => $category)))) { - throw new NotFoundException(__('Invalid Config Category')); - } - - $config = $this->Config->find('all', array( - 'conditions' => array('Config.Category' => $category), - 'recursive' => 0 - )); - $this->set(array( - 'config' => $config, - '_serialize' => array('config') - )); - } else { - $categories = $this->Config->find('all', array( - 'fields' => array('DISTINCT Config.Category'), - 'conditions' => array('Config.Category !=' => 'hidden'), - 'recursive' => 0 - )); - $this->set(array( - 'categories' => $categories, - '_serialize' => array('categories') - )); - } - - } - - public function keyValue() { - $keyValues = $this->Config->find('list', array( - 'fields' => array('Config.Name', 'Config.Value') + $categories = $this->Config->find('all', array( + 'fields' => array('DISTINCT Config.Category'), + 'conditions' => array('Config.Category !=' => 'hidden'), + 'recursive' => 0 )); $this->set(array( - 'keyValues' => $keyValues, - '_serialize' => array('keyValues') + 'categories' => $categories, + '_serialize' => array('categories') )); } } + diff --git a/web/api/app/Controller/ControlsController.php b/web/api/app/Controller/ControlsController.php new file mode 100644 index 000000000..879142f75 --- /dev/null +++ b/web/api/app/Controller/ControlsController.php @@ -0,0 +1,59 @@ +Control->recursive = 0; + $controls = $this->Control->find('all'); + $this->set(array( + 'controls' => $controls, + '_serialize' => array('controls') + )); + } + +/** + * view method + * + * @throws NotFoundException + * @param string $id + * @return void + */ + public function view($id = null) { + if (!$this->Control->exists($id)) { + throw new NotFoundException(__('Invalid control')); + } + $options = array('conditions' => array('Control.' . $this->Control->primaryKey => $id)); + $control = $this->Control->find('first', $options); + $this->set(array( + 'control' => $control, + '_serialize' => array('control') + )); + } +} + diff --git a/web/api/app/Controller/EventsController.php b/web/api/app/Controller/EventsController.php index 394e61caf..05a280be3 100644 --- a/web/api/app/Controller/EventsController.php +++ b/web/api/app/Controller/EventsController.php @@ -12,20 +12,46 @@ class EventsController extends AppController { * * @var array */ - public $components = array('RequestHandler'); + public $components = array('RequestHandler', 'Scaler', 'Image', 'Paginator'); /** * index method * * @return void + * This also creates a thumbnail for each event. */ public function index() { $this->Event->recursive = -1; - $events = $this->Event->find('all'); - $this->set(array( - 'events' => $events, - '_serialize' => array('events') + + if ($this->request->params['named']) { + $this->FilterComponent = $this->Components->load('Filter'); + $conditions = $this->FilterComponent->buildFilter($this->request->params['named']); + } else { + $conditions = array(); + } + + // How many events to return + $this->loadModel('Config'); + $limit = $this->Config->find('list', array( + 'conditions' => array('Name' => 'ZM_WEB_EVENTS_PER_PAGE'), + 'fields' => array('Name', 'Value') )); + $this->Paginator->settings = array( + 'limit' => $limit['ZM_WEB_EVENTS_PER_PAGE'], + 'order' => array('StartTime', 'MaxScore'), + 'paramType' => 'querystring', + 'conditions' => $conditions + ); + $events = $this->Paginator->paginate('Event'); + + // For each event, get its thumbnail data (path, width, height) + foreach ($events as $key => $value) { + $thumbData = $this->createThumbnail($value['Event']['Id']); + $events[$key]['thumbData'] = $thumbData; + + } + + $this->set(compact('events')); } /** @@ -36,12 +62,23 @@ class EventsController extends AppController { * @return void */ public function view($id = null) { - $this->Event->recursive = -1; + $this->loadModel('Config'); + $configs = $this->Config->find('list', array( + 'fields' => array('Name', 'Value'), + 'conditions' => array('Name' => array('ZM_DIR_EVENTS')) + )); + + $this->Event->recursive = 1; if (!$this->Event->exists($id)) { throw new NotFoundException(__('Invalid event')); } $options = array('conditions' => array('Event.' . $this->Event->primaryKey => $id)); $event = $this->Event->find('first', $options); + + $path = $configs['ZM_DIR_EVENTS'].'/'.$this->Image->getEventPath($event).'/'; + + $event['Event']['BasePath'] = $path; + $this->set(array( 'event' => $event, '_serialize' => array('event') @@ -108,4 +145,142 @@ class EventsController extends AppController { } else { return $this->flash(__('The event could not be deleted. Please, try again.'), array('action' => 'index')); } - }} + } + + public function search() { + $this->Event->recursive = -1; + $conditions = array(); + + foreach ($this->params['named'] as $param_name => $value) { + // Transform params into mysql + if (preg_match("/interval/i", $value, $matches)) { + $condition = array("$param_name >= (date_sub(now(), $value))"); + } else { + $condition = array($param_name => $value); + } + array_push($conditions, $condition); + } + + $results = $this->Event->find('all', array( + 'conditions' => $conditions + )); + + $this->set(array( + 'results' => $results, + '_serialize' => array('results') + )); + + + } + + public function consoleEvents($interval = null) { + $this->Event->recursive = -1; + $results = array(); + + $query = $this->Event->query("select MonitorId, COUNT(*) AS Count from Events WHERE StartTime >= (DATE_SUB(NOW(), interval $interval)) GROUP BY MonitorId;"); + + foreach ($query as $result) { + $results[$result['Events']['MonitorId']] = $result[0]['Count']; + } + + $this->set(array( + 'results' => $results, + '_serialize' => array('results') + )); + } + + // Create a thumbnail and return the thumbnail's data for a given event id. + public function createThumbnail($id = null) { + $this->Event->recursive = -1; + + if (!$this->Event->exists($id)) { + throw new NotFoundException(__('Invalid event')); + } + + $event = $this->Event->find('first', array( + 'conditions' => array('Id' => $id) + )); + + // Find the max Frame for this Event. Error out otherwise. + $this->loadModel('Frame'); + if (! $frame = $this->Frame->find('first', array( + 'conditions' => array( + 'EventId' => $event['Event']['Id'], + 'Score' => $event['Event']['MaxScore'] + ) + ))) { + throw new NotFoundException(__("Can not find Frame for Event " . $event['Event']['Id'])); + } + + $this->loadModel('Config'); + + // Get the config options required for reScale and getImageSrc + // The $bw, $thumbs and unset() code is a workaround / temporary + // until I have a better way of handing per-bandwidth config options + $bw = (isset($_COOKIE['zmBandwidth']) ? strtoupper(substr($_COOKIE['zmBandwidth'], 0, 1)) : 'L'); + $thumbs = "ZM_WEB_${bw}_SCALE_THUMBS"; + + $config = $this->Config->find('list', array( + 'conditions' => array('OR' => array( + 'Name' => array('ZM_WEB_LIST_THUMB_WIDTH', + 'ZM_WEB_LIST_THUMB_HEIGHT', + 'ZM_EVENT_IMAGE_DIGITS', + 'ZM_DIR_IMAGES', + "$thumbs", + 'ZM_DIR_EVENTS' + ) + )), + 'fields' => array('Name', 'Value') + )); + $config['ZM_WEB_SCALE_THUMBS'] = $config[$thumbs]; + unset($config[$thumbs]); + + // reScale based on either the width, or the hight, of the event. + if ( $config['ZM_WEB_LIST_THUMB_WIDTH'] ) { + $thumbWidth = $config['ZM_WEB_LIST_THUMB_WIDTH']; + $scale = (100 * $thumbWidth) / $event['Event']['Width']; + $thumbHeight = $this->Scaler->reScale( $event['Event']['Height'], $scale ); + } + elseif ( $config['ZM_WEB_LIST_THUMB_HEIGHT'] ) { + $thumbHeight = $config['ZM_WEB_LIST_THUMB_HEIGHT']; + $scale = (100*$thumbHeight)/$event['Event']['Height']; + $thumbWidth = $this->Scaler->reScale( $event['Event']['Width'], $scale ); + } + else { + throw new NotFoundException(__('No thumbnail width or height specified, please check in Options->Web')); + } + + $imageData = $this->Image->getImageSrc( $event, $frame, $scale, $config ); + $thumbData['Path'] = $imageData['thumbPath']; + $thumbData['Width'] = (int)$thumbWidth; + $thumbData['Height'] = (int)$thumbHeight; + + return( $thumbData ); + + } + + public function archive($id = null) { + $this->Event->recursive = -1; + if (!$this->Event->exists($id)) { + throw new NotFoundException(__('Invalid event')); + } + + // Get the current value of Archive + $archived = $this->Event->find('first', array( + 'fields' => array('Event.Archived'), + 'conditions' => array('Event.Id' => $id) + )); + // If 0, 1, if 1, 0 + $archiveVal = (($archived['Event']['Archived'] == 0) ? 1 : 0); + + // Save the new value + $this->Event->id = $id; + $this->Event->saveField('Archived', $archiveVal); + + $this->set(array( + 'archived' => $archiveVal, + '_serialize' => array('archived') + )); + } + +} diff --git a/web/api/app/Controller/HostController.php b/web/api/app/Controller/HostController.php new file mode 100644 index 000000000..ee5ecd30f --- /dev/null +++ b/web/api/app/Controller/HostController.php @@ -0,0 +1,112 @@ +set(array( + 'result' => $result, + '_serialize' => array('result') + )); + } + + function getLoad() { + $load = sys_getloadavg(); + + $this->set(array( + 'load' => $load, + '_serialize' => array('load') + )); + } + + // If $mid is set, only return disk usage for that monitor + // Else, return an array of total disk usage, and per-monitor + // usage. + function getDiskPercent($mid = null) { + $this->loadModel('Config'); + $this->loadModel('Monitor'); + + // If $mid is passed, see if it is valid + if ($mid) { + if (!$this->Monitor->exists($mid)) { + throw new NotFoundException(__('Invalid monitor')); + } + } + + $zm_dir_events = $this->Config->find('list', array( + 'conditions' => array('Name' => 'ZM_DIR_EVENTS'), + 'fields' => array('Name', 'Value') + )); + $zm_dir_events = $zm_dir_events['ZM_DIR_EVENTS' ]; + + // Test to see if $zm_dir_events is relative or absolute + if ('/' === "" || strrpos($zm_dir_events, '/', -strlen($zm_dir_events)) !== TRUE) { + // relative - so add the full path + $zm_dir_events = Configure::read('ZM_PATH_WEB') . '/' . $zm_dir_events; + } + + if ($mid) { + // Get disk usage for $mid + $usage = shell_exec ("du -sh0 $zm_dir_events/$mid | awk '{print $1}'"); + } else { + $monitors = $this->Monitor->find('all', array( + 'fields' => array('Id', 'Name', 'WebColour') + )); + $usage = array(); + + // Add each monitor's usage to array + foreach ($monitors as $key => $value) { + $id = $value['Monitor']['Id']; + $name = $value['Monitor']['Name']; + $color = $value['Monitor']['WebColour']; + + $space = shell_exec ("du -s0 $zm_dir_events/$id | awk '{print $1}'"); + if ($space == null) { + $space = 0; + } + $space = $space/1024/1024; + + $usage[$name] = array( + 'space' => rtrim($space), + 'color' => $color + ); + } + + // Add total usage to array + $space = shell_exec( "df $zm_dir_events |tail -n1 | awk '{print $3 }'"); + $space = $space/1024/1024; + $usage['Total'] = array( + 'space' => rtrim($space), + 'color' => '#F7464A' + ); + } + + $this->set(array( + 'usage' => $usage, + '_serialize' => array('usage') + )); + } + + function getVersion() { + $version = Configure::read('ZM_VERSION'); + $apiversion = Configure::read('ZM_API_VERSION'); + + $this->set(array( + 'version' => $version, + 'apiversion' => $apiversion, + '_serialize' => array('version', 'apiversion') + )); + } +} diff --git a/web/api/app/Controller/LogsController.php b/web/api/app/Controller/LogsController.php index 908c635e2..bb8f47b80 100644 --- a/web/api/app/Controller/LogsController.php +++ b/web/api/app/Controller/LogsController.php @@ -13,7 +13,12 @@ class LogsController extends AppController { * * @var array */ - public $components = array('Paginator'); + public $components = array('Paginator', 'RequestHandler'); + public $paginate = array( + 'limit' => 100, + 'order' => array( 'Log.TimeKey' => 'asc' ), + 'paramType' => 'querystring' + ); /** * index method @@ -21,8 +26,11 @@ class LogsController extends AppController { * @return void */ public function index() { - $this->Log->recursive = 0; - $this->set('logs', $this->Paginator->paginate()); + $this->Log->recursive = -1; + $this->Paginator->settings = $this->paginate; + + $logs = $this->Paginator->paginate('Log'); + $this->set(compact('logs')); } /** diff --git a/web/api/app/Controller/MonitorsController.php b/web/api/app/Controller/MonitorsController.php index da4339e8e..0588a8cc2 100644 --- a/web/api/app/Controller/MonitorsController.php +++ b/web/api/app/Controller/MonitorsController.php @@ -59,6 +59,7 @@ class MonitorsController extends AppController { if ($this->request->is('post')) { $this->Monitor->create(); if ($this->Monitor->save($this->request->data)) { + $this->daemonControl($this->Monitor->id, 'start', $this->request->data); return $this->flash(__('The monitor has been saved.'), array('action' => 'index')); } } @@ -103,6 +104,9 @@ class MonitorsController extends AppController { throw new NotFoundException(__('Invalid monitor')); } $this->request->allowMethod('post', 'delete'); + + $this->daemonControl($this->Monitor->id, 'stop'); + if ($this->Monitor->delete()) { return $this->flash(__('The monitor has been deleted.'), array('action' => 'index')); } else { @@ -124,5 +128,81 @@ class MonitorsController extends AppController { )); } + // Check if a daemon is running for the monitor id + public function daemonStatus() { + $id = $this->request->params['named']['id']; + $daemon = $this->request->params['named']['daemon']; + + if (!$this->Monitor->exists($id)) { + throw new NotFoundException(__('Invalid monitor')); + } + + $monitor = $this->Monitor->find('first', array( + 'fields' => array('Id', 'Type', 'Device'), + 'conditions' => array('Id' => $id) + )); + + // Clean up the returned array + $monitor = Set::extract('/Monitor/.', $monitor); + + // Pass -d for local, otherwise -m + if ($monitor[0]['Type'] == 'Local') { + $args = "-d ". $monitor[0]['Device']; + } else { + $args = "-m ". $monitor[0]['Id']; + } + + // Build the command, and execute it + $zm_path_bin = Configure::read('ZM_PATH_BIN'); + $command = escapeshellcmd("$zm_path_bin/zmdc.pl status $daemon $args"); + $status = exec( $command ); + + // If 'not' is present, the daemon is not running, so return false + // https://github.com/ZoneMinder/ZoneMinder/issues/799#issuecomment-108996075 + // Also sending back the status text so we can check if the monitor is in pending + // state which means there may be an error + $statustext = $status; + $status = (strpos($status, 'not')) ? false : true; + + $this->set(array( + 'status' => $status, + 'statustext' => $statustext, + '_serialize' => array('status','statustext'), + )); + } + + public function daemonControl($id, $command, $monitor=null, $daemon=null) { + $args = ''; + $daemons = array(); + + if (!$monitor) { + // Need to see if it is local or remote + $monitor = $this->Monitor->find('first', array( + 'fields' => array('Type', 'Function'), + 'conditions' => array('Id' => $id) + )); + $monitor = $monitor['Monitor']; + } + + if ($monitor['Type'] == 'Local') { + $args = "-d " . $monitor['Device']; + } else { + $args = "-m " . $id; + } + + if ($monitor['Function'] == 'Monitor') { + array_push($daemons, 'zmc'); + } else { + array_push($daemons, 'zmc', 'zma'); + } + + $zm_path_bin = Configure::read('ZM_PATH_BIN'); + + foreach ($daemons as $daemon) { + $shellcmd = escapeshellcmd("$zm_path_bin/zmdc.pl $command $daemon $args"); + $status = exec( $shellcmd ); + } + } + } diff --git a/web/api/app/Controller/StatesController.php b/web/api/app/Controller/StatesController.php new file mode 100644 index 000000000..2b007f08f --- /dev/null +++ b/web/api/app/Controller/StatesController.php @@ -0,0 +1,117 @@ +State->recursive = 0; + $states = $this->State->find('all'); + $this->set(array( + 'states' => $states, + '_serialize' => array('states') + )); + } + +/** + * view method + * + * @throws NotFoundException + * @param string $id + * @return void + */ + public function view($id = null) { + if (!$this->State->exists($id)) { + throw new NotFoundException(__('Invalid state')); + } + $options = array('conditions' => array('State.' . $this->State->primaryKey => $id)); + $this->set('state', $this->State->find('first', $options)); + } + +/** + * add method + * + * @return void + */ + public function add() { + if ($this->request->is('post')) { + $this->State->create(); + if ($this->State->save($this->request->data)) { + return $this->flash(__('The state has been saved.'), array('action' => 'index')); + } + } + } + +/** + * edit method + * + * @throws NotFoundException + * @param string $id + * @return void + */ + public function edit($id = null) { + if (!$this->State->exists($id)) { + throw new NotFoundException(__('Invalid state')); + } + if ($this->request->is(array('post', 'put'))) { + if ($this->State->save($this->request->data)) { + return $this->flash(__('The state has been saved.'), array('action' => 'index')); + } + } else { + $options = array('conditions' => array('State.' . $this->State->primaryKey => $id)); + $this->request->data = $this->State->find('first', $options); + } + } + +/** + * delete method + * + * @throws NotFoundException + * @param string $id + * @return void + */ + public function delete($id = null) { + $this->State->id = $id; + if (!$this->State->exists()) { + throw new NotFoundException(__('Invalid state')); + } + $this->request->allowMethod('post', 'delete'); + if ($this->State->delete()) { + return $this->flash(__('The state has been deleted.'), array('action' => 'index')); + } else { + return $this->flash(__('The state could not be deleted. Please, try again.'), array('action' => 'index')); + } + } + + public function change() { + $newState = $this->request->params['pass'][0]; + $blah = $this->packageControl($newState); + + $this->set(array( + 'blah' => $blah, + '_serialize' => array('blah') + )); + } + + public function packageControl( $command ) { + $zm_path_bin = Configure::read('ZM_PATH_BIN'); + $string = $zm_path_bin.'/zmpkg.pl '.escapeshellarg( $command ); + $status = exec( $string ); + + return $status; + } + + +} diff --git a/web/api/app/Controller/ZonePresetsController.php b/web/api/app/Controller/ZonePresetsController.php new file mode 100644 index 000000000..b89a6c75d --- /dev/null +++ b/web/api/app/Controller/ZonePresetsController.php @@ -0,0 +1,99 @@ +ZonePreset->find('all'); + $this->set(array( + 'zonePresets' => $zonePresets, + '_serialize' => array('zonePresets') + )); + } + +/** + * view method + * + * @throws NotFoundException + * @param string $id + * @return void + */ + public function view($id = null) { + if (!$this->ZonePreset->exists($id)) { + throw new NotFoundException(__('Invalid zone preset')); + } + $options = array('conditions' => array('ZonePreset.' . $this->ZonePreset->primaryKey => $id)); + $this->set('zonePreset', $this->ZonePreset->find('first', $options)); + } + +/** + * add method + * + * @return void + */ + public function add() { + if ($this->request->is('post')) { + $this->ZonePreset->create(); + if ($this->ZonePreset->save($this->request->data)) { + return $this->flash(__('The zone preset has been saved.'), array('action' => 'index')); + } + } + } + +/** + * edit method + * + * @throws NotFoundException + * @param string $id + * @return void + */ + public function edit($id = null) { + if (!$this->ZonePreset->exists($id)) { + throw new NotFoundException(__('Invalid zone preset')); + } + if ($this->request->is(array('post', 'put'))) { + if ($this->ZonePreset->save($this->request->data)) { + return $this->flash(__('The zone preset has been saved.'), array('action' => 'index')); + } + } else { + $options = array('conditions' => array('ZonePreset.' . $this->ZonePreset->primaryKey => $id)); + $this->request->data = $this->ZonePreset->find('first', $options); + } + } + +/** + * delete method + * + * @throws NotFoundException + * @param string $id + * @return void + */ + public function delete($id = null) { + $this->ZonePreset->id = $id; + if (!$this->ZonePreset->exists()) { + throw new NotFoundException(__('Invalid zone preset')); + } + $this->request->allowMethod('post', 'delete'); + if ($this->ZonePreset->delete()) { + return $this->flash(__('The zone preset has been deleted.'), array('action' => 'index')); + } else { + return $this->flash(__('The zone preset could not be deleted. Please, try again.'), array('action' => 'index')); + } + }} diff --git a/web/api/app/Controller/ZonesController.php b/web/api/app/Controller/ZonesController.php index dc30a382a..be80c57fc 100644 --- a/web/api/app/Controller/ZonesController.php +++ b/web/api/app/Controller/ZonesController.php @@ -4,51 +4,26 @@ App::uses('AppController', 'Controller'); * Zones Controller * * @property Zone $Zone - * @property PaginatorComponent $Paginator */ class ZonesController extends AppController { -/** - * Components - * - * @var array - */ - public $components = array('Paginator', 'RequestHandler'); - -/** - * index method - * - * @return void - */ - public function index() { - $this->Zone->recursive = -1; - $zones = $this->Zone->find('all'); - $this->set(array( - 'zones' => $zones, - '_serialize' => array('zones') - )); - } - -/** - * view method - * - * @throws NotFoundException - * @param string $id - * @return void - */ - public function view($id = null) { - $this->Zone->recursive = -1; - if (!$this->Zone->exists($id)) { - throw new NotFoundException(__('Invalid zone')); +// Find all zones which belong to a MonitorId + public function forMonitor($id = null) { + $this->loadModel('Monitor'); + if (!$this->Monitor->exists($id)) { + throw new NotFoundException(__('Invalid monitor')); } - $options = array('conditions' => array('Zone.' . $this->Zone->primaryKey => $id)); - $zone = $this->Zone->find('first', $options); + + $this->Zone->recursive = -1; + + $zones = $this->Zone->find('all', array( + 'conditions' => array('MonitorId' => $id) + )); $this->set(array( - 'zone' => $zone, - '_serialize' => array('zone') + 'zones' => $zones, + '_serialize' => array('zones') )); } - /** * add method * @@ -108,4 +83,38 @@ class ZonesController extends AppController { } else { return $this->flash(__('The zone could not be deleted. Please, try again.'), array('action' => 'index')); } - }} + } + + + + public function createZoneImage( $id = null ) { + $this->loadModel('Monitor'); + $this->Monitor->id = $id; + if (!$this->Monitor->exists()) { + throw new NotFoundException(__('Invalid zone')); + } + + + $this->loadModel('Config'); + $zm_dir_images = $this->Config->find('list', array( + 'conditions' => array('Name' => 'ZM_DIR_IMAGES'), + 'fields' => array('Name', 'Value') + )); + + $zm_dir_images = $zm_dir_images['ZM_DIR_IMAGES']; + $zm_path_web = Configure::read('ZM_PATH_WEB'); + $zm_path_bin = Configure::read('ZM_PATH_BIN'); + $images_path = "$zm_path_web/$zm_dir_images"; + + chdir($images_path); + + $command = escapeshellcmd("$zm_path_bin/zmu -z -m $id"); + system( $command, $status ); + + $this->set(array( + 'status' => $status, + '_serialize' => array('status') + )); + + } +} diff --git a/web/api/app/Model/Config.php b/web/api/app/Model/Config.php index 2ada8258d..d83728c76 100644 --- a/web/api/app/Model/Config.php +++ b/web/api/app/Model/Config.php @@ -18,13 +18,25 @@ class Config extends AppModel { * * @var string */ - public $primaryKey = 'Id'; + public $primaryKey = 'Name'; /** * Display field * * @var string */ - public $displayField = 'Name'; + public $displayField = 'Value'; + + + // Add a find method for returning a hash of the Config table. + // This is used for the Options view. + public $findMethods = array('hash' => true); + protected function _findHash($state, $query, $results = array()) { + if ($state === 'before') { + return $query; + } + $results = Set::combine($results, '{n}.Config.Name', '{n}.Config'); + return $results; + } } diff --git a/web/api/app/Model/Control.php b/web/api/app/Model/Control.php new file mode 100644 index 000000000..d5716cc66 --- /dev/null +++ b/web/api/app/Model/Control.php @@ -0,0 +1,54 @@ + array( + 'numeric' => array( + 'rule' => array('numeric'), + //'message' => 'Your custom message here', + //'allowEmpty' => false, + //'required' => false, + //'last' => false, // Stop validation after this rule + //'on' => 'create', // Limit validation to 'create' or 'update' operations + ), + ), + ); + +} diff --git a/web/api/app/Model/Frame.php b/web/api/app/Model/Frame.php index 48b880304..96c5fdc50 100644 --- a/web/api/app/Model/Frame.php +++ b/web/api/app/Model/Frame.php @@ -121,4 +121,6 @@ class Frame extends AppModel { 'order' => '' ) ); + + public $recursive = -1; } diff --git a/web/api/app/Model/Host.php b/web/api/app/Model/Host.php new file mode 100644 index 000000000..5c24c7531 --- /dev/null +++ b/web/api/app/Model/Host.php @@ -0,0 +1,9 @@ + +Paginator->params(); + echo json_encode($array); +?> diff --git a/web/api/app/View/Logs/json/index.ctp b/web/api/app/View/Logs/json/index.ctp new file mode 100644 index 000000000..32cbd51f8 --- /dev/null +++ b/web/api/app/View/Logs/json/index.ctp @@ -0,0 +1,5 @@ +Paginator->params(); + echo json_encode($array); +?> diff --git a/web/api/app/View/View/Configs/json/edit.ctp b/web/api/app/View/View/Configs/json/edit.ctp new file mode 100644 index 000000000..75fa758bd --- /dev/null +++ b/web/api/app/View/View/Configs/json/edit.ctp @@ -0,0 +1 @@ +echo json_encode($config); diff --git a/web/api/app/View/View/Configs/json/index.ctp b/web/api/app/View/View/Configs/json/index.ctp new file mode 100644 index 000000000..86edf870a --- /dev/null +++ b/web/api/app/View/View/Configs/json/index.ctp @@ -0,0 +1 @@ +echo json_encode($configs); diff --git a/web/api/app/View/View/Configs/json/view.ctp b/web/api/app/View/View/Configs/json/view.ctp new file mode 100644 index 000000000..75fa758bd --- /dev/null +++ b/web/api/app/View/View/Configs/json/view.ctp @@ -0,0 +1 @@ +echo json_encode($config); diff --git a/web/api/app/View/View/Configs/xml/index.ctp b/web/api/app/View/View/Configs/xml/index.ctp new file mode 100644 index 000000000..b13a76093 --- /dev/null +++ b/web/api/app/View/View/Configs/xml/index.ctp @@ -0,0 +1,2 @@ +$xml = Xml::fromArray(array('response' => $configs)); +echo $xml->asXML(); diff --git a/web/api/app/View/View/Configs/xml/view.ctp b/web/api/app/View/View/Configs/xml/view.ctp new file mode 100644 index 000000000..7987d32e7 --- /dev/null +++ b/web/api/app/View/View/Configs/xml/view.ctp @@ -0,0 +1,2 @@ +$xml = Xml::fromArray(array('response' => $config)); +echo $xml->asXML(); diff --git a/web/api/app/View/View/Elements/empty b/web/api/app/View/View/Elements/empty new file mode 100644 index 000000000..e69de29bb diff --git a/web/api/app/View/View/Emails/html/default.ctp b/web/api/app/View/View/Emails/html/default.ctp new file mode 100644 index 000000000..e2bff19c0 --- /dev/null +++ b/web/api/app/View/View/Emails/html/default.ctp @@ -0,0 +1,25 @@ + + ' . $line . "

\n"; +endforeach; +?> \ No newline at end of file diff --git a/web/api/app/View/View/Emails/text/default.ctp b/web/api/app/View/View/Emails/text/default.ctp new file mode 100644 index 000000000..090b5c403 --- /dev/null +++ b/web/api/app/View/View/Emails/text/default.ctp @@ -0,0 +1,19 @@ + + \ No newline at end of file diff --git a/web/api/app/View/View/Errors/error400.ctp b/web/api/app/View/View/Errors/error400.ctp new file mode 100644 index 000000000..4c3850b28 --- /dev/null +++ b/web/api/app/View/View/Errors/error400.ctp @@ -0,0 +1,31 @@ + +

+

+ : + '{$url}'" + ); ?> +

+ 0): + echo $this->element('exception_stack_trace'); +endif; +?> diff --git a/web/api/app/View/View/Errors/error500.ctp b/web/api/app/View/View/Errors/error500.ctp new file mode 100644 index 000000000..518b9ee77 --- /dev/null +++ b/web/api/app/View/View/Errors/error500.ctp @@ -0,0 +1,28 @@ + +

+

+ : + +

+ 0): + echo $this->element('exception_stack_trace'); +endif; +?> diff --git a/web/api/app/View/View/Events/json/index.ctp b/web/api/app/View/View/Events/json/index.ctp new file mode 100644 index 000000000..d54386749 --- /dev/null +++ b/web/api/app/View/View/Events/json/index.ctp @@ -0,0 +1,5 @@ +Paginator->params(); + echo json_encode($array); +?> diff --git a/web/api/app/View/View/Events/json/view.ctp b/web/api/app/View/View/Events/json/view.ctp new file mode 100644 index 000000000..b320feb4d --- /dev/null +++ b/web/api/app/View/View/Events/json/view.ctp @@ -0,0 +1 @@ +echo json_encode($event); diff --git a/web/api/app/View/View/Events/xml/index.ctp b/web/api/app/View/View/Events/xml/index.ctp new file mode 100644 index 000000000..af960238f --- /dev/null +++ b/web/api/app/View/View/Events/xml/index.ctp @@ -0,0 +1,2 @@ +$xml = Xml::fromArray(array('response' => $events)); +echo $xml->asXML(); diff --git a/web/api/app/View/View/Events/xml/view.ctp b/web/api/app/View/View/Events/xml/view.ctp new file mode 100644 index 000000000..7f64e422f --- /dev/null +++ b/web/api/app/View/View/Events/xml/view.ctp @@ -0,0 +1,2 @@ +$xml = Xml::fromArray(array('response' => $event)); +echo $xml->asXML(); diff --git a/web/api/app/View/View/Helper/AppHelper.php b/web/api/app/View/View/Helper/AppHelper.php new file mode 100644 index 000000000..9097d33f0 --- /dev/null +++ b/web/api/app/View/View/Helper/AppHelper.php @@ -0,0 +1,33 @@ + + + + + <?php echo $title_for_layout; ?> + + + fetch('content'); ?> + +

This email was sent using the CakePHP Framework

+ + \ No newline at end of file diff --git a/web/api/app/View/View/Layouts/Emails/text/default.ctp b/web/api/app/View/View/Layouts/Emails/text/default.ctp new file mode 100644 index 000000000..ee624de45 --- /dev/null +++ b/web/api/app/View/View/Layouts/Emails/text/default.ctp @@ -0,0 +1,21 @@ + +fetch('content'); ?> + +This email was sent using the CakePHP Framework, http://cakephp.org. diff --git a/web/api/app/View/View/Layouts/ajax.ctp b/web/api/app/View/View/Layouts/ajax.ctp new file mode 100644 index 000000000..0f9a4fb62 --- /dev/null +++ b/web/api/app/View/View/Layouts/ajax.ctp @@ -0,0 +1,19 @@ + +fetch('content'); ?> diff --git a/web/api/app/View/View/Layouts/default.ctp b/web/api/app/View/View/Layouts/default.ctp new file mode 100644 index 000000000..38dececbc --- /dev/null +++ b/web/api/app/View/View/Layouts/default.ctp @@ -0,0 +1,65 @@ + + + + + Html->charset(); ?> + + <?php echo $cakeDescription ?>: + <?php echo $title_for_layout; ?> + + Html->meta('icon'); + + echo $this->Html->css('cake.generic'); + + echo $this->fetch('meta'); + echo $this->fetch('css'); + echo $this->fetch('script'); + ?> + + +
+ +
+ + Session->flash(); ?> + + fetch('content'); ?> +
+ +
+ element('sql_dump'); ?> + + diff --git a/web/api/app/View/View/Layouts/error.ctp b/web/api/app/View/View/Layouts/error.ctp new file mode 100644 index 000000000..e9d738178 --- /dev/null +++ b/web/api/app/View/View/Layouts/error.ctp @@ -0,0 +1,61 @@ + + + + + Html->charset(); ?> + + <?php echo $cakeDescription ?>: + <?php echo $title_for_layout; ?> + + Html->meta('icon'); + + echo $this->Html->css('cake.generic'); + + echo $this->fetch('meta'); + echo $this->fetch('css'); + echo $this->fetch('script'); + ?> + + +
+ +
+ + Session->flash(); ?> + + fetch('content'); ?> +
+ +
+ element('sql_dump'); ?> + + diff --git a/web/api/app/View/View/Layouts/flash.ctp b/web/api/app/View/View/Layouts/flash.ctp new file mode 100644 index 000000000..cd79f5008 --- /dev/null +++ b/web/api/app/View/View/Layouts/flash.ctp @@ -0,0 +1,37 @@ + + + + +Html->charset(); ?> +<?php echo $page_title; ?> + + + + + + + +

+ + diff --git a/web/api/app/View/View/Layouts/js/default.ctp b/web/api/app/View/View/Layouts/js/default.ctp new file mode 100644 index 000000000..7239b5dae --- /dev/null +++ b/web/api/app/View/View/Layouts/js/default.ctp @@ -0,0 +1,2 @@ + + diff --git a/web/api/app/View/View/Layouts/rss/default.ctp b/web/api/app/View/View/Layouts/rss/default.ctp new file mode 100644 index 000000000..26d875eda --- /dev/null +++ b/web/api/app/View/View/Layouts/rss/default.ctp @@ -0,0 +1,14 @@ +Rss->document( + $this->Rss->channel( + array(), $channel, $this->fetch('content') + ) +); +?> diff --git a/web/api/app/View/View/Layouts/xml/default.ctp b/web/api/app/View/View/Layouts/xml/default.ctp new file mode 100644 index 000000000..fbd5ee0c3 --- /dev/null +++ b/web/api/app/View/View/Layouts/xml/default.ctp @@ -0,0 +1 @@ +fetch('content'); ?> diff --git a/web/api/app/View/View/Logs/json/index.ctp b/web/api/app/View/View/Logs/json/index.ctp new file mode 100644 index 000000000..32cbd51f8 --- /dev/null +++ b/web/api/app/View/View/Logs/json/index.ctp @@ -0,0 +1,5 @@ +Paginator->params(); + echo json_encode($array); +?> diff --git a/web/api/app/View/View/Monitors/json/edit.ctp b/web/api/app/View/View/Monitors/json/edit.ctp new file mode 100644 index 000000000..77d2dd08b --- /dev/null +++ b/web/api/app/View/View/Monitors/json/edit.ctp @@ -0,0 +1,2 @@ +echo json_encode($message); +echo json_encode($monitor); diff --git a/web/api/app/View/View/Monitors/json/index.ctp b/web/api/app/View/View/Monitors/json/index.ctp new file mode 100644 index 000000000..facf965d4 --- /dev/null +++ b/web/api/app/View/View/Monitors/json/index.ctp @@ -0,0 +1 @@ +echo json_encode($monitors); diff --git a/web/api/app/View/View/Monitors/json/view.ctp b/web/api/app/View/View/Monitors/json/view.ctp new file mode 100644 index 000000000..acfced9d0 --- /dev/null +++ b/web/api/app/View/View/Monitors/json/view.ctp @@ -0,0 +1 @@ +echo json_encode($monitor); diff --git a/web/api/app/View/View/Monitors/xml/edit.ctp b/web/api/app/View/View/Monitors/xml/edit.ctp new file mode 100644 index 000000000..09fb8979a --- /dev/null +++ b/web/api/app/View/View/Monitors/xml/edit.ctp @@ -0,0 +1,2 @@ +$xml = Xml::fromArray(array('response' => $message)); +echo $xml->asXML(); diff --git a/web/api/app/View/View/Monitors/xml/index.ctp b/web/api/app/View/View/Monitors/xml/index.ctp new file mode 100644 index 000000000..37afc918b --- /dev/null +++ b/web/api/app/View/View/Monitors/xml/index.ctp @@ -0,0 +1,2 @@ +$xml = Xml::fromArray(array('response' => $monitors)); +echo $xml->asXML(); diff --git a/web/api/app/View/View/Monitors/xml/view.ctp b/web/api/app/View/View/Monitors/xml/view.ctp new file mode 100644 index 000000000..b33c6e79a --- /dev/null +++ b/web/api/app/View/View/Monitors/xml/view.ctp @@ -0,0 +1,2 @@ +$xml = Xml::fromArray(array('response' => $monitor)); +echo $xml->asXML(); diff --git a/web/api/app/View/View/Pages/home.ctp b/web/api/app/View/View/Pages/home.ctp new file mode 100644 index 000000000..082cc99b0 --- /dev/null +++ b/web/api/app/View/View/Pages/home.ctp @@ -0,0 +1,233 @@ + +

+

+ +

+ 0): + Debugger::checkSecurityKeys(); +endif; +?> + +

+ + 1) Help me configure it + 2) I don't / can't use URL rewriting +

+ +

+=')): + echo ''; + echo __d('cake_dev', 'Your version of PHP is 5.2.8 or higher.'); + echo ''; + else: + echo ''; + echo __d('cake_dev', 'Your version of PHP is too low. You need PHP 5.2.8 or higher to use CakePHP.'); + echo ''; + endif; +?> +

+

+ '; + echo __d('cake_dev', 'Your tmp directory is writable.'); + echo ''; + else: + echo ''; + echo __d('cake_dev', 'Your tmp directory is NOT writable.'); + echo ''; + endif; + ?> +

+

+ '; + echo __d('cake_dev', 'The %s is being used for core caching. To change the config edit %s', ''. $settings['engine'] . 'Engine', 'APP/Config/core.php'); + echo ''; + else: + echo ''; + echo __d('cake_dev', 'Your cache is NOT working. Please check the settings in %s', 'APP/Config/core.php'); + echo ''; + endif; + ?> +

+

+ '; + echo __d('cake_dev', 'Your database configuration file is present.'); + $filePresent = true; + echo ''; + else: + echo ''; + echo __d('cake_dev', 'Your database configuration file is NOT present.'); + echo '
'; + echo __d('cake_dev', 'Rename %s to %s', 'APP/Config/database.php.default', 'APP/Config/database.php'); + echo '
'; + endif; + ?> +

+getMessage(); + if (method_exists($connectionError, 'getAttributes')): + $attributes = $connectionError->getAttributes(); + if (isset($errorMsg['message'])): + $errorMsg .= '
' . $attributes['message']; + endif; + endif; + } +?> +

+ isConnected()): + echo ''; + echo __d('cake_dev', 'CakePHP is able to connect to the database.'); + echo ''; + else: + echo ''; + echo __d('cake_dev', 'CakePHP is NOT able to connect to the database.'); + echo '

'; + echo $errorMsg; + echo '
'; + endif; + ?> +

+ +'; + echo __d('cake_dev', 'PCRE has not been compiled with Unicode support.'); + echo '
'; + echo __d('cake_dev', 'Recompile PCRE with Unicode support by adding --enable-unicode-properties when configuring'); + echo '

'; + endif; +?> + +

+ '; + echo __d('cake_dev', 'DebugKit plugin is present'); + echo ''; + else: + echo ''; + echo __d('cake_dev', 'DebugKit is not installed. It will help you inspect and debug different aspects of your application.'); + echo '
'; + echo __d('cake_dev', 'You can install it from %s', $this->Html->link('GitHub', 'https://github.com/cakephp/debug_kit')); + echo '
'; + endif; + ?> +

+ +

+

+ +To change its layout, edit: %s.
+You can also add some CSS styles for your pages at: %s.', + 'APP/View/Pages/home.ctp', 'APP/View/Layouts/default.ctp', 'APP/webroot/css'); +?> +

+ +

+

+ Html->link( + sprintf('%s %s', __d('cake_dev', 'New'), __d('cake_dev', 'CakePHP 2.0 Docs')), + 'http://book.cakephp.org/2.0/en/', + array('target' => '_blank', 'escape' => false) + ); + ?> +

+

+ Html->link( + __d('cake_dev', 'The 15 min Blog Tutorial'), + 'http://book.cakephp.org/2.0/en/tutorials-and-examples/blog/blog.html', + array('target' => '_blank', 'escape' => false) + ); + ?> +

+ +

+

+

    +
  • + Html->link('DebugKit', 'https://github.com/cakephp/debug_kit') ?>: + +
  • +
  • + Html->link('Localized', 'https://github.com/cakephp/localized') ?>: + +
  • +
+

+ +

+

+ +

+

+ +

+ + diff --git a/web/api/app/View/View/Scaffolds/empty b/web/api/app/View/View/Scaffolds/empty new file mode 100644 index 000000000..e69de29bb diff --git a/web/api/app/vendor/autoload.php b/web/api/app/vendor/autoload.php new file mode 100644 index 000000000..0a2797817 --- /dev/null +++ b/web/api/app/vendor/autoload.php @@ -0,0 +1,7 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0 class loader + * + * See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + */ +class ClassLoader +{ + // PSR-4 + private $prefixLengthsPsr4 = array(); + private $prefixDirsPsr4 = array(); + private $fallbackDirsPsr4 = array(); + + // PSR-0 + private $prefixesPsr0 = array(); + private $fallbackDirsPsr0 = array(); + + private $useIncludePath = false; + private $classMap = array(); + + private $classMapAuthoritative = false; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $this->prefixesPsr0); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-0 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731 + if ('\\' == $class[0]) { + $class = substr($class, 1); + } + + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative) { + return false; + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if ($file === null && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if ($file === null) { + // Remember that this class does not exist. + return $this->classMap[$class] = false; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { + if (0 === strpos($class, $prefix)) { + foreach ($this->prefixDirsPsr4[$prefix] as $dir) { + if (is_file($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/web/api/app/vendor/composer/autoload_classmap.php b/web/api/app/vendor/composer/autoload_classmap.php new file mode 100644 index 000000000..7a91153b0 --- /dev/null +++ b/web/api/app/vendor/composer/autoload_classmap.php @@ -0,0 +1,9 @@ + array($vendorDir . '/composer/installers/src'), +); diff --git a/web/api/app/vendor/composer/autoload_psr4.php b/web/api/app/vendor/composer/autoload_psr4.php new file mode 100644 index 000000000..b265c64a2 --- /dev/null +++ b/web/api/app/vendor/composer/autoload_psr4.php @@ -0,0 +1,9 @@ + $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + + $loader->register(true); + + return $loader; + } +} + +function composerRequiredfd8518a66bb8898e7b22470609a6c8f($file) +{ + require $file; +} diff --git a/web/api/app/vendor/composer/installed.json b/web/api/app/vendor/composer/installed.json new file mode 100644 index 000000000..39d771174 --- /dev/null +++ b/web/api/app/vendor/composer/installed.json @@ -0,0 +1,167 @@ +[ + { + "name": "composer/installers", + "version": "v1.0.21", + "version_normalized": "1.0.21.0", + "source": { + "type": "git", + "url": "https://github.com/composer/installers.git", + "reference": "d64e23fce42a4063d63262b19b8e7c0f3b5e4c45" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/installers/zipball/d64e23fce42a4063d63262b19b8e7c0f3b5e4c45", + "reference": "d64e23fce42a4063d63262b19b8e7c0f3b5e4c45", + "shasum": "" + }, + "replace": { + "roundcube/plugin-installer": "*", + "shama/baton": "*" + }, + "require-dev": { + "composer/composer": "1.0.*@dev", + "phpunit/phpunit": "4.1.*" + }, + "time": "2015-02-18 17:17:01", + "type": "composer-installer", + "extra": { + "class": "Composer\\Installers\\Installer", + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Composer\\Installers\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle Robinson Young", + "email": "kyle@dontkry.com", + "homepage": "https://github.com/shama" + } + ], + "description": "A multi-framework Composer library installer", + "homepage": "http://composer.github.com/installers/", + "keywords": [ + "Craft", + "Dolibarr", + "Hurad", + "MODX Evo", + "OXID", + "SMF", + "Thelia", + "WolfCMS", + "agl", + "aimeos", + "annotatecms", + "bitrix", + "cakephp", + "chef", + "codeigniter", + "concrete5", + "croogo", + "dokuwiki", + "drupal", + "elgg", + "fuelphp", + "grav", + "installer", + "joomla", + "kohana", + "laravel", + "lithium", + "magento", + "mako", + "mediawiki", + "modulework", + "moodle", + "phpbb", + "piwik", + "ppi", + "puppet", + "roundcube", + "shopware", + "silverstripe", + "symfony", + "typo3", + "wordpress", + "zend", + "zikula" + ] + }, + { + "name": "friendsofcake/crud", + "version": "3.0.10", + "version_normalized": "3.0.10.0", + "source": { + "type": "git", + "url": "https://github.com/FriendsOfCake/crud.git", + "reference": "c3976f1478c681b0bbc132ec3a3e82c3984eeed5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FriendsOfCake/crud/zipball/c3976f1478c681b0bbc132ec3a3e82c3984eeed5", + "reference": "c3976f1478c681b0bbc132ec3a3e82c3984eeed5", + "shasum": "" + }, + "require": { + "composer/installers": "*" + }, + "suggest": { + "cakedc/search": "If you want to use the Search Listener" + }, + "time": "2015-04-18 19:08:17", + "type": "cakephp-plugin", + "extra": { + "installer-name": "Crud" + }, + "installation-source": "dist", + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christian Winther", + "homepage": "http://cakephp.nu/", + "role": "Author" + }, + { + "name": "José Lorenzo Rodríguez", + "homepage": "https://github.com/lorenzo", + "role": "Contributor" + }, + { + "name": "Andy Dawson", + "homepage": "https://github.com/ad7six", + "role": "Contributor" + }, + { + "name": "ADmad", + "homepage": "https://github.com/admad", + "role": "Contributor" + } + ], + "description": "CakePHP Application development on steroids - rapid prototyping / scaffolding & production ready code - XML / JSON APIs and more", + "homepage": "https://github.com/FriendsOfCake/crud", + "keywords": [ + "bake", + "cake", + "cakephp", + "create", + "crud", + "delete", + "retrieve", + "scaffold", + "scaffolding", + "update" + ] + } +] diff --git a/web/api/app/vendor/composer/installers/.editorconfig b/web/api/app/vendor/composer/installers/.editorconfig new file mode 100644 index 000000000..153cf3ef5 --- /dev/null +++ b/web/api/app/vendor/composer/installers/.editorconfig @@ -0,0 +1,10 @@ +; top-most EditorConfig file +root = true + +; Unix-style newlines +[*] +end_of_line = LF + +[*.php] +indent_style = space +indent_size = 4 diff --git a/web/api/app/vendor/composer/installers/.gitignore b/web/api/app/vendor/composer/installers/.gitignore new file mode 100644 index 000000000..ff7f293dc --- /dev/null +++ b/web/api/app/vendor/composer/installers/.gitignore @@ -0,0 +1,3 @@ +vendor/ +composer.lock +.idea/ diff --git a/web/api/app/vendor/composer/installers/.travis.yml b/web/api/app/vendor/composer/installers/.travis.yml new file mode 100644 index 000000000..81ca8e101 --- /dev/null +++ b/web/api/app/vendor/composer/installers/.travis.yml @@ -0,0 +1,14 @@ +language: php + +php: + - 5.3 + - 5.4 + - 5.5 + - 5.6 + - hhvm + +before_script: + - curl -s http://getcomposer.org/installer | php -- --quiet + - php composer.phar install --dev + +script: phpunit diff --git a/web/api/app/vendor/composer/installers/LICENSE b/web/api/app/vendor/composer/installers/LICENSE new file mode 100644 index 000000000..85f97fc79 --- /dev/null +++ b/web/api/app/vendor/composer/installers/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2012 Kyle Robinson Young + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/web/api/app/vendor/composer/installers/README.md b/web/api/app/vendor/composer/installers/README.md new file mode 100644 index 000000000..b33177198 --- /dev/null +++ b/web/api/app/vendor/composer/installers/README.md @@ -0,0 +1,191 @@ +# A Multi-Framework [Composer](http://getcomposer.org) Library Installer + +[![Build Status](http://img.shields.io/travis/composer/installers.svg)](http://travis-ci.org/composer/installers) + +This is for PHP package authors to require in their `composer.json`. It will +install their package to the correct location based on the specified package +type. + +The goal of `installers` is to be a simple package type to install path map. +Users can also customize the install path per package and package authors can +modify the package name upon installing. + +`installers` isn't intended on replacing all custom installers. If your +package requires special installation handling then by all means, create a +custom installer to handle it. + +**Natively Supported Frameworks**: + +The following frameworks natively work with Composer and will be +installed to the default `vendor` directory. `composer/installers` +is not needed to install packages with these frameworks: + +* Aura +* Symfony2 +* Yii +* Yii2 + +**Current Supported Package Types**: + +> Stable types are marked as **bold**, this means that installation paths +> for those type will not be changed. Any adjustment for those types would +> require creation of brand new type that will cover required changes. + +| Framework | Types +| --------- | ----- +| Aimeos | `aimeos-extension` +| Asgard | `asgard-module`
`asgard-theme` +| AGL | `agl-module` +| AnnotateCms | `annotatecms-module`
`annotatecms-component`
`annotatecms-service` +| Bitrix | `bitrix-module`
`bitrix-component`
`bitrix-theme` +| CakePHP 2+ | **`cakephp-plugin`** +| Chef | `chef-cookbook`
`chef-role` +| CCFramework | `ccframework-ship`
`ccframework-theme` +| CodeIgniter | `codeigniter-library`
`codeigniter-third-party`
`codeigniter-module` +| concrete5 | `concrete5-block`
`concrete5-package`
`concrete5-theme`
`concrete5-update` +| Craft | `craft-plugin` +| Croogo | `croogo-plugin`
`croogo-theme` +| DokuWiki | `dokuwiki-plugin`
`dokuwiki-template` +| Dolibarr | `dolibarr-module` +| Drupal | `drupal-module`
`drupal-theme`

`drupal-library`
`drupal-profile`
`drupal-drush` +| Elgg | `elgg-plugin` +| FuelPHP v1.x | `fuel-module`
`fuel-package`
`fuel-theme` +| FuelPHP v2.x | `fuelphp-component` +| Grav | `grav-plugin`
`grav-theme` +| Hurad | `hurad-plugin`
`hurad-theme` +| Joomla | `joomla-component`
`joomla-module`
`joomla-template`
`joomla-plugin`
`joomla-library` +| Kirby | **`kirby-plugin`** +| Kohana | **`kohana-module`** +| Laravel | `laravel-library` +| Lithium | **`lithium-library`
`lithium-source`** +| Magento | `magento-library`
`magento-skin`
`magento-theme` +| Mako | `mako-package` +| MODX Evo | `modxevo-snippet`
`modxevo-plugin`
`modxevo-module`
`modxevo-template`
`modxevo-lib` +| MediaWiki | `mediawiki-extension` +| October | **`october-module`
`october-plugin`
`october-theme`** +| OXID | `oxid-module`
`oxid-theme`
`oxid-out` +| MODULEWork | `modulework-module` +| Moodle | `moodle-*` (Please [check source](https://raw.githubusercontent.com/composer/installers/master/src/Composer/Installers/MoodleInstaller.php) for all supported types) +| Piwik | `piwik-plugin` +| phpBB | `phpbb-extension`
`phpbb-style`
`phpbb-language` +| Pimcore | `pimcore-plugin` +| PPI | **`ppi-module`** +| Puppet | `puppet-module` +| REDAXO | `redaxo-addon` +| Roundcube | `roundcube-plugin` +| shopware | `shopware-backend-plugin`
`shopware-core-plugin`
`shopware-frontend-plugin`
`shopware-theme` +| SilverStripe | `silverstripe-module`
`silverstripe-theme` +| SMF | `smf-module`
`smf-theme` +| symfony1 | **`symfony1-plugin`** +| Tusk | `tusk-task`
`tusk-command`
`tusk-asset` +| TYPO3 Flow | `typo3-flow-package`
`typo3-flow-framework`
`typo3-flow-plugin`
`typo3-flow-site`
`typo3-flow-boilerplate`
`typo3-flow-build` +| TYPO3 CMS | `typo3-cms-extension` +| Wolf CMS | `wolfcms-plugin` +| WordPress | `wordpress-plugin`
`wordpress-theme`

`wordpress-muplugin` +| Zend | `zend-library`
`zend-extra`
`zend-module` +| Zikula | `zikula-module`
`zikula-theme` +| Prestashop | `prestashop-module`
`prestashop-theme` + +## Example `composer.json` File + +This is an example for a CakePHP plugin. The only important parts to set in your +composer.json file are `"type": "cakephp-plugin"` which describes what your +package is and `"require": { "composer/installers": "~1.0" }` which tells composer +to load the custom installers. + +```json +{ + "name": "you/ftp", + "type": "cakephp-plugin", + "require": { + "composer/installers": "~1.0" + } +} +``` + +This would install your package to the `Plugin/Ftp/` folder of a CakePHP app +when a user runs `php composer.phar install`. + +So submit your packages to [packagist.org](http://packagist.org)! + +## Custom Install Paths + +If you are consuming a package that uses the `composer/installers` you can +override the install path with the following extra in your `composer.json`: + +```json +{ + "extra": { + "installer-paths": { + "your/custom/path/{$name}/": ["shama/ftp", "vendor/package"] + } + } +} +``` + +A package type can have a custom installation path with a `type:` prefix. + +``` json +{ + "extra": { + "installer-paths": { + "your/custom/path/{$name}/": ["type:wordpress-plugin"] + } + } +} +``` + +This would use your custom path for each of the listed packages. The available +variables to use in your paths are: `{$name}`, `{$vendor}`, `{$type}`. + +## Custom Install Names + +If you're a package author and need your package to be named differently when +installed consider using the `installer-name` extra. + +For example you have a package named `shama/cakephp-ftp` with the type +`cakephp-plugin`. Installing with `composer/installers` would install to the +path `Plugin/CakephpFtp`. Due to the strict naming conventions, you as a +package author actually need the package to be named and installed to +`Plugin/Ftp`. Using the following config within your **package** `composer.json` +will allow this: + +```json +{ + "name": "shama/cakephp-ftp", + "type": "cakephp-plugin", + "extra": { + "installer-name": "Ftp" + } +} +``` + +Please note the name entered into `installer-name` will be the final and will +not be inflected. + +## Contribute! + +* [Fork and clone](https://help.github.com/articles/fork-a-repo). +* Run the command `php composer.phar install --dev` to install the dev + dependencies. See [Composer](https://github.com/composer/composer#installation--usage). +* Use the command `phpunit` to run the tests. See [PHPUnit](http://phpunit.de). +* Create a branch, commit, push and send us a + [pull request](https://help.github.com/articles/using-pull-requests). + +To ensure a consistent code base, you should make sure the code follows the +[Coding Standards](http://symfony.com/doc/2.0/contributing/code/standards.html) +which we borrowed from Symfony. + +If you would like to help, please take a look at the list of +[issues](https://github.com/composer/installers/issues). + +### Should we allow dynamic package types or paths? No. +What are they? The ability for a package author to determine where a package +will be installed either through setting the path directly in their +`composer.json` or through a dynamic package type: `"type": +"framework-install-here"`. + +It has been proposed many times. Even implemented once early on and then +removed. `installers` won't do this because it would allow a single package +author to wipe out entire folders without the user's consent. That user would +then come here to yell at us. diff --git a/web/api/app/vendor/composer/installers/composer.json b/web/api/app/vendor/composer/installers/composer.json new file mode 100644 index 000000000..6ee931ee9 --- /dev/null +++ b/web/api/app/vendor/composer/installers/composer.json @@ -0,0 +1,77 @@ +{ + "name": "composer/installers", + "type": "composer-installer", + "license": "MIT", + "description": "A multi-framework Composer library installer", + "keywords": [ + "installer", + "Aimeos", + "AGL", + "AnnotateCms", + "Bitrix", + "CakePHP", + "Chef", + "CodeIgniter", + "concrete5", + "Craft", + "Croogo", + "DokuWiki", + "Dolibarr", + "Drupal", + "Elgg", + "FuelPHP", + "Grav", + "Hurad", + "Joomla", + "Kohana", + "Laravel", + "Lithium", + "Magento", + "Mako", + "MODX Evo", + "MediaWiki", + "OXID", + "MODULEWork", + "Moodle", + "Piwik", + "phpBB", + "PPI", + "Puppet", + "Roundcube", + "shopware", + "SilverStripe", + "SMF", + "symfony", + "Thelia", + "TYPO3", + "WolfCMS", + "WordPress", + "Zend", + "Zikula" + ], + "homepage": "http://composer.github.com/installers/", + "authors": [ + { + "name": "Kyle Robinson Young", + "email": "kyle@dontkry.com", + "homepage": "https://github.com/shama" + } + ], + "autoload": { + "psr-0": { "Composer\\Installers\\": "src/" } + }, + "extra": { + "class": "Composer\\Installers\\Installer", + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "replace": { + "shama/baton": "*", + "roundcube/plugin-installer": "*" + }, + "require-dev": { + "composer/composer": "1.0.*@dev", + "phpunit/phpunit": "4.1.*" + } +} diff --git a/web/api/app/vendor/composer/installers/phpunit.xml.dist b/web/api/app/vendor/composer/installers/phpunit.xml.dist new file mode 100644 index 000000000..cc5cc9915 --- /dev/null +++ b/web/api/app/vendor/composer/installers/phpunit.xml.dist @@ -0,0 +1,25 @@ + + + + + + tests/Composer/Installers + + + + + + src/Composer/Installers + + + \ No newline at end of file diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/AglInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/AglInstaller.php new file mode 100644 index 000000000..01b8a4165 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/AglInstaller.php @@ -0,0 +1,21 @@ + 'More/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + $vars['name'] = preg_replace_callback('/(?:^|_|-)(.?)/', function ($matches) { + return strtoupper($matches[1]); + }, $vars['name']); + + return $vars; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php new file mode 100644 index 000000000..79a0e958f --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php @@ -0,0 +1,9 @@ + 'ext/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php new file mode 100644 index 000000000..89d7ad905 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php @@ -0,0 +1,11 @@ + 'addons/modules/{$name}/', + 'component' => 'addons/components/{$name}/', + 'service' => 'addons/services/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php new file mode 100644 index 000000000..995ee2b49 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php @@ -0,0 +1,45 @@ + 'Modules/{$name}/', + 'theme' => 'Themes/{$name}/' + ); + + /** + * Format package name. + * + * For package type asgard-module, cut off a trailing '-plugin' if present. + * + * For package type asgard-theme, cut off a trailing '-theme' if present. + * + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] === 'asgard-module') { + return $this->inflectPluginVars($vars); + } + + if ($vars['type'] === 'asgard-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + protected function inflectPluginVars($vars) + { + $vars['name'] = ucfirst(preg_replace('/-module/', '', $vars['name'])); + + return $vars; + } + + protected function inflectThemeVars($vars) + { + $vars['name'] = ucfirst(preg_replace('/-theme$/', '', $vars['name'])); + + return $vars; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php new file mode 100644 index 000000000..cc27d3e28 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php @@ -0,0 +1,131 @@ +composer = $composer; + $this->package = $package; + } + + /** + * Return the install path based on package type. + * + * @param PackageInterface $package + * @param string $frameworkType + * @return string + */ + public function getInstallPath(PackageInterface $package, $frameworkType = '') + { + $type = $this->package->getType(); + + $prettyName = $this->package->getPrettyName(); + if (strpos($prettyName, '/') !== false) { + list($vendor, $name) = explode('/', $prettyName); + } else { + $vendor = ''; + $name = $prettyName; + } + + $availableVars = $this->inflectPackageVars(compact('name', 'vendor', 'type')); + + $extra = $package->getExtra(); + if (!empty($extra['installer-name'])) { + $availableVars['name'] = $extra['installer-name']; + } + + if ($this->composer->getPackage()) { + $extra = $this->composer->getPackage()->getExtra(); + if (!empty($extra['installer-paths'])) { + $customPath = $this->mapCustomInstallPaths($extra['installer-paths'], $prettyName, $type); + if ($customPath !== false) { + return $this->templatePath($customPath, $availableVars); + } + } + } + + $packageType = substr($type, strlen($frameworkType) + 1); + $locations = $this->getLocations(); + if (!isset($locations[$packageType])) { + throw new \InvalidArgumentException(sprintf('Package type "%s" is not supported', $type)); + } + + return $this->templatePath($locations[$packageType], $availableVars); + } + + /** + * For an installer to override to modify the vars per installer. + * + * @param array $vars + * @return array + */ + public function inflectPackageVars($vars) + { + return $vars; + } + + /** + * Gets the installer's locations + * + * @return array + */ + public function getLocations() + { + return $this->locations; + } + + /** + * Replace vars in a path + * + * @param string $path + * @param array $vars + * @return string + */ + protected function templatePath($path, array $vars = array()) + { + if (strpos($path, '{') !== false) { + extract($vars); + preg_match_all('@\{\$([A-Za-z0-9_]*)\}@i', $path, $matches); + if (!empty($matches[1])) { + foreach ($matches[1] as $var) { + $path = str_replace('{$' . $var . '}', $$var, $path); + } + } + } + + return $path; + } + + /** + * Search through a passed paths array for a custom install path. + * + * @param array $paths + * @param string $name + * @param string $type + * @return string + */ + protected function mapCustomInstallPaths(array $paths, $name, $type) + { + foreach ($paths as $path => $names) { + if (in_array($name, $names) || in_array('type:' . $type, $names)) { + return $path; + } + } + + return false; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php new file mode 100644 index 000000000..48a8367ab --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php @@ -0,0 +1,11 @@ + 'local/modules/{$name}/', + 'component' => 'local/components/{$name}/', + 'theme' => 'local/templates/{$name}/' + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php new file mode 100644 index 000000000..cbeb60b80 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php @@ -0,0 +1,78 @@ + 'Plugin/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + if ($this->matchesCakeVersion('>=', '3.0.0')) { + return $vars; + } + + $nameParts = explode('/', $vars['name']); + foreach ($nameParts as &$value) { + $value = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $value)); + $value = str_replace(array('-', '_'), ' ', $value); + $value = str_replace(' ', '', ucwords($value)); + } + $vars['name'] = implode('/', $nameParts); + + return $vars; + } + + /** + * Change the default plugin location when cakephp >= 3.0 + */ + public function getLocations() + { + if ($this->matchesCakeVersion('>=', '3.0.0')) { + $this->locations['plugin'] = $this->composer->getConfig()->get('vendor-dir') . '/{$vendor}/{$name}/'; + } + return $this->locations; + } + + /** + * Check if CakePHP version matches against a version + * + * @param string $matcher + * @param string $version + * @return bool + */ + protected function matchesCakeVersion($matcher, $version) + { + $repositoryManager = $this->composer->getRepositoryManager(); + if ($repositoryManager) { + $repos = $repositoryManager->getLocalRepository(); + if (!$repos) { + return false; + } + $cake3 = new MultiConstraint(array( + new VersionConstraint($matcher, $version), + new VersionConstraint('!=', '9999999-dev'), + )); + $pool = new Pool('dev'); + $pool->addRepository($repos); + $packages = $pool->whatProvides('cakephp/cakephp'); + foreach ($packages as $package) { + $installed = new VersionConstraint('=', $package->getVersion()); + if ($cake3->matches($installed)) { + return true; + break; + } + } + } + return false; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php new file mode 100644 index 000000000..ab2f9aad8 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php @@ -0,0 +1,11 @@ + 'Chef/{$vendor}/{$name}/', + 'role' => 'Chef/roles/{$name}/', + ); +} + diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php new file mode 100644 index 000000000..c887815c9 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php @@ -0,0 +1,10 @@ + 'CCF/orbit/{$name}/', + 'theme' => 'CCF/app/themes/{$name}/', + ); +} \ No newline at end of file diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php new file mode 100644 index 000000000..3b4a4ece1 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php @@ -0,0 +1,11 @@ + 'application/libraries/{$name}/', + 'third-party' => 'application/third_party/{$name}/', + 'module' => 'application/modules/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php new file mode 100644 index 000000000..4d398a445 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php @@ -0,0 +1,12 @@ + 'blocks/{$name}/', + 'package' => 'packages/{$name}/', + 'theme' => 'themes/{$name}/', + 'update' => 'updates/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php new file mode 100644 index 000000000..dc3be8d1a --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php @@ -0,0 +1,9 @@ + 'craft/plugins/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php new file mode 100644 index 000000000..d94219d3a --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php @@ -0,0 +1,21 @@ + 'Plugin/{$name}/', + 'theme' => 'View/Themed/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + $vars['name'] = strtolower(str_replace(array('-', '_'), ' ', $vars['name'])); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php new file mode 100644 index 000000000..cfd638d5f --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php @@ -0,0 +1,50 @@ + 'lib/plugins/{$name}/', + 'template' => 'lib/tpl/{$name}/', + ); + + /** + * Format package name. + * + * For package type dokuwiki-plugin, cut off a trailing '-plugin', + * or leading dokuwiki_ if present. + * + * For package type dokuwiki-template, cut off a trailing '-template' if present. + * + */ + public function inflectPackageVars($vars) + { + + if ($vars['type'] === 'dokuwiki-plugin') { + return $this->inflectPluginVars($vars); + } + + if ($vars['type'] === 'dokuwiki-template') { + return $this->inflectTemplateVars($vars); + } + + return $vars; + } + + protected function inflectPluginVars($vars) + { + $vars['name'] = preg_replace('/-plugin$/', '', $vars['name']); + $vars['name'] = preg_replace('/^dokuwiki_?-?/', '', $vars['name']); + + return $vars; + } + + protected function inflectTemplateVars($vars) + { + $vars['name'] = preg_replace('/-template$/', '', $vars['name']); + $vars['name'] = preg_replace('/^dokuwiki_?-?/', '', $vars['name']); + + return $vars; + } + +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php new file mode 100644 index 000000000..21f7e8e80 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php @@ -0,0 +1,16 @@ + + */ +class DolibarrInstaller extends BaseInstaller +{ + //TODO: Add support for scripts and themes + protected $locations = array( + 'module' => 'htdocs/custom/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php new file mode 100644 index 000000000..179413145 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php @@ -0,0 +1,14 @@ + 'core/', + 'module' => 'modules/{$name}/', + 'theme' => 'themes/{$name}/', + 'library' => 'libraries/{$name}/', + 'profile' => 'profiles/{$name}/', + 'drush' => 'drush/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php new file mode 100644 index 000000000..c0bb609f4 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php @@ -0,0 +1,9 @@ + 'mod/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php new file mode 100644 index 000000000..6eba2e34f --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php @@ -0,0 +1,11 @@ + 'fuel/app/modules/{$name}/', + 'package' => 'fuel/packages/{$name}/', + 'theme' => 'fuel/app/themes/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php new file mode 100644 index 000000000..29d980b30 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php @@ -0,0 +1,9 @@ + 'components/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/GravInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/GravInstaller.php new file mode 100644 index 000000000..dbe63e07e --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/GravInstaller.php @@ -0,0 +1,30 @@ + 'user/plugins/{$name}/', + 'theme' => 'user/themes/{$name}/', + ); + + /** + * Format package name + * + * @param array $vars + * + * @return array + */ + public function inflectPackageVars($vars) + { + $restrictedWords = implode('|', array_keys($this->locations)); + + $vars['name'] = strtolower($vars['name']); + $vars['name'] = preg_replace('/^(?:grav-)?(?:(?:'.$restrictedWords.')-)?(.*?)(?:-(?:'.$restrictedWords.'))?$/ui', + '$1', + $vars['name'] + ); + + return $vars; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php new file mode 100644 index 000000000..8fe017f0f --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php @@ -0,0 +1,25 @@ + 'plugins/{$name}/', + 'theme' => 'plugins/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + $nameParts = explode('/', $vars['name']); + foreach ($nameParts as &$value) { + $value = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $value)); + $value = str_replace(array('-', '_'), ' ', $value); + $value = str_replace(' ', '', ucwords($value)); + } + $vars['name'] = implode('/', $nameParts); + return $vars; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/Installer.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/Installer.php new file mode 100644 index 000000000..63ba64ce3 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/Installer.php @@ -0,0 +1,163 @@ + 'AimeosInstaller', + 'asgard' => 'AsgardInstaller', + 'agl' => 'AglInstaller', + 'annotatecms' => 'AnnotateCmsInstaller', + 'bitrix' => 'BitrixInstaller', + 'cakephp' => 'CakePHPInstaller', + 'chef' => 'ChefInstaller', + 'ccframework' => 'ClanCatsFrameworkInstaller', + 'codeigniter' => 'CodeIgniterInstaller', + 'concrete5' => 'Concrete5Installer', + 'craft' => 'CraftInstaller', + 'croogo' => 'CroogoInstaller', + 'dokuwiki' => 'DokuWikiInstaller', + 'dolibarr' => 'DolibarrInstaller', + 'drupal' => 'DrupalInstaller', + 'elgg' => 'ElggInstaller', + 'fuel' => 'FuelInstaller', + 'fuelphp' => 'FuelphpInstaller', + 'grav' => 'GravInstaller', + 'hurad' => 'HuradInstaller', + 'joomla' => 'JoomlaInstaller', + 'kirby' => 'KirbyInstaller', + 'kohana' => 'KohanaInstaller', + 'laravel' => 'LaravelInstaller', + 'lithium' => 'LithiumInstaller', + 'magento' => 'MagentoInstaller', + 'mako' => 'MakoInstaller', + 'mediawiki' => 'MediaWikiInstaller', + 'microweber' => 'MicroweberInstaller', + 'modulework' => 'MODULEWorkInstaller', + 'modxevo' => 'MODXEvoInstaller', + 'moodle' => 'MoodleInstaller', + 'october' => 'OctoberInstaller', + 'oxid' => 'OxidInstaller', + 'phpbb' => 'PhpBBInstaller', + 'pimcore' => 'PimcoreInstaller', + 'piwik' => 'PiwikInstaller', + 'ppi' => 'PPIInstaller', + 'puppet' => 'PuppetInstaller', + 'redaxo' => 'RedaxoInstaller', + 'roundcube' => 'RoundcubeInstaller', + 'shopware' => 'ShopwareInstaller', + 'silverstripe' => 'SilverStripeInstaller', + 'smf' => 'SMFInstaller', + 'symfony1' => 'Symfony1Installer', + 'thelia' => 'TheliaInstaller', + 'tusk' => 'TuskInstaller', + 'typo3-cms' => 'TYPO3CmsInstaller', + 'typo3-flow' => 'TYPO3FlowInstaller', + 'whmcs' => 'WHMCSInstaller', + 'wolfcms' => 'WolfCMSInstaller', + 'wordpress' => 'WordPressInstaller', + 'zend' => 'ZendInstaller', + 'zikula' => 'ZikulaInstaller', + 'prestashop' => 'PrestashopInstaller', + ); + + /** + * {@inheritDoc} + */ + public function getInstallPath(PackageInterface $package) + { + $type = $package->getType(); + $frameworkType = $this->findFrameworkType($type); + + if ($frameworkType === false) { + throw new \InvalidArgumentException( + 'Sorry the package type of this package is not yet supported.' + ); + } + + $class = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType]; + $installer = new $class($package, $this->composer); + + return $installer->getInstallPath($package, $frameworkType); + } + + public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package) + { + if (!$repo->hasPackage($package)) { + throw new \InvalidArgumentException('Package is not installed: '.$package); + } + + $repo->removePackage($package); + + $installPath = $this->getInstallPath($package); + $this->io->write(sprintf('Deleting %s - %s', $installPath, $this->filesystem->removeDirectory($installPath) ? 'deleted' : 'not deleted')); + } + + /** + * {@inheritDoc} + */ + public function supports($packageType) + { + $frameworkType = $this->findFrameworkType($packageType); + + if ($frameworkType === false) { + return false; + } + + $locationPattern = $this->getLocationPattern($frameworkType); + + return preg_match('#' . $frameworkType . '-' . $locationPattern . '#', $packageType, $matches) === 1; + } + + /** + * Finds a supported framework type if it exists and returns it + * + * @param string $type + * @return string + */ + protected function findFrameworkType($type) + { + $frameworkType = false; + + krsort($this->supportedTypes); + + foreach ($this->supportedTypes as $key => $val) { + if ($key === substr($type, 0, strlen($key))) { + $frameworkType = substr($type, 0, strlen($key)); + break; + } + } + + return $frameworkType; + } + + /** + * Get the second part of the regular expression to check for support of a + * package type + * + * @param string $frameworkType + * @return string + */ + protected function getLocationPattern($frameworkType) + { + $pattern = false; + if (!empty($this->supportedTypes[$frameworkType])) { + $frameworkClass = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType]; + /** @var BaseInstaller $framework */ + $framework = new $frameworkClass(null, $this->composer); + $locations = array_keys($framework->getLocations()); + $pattern = $locations ? '(' . implode('|', $locations) . ')' : false; + } + + return $pattern ? : '(\w+)'; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php new file mode 100644 index 000000000..9ee775965 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php @@ -0,0 +1,15 @@ + 'components/{$name}/', + 'module' => 'modules/{$name}/', + 'template' => 'templates/{$name}/', + 'plugin' => 'plugins/{$name}/', + 'library' => 'libraries/{$name}/', + ); + + // TODO: Add inflector for mod_ and com_ names +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php new file mode 100644 index 000000000..ae7ba8a4b --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php @@ -0,0 +1,9 @@ + 'site/plugins/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php new file mode 100644 index 000000000..dcd6d2632 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php @@ -0,0 +1,9 @@ + 'modules/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php new file mode 100644 index 000000000..be4d53a7b --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php @@ -0,0 +1,9 @@ + 'libraries/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php new file mode 100644 index 000000000..47bbd4cab --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php @@ -0,0 +1,10 @@ + 'libraries/{$name}/', + 'source' => 'libraries/_source/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php new file mode 100644 index 000000000..9c2e9fb40 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php @@ -0,0 +1,9 @@ + 'modules/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php new file mode 100644 index 000000000..5a664608d --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php @@ -0,0 +1,16 @@ + 'assets/snippets/{$name}/', + 'plugin' => 'assets/plugins/{$name}/', + 'module' => 'assets/modules/{$name}/', + 'template' => 'assets/templates/{$name}/', + 'lib' => 'assets/lib/{$name}/' + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php new file mode 100644 index 000000000..cf18e9478 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php @@ -0,0 +1,11 @@ + 'app/design/frontend/{$name}/', + 'skin' => 'skin/frontend/default/{$name}/', + 'library' => 'lib/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php new file mode 100644 index 000000000..ca3cfacb4 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php @@ -0,0 +1,9 @@ + 'app/packages/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php new file mode 100644 index 000000000..01008c638 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php @@ -0,0 +1,50 @@ + 'extensions/{$name}/', + 'skin' => 'skins/{$name}/', + ); + + /** + * Format package name. + * + * For package type mediawiki-extension, cut off a trailing '-extension' if present and transform + * to CamelCase keeping existing uppercase chars. + * + * For package type mediawiki-skin, cut off a trailing '-skin' if present. + * + */ + public function inflectPackageVars($vars) + { + + if ($vars['type'] === 'mediawiki-extension') { + return $this->inflectExtensionVars($vars); + } + + if ($vars['type'] === 'mediawiki-skin') { + return $this->inflectSkinVars($vars); + } + + return $vars; + } + + protected function inflectExtensionVars($vars) + { + $vars['name'] = preg_replace('/-extension$/', '', $vars['name']); + $vars['name'] = str_replace('-', ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } + + protected function inflectSkinVars($vars) + { + $vars['name'] = preg_replace('/-skin$/', '', $vars['name']); + + return $vars; + } + +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php new file mode 100644 index 000000000..4bbbec8c0 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php @@ -0,0 +1,111 @@ + 'userfiles/modules/{$name}/', + 'module-skin' => 'userfiles/modules/{$name}/templates/', + 'template' => 'userfiles/templates/{$name}/', + 'element' => 'userfiles/elements/{$name}/', + 'vendor' => 'vendor/{$name}/', + 'components' => 'components/{$name}/' + ); + + /** + * Format package name. + * + * For package type microweber-module, cut off a trailing '-module' if present + * + * For package type microweber-template, cut off a trailing '-template' if present. + * + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] === 'microweber-template') { + return $this->inflectTemplateVars($vars); + } + if ($vars['type'] === 'microweber-templates') { + return $this->inflectTemplatesVars($vars); + } + if ($vars['type'] === 'microweber-core') { + return $this->inflectCoreVars($vars); + } + if ($vars['type'] === 'microweber-adapter') { + return $this->inflectCoreVars($vars); + } + if ($vars['type'] === 'microweber-module') { + return $this->inflectModuleVars($vars); + } + if ($vars['type'] === 'microweber-modules') { + return $this->inflectModulesVars($vars); + } + if ($vars['type'] === 'microweber-skin') { + return $this->inflectSkinVars($vars); + } + if ($vars['type'] === 'microweber-element' or $vars['type'] === 'microweber-elements') { + return $this->inflectElementVars($vars); + } + + return $vars; + } + + protected function inflectTemplateVars($vars) + { + $vars['name'] = preg_replace('/-template$/', '', $vars['name']); + $vars['name'] = preg_replace('/template-$/', '', $vars['name']); + + return $vars; + } + + protected function inflectTemplatesVars($vars) + { + $vars['name'] = preg_replace('/-templates$/', '', $vars['name']); + $vars['name'] = preg_replace('/templates-$/', '', $vars['name']); + + return $vars; + } + + protected function inflectCoreVars($vars) + { + $vars['name'] = preg_replace('/-providers$/', '', $vars['name']); + $vars['name'] = preg_replace('/-provider$/', '', $vars['name']); + $vars['name'] = preg_replace('/-adapter$/', '', $vars['name']); + + return $vars; + } + + protected function inflectModuleVars($vars) + { + $vars['name'] = preg_replace('/-module$/', '', $vars['name']); + $vars['name'] = preg_replace('/module-$/', '', $vars['name']); + + return $vars; + } + + protected function inflectModulesVars($vars) + { + $vars['name'] = preg_replace('/-modules$/', '', $vars['name']); + $vars['name'] = preg_replace('/modules-$/', '', $vars['name']); + + return $vars; + } + + protected function inflectSkinVars($vars) + { + $vars['name'] = preg_replace('/-skin$/', '', $vars['name']); + $vars['name'] = preg_replace('/skin-$/', '', $vars['name']); + + return $vars; + } + + protected function inflectElementVars($vars) + { + $vars['name'] = preg_replace('/-elements$/', '', $vars['name']); + $vars['name'] = preg_replace('/elements-$/', '', $vars['name']); + $vars['name'] = preg_replace('/-element$/', '', $vars['name']); + $vars['name'] = preg_replace('/element-$/', '', $vars['name']); + + return $vars; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php new file mode 100644 index 000000000..04be73c2a --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php @@ -0,0 +1,47 @@ + 'mod/{$name}/', + 'admin_report' => 'admin/report/{$name}/', + 'tool' => 'admin/tool/{$name}/', + 'assignment' => 'mod/assignment/type/{$name}/', + 'assignsubmission' => 'mod/assign/submission/{$name}/', + 'assignfeedback' => 'mod/assign/feedback/{$name}/', + 'auth' => 'auth/{$name}/', + 'availability' => 'availability/condition/{$name}/', + 'block' => 'blocks/{$name}/', + 'calendartype' => 'calendar/type/{$name}/', + 'format' => 'course/format/{$name}/', + 'coursereport' => 'course/report/{$name}/', + 'datafield' => 'mod/data/field/{$name}/', + 'datapreset' => 'mod/data/preset/{$name}/', + 'editor' => 'lib/editor/{$name}/', + 'enrol' => 'enrol/{$name}/', + 'filter' => 'filter/{$name}/', + 'gradeexport' => 'grade/export/{$name}/', + 'gradeimport' => 'grade/import/{$name}/', + 'gradereport' => 'grade/report/{$name}/', + 'gradingform' => 'grade/grading/form/{$name}/', + 'local' => 'local/{$name}/', + 'message' => 'message/output/{$name}/', + 'plagiarism' => 'plagiarism/{$name}/', + 'portfolio' => 'portfolio/{$name}/', + 'qbehaviour' => 'question/behaviour/{$name}/', + 'qformat' => 'question/format/{$name}/', + 'qtype' => 'question/type/{$name}/', + 'quizaccess' => 'mod/quiz/accessrule/{$name}/', + 'quiz' => 'mod/quiz/report/{$name}/', + 'report' => 'report/{$name}/', + 'repository' => 'repository/{$name}/', + 'scormreport' => 'mod/scorm/report/{$name}/', + 'theme' => 'theme/{$name}/', + 'profilefield' => 'user/profile/field/{$name}/', + 'webservice' => 'webservice/{$name}/', + 'workshopallocation' => 'mod/workshop/allocation/{$name}/', + 'workshopeval' => 'mod/workshop/eval/{$name}/', + 'workshopform' => 'mod/workshop/form/{$name}/' + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php new file mode 100644 index 000000000..6bf53fd14 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php @@ -0,0 +1,46 @@ + 'modules/{$name}/', + 'plugin' => 'plugins/{$vendor}/{$name}/', + 'theme' => 'themes/{$name}/' + ); + + /** + * Format package name. + * + * For package type october-plugin, cut off a trailing '-plugin' if present. + * + * For package type october-theme, cut off a trailing '-theme' if present. + * + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] === 'october-plugin') { + return $this->inflectPluginVars($vars); + } + + if ($vars['type'] === 'october-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + protected function inflectPluginVars($vars) + { + $vars['name'] = preg_replace('/-plugin$/', '', $vars['name']); + + return $vars; + } + + protected function inflectThemeVars($vars) + { + $vars['name'] = preg_replace('/-theme$/', '', $vars['name']); + + return $vars; + } +} \ No newline at end of file diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php new file mode 100644 index 000000000..22fb56aa1 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php @@ -0,0 +1,11 @@ + 'modules/{$name}/', + 'theme' => 'application/views/{$name}/', + 'out' => 'out/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php new file mode 100644 index 000000000..170136f98 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php @@ -0,0 +1,9 @@ + 'modules/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php new file mode 100644 index 000000000..deb2b77a6 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php @@ -0,0 +1,11 @@ + 'ext/{$vendor}/{$name}/', + 'language' => 'language/{$name}/', + 'style' => 'styles/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php new file mode 100644 index 000000000..4781fa6d1 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php @@ -0,0 +1,21 @@ + 'plugins/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + $vars['name'] = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php new file mode 100644 index 000000000..c17f4572b --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php @@ -0,0 +1,32 @@ + 'plugins/{$name}/', + ); + + /** + * Format package name to CamelCase + * @param array $vars + * + * @return array + */ + public function inflectPackageVars($vars) + { + $vars['name'] = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php new file mode 100644 index 000000000..4c8421e36 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php @@ -0,0 +1,10 @@ + 'modules/{$name}/', + 'theme' => 'themes/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php new file mode 100644 index 000000000..77cc3dd87 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php @@ -0,0 +1,11 @@ + 'modules/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php new file mode 100644 index 000000000..09544576b --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php @@ -0,0 +1,10 @@ + 'redaxo/include/addons/{$name}/', + 'bestyle-plugin' => 'redaxo/include/addons/be_style/plugins/{$name}/' + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php new file mode 100644 index 000000000..d8d795be0 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php @@ -0,0 +1,22 @@ + 'plugins/{$name}/', + ); + + /** + * Lowercase name and changes the name to a underscores + * + * @param array $vars + * @return array + */ + public function inflectPackageVars($vars) + { + $vars['name'] = strtolower(str_replace('-', '_', $vars['name'])); + + return $vars; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php new file mode 100644 index 000000000..1acd3b14c --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php @@ -0,0 +1,10 @@ + 'Sources/{$name}/', + 'theme' => 'Themes/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php new file mode 100644 index 000000000..673f1fc1f --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php @@ -0,0 +1,58 @@ + 'engine/Shopware/Plugins/Local/Backend/{$name}/', + 'core-plugin' => 'engine/Shopware/Plugins/Local/Core/{$name}/', + 'frontend-plugin' => 'engine/Shopware/Plugins/Local/Frontend/{$name}/', + 'theme' => 'templates/{$name}/' + ); + + /** + * Transforms the names + * @param array $vars + * @return array + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] === 'shopware-theme') { + return $this->correctThemeName($vars); + } else { + return $this->correctPluginName($vars); + } + } + + /** + * Changes the name to a camelcased combination of vendor and name + * @param array $vars + * @return array + */ + private function correctPluginName($vars) + { + $camelCasedName = preg_replace_callback('/(-[a-z])/', function ($matches) { + return strtoupper($matches[0][1]); + }, $vars['name']); + + $vars['name'] = ucfirst($vars['vendor']) . ucfirst($camelCasedName); + + return $vars; + } + + /** + * Changes the name to a underscore separated name + * @param array $vars + * @return array + */ + private function correctThemeName($vars) + { + $vars['name'] = str_replace('-', '_', $vars['name']); + + return $vars; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php new file mode 100644 index 000000000..17ca543a2 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php @@ -0,0 +1,36 @@ + '{$name}/', + 'theme' => 'themes/{$name}/', + ); + + /** + * Return the install path based on package type. + * + * Relies on built-in BaseInstaller behaviour with one exception: silverstripe/framework + * must be installed to 'sapphire' and not 'framework' if the version is <3.0.0 + * + * @param PackageInterface $package + * @param string $frameworkType + * @return string + */ + public function getInstallPath(PackageInterface $package, $frameworkType = '') + { + if ( + $package->getName() == 'silverstripe/framework' + && preg_match('/^\d+\.\d+\.\d+/', $package->getVersion()) + && version_compare($package->getVersion(), '2.999.999') < 0 + ) { + return $this->templatePath($this->locations['module'], array('name' => 'sapphire')); + } else { + return parent::getInstallPath($package, $frameworkType); + } + + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php new file mode 100644 index 000000000..1675c4f21 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php @@ -0,0 +1,26 @@ + + */ +class Symfony1Installer extends BaseInstaller +{ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + $vars['name'] = preg_replace_callback('/(-[a-z])/', function ($matches) { + return strtoupper($matches[0][1]); + }, $vars['name']); + + return $vars; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php new file mode 100644 index 000000000..8220b40df --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php @@ -0,0 +1,14 @@ + + */ +class TYPO3CmsInstaller extends BaseInstaller +{ + protected $locations = array( + 'extension' => 'typo3conf/ext/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php new file mode 100644 index 000000000..42572f44f --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php @@ -0,0 +1,38 @@ + 'Packages/Application/{$name}/', + 'framework' => 'Packages/Framework/{$name}/', + 'plugin' => 'Packages/Plugins/{$name}/', + 'site' => 'Packages/Sites/{$name}/', + 'boilerplate' => 'Packages/Boilerplates/{$name}/', + 'build' => 'Build/{$name}/', + ); + + /** + * Modify the package name to be a TYPO3 Flow style key. + * + * @param array $vars + * @return array + */ + public function inflectPackageVars($vars) + { + $autoload = $this->package->getAutoload(); + if (isset($autoload['psr-0']) && is_array($autoload['psr-0'])) { + $namespace = key($autoload['psr-0']); + $vars['name'] = str_replace('\\', '.', $namespace); + } + if (isset($autoload['psr-4']) && is_array($autoload['psr-4'])) { + $namespace = key($autoload['psr-4']); + $vars['name'] = rtrim(str_replace('\\', '.', $namespace), '.'); + } + + return $vars; + } +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php new file mode 100644 index 000000000..158af5261 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php @@ -0,0 +1,12 @@ + 'local/modules/{$name}/', + 'frontoffice-template' => 'templates/frontOffice/{$name}/', + 'backoffice-template' => 'templates/backOffice/{$name}/', + 'email-template' => 'templates/email/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php new file mode 100644 index 000000000..7c0113b85 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php @@ -0,0 +1,14 @@ + + */ + class TuskInstaller extends BaseInstaller + { + protected $locations = array( + 'task' => '.tusk/tasks/{$name}/', + 'command' => '.tusk/commands/{$name}/', + 'asset' => 'assets/tusk/{$name}/', + ); + } diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php new file mode 100644 index 000000000..2cbb4a463 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php @@ -0,0 +1,10 @@ + 'modules/gateways/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php new file mode 100644 index 000000000..cb387881d --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php @@ -0,0 +1,9 @@ + 'wolf/plugins/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php new file mode 100644 index 000000000..b03219c69 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php @@ -0,0 +1,11 @@ + 'wp-content/plugins/{$name}/', + 'theme' => 'wp-content/themes/{$name}/', + 'muplugin' => 'wp-content/mu-plugins/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php new file mode 100644 index 000000000..bde9bc8c8 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php @@ -0,0 +1,11 @@ + 'library/{$name}/', + 'extra' => 'extras/library/{$name}/', + 'module' => 'module/{$name}/', + ); +} diff --git a/web/api/app/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php b/web/api/app/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php new file mode 100644 index 000000000..56cdf5da7 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php @@ -0,0 +1,10 @@ + 'modules/{$vendor}-{$name}/', + 'theme' => 'themes/{$vendor}-{$name}/' + ); +} diff --git a/web/api/app/vendor/composer/installers/src/bootstrap.php b/web/api/app/vendor/composer/installers/src/bootstrap.php new file mode 100644 index 000000000..0de276ee2 --- /dev/null +++ b/web/api/app/vendor/composer/installers/src/bootstrap.php @@ -0,0 +1,13 @@ +installer = new AsgardInstaller( + new Package('NyanCat', '4.2', '4.2'), + new Composer() + ); + } + + /** + * @dataProvider packageNameInflectionProvider + */ + public function testInflectPackageVars($type, $name, $expected) + { + $this->assertEquals( + $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)), + array('name' => $expected, 'type' => $type) + ); + } + + public function packageNameInflectionProvider() + { + return array( + array( + 'asgard-module', + 'asgard-module', + 'Asgard' + ), + array( + 'asgard-module', + 'blog', + 'Blog' + ), + // tests that exactly one '-theme' is cut off + array( + 'asgard-theme', + 'some-theme-theme', + 'Some-theme', + ), + // tests that names without '-theme' suffix stay valid + array( + 'asgard-theme', + 'someothertheme', + 'Someothertheme', + ), + ); + } +} diff --git a/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php new file mode 100644 index 000000000..976bd9be8 --- /dev/null +++ b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php @@ -0,0 +1,115 @@ +package = new Package('CamelCased', '1.0', '1.0'); + $this->io = $this->getMock('Composer\IO\PackageInterface'); + $this->composer = new Composer(); + $this->composer->setConfig(new Config(false)); + } + + /** + * testInflectPackageVars + * + * @return void + */ + public function testInflectPackageVars() + { + $installer = new CakePHPInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'CamelCased')); + $this->assertEquals($result, array('name' => 'CamelCased')); + + $installer = new CakePHPInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'with-dash')); + $this->assertEquals($result, array('name' => 'WithDash')); + + $installer = new CakePHPInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'with_underscore')); + $this->assertEquals($result, array('name' => 'WithUnderscore')); + + $installer = new CakePHPInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'cake/acl')); + $this->assertEquals($result, array('name' => 'Cake/Acl')); + + $installer = new CakePHPInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'cake/debug-kit')); + $this->assertEquals($result, array('name' => 'Cake/DebugKit')); + } + + /** + * Test getLocations returning appropriate values based on CakePHP version + * + */ + public function testGetLocations() { + $package = new RootPackage('CamelCased', '1.0', '1.0'); + $composer = $this->composer; + $rm = new RepositoryManager( + $this->getMock('Composer\IO\IOInterface'), + $this->getMock('Composer\Config') + ); + $composer->setRepositoryManager($rm); + $installer = new CakePHPInstaller($package, $composer); + + // 2.0 < cakephp < 3.0 + $this->setCakephpVersion($rm, '2.0.0'); + $result = $installer->getLocations(); + $this->assertContains('Plugin/', $result['plugin']); + + $this->setCakephpVersion($rm, '2.5.9'); + $result = $installer->getLocations(); + $this->assertContains('Plugin/', $result['plugin']); + + $this->setCakephpVersion($rm, '~2.5'); + $result = $installer->getLocations(); + $this->assertContains('Plugin/', $result['plugin']); + + // special handling for 2.x versions when 3.x is still in development + $this->setCakephpVersion($rm, 'dev-master'); + $result = $installer->getLocations(); + $this->assertContains('Plugin/', $result['plugin']); + + $this->setCakephpVersion($rm, '>=2.5'); + $result = $installer->getLocations(); + $this->assertContains('Plugin/', $result['plugin']); + + // cakephp >= 3.0 + $this->setCakephpVersion($rm, '3.0.*-dev'); + $result = $installer->getLocations(); + $this->assertContains('vendor/{$vendor}/{$name}/', $result['plugin']); + + $this->setCakephpVersion($rm, '~8.8'); + $result = $installer->getLocations(); + $this->assertEquals('vendor/{$vendor}/{$name}/', $result['plugin']); + } + + protected function setCakephpVersion($rm, $version) { + $parser = new VersionParser(); + list(, $version) = explode(' ', $parser->parseConstraints($version)); + $installed = new InstalledArrayRepository(); + $package = new Package('cakephp/cakephp', $version, $version); + $installed->addPackage($package); + $rm->setLocalRepository($installed); + } + +} diff --git a/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php new file mode 100644 index 000000000..9e385e6a8 --- /dev/null +++ b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php @@ -0,0 +1,89 @@ +installer = new DokuWikiInstaller( + new Package('NyanCat', '4.2', '4.2'), + new Composer() + ); + } + + /** + * @dataProvider packageNameInflectionProvider + */ + public function testInflectPackageVars($type, $name, $expected) + { + $this->assertEquals( + $this->installer->inflectPackageVars(array('name' => $name, 'type'=>$type)), + array('name' => $expected, 'type'=>$type) + ); + } + + public function packageNameInflectionProvider() + { + return array( + array( + 'dokuwiki-plugin', + 'dokuwiki-test-plugin', + 'test', + ), + array( + 'dokuwiki-plugin', + 'test-plugin', + 'test', + ), + array( + 'dokuwiki-plugin', + 'dokuwiki_test', + 'test', + ), + array( + 'dokuwiki-plugin', + 'test', + 'test', + ), + array( + 'dokuwiki-plugin', + 'test-template', + 'test-template', + ), + array( + 'dokuwiki-template', + 'dokuwiki-test-template', + 'test', + ), + array( + 'dokuwiki-template', + 'test-template', + 'test', + ), + array( + 'dokuwiki-template', + 'dokuwiki_test', + 'test', + ), + array( + 'dokuwiki-template', + 'test', + 'test', + ), + array( + 'dokuwiki-template', + 'test-plugin', + 'test-plugin', + ), + ); + } +} diff --git a/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php new file mode 100644 index 000000000..b757799b4 --- /dev/null +++ b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php @@ -0,0 +1,63 @@ +composer = new Composer(); + } + + public function testInflectPackageVars() + { + $package = $this->getPackage('vendor/name', '0.0.0'); + $installer = new GravInstaller($package, $this->composer); + $packageVars = $this->getPackageVars($package); + + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => 'test'))); + $this->assertEquals('test', $result['name']); + + foreach ($installer->getLocations() as $name => $location) { + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "$name-test"))); + $this->assertEquals('test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "test-$name"))); + $this->assertEquals('test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "$name-test-test"))); + $this->assertEquals('test-test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "test-test-$name"))); + $this->assertEquals('test-test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-$name-test"))); + $this->assertEquals('test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-test-$name"))); + $this->assertEquals('test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-$name-test-test"))); + $this->assertEquals('test-test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-test-test-$name"))); + $this->assertEquals('test-test', $result['name']); + } + } + + /** + * @param $package \Composer\Package\PackageInterface + */ + public function getPackageVars($package) + { + $type = $package->getType(); + + $prettyName = $package->getPrettyName(); + if (strpos($prettyName, '/') !== false) { + list($vendor, $name) = explode('/', $prettyName); + } else { + $vendor = ''; + $name = $prettyName; + } + + return compact('name', 'vendor', 'type'); + } +} diff --git a/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php new file mode 100644 index 000000000..a516daf07 --- /dev/null +++ b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php @@ -0,0 +1,422 @@ +fs = new Filesystem; + + $this->composer = new Composer(); + $this->config = new Config(); + $this->composer->setConfig($this->config); + + $this->vendorDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'baton-test-vendor'; + $this->ensureDirectoryExistsAndClear($this->vendorDir); + + $this->binDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'baton-test-bin'; + $this->ensureDirectoryExistsAndClear($this->binDir); + + $this->config->merge(array( + 'config' => array( + 'vendor-dir' => $this->vendorDir, + 'bin-dir' => $this->binDir, + ), + )); + + $this->dm = $this->getMockBuilder('Composer\Downloader\DownloadManager') + ->disableOriginalConstructor() + ->getMock(); + $this->composer->setDownloadManager($this->dm); + + $this->repository = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); + $this->io = $this->getMock('Composer\IO\IOInterface'); + } + + /** + * tearDown + * + * @return void + */ + public function tearDown() + { + $this->fs->removeDirectory($this->vendorDir); + $this->fs->removeDirectory($this->binDir); + } + + /** + * testSupports + * + * @return void + * + * @dataProvider dataForTestSupport + */ + public function testSupports($type, $expected) + { + $installer = new Installer($this->io, $this->composer); + $this->assertSame($expected, $installer->supports($type), sprintf('Failed to show support for %s', $type)); + } + + /** + * dataForTestSupport + */ + public function dataForTestSupport() + { + return array( + array('agl-module', true), + array('aimeos-extension', true), + array('annotatecms-module', true), + array('annotatecms-component', true), + array('annotatecms-service', true), + array('bitrix-module', true), + array('bitrix-component', true), + array('bitrix-theme', true), + array('cakephp', false), + array('cakephp-', false), + array('cakephp-app', false), + array('cakephp-plugin', true), + array('chef-cookbook', true), + array('chef-role', true), + array('codeigniter-app', false), + array('codeigniter-library', true), + array('codeigniter-third-party', true), + array('codeigniter-module', true), + array('concrete5-block', true), + array('concrete5-package', true), + array('concrete5-theme', true), + array('concrete5-update', true), + array('craft-plugin', true), + array('croogo-plugin', true), + array('croogo-theme', true), + array('dokuwiki-plugin', true), + array('dokuwiki-template', true), + array('drupal-module', true), + array('dolibarr-module', true), + array('elgg-plugin', true), + array('fuel-module', true), + array('fuel-package', true), + array('fuel-theme', true), + array('fuelphp-component', true), + array('hurad-plugin', true), + array('hurad-theme', true), + array('joomla-library', true), + array('kirby-plugin', true), + array('kohana-module', true), + array('laravel-library', true), + array('lithium-library', true), + array('magento-library', true), + array('mako-package', true), + array('modxevo-snippet', true), + array('modxevo-plugin', true), + array('modxevo-module', true), + array('modxevo-template', true), + array('modxevo-lib', true), + array('mediawiki-extension', true), + array('mediawiki-skin', true), + array('microweber-module', true), + array('modulework-module', true), + array('moodle-mod', true), + array('october-module', true), + array('october-plugin', true), + array('piwik-plugin', true), + array('phpbb-extension', true), + array('pimcore-plugin', true), + array('ppi-module', true), + array('prestashop-module', true), + array('prestashop-theme', true), + array('puppet-module', true), + array('redaxo-addon', true), + array('redaxo-bestyle-plugin', true), + array('roundcube-plugin', true), + array('shopware-backend-plugin', true), + array('shopware-core-plugin', true), + array('shopware-frontend-plugin', true), + array('shopware-theme', true), + array('silverstripe-module', true), + array('silverstripe-theme', true), + array('smf-module', true), + array('smf-theme', true), + array('symfony1-plugin', true), + array('thelia-module', true), + array('thelia-frontoffice-template', true), + array('thelia-backoffice-template', true), + array('thelia-email-template', true), + array('tusk-task', true), + array('tusk-asset', true), + array('typo3-flow-plugin', true), + array('typo3-cms-extension', true), + array('whmcs-gateway', true), + array('wolfcms-plugin', true), + array('wordpress-plugin', true), + array('wordpress-core', false), + array('zend-library', true), + array('zikula-module', true), + array('zikula-theme', true), + ); + } + + /** + * testInstallPath + * + * @dataProvider dataForTestInstallPath + */ + public function testInstallPath($type, $path, $name, $version = '1.0.0') + { + $installer = new Installer($this->io, $this->composer); + $package = new Package($name, $version, $version); + + $package->setType($type); + $result = $installer->getInstallPath($package); + $this->assertEquals($path, $result); + } + + /** + * dataFormTestInstallPath + */ + public function dataForTestInstallPath() + { + return array( + array('agl-module', 'More/MyTestPackage/', 'agl/my_test-package'), + array('aimeos-extension', 'ext/ai-test/', 'author/ai-test'), + array('annotatecms-module', 'addons/modules/my_module/', 'vysinsky/my_module'), + array('annotatecms-component', 'addons/components/my_component/', 'vysinsky/my_component'), + array('annotatecms-service', 'addons/services/my_service/', 'vysinsky/my_service'), + array('bitrix-module', 'local/modules/my_module/', 'author/my_module'), + array('bitrix-component', 'local/components/my_component/', 'author/my_component'), + array('bitrix-theme', 'local/templates/my_theme/', 'author/my_theme'), + array('cakephp-plugin', 'Plugin/Ftp/', 'shama/ftp'), + array('chef-cookbook', 'Chef/mre/my_cookbook/', 'mre/my_cookbook'), + array('chef-role', 'Chef/roles/my_role/', 'mre/my_role'), + array('codeigniter-library', 'application/libraries/my_package/', 'shama/my_package'), + array('codeigniter-module', 'application/modules/my_package/', 'shama/my_package'), + array('concrete5-block', 'blocks/concrete5_block/', 'remo/concrete5_block'), + array('concrete5-package', 'packages/concrete5_package/', 'remo/concrete5_package'), + array('concrete5-theme', 'themes/concrete5_theme/', 'remo/concrete5_theme'), + array('concrete5-update', 'updates/concrete5/', 'concrete5/concrete5'), + array('craft-plugin', 'craft/plugins/my_plugin/', 'mdcpepper/my_plugin'), + array('croogo-plugin', 'Plugin/Sitemaps/', 'fahad19/sitemaps'), + array('croogo-theme', 'View/Themed/Readable/', 'rchavik/readable'), + array('dokuwiki-plugin', 'lib/plugins/someplugin/', 'author/someplugin'), + array('dokuwiki-template', 'lib/tpl/sometemplate/', 'author/sometemplate'), + array('dolibarr-module', 'htdocs/custom/my_module/', 'shama/my_module'), + array('drupal-module', 'modules/my_module/', 'shama/my_module'), + array('drupal-theme', 'themes/my_module/', 'shama/my_module'), + array('drupal-profile', 'profiles/my_module/', 'shama/my_module'), + array('drupal-drush', 'drush/my_module/', 'shama/my_module'), + array('elgg-plugin', 'mod/sample_plugin/', 'test/sample_plugin'), + array('fuel-module', 'fuel/app/modules/module/', 'fuel/module'), + array('fuel-package', 'fuel/packages/orm/', 'fuel/orm'), + array('fuel-theme', 'fuel/app/themes/theme/', 'fuel/theme'), + array('fuelphp-component', 'components/demo/', 'fuelphp/demo'), + array('hurad-plugin', 'plugins/Akismet/', 'atkrad/akismet'), + array('hurad-theme', 'plugins/Hurad2013/', 'atkrad/Hurad2013'), + array('joomla-plugin', 'plugins/my_plugin/', 'shama/my_plugin'), + array('kirby-plugin', 'site/plugins/my_plugin/', 'shama/my_plugin'), + array('kohana-module', 'modules/my_package/', 'shama/my_package'), + array('laravel-library', 'libraries/my_package/', 'shama/my_package'), + array('lithium-library', 'libraries/li3_test/', 'user/li3_test'), + array('magento-library', 'lib/foo/', 'test/foo'), + array('modxevo-snippet', 'assets/snippets/my_snippet/', 'shama/my_snippet'), + array('modxevo-plugin', 'assets/plugins/my_plugin/', 'shama/my_plugin'), + array('modxevo-module', 'assets/modules/my_module/', 'shama/my_module'), + array('modxevo-template', 'assets/templates/my_template/', 'shama/my_template'), + array('modxevo-lib', 'assets/lib/my_lib/', 'shama/my_lib'), + array('mako-package', 'app/packages/my_package/', 'shama/my_package'), + array('mediawiki-extension', 'extensions/APC/', 'author/APC'), + array('mediawiki-extension', 'extensions/APC/', 'author/APC-extension'), + array('mediawiki-extension', 'extensions/UploadWizard/', 'author/upload-wizard'), + array('mediawiki-extension', 'extensions/SyntaxHighlight_GeSHi/', 'author/syntax-highlight_GeSHi'), + array('mediawiki-skin', 'skins/someskin/', 'author/someskin-skin'), + array('mediawiki-skin', 'skins/someskin/', 'author/someskin'), + array('microweber-module', 'userfiles/modules/my-thing/', 'author/my-thing-module'), + array('modulework-module', 'modules/my_package/', 'shama/my_package'), + array('moodle-mod', 'mod/my_package/', 'shama/my_package'), + array('october-module', 'modules/my_plugin/', 'shama/my_plugin'), + array('october-plugin', 'plugins/shama/my_plugin/', 'shama/my_plugin'), + array('october-theme', 'themes/my_theme/', 'shama/my_theme'), + array('piwik-plugin', 'plugins/VisitSummary/', 'shama/visit-summary'), + array('prestashop-module', 'modules/a-module/', 'vendor/a-module'), + array('prestashop-theme', 'themes/a-theme/', 'vendor/a-theme'), + array('phpbb-extension', 'ext/test/foo/', 'test/foo'), + array('phpbb-style', 'styles/foo/', 'test/foo'), + array('phpbb-language', 'language/foo/', 'test/foo'), + array('pimcore-plugin', 'plugins/MyPlugin/', 'ubikz/my_plugin'), + array('ppi-module', 'modules/foo/', 'test/foo'), + array('puppet-module', 'modules/puppet-name/', 'puppet/puppet-name'), + array('redaxo-addon', 'redaxo/include/addons/my_plugin/', 'shama/my_plugin'), + array('redaxo-bestyle-plugin', 'redaxo/include/addons/be_style/plugins/my_plugin/', 'shama/my_plugin'), + array('roundcube-plugin', 'plugins/base/', 'test/base'), + array('roundcube-plugin', 'plugins/replace_dash/', 'test/replace-dash'), + array('shopware-backend-plugin', 'engine/Shopware/Plugins/Local/Backend/ShamaMyBackendPlugin/', 'shama/my-backend-plugin'), + array('shopware-core-plugin', 'engine/Shopware/Plugins/Local/Core/ShamaMyCorePlugin/', 'shama/my-core-plugin'), + array('shopware-frontend-plugin', 'engine/Shopware/Plugins/Local/Frontend/ShamaMyFrontendPlugin/', 'shama/my-frontend-plugin'), + array('shopware-theme', 'templates/my_theme/', 'shama/my-theme'), + array('silverstripe-module', 'my_module/', 'shama/my_module'), + array('silverstripe-module', 'sapphire/', 'silverstripe/framework', '2.4.0'), + array('silverstripe-module', 'framework/', 'silverstripe/framework', '3.0.0'), + array('silverstripe-module', 'framework/', 'silverstripe/framework', '3.0.0-rc1'), + array('silverstripe-module', 'framework/', 'silverstripe/framework', 'my/branch'), + array('silverstripe-theme', 'themes/my_theme/', 'shama/my_theme'), + array('smf-module', 'Sources/my_module/', 'shama/my_module'), + array('smf-theme', 'Themes/my_theme/', 'shama/my_theme'), + array('symfony1-plugin', 'plugins/sfShamaPlugin/', 'shama/sfShamaPlugin'), + array('symfony1-plugin', 'plugins/sfShamaPlugin/', 'shama/sf-shama-plugin'), + array('thelia-module', 'local/modules/my_module/', 'shama/my_module'), + array('thelia-frontoffice-template', 'templates/frontOffice/my_template_fo/', 'shama/my_template_fo'), + array('thelia-backoffice-template', 'templates/backOffice/my_template_bo/', 'shama/my_template_bo'), + array('thelia-email-template', 'templates/email/my_template_email/', 'shama/my_template_email'), + array('tusk-task', '.tusk/tasks/my_task/', 'shama/my_task'), + array('typo3-flow-package', 'Packages/Application/my_package/', 'shama/my_package'), + array('typo3-flow-build', 'Build/my_package/', 'shama/my_package'), + array('typo3-cms-extension', 'typo3conf/ext/my_extension/', 'shama/my_extension'), + array('whmcs-gateway', 'modules/gateways/gateway_name/', 'vendor/gateway_name'), + array('wolfcms-plugin', 'wolf/plugins/my_plugin/', 'shama/my_plugin'), + array('wordpress-plugin', 'wp-content/plugins/my_plugin/', 'shama/my_plugin'), + array('wordpress-muplugin', 'wp-content/mu-plugins/my_plugin/', 'shama/my_plugin'), + array('zend-extra', 'extras/library/zend_test/', 'shama/zend_test'), + array('zikula-module', 'modules/my-test_module/', 'my/test_module'), + array('zikula-theme', 'themes/my-test_theme/', 'my/test_theme'), + ); + } + + /** + * testGetCakePHPInstallPathException + * + * @return void + * + * @expectedException \InvalidArgumentException + */ + public function testGetCakePHPInstallPathException() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('shama/ftp', '1.0.0', '1.0.0'); + + $package->setType('cakephp-whoops'); + $result = $installer->getInstallPath($package); + } + + /** + * testCustomInstallPath + */ + public function testCustomInstallPath() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('shama/ftp', '1.0.0', '1.0.0'); + $package->setType('cakephp-plugin'); + $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0'); + $this->composer->setPackage($consumerPackage); + $consumerPackage->setExtra(array( + 'installer-paths' => array( + 'my/custom/path/{$name}/' => array( + 'shama/ftp', + 'foo/bar', + ), + ), + )); + $result = $installer->getInstallPath($package); + $this->assertEquals('my/custom/path/Ftp/', $result); + } + + /** + * testCustomInstallerName + */ + public function testCustomInstallerName() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('shama/cakephp-ftp-plugin', '1.0.0', '1.0.0'); + $package->setType('cakephp-plugin'); + $package->setExtra(array( + 'installer-name' => 'FTP', + )); + $result = $installer->getInstallPath($package); + $this->assertEquals('Plugin/FTP/', $result); + } + + /** + * testCustomTypePath + */ + public function testCustomTypePath() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('slbmeh/my_plugin', '1.0.0', '1.0.0'); + $package->setType('wordpress-plugin'); + $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0'); + $this->composer->setPackage($consumerPackage); + $consumerPackage->setExtra(array( + 'installer-paths' => array( + 'my/custom/path/{$name}/' => array( + 'type:wordpress-plugin' + ), + ), + )); + $result = $installer->getInstallPath($package); + $this->assertEquals('my/custom/path/my_plugin/', $result); + } + + /** + * testNoVendorName + */ + public function testNoVendorName() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('sfPhpunitPlugin', '1.0.0', '1.0.0'); + + $package->setType('symfony1-plugin'); + $result = $installer->getInstallPath($package); + $this->assertEquals('plugins/sfPhpunitPlugin/', $result); + } + + /** + * testTypo3Inflection + */ + public function testTypo3Inflection() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('typo3/fluid', '1.0.0', '1.0.0'); + + $package->setAutoload(array( + 'psr-0' => array( + 'TYPO3\\Fluid' => 'Classes', + ), + )); + + $package->setType('typo3-flow-package'); + $result = $installer->getInstallPath($package); + $this->assertEquals('Packages/Application/TYPO3.Fluid/', $result); + } + + public function testUninstallAndDeletePackageFromLocalRepo() + { + $package = new Package('foo', '1.0.0', '1.0.0'); + + $installer = $this->getMock('Composer\Installers\Installer', array('getInstallPath'), array($this->io, $this->composer)); + $installer->expects($this->once())->method('getInstallPath')->with($package)->will($this->returnValue(sys_get_temp_dir().'/foo')); + + $repo = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); + $repo->expects($this->once())->method('hasPackage')->with($package)->will($this->returnValue(true)); + $repo->expects($this->once())->method('removePackage')->with($package); + + $installer->uninstall($repo, $package); + } +} diff --git a/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php new file mode 100644 index 000000000..3675e188b --- /dev/null +++ b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php @@ -0,0 +1,66 @@ +installer = new MediaWikiInstaller( + new Package('NyanCat', '4.2', '4.2'), + new Composer() + ); + } + + /** + * @dataProvider packageNameInflectionProvider + */ + public function testInflectPackageVars($type, $name, $expected) + { + $this->assertEquals( + $this->installer->inflectPackageVars(array('name' => $name, 'type'=>$type)), + array('name' => $expected, 'type'=>$type) + ); + } + + public function packageNameInflectionProvider() + { + return array( + array( + 'mediawiki-extension', + 'sub-page-list', + 'SubPageList', + ), + array( + 'mediawiki-extension', + 'sub-page-list-extension', + 'SubPageList', + ), + array( + 'mediawiki-extension', + 'semantic-mediawiki', + 'SemanticMediawiki', + ), + // tests that exactly one '-skin' is cut off, and that skins do not get ucwords treatment like extensions + array( + 'mediawiki-skin', + 'some-skin-skin', + 'some-skin', + ), + // tests that names without '-skin' suffix stay valid + array( + 'mediawiki-skin', + 'someotherskin', + 'someotherskin', + ), + ); + } +} diff --git a/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php new file mode 100644 index 000000000..fd427cdc3 --- /dev/null +++ b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php @@ -0,0 +1,66 @@ +installer = new OctoberInstaller( + new Package('NyanCat', '4.2', '4.2'), + new Composer() + ); + } + + /** + * @dataProvider packageNameInflectionProvider + */ + public function testInflectPackageVars($type, $name, $expected) + { + $this->assertEquals( + $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)), + array('name' => $expected, 'type' => $type) + ); + } + + public function packageNameInflectionProvider() + { + return array( + array( + 'october-plugin', + 'subpagelist', + 'subpagelist', + ), + array( + 'october-plugin', + 'subpagelist-plugin', + 'subpagelist', + ), + array( + 'october-plugin', + 'semanticoctober', + 'semanticoctober', + ), + // tests that exactly one '-theme' is cut off + array( + 'october-theme', + 'some-theme-theme', + 'some-theme', + ), + // tests that names without '-theme' suffix stay valid + array( + 'october-theme', + 'someothertheme', + 'someothertheme', + ), + ); + } +} \ No newline at end of file diff --git a/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php new file mode 100644 index 000000000..ea79374bf --- /dev/null +++ b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php @@ -0,0 +1,44 @@ +package = new Package('CamelCased', '1.0', '1.0'); + $this->io = $this->getMock('Composer\IO\PackageInterface'); + $this->composer = new Composer(); + } + + /** + * testInflectPackageVars + * + * @return void + */ + public function testInflectPackageVars() + { + $installer = new PimcoreInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'CamelCased')); + $this->assertEquals($result, array('name' => 'CamelCased')); + + $installer = new PimcoreInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'with-dash')); + $this->assertEquals($result, array('name' => 'WithDash')); + + $installer = new PimcoreInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'with_underscore')); + $this->assertEquals($result, array('name' => 'WithUnderscore')); + } +} diff --git a/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php new file mode 100644 index 000000000..8d9ff3f82 --- /dev/null +++ b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php @@ -0,0 +1,63 @@ +package = new Package('VisitSummary', '1.0', '1.0'); + $this->io = $this->getMock('Composer\IO\PackageInterface'); + $this->composer = new Composer(); + } + + /** + * testInflectPackageVars + * + * @return void + */ + public function testInflectPackageVars() + { + $installer = new PiwikInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'VisitSummary')); + $this->assertEquals($result, array('name' => 'VisitSummary')); + + $installer = new PiwikInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'visit-summary')); + $this->assertEquals($result, array('name' => 'VisitSummary')); + + $installer = new PiwikInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'visit_summary')); + $this->assertEquals($result, array('name' => 'VisitSummary')); + } + +} diff --git a/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php new file mode 100644 index 000000000..6418a03b8 --- /dev/null +++ b/web/api/app/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php @@ -0,0 +1,64 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Installers\Test; + +use Composer\Package\Version\VersionParser; +use Composer\Package\Package; +use Composer\Package\AliasPackage; +use Composer\Package\LinkConstraint\VersionConstraint; +use Composer\Util\Filesystem; + +abstract class TestCase extends \PHPUnit_Framework_TestCase +{ + private static $parser; + + protected static function getVersionParser() + { + if (!self::$parser) { + self::$parser = new VersionParser(); + } + + return self::$parser; + } + + protected function getVersionConstraint($operator, $version) + { + return new VersionConstraint( + $operator, + self::getVersionParser()->normalize($version) + ); + } + + protected function getPackage($name, $version) + { + $normVersion = self::getVersionParser()->normalize($version); + + return new Package($name, $normVersion, $version); + } + + protected function getAliasPackage($package, $version) + { + $normVersion = self::getVersionParser()->normalize($version); + + return new AliasPackage($package, $normVersion, $version); + } + + protected function ensureDirectoryExistsAndClear($directory) + { + $fs = new Filesystem(); + if (is_dir($directory)) { + $fs->removeDirectory($directory); + } + mkdir($directory, 0777, true); + } +} diff --git a/web/api/app/vendor/composer/installers/tests/bootstrap.php b/web/api/app/vendor/composer/installers/tests/bootstrap.php new file mode 100644 index 000000000..30c8fdc67 --- /dev/null +++ b/web/api/app/vendor/composer/installers/tests/bootstrap.php @@ -0,0 +1,4 @@ +add('Composer\Installers\Test', __DIR__); diff --git a/web/api/app/webroot/.htaccess b/web/api/app/webroot/.htaccess index 1f19e4c06..f08afa8b2 100644 --- a/web/api/app/webroot/.htaccess +++ b/web/api/app/webroot/.htaccess @@ -3,4 +3,5 @@ RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] + RewriteBase /zm/api diff --git a/web/api/cmake_install.cmake b/web/api/cmake_install.cmake new file mode 100644 index 000000000..677eb9b9f --- /dev/null +++ b/web/api/cmake_install.cmake @@ -0,0 +1,34 @@ +# Install script for directory: /home/ubuntu/zm/ZoneMinder/web/api + +# Set the install prefix +IF(NOT DEFINED CMAKE_INSTALL_PREFIX) + SET(CMAKE_INSTALL_PREFIX "/usr/local") +ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX) +STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + IF(BUILD_TYPE) + STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + ELSE(BUILD_TYPE) + SET(CMAKE_INSTALL_CONFIG_NAME "Release") + ENDIF(BUILD_TYPE) + MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + +# Set the component getting installed. +IF(NOT CMAKE_INSTALL_COMPONENT) + IF(COMPONENT) + MESSAGE(STATUS "Install component: \"${COMPONENT}\"") + SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + ELSE(COMPONENT) + SET(CMAKE_INSTALL_COMPONENT) + ENDIF(COMPONENT) +ENDIF(NOT CMAKE_INSTALL_COMPONENT) + +# Install shared libraries without execute permission? +IF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + SET(CMAKE_INSTALL_SO_NO_EXE "1") +ENDIF(NOT DEFINED CMAKE_INSTALL_SO_NO_EXE) + diff --git a/web/includes/lang.php b/web/includes/lang.php index 94ebba530..30af6f4c0 100644 --- a/web/includes/lang.php +++ b/web/includes/lang.php @@ -18,6 +18,15 @@ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // +function translate( $name ) +{ + global $SLANG; + if ( array_key_exists( $name, $SLANG ) ) + return $SLANG[$name]; + else + return $name; +} + function loadLanguage( $prefix="" ) { global $user; diff --git a/web/index.php b/web/index.php index 9303a26c8..6167dc4dc 100644 --- a/web/index.php +++ b/web/index.php @@ -63,30 +63,30 @@ if ( isset($_GET['skin']) ) $skin = $_GET['skin']; elseif ( isset($_COOKIE['zmSkin']) ) $skin = $_COOKIE['zmSkin']; -elseif ( defined(ZM_SKIN_DEFAULT) ) +elseif ( defined('ZM_SKIN_DEFAULT') ) $skin = ZM_SKIN_DEFAULT; else $skin = "classic"; $skins = array_map( 'basename', glob('skins/*',GLOB_ONLYDIR) ); if ( ! in_array( $skin, $skins ) ) { - Error( "Invalid skin '$skin'" ); - $skin = 'classic'; + Error( "Invalid skin '$skin' setting to " . $skins[0] ); + $skin = $skins[0]; } if ( isset($_GET['css']) ) $css = $_GET['css']; elseif ( isset($_COOKIE['zmCSS']) ) $css = $_COOKIE['zmCSS']; -elseif (defined(ZM_CSS_DEFAULT)) +elseif (defined('ZM_CSS_DEFAULT')) $css = ZM_CSS_DEFAULT; else $css = "classic"; $css_skins = array_map( 'basename', glob('skins/'.$skin.'/css/*',GLOB_ONLYDIR) ); if ( ! in_array( $css, $css_skins ) ) { - Error( "Invalid skin css '$css'" ); - $css = 'classic'; + Error( "Invalid skin css '$css' setting to " . $css_skins[0] ); + $css = $css_skins[0]; } define( "ZM_BASE_PATH", dirname( $_SERVER['REQUEST_URI'] ) ); @@ -102,13 +102,13 @@ ini_set( "session.name", "ZMSESSID" ); session_start(); -if ( !isset($_SESSION['skin']) || isset($_REQUEST['skin']) ) +if ( !isset($_SESSION['skin']) || isset($_REQUEST['skin']) || !isset($_COOKIE['zmSkin']) || $_COOKIE['zmSkin'] != $skin ) { $_SESSION['skin'] = $skin; setcookie( "zmSkin", $skin, time()+3600*24*30*12*10 ); } -if ( !isset($_SESSION['css']) || isset($_REQUEST['css']) ) { +if ( !isset($_SESSION['css']) || isset($_REQUEST['css']) || !isset($_COOKIE['zmCSS']) || $_COOKIE['zmCSS'] != $css ) { $_SESSION['css'] = $css; setcookie( "zmCSS", $css, time()+3600*24*30*12*10 ); } @@ -143,6 +143,10 @@ if ( ZM_OPT_USE_AUTH && ! isset($user) && $view != 'login' ) { $view = 'login'; } +# Only one request can open the session file at a time, so let's close the session here to improve concurrency. +# Any file/page that uses the session must re-open it. +session_write_close(); + if ( isset( $_REQUEST['request'] ) ) { foreach ( getSkinIncludes( 'ajax/'.$request.'.php', true, true ) as $includeFile ) diff --git a/web/lang/big5_big5.php b/web/lang/big5_big5.php index f218109c1..84da0f622 100644 --- a/web/lang/big5_big5.php +++ b/web/lang/big5_big5.php @@ -92,6 +92,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Alarm Maximum FPS', 'AlarmPx' => 'Alarm Px', 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => '警告', 'All' => '全部', 'Apply' => '確定', @@ -136,13 +137,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', 'BadFormat' => 'Format must be set to an integer of zero or more', 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'Height must be set to a valid value', 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore', 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 'BadPath' => 'Path must be set to a valid value', @@ -162,7 +163,9 @@ $SLANG = array( 'BlobSizes' => 'Blob Sizes', 'Blobs' => 'Blobs', 'Brightness' => '亮度', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => '緩衝', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Can Auto Focus', 'CanAutoGain' => 'Can Auto Gain', 'CanAutoIris' => 'Can Auto Iris', @@ -206,6 +209,7 @@ $SLANG = array( 'CaptureHeight' => '捕捉高度', 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 'CapturePalette' => '捕捉格式', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => '捕捉寬度', 'Cause' => '因素', 'CheckMethod' => 'Alarm Check Method', @@ -236,6 +240,7 @@ $SLANG = array( 'ControlDevice' => 'Control Device', 'ControlType' => 'Control Type', 'Controllable' => 'Controllable', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => '分區輪流檢視', 'CycleWatch' => '分區輪流檢視', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -244,12 +249,15 @@ $SLANG = array( 'DefaultRate' => '預設速率', 'DefaultScale' => '預設尺寸', 'DefaultView' => 'Default View', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => '刪除', 'DeleteAndNext' => '刪除 & 下一事件', 'DeleteAndPrev' => '刪除 & 上一事件', 'DeleteSavedFilter' => '刪除儲存過濾', 'Description' => '描述', 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Device', // Added - 2009-02-08 'DeviceChannel' => '裝置通道', 'DeviceFormat' => '裝置格式', @@ -261,6 +269,7 @@ $SLANG = array( 'Disk' => '磁碟', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => 'Please Donate', 'DonateAlready' => 'No, I\'ve already donated', 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', @@ -270,7 +279,6 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => '下載', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => '歷時', @@ -313,10 +321,12 @@ $SLANG = array( 'Feed' => 'Feed', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'File', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => '自動儲存符合項目', 'FilterDeleteEvents' => '自動刪除符合項目', 'FilterEmailEvents' => '自動寄出詳細符合項目', 'FilterExecuteEvents' => '自動執行符合指令', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => '自動發出符合訊息', 'FilterPx' => 'Filter Px', 'FilterUnset' => '您必需設定濾鏡的寬度和高度', @@ -326,12 +336,12 @@ $SLANG = array( 'First' => 'First', 'FlippedHori' => '水平反轉', 'FlippedVert' => '垂直反轉', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Focus', 'ForceAlarm' => 'Force Alarm', 'Format' => '格式', @@ -339,7 +349,6 @@ $SLANG = array( 'FrameId' => '框架 Id', 'FrameRate' => '框架速率', 'FrameSkip' => '框架忽略', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => '框架', 'Func' => 'Func', 'Function' => '功能', @@ -466,6 +475,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min Zoom Speed', 'MinZoomStep' => 'Min Zoom Step', 'Misc' => '細項', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => '監視', 'MonitorIds' => 'Monitor Ids', 'MonitorPreset' => 'Monitor Preset', @@ -476,12 +486,13 @@ $SLANG = array( 'Montage' => '全部顯示', 'Month' => '月', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => '移動', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => '需大於或等於', 'MustBeLe' => '需小於或等於', 'MustConfirmPassword' => '您必需確認密碼', @@ -510,6 +521,9 @@ $SLANG = array( 'NumPresets' => 'Num Presets', 'Off' => 'Off', 'On' => 'On', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => 'equal to', 'OpGt' => 'greater than', 'OpGtEq' => 'greater than or equal to', @@ -556,6 +570,9 @@ $SLANG = array( 'Presets' => 'Presets', 'Prev' => '上一事件', 'Probe' => 'Probe', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => 'Rate', 'Real' => 'Real', @@ -643,6 +660,7 @@ $SLANG = array( 'Submit' => 'Submit', 'System' => 'System', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => '小圖檢視', 'Tilt' => 'Tilt', @@ -677,13 +695,16 @@ $SLANG = array( 'UpdateNotNecessary' => 'No update is necessary.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Use Filter', 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Use ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => 'User', 'Username' => '使用者名稱', 'Users' => 'Users', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => '設定值', 'Version' => '版本', 'VersionIgnore' => 'Ignore this version', @@ -723,6 +744,7 @@ $SLANG = array( 'Zone' => 'Zone', 'ZoneAlarmColour' => 'Alarm Colour (RGB)', 'ZoneArea' => 'Zone Area', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Filter Width/Height (pixels)', 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', @@ -731,7 +753,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => '監視區', 'Zoom' => 'Zoom', 'ZoomIn' => 'Zoom In', // Added - 2009-02-08 diff --git a/web/lang/cn_zh.php b/web/lang/cn_zh.php index b0b76ba93..21bd2f269 100644 --- a/web/lang/cn_zh.php +++ b/web/lang/cn_zh.php @@ -88,6 +88,7 @@ $SLANG = array( 'AlarmMaximumFPS' => '报警最大帧率FPS', 'AlarmPx' => '报警像素', 'AlarmRGBUnset' => '你必须设置一个报警颜色(RGB)', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => '警报', 'All' => '全部', 'Apply' => '应用', @@ -132,13 +133,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'FPS帧数报告间隔缓冲数必须是0以上整数', 'BadFormat' => '格式必须设为大于零的整数', 'BadFrameSkip' => '跳帧数必须设为大于零的整数', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => '高度必须设为有效值', 'BadHost' => '主机必须设为有效IP地址或主机名,不要包含 http://', 'BadImageBufferCount' => '图像缓冲器大小必须设为大于10的整数', 'BadLabelX' => '标签 X 坐标必须设为大于零的整数', 'BadLabelY' => '标签 Y 坐标必须设为大于零的整数', 'BadMaxFPS' => '最大帧数FPS必须设为正整数或着浮点数', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => '名称只可以包含字母,数字,波折号和下划线', 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 'BadPath' => '路径必须设为有效值', @@ -158,7 +159,9 @@ $SLANG = array( 'BlobSizes' => 'Blob大小', 'Blobs' => 'Blobs', 'Brightness' => '亮度', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => '缓冲器', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => '可以自动对焦', 'CanAutoGain' => '可以自动增益控制', 'CanAutoIris' => '可以自动光圈', @@ -202,6 +205,7 @@ $SLANG = array( 'CaptureHeight' => '捕获高度', 'CaptureMethod' => '捕获方式', 'CapturePalette' => '捕获调色板', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => '捕获宽度', 'Cause' => '原因', 'CheckMethod' => '报警检查方式', @@ -232,6 +236,7 @@ $SLANG = array( 'ControlDevice' => '控制设备', 'ControlType' => '控制类型', 'Controllable' => '可控', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => '循环', 'CycleWatch' => '循环监视', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -240,12 +245,15 @@ $SLANG = array( 'DefaultRate' => '缺省速率', 'DefaultScale' => '缺省缩放', 'DefaultView' => '缺省视角', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => '删除', 'DeleteAndNext' => '删除并下一个', 'DeleteAndPrev' => '删除并前一个', 'DeleteSavedFilter' => '删除存储过滤器', 'Description' => '描述', 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => '设备', 'DeviceChannel' => '设备通道', 'DeviceFormat' => '设备格式', @@ -257,6 +265,7 @@ $SLANG = array( 'Disk' => '磁碟', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => '请捐款', 'DonateAlready' => '不,我已经捐赠过了', 'DonateEnticement' => '迄今,您已经运行ZoneMinder有一阵子了,希望它能够有助于增强您家或者办公区域的安全。尽管ZoneMinder是,并将保持免费和开源,该项目依然在研发和支持中投入了资金和精力。如果您愿意支持今后的开发和新功能,那么请考虑为该项目捐款。捐款不是必须的,任何数量的捐赠,我们都很感谢。

如果您愿意捐款,请选择下列选项,或者访问 http://www.zoneminder.com/donate.html 捐赠主页。

感谢您使用ZoneMinder,并且不要忘记访问访问ZoneMinder.com的论坛以获得支持或建议,这可以提升您的ZoneMinder的体验。', @@ -266,7 +275,6 @@ $SLANG = array( 'DonateRemindNever' => '不,我不打算捐款', 'DonateRemindWeek' => '现在不,1星期内再次提醒我', 'DonateYes' => '好,我现在就捐款', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => '下载', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Duration', @@ -309,10 +317,12 @@ $SLANG = array( 'Feed' => '转送源', 'Ffmpeg' => 'Ffmpeg', 'File' => '文件', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => '将全部匹配项存档', 'FilterDeleteEvents' => '将全部匹配项删除', 'FilterEmailEvents' => '将全部匹配项详情电邮出去', 'FilterExecuteEvents' => '执行全部匹配项命令', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => '全部匹配项的信息详情', 'FilterPx' => '过滤器像素', 'FilterUnset' => '您必须指定过滤器宽度和高度', @@ -322,12 +332,12 @@ $SLANG = array( 'First' => '首先', 'FlippedHori' => '水平翻转', 'FlippedVert' => '垂直翻转', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => '聚焦', 'ForceAlarm' => '强制报警', 'Format' => '格式', @@ -335,7 +345,6 @@ $SLANG = array( 'FrameId' => '帧 Id', 'FrameRate' => '帧率', 'FrameSkip' => '跳帧', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => '帧', 'Func' => '功能', 'Function' => '功能', @@ -462,6 +471,7 @@ $SLANG = array( 'MinZoomSpeed' => '最小缩放速度', 'MinZoomStep' => '最小缩放步进', 'Misc' => '杂项', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => '监视器', 'MonitorIds' => '监视器 Ids', 'MonitorPreset' => '监视器预设值', @@ -472,12 +482,13 @@ $SLANG = array( 'Montage' => '镜头组接', 'Month' => '月', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => '移动', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => '必须大于等于', 'MustBeLe' => '必须小于等于', 'MustConfirmPassword' => '您必须确认密码', @@ -506,6 +517,9 @@ $SLANG = array( 'NumPresets' => '数值预置', 'Off' => '关', 'On' => '开', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => '等于', 'OpGt' => '大于', 'OpGtEq' => '大于等于', @@ -552,6 +566,9 @@ $SLANG = array( 'Presets' => '预置', 'Prev' => '前', 'Probe' => 'Probe', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => '协议', 'Rate' => '速率', 'Real' => '实际', @@ -639,6 +656,7 @@ $SLANG = array( 'Submit' => '发送', 'System' => '系统', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => '缩略图', 'Tilt' => '倾斜', @@ -673,13 +691,16 @@ $SLANG = array( 'UpdateNotNecessary' => '无须更新', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => '使用筛选器', 'UseFilterExprsPost' => ' 筛选器 表达式', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => '使用 ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => '用户', 'Username' => '用户名', 'Users' => '用户', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => '数值', 'Version' => '版本', 'VersionIgnore' => '忽略该版本', @@ -719,6 +740,7 @@ $SLANG = array( 'Zone' => '区域', 'ZoneAlarmColour' => '报警色彩 (红/绿/蓝)', 'ZoneArea' => '区域', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => '过滤宽度/高度 (像素)', 'ZoneMinMaxAlarmArea' => '最小/最大报警区域', 'ZoneMinMaxBlobArea' => '最小/最大污渍区 Blob', @@ -727,7 +749,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => '最小/最大像素阈值(0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => '忽略过载帪数', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => '区域', 'Zoom' => '缩放', 'ZoomIn' => '放大', diff --git a/web/lang/cs_cz.php b/web/lang/cs_cz.php index 3d996b003..ff0f6f260 100644 --- a/web/lang/cs_cz.php +++ b/web/lang/cs_cz.php @@ -88,6 +88,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Alarm Maximum FPS', 'AlarmPx' => 'Alarm Px', 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'Pozor', 'All' => 'Vechny', 'Apply' => 'Pout', @@ -132,13 +133,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', 'BadFormat' => 'Format must be set to an integer of zero or more', 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'Height must be set to a valid value', 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'Jmna moho obsahovat pouze alfanumerick znaky a podtrtko i pomlku', 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 'BadPath' => 'Path must be set to a valid value', @@ -158,7 +159,9 @@ $SLANG = array( 'BlobSizes' => 'Velikost znaky', 'Blobs' => 'Znaky', 'Brightness' => 'Svtlost', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'Bufery', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Um automaticky zaostit', 'CanAutoGain' => 'Um automatick zisk', 'CanAutoIris' => 'Um auto iris', @@ -202,6 +205,7 @@ $SLANG = array( 'CaptureHeight' => 'Vka zdrojovho snmku', 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 'CapturePalette' => 'Paleta zdrojovho snmku', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => 'ka zdrojovho snmku', 'Cause' => 'Pina', 'CheckMethod' => 'Metoda znakovn alarmem', @@ -232,6 +236,7 @@ $SLANG = array( 'ControlDevice' => 'Zazen zen', 'ControlType' => 'Typ zen', 'Controllable' => 'diteln', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Cyklus', 'CycleWatch' => 'Cyklick prohlen', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -240,12 +245,15 @@ $SLANG = array( 'DefaultRate' => 'Default Rate', 'DefaultScale' => 'Pednastaven velikost', 'DefaultView' => 'Default View', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => 'Smazat', 'DeleteAndNext' => 'Smazat & Dal', 'DeleteAndPrev' => 'Smazat & Pedchoz', 'DeleteSavedFilter' => 'Smazat filtr', 'Description' => 'Popis', 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Device', // Added - 2009-02-08 'DeviceChannel' => 'Kanl zazen', 'DeviceFormat' => 'Formt zazen', @@ -257,6 +265,7 @@ $SLANG = array( 'Disk' => 'Disk', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => 'Prosm podpote', 'DonateAlready' => 'Ne, u jsem podpoil', 'DonateEnticement' => 'Ji njakou dobu pouvte software ZoneMinder k ochran svho majetku a pedpokldm, e jej shledvte uitenm. Pestoe je ZoneMinder, znovu pipomnm, zdarma a voln en software, stoj jeho vvoj a podpora njak penze. Pokud byste chtl/a podpoit budouc vvoj a nov monosti softwaru, prosm zvate darovn finann pomoci. Darovn je, samozejm, dobrovoln, ale zato velmi cenn mete pispt jakou stkou chcete.

Pokud mte zjem podpoit n tm, prosm, vyberte ne uvedenou monost, nebo navtivte http://www.zoneminder.com/donate.html.

Dkuji Vm e jste si vybral/a software ZoneMinder a nezapomete navtvit frum na ZoneMinder.com pro podporu a nvrhy jak udlat ZoneMinder jet lepm ne je dnes.', @@ -266,7 +275,6 @@ $SLANG = array( 'DonateRemindNever' => 'Ne, nechci podpoit ZoneMinder, nepipomnat', 'DonateRemindWeek' => 'Nyn ne, pipomenout za tden', 'DonateYes' => 'Ano, chcit podpoit ZoneMinder nyn', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Sthnout', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Prbh', @@ -309,10 +317,12 @@ $SLANG = array( 'Feed' => 'Nasytit', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'Soubor', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Archivovat vechny nalezen', 'FilterDeleteEvents' => 'Smazat vechny nalezen', 'FilterEmailEvents' => 'Poslat email s detaily nalezench', 'FilterExecuteEvents' => 'Spustit pkaz na vech nalezench', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Podat zprvu o vech nalezench', 'FilterPx' => 'Filtr Px', 'FilterUnset' => 'You must specify a filter width and height', @@ -322,12 +332,12 @@ $SLANG = array( 'First' => 'Prvn', 'FlippedHori' => 'Peklopen vodorovn', 'FlippedVert' => 'Peklopen svisle', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Zaosten', 'ForceAlarm' => 'Spustit alarm', 'Format' => 'Formt', @@ -335,7 +345,6 @@ $SLANG = array( 'FrameId' => 'Snmek Id', 'FrameRate' => 'Rychlost snmk', 'FrameSkip' => 'Vynechat snmek', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'Snmky', 'Func' => 'Funkce', 'Function' => 'Funkce', @@ -462,6 +471,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min rychlost zoomu', 'MinZoomStep' => 'Min krok zoomu', 'Misc' => 'Ostatn', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => 'Kamera', 'MonitorIds' => 'Id kamer', 'MonitorPreset' => 'Monitor Preset', @@ -472,12 +482,13 @@ $SLANG = array( 'Montage' => 'Sestih', 'Month' => 'Msc', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Pohyb', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => 'mus bt vt nebo rovno ne', 'MustBeLe' => 'mus bt men nebo rovno ne', 'MustConfirmPassword' => 'Muste potvrdit heslo', @@ -506,6 +517,9 @@ $SLANG = array( 'NumPresets' => 'Poet pedvoleb', 'Off' => 'Off', 'On' => 'On', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => 'rovno', 'OpGt' => 'vt', 'OpGtEq' => 'vt nebo rovno', @@ -552,6 +566,9 @@ $SLANG = array( 'Presets' => 'Pedvolby', 'Prev' => 'Zpt', 'Probe' => 'Probe', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => 'Rychlost', 'Real' => 'Skuten', @@ -639,6 +656,7 @@ $SLANG = array( 'Submit' => 'Potvrdit', 'System' => 'System', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Piblit', 'Thumbnail' => 'Miniatura', 'Tilt' => 'Nklon', @@ -673,13 +691,16 @@ $SLANG = array( 'UpdateNotNecessary' => 'Update nen poteba.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Pout filtr', 'UseFilterExprsPost' => ' vraz', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Pout ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => 'Uivatel', 'Username' => 'Uivatelsk jmno', 'Users' => 'Uivatel', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'Hodnota', 'Version' => 'Verze', 'VersionIgnore' => 'Ignorovat tuto verzi', @@ -719,6 +740,7 @@ $SLANG = array( 'Zone' => 'Zna', 'ZoneAlarmColour' => 'Barva alarmu (Red/Green/Blue)', 'ZoneArea' => 'Zone Area', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Filter Width/Height (pixels)', 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', @@ -727,7 +749,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => 'Zny', 'Zoom' => 'Zoom', 'ZoomIn' => 'Zvtit', diff --git a/web/lang/de_de.php b/web/lang/de_de.php index 28002aec8..18388e0cc 100644 --- a/web/lang/de_de.php +++ b/web/lang/de_de.php @@ -19,6 +19,8 @@ // // ZoneMinder german Translation by Robert Schumann (rs at core82 dot de) +// ZoneMinder german Translation by Sebastian Kaminski (github @seeebek) +// german Translation update by seebaer1976 // Notes for Translators // 0. Get some credit, put your name in the line above (optional) @@ -50,7 +52,7 @@ // do this by default, uncomment this if required. // // Example -// header( "Content-Type: text/html; charset=iso-8859-1" ); +header( "Content-Type: text/html; charset=utf-8" ); // You may need to change your locale here if your default one is incorrect for the // language described in this file, or if you have multiple languages supported. @@ -76,7 +78,7 @@ $SLANG = array( '8BitGrey' => '8-Bit-Grau', 'Action' => 'Aktion', 'Actual' => 'Original', - 'AddNewControl' => 'Neues Kontrollelement hinzufügen', + 'AddNewControl' => 'Neues Kontrollelement hinzufgen', 'AddNewMonitor' => 'Neuer Monitor', 'AddNewUser' => 'Neuer Benutzer', 'AddNewZone' => 'Neue Zone', @@ -87,10 +89,11 @@ $SLANG = array( 'AlarmLimits' => 'Alarm-Limits', 'AlarmMaximumFPS' => 'Alarm-Maximum-FPS', 'AlarmPx' => 'Alarm-Pixel', - 'AlarmRGBUnset' => 'Sie müssen eine RGB-Alarmfarbe setzen', + 'AlarmRGBUnset' => 'Sie mssen eine RGB-Alarmfarbe setzen', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'Alarm', 'All' => 'Alle', - 'Apply' => 'OK', + 'Apply' => 'Anwenden', 'ApplyingStateChange' => 'Aktiviere neuen Status', 'ArchArchived' => 'Nur Archivierte', 'ArchUnarchived' => 'Nur Nichtarchivierte', @@ -104,7 +107,7 @@ $SLANG = array( 'AttrCause' => 'Grund', 'AttrDate' => 'Datum', 'AttrDateTime' => 'Datum/Zeit', - 'AttrDiskBlocks' => 'Disk-Bloecke', + 'AttrDiskBlocks' => 'Disk-Blcke', 'AttrDiskPercent' => 'Disk-Prozent', 'AttrDuration' => 'Dauer', 'AttrFrames' => 'Bilder', @@ -119,156 +122,163 @@ $SLANG = array( 'AttrTotalScore' => 'Totale Punktzahl', 'AttrWeekday' => 'Wochentag', 'Auto' => 'Auto', - 'AutoStopTimeout' => 'Auto-Stopp-Zeitüberschreitung', - 'Available' => 'Available', // Added - 2009-03-31 + 'AutoStopTimeout' => 'Auto-Stopp-Zeitberschreitung', + 'Available' => 'Verfgbar', // Added - 2009-03-31 'AvgBrScore' => 'Mittlere
Punktzahl', 'Background' => 'Hintergrund', 'BackgroundFilter' => 'Filter im Hintergrund laufen lassen', - 'BadAlarmFrameCount' => 'Die Bildanzahl muss ganzzahlig 1 oder größer sein', + 'BadAlarmFrameCount' => 'Die Bildanzahl muss ganzzahlig 1 oder grer sein', 'BadAlarmMaxFPS' => 'Alarm-Maximum-FPS muss eine positive Ganzzahl oder eine Gleitkommazahl sein', - 'BadChannel' => 'Der Kanal muss ganzzahlig 0 oder größer sein', - 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 - 'BadDevice' => 'Das Gerät muss eine gültige Systemresource sein', - 'BadFPSReportInterval' => 'Der FPS-Intervall-Puffer-Zähler muss ganzzahlig 0 oder größer sein', - 'BadFormat' => 'Das Format muss ganzzahlig 0 oder größer sein', - 'BadFrameSkip' => 'Der Auslasszähler für Frames muss ganzzahlig 0 oder größer sein', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', - 'BadHeight' => 'Die Höhe muss auf einen gültigen Wert eingestellt sein', - 'BadHost' => 'Der Host muss auf eine gültige IP-Adresse oder einen Hostnamen (ohne http://) eingestellt sein', - 'BadImageBufferCount' => 'Die Größe des Bildpuffers muss ganzzahlig 10 oder größer sein', - 'BadLabelX' => 'Die x-Koordinate der Bezeichnung muss ganzzahlig 0 oder größer sein', - 'BadLabelY' => 'Die y-Koordinate der Bezeichnung muss ganzzahlig 0 oder größer sein', + 'BadChannel' => 'Der Kanal muss ganzzahlig 0 oder grer sein', + 'BadColours' => 'Zielfarbe muss auf einen gltigen Wert gesetzt werden', // Added - 2011-06-15 + 'BadDevice' => 'Das Gert muss eine gltige Systemresource sein', + 'BadFPSReportInterval' => 'Der FPS-Intervall-Puffer-Zhler muss ganzzahlig 0 oder grer sein', + 'BadFormat' => 'Das Format muss ganzzahlig 0 oder grer sein', + 'BadFrameSkip' => 'Der Auslasszhler fr Frames muss ganzzahlig 0 oder grer sein', + 'BadHeight' => 'Die Hhe muss auf einen gltigen Wert eingestellt sein', + 'BadHost' => 'Der Host muss auf eine gltige IP-Adresse oder einen Hostnamen (ohne http://) eingestellt sein', + 'BadImageBufferCount' => 'Die Gre des Bildpuffers muss ganzzahlig 10 oder grer sein', + 'BadLabelX' => 'Die x-Koordinate der Bezeichnung muss ganzzahlig 0 oder grer sein', + 'BadLabelY' => 'Die y-Koordinate der Bezeichnung muss ganzzahlig 0 oder grer sein', 'BadMaxFPS' => 'Maximum-FPS muss eine positive Ganzzahl oder eine Gleitkommazahl sein', - 'BadNameChars' => 'Namen dürfen nur aus Buchstaben, Zahlen und Trenn- oder Unterstrichen bestehen', - 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 - 'BadPath' => 'Der Pfad muss auf einen gültigen Wert eingestellt sein', - 'BadPort' => 'Der Port muss auf eine gültige Zahl eingestellt sein', - 'BadPostEventCount' => 'Der Zähler für die Ereignisfolgebilder muss ganzzahlig 0 oder größer sein', - 'BadPreEventCount' => 'Der Zähler für die Ereignisvorlaufbilder muss mindestens ganzzahlig 0 und kleiner als die Bildpuffergröße sein', - 'BadRefBlendPerc' => 'Der Referenz-Blenden-Prozentwert muss ganzzahlig 0 oder größer sein', - 'BadSectionLength' => 'Die Bereichslänge muss ganzzahlig 0 oder größer sein', - 'BadSignalCheckColour' => 'Die Signalprüffarbe muss auf einen gültigen Farbwert eingestellt sein', - 'BadStreamReplayBuffer'=> 'Der Wiedergabestrompuffer tream replay buffer must be an integer of zero or more', - 'BadWarmupCount' => 'Die Anzahl der Vorwrmbilder muss ganzzahlig 0 oder größer sein', - 'BadWebColour' => 'Die Webfarbe muss auf einen gültigen Farbwert eingestellt sein', - 'BadWidth' => 'Die Breite muss auf einen gültigen Wert eingestellt sein', + 'BadMotionFrameSkip' => 'Bewegungsrahmen Skip-Zhlung mu eine ganze Zahl von null oder mehr betragen,', + 'BadNameChars' => 'Namen drfen nur aus Buchstaben, Zahlen und Trenn- oder Unterstrichen bestehen', + 'BadPalette' => 'Palette muss auf einen gltigen Wert gesetzt sein', // Added - 2009-03-31 + 'BadPath' => 'Der Pfad muss auf einen gltigen Wert eingestellt sein', + 'BadPort' => 'Der Port muss auf eine gltige Zahl eingestellt sein', + 'BadPostEventCount' => 'Der Zhler fr die Ereignisfolgebilder muss ganzzahlig 0 oder grer sein', + 'BadPreEventCount' => 'Der Zhler fr die Ereignisvorlaufbilder muss mindestens ganzzahlig 0 und kleiner als die Bildpuffergre sein', + 'BadRefBlendPerc' => 'Der Referenz-Blenden-Prozentwert muss ganzzahlig 0 oder grer sein', + 'BadSectionLength' => 'Die Bereichslnge muss ganzzahlig 0 oder grer sein', + 'BadSignalCheckColour' => 'Die Signalprffarbe muss auf einen gltigen Farbwert eingestellt sein', + 'BadStreamReplayBuffer'=> 'Der Wiedergabestrompuffer muss eine ganze Zahl von null oder mehr betragen', + 'BadWarmupCount' => 'Die Anzahl der Vorwrmbilder muss ganzzahlig 0 oder grer sein', + 'BadWebColour' => 'Die Webfarbe muss auf einen gltigen Farbwert eingestellt sein', + 'BadWidth' => 'Die Breite muss auf einen gltigen Wert eingestellt sein', 'Bandwidth' => 'Bandbreite', - 'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing + 'BandwidthHead' => 'Bandbreite', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing 'BlobPx' => 'Blob-Pixel', - 'BlobSizes' => 'Blobgröße', + 'BlobSizes' => 'Blobgre', 'Blobs' => 'Blobs', 'Brightness' => 'Helligkeit', - 'Buffers' => 'Puffer', + 'Buffer' => 'Buffer', // Added - 2015-04-18 + 'Buffers' => 'Buffer', + 'CSSDescription' => 'ndere das standard CSS fr diesen Computer.', // Added - 2015-04-18 'CanAutoFocus' => 'Kann Autofokus', - 'CanAutoGain' => 'Kann Auto-Verstärkung', - 'CanAutoIris' => 'Kann Auto-Iris', - 'CanAutoWhite' => 'Kann Auto-Weiß-Abgleich', + 'CanAutoGain' => 'Kann Auto-Verstrkung', + 'CanAutoIris' => 'Kann Auto-Blende', + 'CanAutoWhite' => 'Kann Auto-Wei-Abgleich', 'CanAutoZoom' => 'Kann Auto-Zoom', - 'CanFocus' => 'Kann Fokus', + 'CanFocus' => 'Kann Fokus', 'CanFocusAbs' => 'Kann absoluten Fokus', 'CanFocusCon' => 'Kann kontinuierlichen Fokus', 'CanFocusRel' => 'Kann relativen Fokus', - 'CanGain' => 'Kann Verstärkung', - 'CanGainAbs' => 'Kann absolute Verstärkung', - 'CanGainCon' => 'Kann kontinuierliche Verstärkung', - 'CanGainRel' => 'Kann relative Verstäkung', - 'CanIris' => 'Kann Iris', - 'CanIrisAbs' => 'Kann absolute Iris', - 'CanIrisCon' => 'Kann kontinuierliche Iris', - 'CanIrisRel' => 'Kann relative Iris', - 'CanMove' => 'Kann Bewegung', + 'CanGain' => 'Kann Verstrkung', + 'CanGainAbs' => 'Kann absolute Verstrkung', + 'CanGainCon' => 'Kann kontinuierliche Verstrkung', + 'CanGainRel' => 'Kann relative Verstrkung', + 'CanIris' => 'Kann Blende', + 'CanIrisAbs' => 'Kann absolute Blende', + 'CanIrisCon' => 'Kann kontinuierliche Blende', + 'CanIrisRel' => 'Kann relative Blende', + 'CanMove' => 'Kann sich Bewegung', 'CanMoveAbs' => 'Kann absolute Bewegung', 'CanMoveCon' => 'Kann kontinuierliche Bewegung', 'CanMoveDiag' => 'Kann diagonale Bewegung', 'CanMoveMap' => 'Kann Mapped-Bewegung', 'CanMoveRel' => 'Kann relative Bewegung', - 'CanPan' => 'Kann Pan' , - 'CanReset' => 'Kann Reset', + 'CanPan' => 'Kann Pan' , + 'CanReset' => 'Kann Reset', 'CanSetPresets' => 'Kann Voreinstellungen setzen', - 'CanSleep' => 'Kann Sleep', - 'CanTilt' => 'Kann Neigung', - 'CanWake' => 'Kann Wake', - 'CanWhite' => 'Kann Weiß-Abgleich', - 'CanWhiteAbs' => 'Kann absoluten Weiß-Abgleich', - 'CanWhiteBal' => 'Kann Weiß-Abgleich', - 'CanWhiteCon' => 'Kann kontinuierlichen Weiß-Abgleich', - 'CanWhiteRel' => 'Kann relativen Weiß-Abgleich', - 'CanZoom' => 'Kann Zoom', + 'CanSleep' => 'Kann Sleep', + 'CanTilt' => 'Kann Neigung', + 'CanWake' => 'Kann Wake', + 'CanWhite' => 'Kann Wei-Abgleich', + 'CanWhiteAbs' => 'Kann absoluten Wei-Abgleich', + 'CanWhiteBal' => 'Kann Wei-Abgleich-Balance', + 'CanWhiteCon' => 'Kann kontinuierlichen Wei-Abgleich', + 'CanWhiteRel' => 'Kann relativen Wei-Abgleich', + 'CanZoom' => 'Kann Zoom', 'CanZoomAbs' => 'Kann absoluten Zoom', 'CanZoomCon' => 'Kann kontinuierlichen Zoom', 'CanZoomRel' => 'Kann relativen Zoom', 'Cancel' => 'Abbruch', 'CancelForcedAlarm' => 'Abbruch des unbedingten Alarms', - 'CaptureHeight' => 'Erfasse Höhe', - 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 - 'CapturePalette' => 'Erfasse Farbpalette', - 'CaptureWidth' => 'Erfasse Breite', + 'CaptureHeight' => 'Erfassungshhe', + 'CaptureMethod' => 'Erfassungsmethode', // Added - 2009-02-08 + 'CapturePalette' => 'Erfassungsfarbpalette', + 'CaptureResolution' => 'Aufnahmeauflsung', // Added - 2015-04-18 + 'CaptureWidth' => 'Erfassungsbreite', 'Cause' => 'Grund', - 'CheckMethod' => 'Alarm-Prüfmethode', - 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'CheckMethod' => 'Alarm-Prfmethode', + 'ChooseDetectedCamera' => 'Erkannte Kamera whlen', // Added - 2009-03-31 'ChooseFilter' => 'Filterauswahl', - 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 - 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 - 'ChoosePreset' => 'Voreinstellung auswählen', - 'Clear' => 'Clear', // Added - 2011-06-16 - 'Close' => 'Schließen', + 'ChooseLogFormat' => 'Log-Format whlen', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Log-Auswahl', // Added - 2011-06-17 + 'ChoosePreset' => 'Voreinstellung auswhlen', + 'Clear' => 'Leeren', // Added - 2011-06-16 + 'Close' => 'Schlieen', 'Colour' => 'Farbe', 'Command' => 'Kommando', - 'Component' => 'Component', // Added - 2011-06-16 + 'Component' => 'Komponente', // Added - 2011-06-16 'Config' => 'Konfig.', - 'ConfiguredFor' => 'Konfiguriert für', - 'ConfirmDeleteEvents' => 'Sind Sie sicher, dass Sie die ausgewählten Ereignisse löschen wollen?', - 'ConfirmPassword' => 'Passwortbestätigung', + 'ConfiguredFor' => 'Konfiguriert fr', + 'ConfirmDeleteEvents' => 'Sind Sie sicher, dass Sie die ausgewhlten Ereignisse lschen wollen?', + 'ConfirmPassword' => 'Passwortbesttigung', 'ConjAnd' => 'und', 'ConjOr' => 'oder', 'Console' => 'Konsole', - 'ContactAdmin' => 'Bitte kontaktieren Sie den Administrator für weitere Details', + 'ContactAdmin' => 'Bitte kontaktieren Sie den Administrator fr weitere Details', 'Continue' => 'Weiter', 'Contrast' => 'Kontrast', 'Control' => 'Kontrolle', 'ControlAddress' => 'Kontrolladresse', - 'ControlCap' => 'Kontrollmöglichkeit', - 'ControlCaps' => 'Kontrollmöglichkeiten', - 'ControlDevice' => 'Kontrollgerät', + 'ControlCap' => 'Kontrollmglichkeit', + 'ControlCaps' => 'Kontrollmglichkeiten', + 'ControlDevice' => 'Kontrollgert', 'ControlType' => 'Kontrolltyp', 'Controllable' => 'Kontrollierbar', + 'Current' => 'Aktuell', // Added - 2015-04-18 'Cycle' => 'Zyklus', 'CycleWatch' => 'Zeitzyklus', - 'DateTime' => 'Date/Time', // Added - 2011-06-16 + 'DateTime' => 'Datum/Zeit', // Added - 2011-06-16 'Day' => 'Tag', 'Debug' => 'Debug', 'DefaultRate' => 'Standardrate', 'DefaultScale' => 'Standardskalierung', 'DefaultView' => 'Standardansicht', - 'Delete' => 'Löschen', - 'DeleteAndNext' => 'Löschen & Nächstes', - 'DeleteAndPrev' => 'Löschen & Vorheriges', - 'DeleteSavedFilter' => 'Lösche gespeichertes Filter', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Verzgerung', // Added - 2015-04-18 + 'Delete' => 'Lschen', + 'DeleteAndNext' => 'Lschen & Nchstes', + 'DeleteAndPrev' => 'Lschen & Vorheriges', + 'DeleteSavedFilter' => 'Lsche gespeichertes Filter', 'Description' => 'Beschreibung', - 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 - 'Device' => 'Device', // Added - 2009-02-08 - 'DeviceChannel' => 'Gerätekanal', - 'DeviceFormat' => 'Geräteformat', - 'DeviceNumber' => 'Gerätenummer', - 'DevicePath' => 'Gerätepfad', - 'Devices' => 'Geräte', + 'DetectedCameras' => 'Erkannte Kameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Erkannte Profile', // Added - 2015-04-18 + 'Device' => 'Gert', // Added - 2009-02-08 + 'DeviceChannel' => 'Gertekanal', + 'DeviceFormat' => 'Gerteformat', + 'DeviceNumber' => 'Gertenummer', + 'DevicePath' => 'Gertepfad', + 'Devices' => 'Gerte', 'Dimensions' => 'Abmessungen', 'DisableAlarms' => 'Alarme abschalten', 'Disk' => 'Disk', - 'Display' => 'Display', // Added - 2011-01-30 - 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'Display' => 'Anzeige', // Added - 2011-01-30 + 'Displaying' => 'Gezeigt', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => 'Bitte spenden Sie.', 'DonateAlready' => 'Nein, ich habe schon gespendet', - 'DonateEnticement' => 'Sie benutzen ZoneMinder nun schon eine Weile und es ist hoffentlich eine nützliche Applikation zur Verbesserung Ihrer Heim- oder Arbeitssicherheit. Obwohl ZoneMinder eine freie Open-Source-Software ist und bleiben wird, entstehen Kosten bei der Entwicklung und dem Support.

Falls Sie ZoneMinder fr Weiterentwicklung in der Zukunft unterstützen möchten, denken Sie bitte ber eine Spende für das Projekt unter der Webadresse http://www.zoneminder.com/donate.html oder über nachfolgend stehende Option nach. Spenden sind, wie der Name schon sagt, immer freiwillig. Dem Projekt helfen kleine genauso wie größere Spenden sehr weiter und ein herzlicher Dank ist jedem Spender sicher.

Vielen Dank dafür, dass sie ZoneMinder benutzen. Vergessen Sie nicht die Foren unter ZoneMinder.com, um Support zu erhalten und Ihre Erfahrung mit ZoneMinder zu verbessern!', + 'DonateEnticement' => 'Sie benutzen ZoneMinder nun schon eine Weile und es ist hoffentlich eine ntzliche Applikation zur Verbesserung Ihrer Heim- oder Arbeitssicherheit. Obwohl ZoneMinder eine freie Open-Source-Software ist und bleiben wird, entstehen Kosten bei der Entwicklung und dem Support.

Falls Sie ZoneMinder fr Weiterentwicklung in der Zukunft untersttzen mchten, denken Sie bitte ber eine Spende fr das Projekt unter der Webadresse http://www.zoneminder.com/donate.html oder ber nachfolgend stehende Option nach. Spenden sind, wie der Name schon sagt, immer freiwillig. Dem Projekt helfen kleine genauso wie grere Spenden sehr weiter und ein herzlicher Dank ist jedem Spender sicher.

Vielen Dank dafr, dass sie ZoneMinder benutzen. Vergessen Sie nicht die Foren unter ZoneMinder.com, um Support zu erhalten und Ihre Erfahrung mit ZoneMinder zu verbessern!', 'DonateRemindDay' => 'Noch nicht, erinnere mich in einem Tag noch mal.', 'DonateRemindHour' => 'Noch nicht, erinnere mich in einer Stunde noch mal.', 'DonateRemindMonth' => 'Noch nicht, erinnere mich in einem Monat noch mal.', - 'DonateRemindNever' => 'Nein, ich möchte nicht spenden, niemals erinnern.', + 'DonateRemindNever' => 'Nein, ich mchte nicht spenden, niemals erinnern.', 'DonateRemindWeek' => 'Noch nicht, erinnere mich in einer Woche noch mal.', - 'DonateYes' => 'Ja, ich möchte jetzt spenden.', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', + 'DonateYes' => 'Ja, ich mchte jetzt spenden.', 'Download' => 'Download', - 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 + 'DuplicateMonitorName' => 'Monitornamen Duplizieren', // Added - 2009-03-31 'Duration' => 'Dauer', 'Edit' => 'Bearbeiten', 'Email' => 'E-Mail', @@ -277,16 +287,16 @@ $SLANG = array( 'EnterNewFilterName' => 'Neuen Filternamen eingeben', 'Error' => 'Fehler', 'ErrorBrackets' => 'Fehler. Bitte nur gleiche Anzahl offener und geschlossener Klammern.', - 'ErrorValidValue' => 'Fehler. Bitte alle Werte auf richtige Eingabe prüfen', + 'ErrorValidValue' => 'Fehler. Bitte alle Werte auf richtige Eingabe prfen', 'Etc' => 'etc.', 'Event' => 'Ereignis', 'EventFilter' => 'Ereignisfilter', 'EventId' => 'Ereignis-ID', 'EventName' => 'Ereignisname', - 'EventPrefix' => 'Ereignis-Präfix', + 'EventPrefix' => 'Ereignis-Prfix', 'Events' => 'Ereignisse', 'Exclude' => 'Ausschluss;', - 'Execute' => 'Ausführen', + 'Execute' => 'Ausfhren', 'Export' => 'Exportieren', 'ExportDetails' => 'Exportiere Ereignis-Details', 'ExportFailed' => 'Exportieren fehlgeschlagen', @@ -295,51 +305,52 @@ $SLANG = array( 'ExportFormatZip' => 'ZIP (Komprimiert)', 'ExportFrames' => 'Exportiere Bilddetails', 'ExportImageFiles' => 'Exportiere Bilddateien', - 'ExportLog' => 'Export Log', // Added - 2011-06-17 + 'ExportLog' => 'Log Exportieren', // Added - 2011-06-17 'ExportMiscFiles' => 'Exportiere andere Dateien (falls vorhanden)', - 'ExportOptions' => 'Exportierungsoptionen', - 'ExportSucceeded' => 'Export Succeeded', // Added - 2009-02-08 + 'ExportOptions' => 'Exportoptionen', + 'ExportSucceeded' => 'Export Erfolgreich', // Added - 2009-02-08 'ExportVideoFiles' => 'Exportiere Videodateien (falls vorhanden)', 'Exporting' => 'Exportiere', - 'FPS' => 'fps', - 'FPSReportInterval' => 'fps-Meldeintervall', + 'FPS' => 'FPS', + 'FPSReportInterval' => 'FPS-Meldeintervall', 'FTP' => 'FTP', 'Far' => 'Weit', - 'FastForward' => 'Schnell vorwärts', + 'FastForward' => 'Schnell vorwrts', 'Feed' => 'Eingabe', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'Datei', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Archivierung aller Treffer', - 'FilterDeleteEvents' => 'Löschen aller Treffer', + 'FilterDeleteEvents' => 'Lschen aller Treffer', 'FilterEmailEvents' => 'Detaillierte E-Mail zu allen Treffern', - 'FilterExecuteEvents' => 'Ausführen bei allen Treffern', + 'FilterExecuteEvents' => 'Ausfhren bei allen Treffern', + 'FilterLog' => 'Log filtern', // Added - 2015-04-18 'FilterMessageEvents' => 'Detaillierte Nachricht zu allen Treffern', 'FilterPx' => 'Filter-Pixel', - 'FilterUnset' => 'Sie müssen eine Breite und Höhe für das Filter angeben', + 'FilterUnset' => 'Sie mssen eine Breite und Hhe fr das Filter angeben', 'FilterUploadEvents' => 'Hochladen aller Treffer', - 'FilterVideoEvents' => 'Video für alle Treffer erstellen', + 'FilterVideoEvents' => 'Video fr alle Treffer erstellen', 'Filters' => 'Filter', 'First' => 'Erstes', 'FlippedHori' => 'Horizontal gespiegelt', 'FlippedVert' => 'Vertikal gespiegelt', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'Keine', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Fokus', - 'ForceAlarm' => 'Unbedingter Alarm', + 'ForceAlarm' => 'Alarm erzwingen', 'Format' => 'Format', 'Frame' => 'Bild', 'FrameId' => 'Bild-ID', 'FrameRate' => 'Abspielgeschwindigkeit', 'FrameSkip' => 'Bilder auslassen', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'Bilder', 'Func' => 'Fkt.', 'Function' => 'Funktion', - 'Gain' => 'Verstärkung', + 'Gain' => 'Verstrkung', 'General' => 'Allgemeines', 'GenerateVideo' => 'Erzeuge Video', 'GeneratingVideo' => 'Erzeuge Video...', @@ -348,18 +359,18 @@ $SLANG = array( 'Group' => 'Gruppe', 'Groups' => 'Gruppen', 'HasFocusSpeed' => 'Hat Fokus-Geschwindigkeit', - 'HasGainSpeed' => 'Hat Verstäkungs-Geschwindigkeit', + 'HasGainSpeed' => 'Hat Verstrkungs-Geschwindigkeit', 'HasHomePreset' => 'Hat Standardvoreinstellungen', - 'HasIrisSpeed' => 'Hat Irisgeschwindigkeit', + 'HasIrisSpeed' => 'Hat Blendengeschwindigkeit', 'HasPanSpeed' => 'Hat Pan-Geschwindigkeit', 'HasPresets' => 'Hat Voreinstellungen', 'HasTiltSpeed' => 'Hat Neigungsgeschwindigkeit', 'HasTurboPan' => 'Hat Turbo-Pan', 'HasTurboTilt' => 'Hat Turbo-Neigung', - 'HasWhiteSpeed' => 'Hat Weiß-Abgleichgeschwindigkeit', + 'HasWhiteSpeed' => 'Hat Wei-Abgleichgeschwindigkeit', 'HasZoomSpeed' => 'Hat Zoom-Geschwindigkeit', 'High' => 'hohe', - 'HighBW' => 'Hohe B/W', + 'HighBW' => 'Hohe B/W', 'Home' => 'Home', 'Hour' => 'Stunde', 'Hue' => 'Farbton', @@ -367,22 +378,22 @@ $SLANG = array( 'Idle' => 'Leerlauf', 'Ignore' => 'Ignoriere', 'Image' => 'Bild', - 'ImageBufferSize' => 'Bildpuffergröße', + 'ImageBufferSize' => 'Bildpuffergre', 'Images' => 'Bilder', 'In' => 'In', 'Include' => 'Einschluss', 'Inverted' => 'Invertiert', - 'Iris' => 'Iris', - 'KeyString' => 'Schlüsselwort', + 'Iris' => 'Blende', + 'KeyString' => 'Schlsselwort', 'Label' => 'Bezeichnung', 'Language' => 'Sprache', 'Last' => 'Letztes', 'Layout' => 'Layout', // Added - 2009-02-08 - 'Level' => 'Level', // Added - 2011-06-16 + 'Level' => 'Stufe', // Added - 2011-06-16 'Libvlc' => 'Libvlc', 'LimitResultsPost' => 'Ergebnisse;', // This is used at the end of the phrase 'Limit to first N results only' 'LimitResultsPre' => 'Begrenze nur auf die ersten', // This is used at the beginning of the phrase 'Limit to first N results only' - 'Line' => 'Line', // Added - 2011-06-16 + 'Line' => 'Zeile', // Added - 2011-06-16 'LinkedMonitors' => 'Verbundene Monitore', 'List' => 'Liste', 'Load' => 'Last', @@ -395,7 +406,7 @@ $SLANG = array( 'Logout' => 'Abmelden', 'Logs' => 'Logs', // Added - 2011-06-17 'Low' => 'niedrige', - 'LowBW' => 'Niedrige B/W', + 'LowBW' => 'Niedrige B/W', 'Main' => 'Haupt', 'Man' => 'Man', 'Manual' => 'Manual', @@ -406,83 +417,85 @@ $SLANG = array( 'MaxFocusRange' => 'Maximaler Fokusbereich', 'MaxFocusSpeed' => 'Maximale Fokusgeschwindigkeit', 'MaxFocusStep' => 'Maximale Fokusstufe', - 'MaxGainRange' => 'Maximaler Verstärkungsbereich', - 'MaxGainSpeed' => 'Maximale Verstärkungsgeschwindigkeit', - 'MaxGainStep' => 'Maximale Verstärkungsstufe', - 'MaxIrisRange' => 'Maximaler Irisbereich', - 'MaxIrisSpeed' => 'Maximale Irisgeschwindigkeit', - 'MaxIrisStep' => 'Maximale Irisstufe', + 'MaxGainRange' => 'Maximaler Verstrkungsbereich', + 'MaxGainSpeed' => 'Maximale Verstrkungsgeschwindigkeit', + 'MaxGainStep' => 'Maximale Verstrkungsstufe', + 'MaxIrisRange' => 'Maximaler Blendenbereich', + 'MaxIrisSpeed' => 'Maximale Blendengeschwindigkeit', + 'MaxIrisStep' => 'Maximale Blendenstufe', 'MaxPanRange' => 'Maximaler Pan-Bereich', 'MaxPanSpeed' => 'Maximale Pan-Geschw.', 'MaxPanStep' => 'Maximale Pan-Stufe', 'MaxTiltRange' => 'Maximaler Neig.-Bereich', 'MaxTiltSpeed' => 'Maximale Neig.-Geschw.', 'MaxTiltStep' => 'Maximale Neig.-Stufe', - 'MaxWhiteRange' => 'Maximaler Weiß-Abgl.bereich', - 'MaxWhiteSpeed' => 'Maximale Weiß-Abgl.geschw.', - 'MaxWhiteStep' => 'Maximale Weiß-Abgl.stufe', + 'MaxWhiteRange' => 'Maximaler Wei-Abgl.bereich', + 'MaxWhiteSpeed' => 'Maximale Wei-Abgl.geschw.', + 'MaxWhiteStep' => 'Maximale Wei-Abgl.stufe', 'MaxZoomRange' => 'Maximaler Zoom-Bereich', 'MaxZoomSpeed' => 'Maximale Zoom-Geschw.', 'MaxZoomStep' => 'Maximale Zoom-Stufe', 'MaximumFPS' => 'Maximale FPS', 'Medium' => 'mittlere', - 'MediumBW' => 'Mittlere B/W', - 'Message' => 'Message', // Added - 2011-06-16 + 'MediumBW' => 'Mittlere B/W', + 'Message' => 'Nachricht', // Added - 2011-06-16 'MinAlarmAreaLtMax' => 'Der minimale Alarmbereich sollte kleiner sein als der maximale', - 'MinAlarmAreaUnset' => 'Sie müssen einen Minimumwert an Alarmflächenpixeln angeben', - 'MinBlobAreaLtMax' => 'Die minimale Blob-Fläche muss kleiner sein als die maximale', - 'MinBlobAreaUnset' => 'Sie müssen einen Minimumwert an Blobflächenpixeln angeben', - 'MinBlobLtMinFilter' => 'Die minimale Blob-Fläche sollte kleiner oder gleich der minimalen Filterfläche sein', - 'MinBlobsLtMax' => 'Die minimalen Blobs müssen kleiner sein als die maximalen', - 'MinBlobsUnset' => 'Sie müssen einen Minimumwert an Blobs angeben', - 'MinFilterAreaLtMax' => 'Die minimale Filterfläche sollte kleiner sein als die maximale', - 'MinFilterAreaUnset' => 'Sie müssen einen Minimumwert an Filterpixeln angeben', - 'MinFilterLtMinAlarm' => 'Die minimale Filterfläche sollte kleiner oder gleich der minimalen Alarmfläche sein', + 'MinAlarmAreaUnset' => 'Sie mssen einen Minimumwert an Alarmflchenpixeln angeben', + 'MinBlobAreaLtMax' => 'Die minimale Blob-Flche muss kleiner sein als die maximale', + 'MinBlobAreaUnset' => 'Sie mssen einen Minimumwert an Blobflchenpixeln angeben', + 'MinBlobLtMinFilter' => 'Die minimale Blob-Flche sollte kleiner oder gleich der minimalen Filterflche sein', + 'MinBlobsLtMax' => 'Die minimalen Blobs mssen kleiner sein als die maximalen', + 'MinBlobsUnset' => 'Sie mssen einen Minimumwert an Blobs angeben', + 'MinFilterAreaLtMax' => 'Die minimale Filterflche sollte kleiner sein als die maximale', + 'MinFilterAreaUnset' => 'Sie mssen einen Minimumwert an Filterpixeln angeben', + 'MinFilterLtMinAlarm' => 'Die minimale Filterflche sollte kleiner oder gleich der minimalen Alarmflche sein', 'MinFocusRange' => 'Min. Fokusbereich', 'MinFocusSpeed' => 'Min. Fokusgeschw.', 'MinFocusStep' => 'Min. Fokusstufe', - 'MinGainRange' => 'Min. Verstärkungsbereich', - 'MinGainSpeed' => 'Min. Verstärkungsgeschwindigkeit', - 'MinGainStep' => 'Min. Verstärkungsstufe', - 'MinIrisRange' => 'Min. Irisbereich', - 'MinIrisSpeed' => 'Min. Irisgeschwindigkeit', - 'MinIrisStep' => 'Min. Irisstufe', + 'MinGainRange' => 'Min. Verstrkungsbereich', + 'MinGainSpeed' => 'Min. Verstrkungsgeschwindigkeit', + 'MinGainStep' => 'Min. Verstrkungsstufe', + 'MinIrisRange' => 'Min. Blendenbereich', + 'MinIrisSpeed' => 'Min. Blendengeschwindigkeit', + 'MinIrisStep' => 'Min. Blendenstufe', 'MinPanRange' => 'Min. Pan-Bereich', 'MinPanSpeed' => 'Min. Pan-Geschwindigkeit', 'MinPanStep' => 'Min. Pan-Stufe', 'MinPixelThresLtMax' => 'Der minimale Pixelschwellwert muss kleiner sein als der maximale', - 'MinPixelThresUnset' => 'Sie müssen einen minimalen Pixel-Schwellenwert angeben', + 'MinPixelThresUnset' => 'Sie mssen einen minimalen Pixel-Schwellenwert angeben', 'MinTiltRange' => 'Min. Neigungsbereich', 'MinTiltSpeed' => 'Min. Neigungsgeschwindigkeit', 'MinTiltStep' => 'Min. Neigungsstufe', - 'MinWhiteRange' => 'Min. Weiß-Abgleichbereich', - 'MinWhiteSpeed' => 'Min. Weiß-Abgleichgeschwindigkeit', - 'MinWhiteStep' => 'Min. Weiß-Abgleichstufe', + 'MinWhiteRange' => 'Min. Wei-Abgleichbereich', + 'MinWhiteSpeed' => 'Min. Wei-Abgleichgeschwindigkeit', + 'MinWhiteStep' => 'Min. Wei-Abgleichstufe', 'MinZoomRange' => 'Min. Zoom-Bereich', 'MinZoomSpeed' => 'Min. Zoom-Geschwindigkeit', 'MinZoomStep' => 'Min. Zoom-Stufe', 'Misc' => 'Verschiedenes', + 'Mode' => 'Modus', // Added - 2015-04-18 'Monitor' => 'Monitor', 'MonitorIds' => 'Monitor-ID', 'MonitorPreset' => 'Monitor-Voreinstellung', - 'MonitorPresetIntro' => 'Wählen Sie eine geeignete Voreinstellung aus der folgenden Liste.

Bitte beachten Sie, dass dies mögliche Einstellungen von Ihnen am Monitor überschreiben kann.

', - 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 - 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 + 'MonitorPresetIntro' => 'Whlen Sie eine geeignete Voreinstellung aus der folgenden Liste.

Bitte beachten Sie, dass dies mgliche Einstellungen von Ihnen am Monitor berschreiben kann.

', + 'MonitorProbe' => 'Kamera suche', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'Die nachfolgende Liste zeigt erkannte Analog- und Netzwerkkameras, ob sie bereits genutzt werden und ob sie zur Auswahl verfgbar sind.

Whle den gewnschten Eintrag aus der folgenden Liste.

Bitte Beachten: Nicht alle Kameras knnen erkannt werden. Die Auswahl einer Kamera kann bereits eingetragene Werte im aktuellen Monitor berschreiben.

', // Added - 2009-03-31 'Monitors' => 'Monitore', 'Montage' => 'Montage', 'Month' => 'Monat', - 'More' => 'More', // Added - 2011-06-16 + 'More' => 'Mehr', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Bewegung', - 'MtgDefault' => 'Default', // Added 2013.08.15. - 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. - 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. - 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. - 'MustBeGe' => 'muss groesser oder gleich sein wie', + 'Mtg2widgrd' => '2 Spalten', // Added 2013.08.15. + 'Mtg3widgrd' => '3 Spalten', // Added 2013.08.15. + 'Mtg3widgrx' => '3 Spalten, skaliert, vergr. bei Alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4 Spalten', // Added 2013.08.15. + 'MtgDefault' => 'Standard', // Added 2013.08.15. + 'MustBeGe' => 'muss grer oder gleich sein wie', 'MustBeLe' => 'muss kleiner oder gleich sein wie', - 'MustConfirmPassword' => 'Sie müssen das Passwort bestätigen.', - 'MustSupplyPassword' => 'Sie müssen ein Passwort vergeben.', - 'MustSupplyUsername' => 'Sie müssen einen Usernamen vergeben.', + 'MustConfirmPassword' => 'Sie mssen das Passwort besttigen.', + 'MustSupplyPassword' => 'Sie mssen ein Passwort vergeben.', + 'MustSupplyUsername' => 'Sie mssen einen Usernamen vergeben.', 'Name' => 'Name', 'Near' => 'Nah', 'Network' => 'Netzwerk', @@ -492,20 +505,23 @@ $SLANG = array( 'NewPassword' => 'Neues Passwort', 'NewState' => 'Neuer Status', 'NewUser' => 'Neuer Benutzer', - 'Next' => 'Nächstes', + 'Next' => 'Nchstes', 'No' => 'Nein', - 'NoDetectedCameras' => 'No Detected Cameras', // Added - 2009-03-31 + 'NoDetectedCameras' => 'Keine Kameras erkannt', // Added - 2009-03-31 'NoFramesRecorded' => 'Es gibt keine Aufnahmen von diesem Ereignis.', 'NoGroup' => 'Keine Gruppe', 'NoSavedFilters' => 'Keine gespeicherten Filter', - 'NoStatisticsRecorded' => 'Keine Statistik für dieses Ereignis/diese Bilder', + 'NoStatisticsRecorded' => 'Keine Statistik fr dieses Ereignis/diese Bilder', 'None' => 'ohne', - 'NoneAvailable' => 'Nichts verfügbar', + 'NoneAvailable' => 'Nichts verfgbar', 'Normal' => 'Normal', 'Notes' => 'Bemerkungen', 'NumPresets' => 'Nummerierte Voreinstellungen', 'Off' => 'Aus', 'On' => 'An', + 'OnvifCredentialsIntro'=> 'Bitte den Benutzernamen und das Passwort fr die gewhlte Kamera eintragen.
Der hier eingetragene Benutzer wird erstellt mitsamt des Passworts, falls kein Benutzer fr diese Kamera erstellt wurde.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'Die folgende Liste zeigt erkannte ONVIF Kameras, ob sie bereits genutzt werden und ob sie zur Auswahl verfgbar sind.

Whle den gewnschten Eintrag aus der folgenden Liste.

Bitte Beachten: Nicht alle Kameras knnen erkannt werden. Die Auswahl einer Kamera kann bereits eingetragene Werte im aktuellen Monitor berschreiben.

', // Added - 2015-04-18 'OpEq' => 'gleich zu', 'OpGt' => 'groesser als', 'OpGtEq' => 'groesser oder gleich wie', @@ -516,27 +532,27 @@ $SLANG = array( 'OpNe' => 'nicht gleich', 'OpNotIn' => 'nicht im Satz', 'OpNotMatches' => 'nicht zutreffend', - 'Open' => 'Öffnen', + 'Open' => 'ffnen', 'OptionHelp' => 'Hilfe', - 'OptionRestartWarning' => 'Veränderungen werden erst nach einem Neustart des Programms aktiv.\nFür eine sofortige Änderung starten Sie das Programm bitte neu.', + 'OptionRestartWarning' => 'Vernderungen werden erst nach einem Neustart des Programms aktiv.\nFr eine sofortige nderung starten Sie das Programm bitte neu.', 'Options' => 'Optionen', 'OrEnterNewName' => 'oder neuen Namen eingeben', 'Order' => 'Reihenfolge', 'Orientation' => 'Ausrichtung', 'Out' => 'Aus', - 'OverwriteExisting' => 'Überschreibe bestehende', + 'OverwriteExisting' => 'berschreibe bestehende', 'Paged' => 'Seitennummeriert', 'Pan' => 'Pan', - 'PanLeft' => 'Pan-Left', - 'PanRight' => 'Pan-Right', + 'PanLeft' => 'Pan-Links', + 'PanRight' => 'Pan-Rechts', 'PanTilt' => 'Pan/Neigung', 'Parameter' => 'Parameter', 'Password' => 'Passwort', - 'PasswordsDifferent' => 'Die Passwörter sind unterschiedlich', + 'PasswordsDifferent' => 'Die Passwrter sind unterschiedlich', 'Paths' => 'Pfade', 'Pause' => 'Pause', 'Phone' => 'Telefon', - 'PhoneBW' => 'Tel. B/W', + 'PhoneBW' => 'Tel. B/W', 'Pid' => 'PID', // Added - 2011-06-16 'PixelDiff' => 'Pixel-Differenz', 'Pixels' => 'Pixel', @@ -547,57 +563,60 @@ $SLANG = array( 'Point' => 'Punkt', 'PostEventImageBuffer' => 'Nachereignispuffer', 'PreEventImageBuffer' => 'Vorereignispuffer', - 'PreserveAspect' => 'Seitenverhältnis beibehalten', + 'PreserveAspect' => 'Seitenverhltnis beibehalten', 'Preset' => 'Voreinstellung', 'Presets' => 'Voreinstellungen', 'Prev' => 'Vorheriges', - 'Probe' => 'Probe', // Added - 2009-03-31 + 'Probe' => 'Suchen', // Added - 2009-03-31 + 'ProfileProbe' => 'Streamsonde', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'Die folgende Liste zeigt die verfgbaren Streamingprofile der ausgewhlten Kamera.

Whle den gewnschten Eintrag aus der folgenden Liste.

Bitte Beachten: Zoneminder kann keine zustzlichen Profile konfigurieren. Die Auswahl einer Kamera kann bereits eingetragene Werte im aktuellen Monitor berschreiben.

', // Added - 2015-04-18 + 'Progress' => 'Fortschritt', // Added - 2015-04-18 'Protocol' => 'Protokoll', 'Rate' => 'Abspielgeschwindigkeit', 'Real' => 'Real', 'Record' => 'Aufnahme', 'RefImageBlendPct' => 'Referenz-Bildblende', 'Refresh' => 'Aktualisieren', - 'Remote' => 'Entfernt', - 'RemoteHostName' => 'Entfernter Hostname', - 'RemoteHostPath' => 'Entfernter Hostpfad', - 'RemoteHostPort' => 'Entfernter Hostport', - 'RemoteHostSubPath' => 'Remote Host SubPath', // Added - 2009-02-08 - 'RemoteImageColours' => 'Entfernte Bildfarbe', - 'RemoteMethod' => 'Remote Method', // Added - 2009-02-08 - 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Remote' => 'Remote', + 'RemoteHostName' => 'Remote Hostname', + 'RemoteHostPath' => 'Remote Hostpfad', + 'RemoteHostPort' => 'Remote Hostport', + 'RemoteHostSubPath' => 'Remote Hostunterpfad', // Added - 2009-02-08 + 'RemoteImageColours' => 'Remote Bildfarbe', + 'RemoteMethod' => 'Remote Methode', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protokol', // Added - 2009-02-08 'Rename' => 'Umbenennen', 'Replay' => 'Wiederholung', 'ReplayAll' => 'Alle Ereignisse', - 'ReplayGapless' => 'Lückenlose Ereignisse', + 'ReplayGapless' => 'Lckenlose Ereignisse', 'ReplaySingle' => 'Einzelereignis', - 'Reset' => 'Zurücksetzen', - 'ResetEventCounts' => 'Lösche Ereignispunktzahl', + 'Reset' => 'Zurcksetzen', + 'ResetEventCounts' => 'Lsche Ereignispunktzahl', 'Restart' => 'Neustart', 'Restarting' => 'Neustarten', 'RestrictedCameraIds' => 'Verbotene Kamera-ID', - 'RestrictedMonitors' => 'Eingeschränkte Monitore', - 'ReturnDelay' => 'Rückkehr-Verzögerung', - 'ReturnLocation' => 'Rückkehrpunkt', - 'Rewind' => 'Zurückspulen', + 'RestrictedMonitors' => 'Eingeschrnkte Monitore', + 'ReturnDelay' => 'Rckkehr-Verzgerung', + 'ReturnLocation' => 'Rckkehrpunkt', + 'Rewind' => 'Zurckspulen', 'RotateLeft' => 'Drehung links', 'RotateRight' => 'Drehung rechts', - 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunLocalUpdate' => 'Fr Update "zmupdate.pl" ausfhren', // Added - 2011-05-25 'RunMode' => 'Betriebsmodus', 'RunState' => 'Laufender Status', 'Running' => 'In Betrieb', - 'Save' => 'OK', + 'Save' => 'Speichern', 'SaveAs' => 'Speichere als', 'SaveFilter' => 'Speichere Filter', 'Scale' => 'Skalierung', 'Score' => 'Punktzahl', 'Secs' => 'Sekunden', - 'Sectionlength' => 'Sektionslänge', + 'Sectionlength' => 'Sektionslnge', 'Select' => 'Auswahl', - 'SelectFormat' => 'Select Format', // Added - 2011-06-17 - 'SelectLog' => 'Select Log', // Added - 2011-06-17 - 'SelectMonitors' => 'Wähle Monitore', - 'SelfIntersecting' => 'Die Polygonränder dürfen sich nicht überschneiden.', + 'SelectFormat' => 'Format auswhlen', // Added - 2011-06-17 + 'SelectLog' => 'Log auswhlen', // Added - 2011-06-17 + 'SelectMonitors' => 'Whle Monitore', + 'SelfIntersecting' => 'Die Polygonrnder drfen sich nicht berschneiden.', 'Set' => 'Setze', 'SetNewBandwidth' => 'Setze neue Bandbreite', 'SetPreset' => 'Setze Voreinstellung', @@ -605,15 +624,15 @@ $SLANG = array( 'ShowFilterWindow' => 'Zeige Filterfenster', 'ShowTimeline' => 'Zeige Zeitlinie', 'SignalCheckColour' => 'Farbe des Signalchecks', - 'Size' => 'Größe', - 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'Size' => 'Gre', + 'SkinDescription' => 'Whle den standard Skin fr diesen Computer.', // Added - 2011-01-30 'Sleep' => 'Schlaf', 'SortAsc' => 'aufsteigend', 'SortBy' => 'Sortieren nach', 'SortDesc' => 'absteigend', 'Source' => 'Quelle', - 'SourceColours' => 'Source Colours', // Added - 2009-02-08 - 'SourcePath' => 'Source Path', // Added - 2009-02-08 + 'SourceColours' => 'Quellenfarben', // Added - 2009-02-08 + 'SourcePath' => 'Quellenpfad', // Added - 2009-02-08 'SourceType' => 'Quellentyp', 'Speed' => 'Geschwindigkeit', 'SpeedHigh' => 'Hohe Geschwindigkeit', @@ -622,16 +641,16 @@ $SLANG = array( 'SpeedTurbo' => 'Turbo-Geschwindigkeit', 'Start' => 'Start', 'State' => 'Status', - 'Stats' => 'Status', + 'Stats' => 'Statistik', 'Status' => 'Status', 'Step' => 'Stufe', - 'StepBack' => 'Einen Schritt rückwärts', - 'StepForward' => 'Einen Schritt vorwärts', - 'StepLarge' => 'Große Stufe', - 'StepMedium' => 'Mittlere Stufe', - 'StepNone' => 'Keine Stufe', - 'StepSmall' => 'Kleine Stufe', - 'Stills' => 'Bilder', + 'StepBack' => 'Einen Schritt rckwrts', + 'StepForward' => 'Einen Schritt vorwrts', + 'StepLarge' => 'Groer Schritt', + 'StepMedium' => 'Mittlere Schhritt', + 'StepNone' => 'Keine Schritt', + 'StepSmall' => 'Kleiner Schritt', + 'Stills' => 'Standbilder', 'Stop' => 'Stop', 'Stopped' => 'Gestoppt', 'Stream' => 'Stream', @@ -639,17 +658,18 @@ $SLANG = array( 'Submit' => 'Absenden', 'System' => 'System', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Zielfarbbereich', // Added - 2015-04-18 'Tele' => 'Tele', - 'Thumbnail' => 'Miniatur', + 'Thumbnail' => 'Miniaturbild', 'Tilt' => 'Neigung', 'Time' => 'Zeit', 'TimeDelta' => 'Zeitdifferenz', 'TimeStamp' => 'Zeitstempel', 'Timeline' => 'Zeitlinie', - 'TimelineTip1' => 'Pass your mouse over the graph to view a snapshot image and event details.', // Added 2013.08.15. - 'TimelineTip2' => 'Click on the coloured sections of the graph, or the image, to view the event.', // Added 2013.08.15. - 'TimelineTip3' => 'Click on the background to zoom in to a smaller time period based around your click.', // Added 2013.08.15. - 'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15. + 'TimelineTip1' => 'Fahren Sie mit der Maus ber die Grafik, um eine Momentaufnahme der Bild- und Ereignisdetails zusehen.', // Added 2013.08.15. + 'TimelineTip2' => 'Klicken Sie auf den farbig markierten Bereichen der Grafik oder das Bild, um das Ereignis zu sehen.', // Added 2013.08.15. + 'TimelineTip3' => 'Klicken Sie auf den Hintergrund, um in einen kleineren Zeitraum zu vergrern.', // Added 2013.08.15. + 'TimelineTip4' => 'Verwenden Sie die Steuerelemente unten, um zu Zoomen oder navigieren Sie vorwrts und rckwrts durch die Zeit.', // Added 2013.08.15. 'Timestamp' => 'Zeitstempel', 'TimestampLabelFormat' => 'Format des Zeitstempels', 'TimestampLabelX' => 'Zeitstempel-X', @@ -658,34 +678,37 @@ $SLANG = array( 'Tools' => 'Werkzeuge', 'Total' => 'Total', // Added - 2011-06-16 'TotalBrScore' => 'Totale
Punktzahl', - 'TrackDelay' => 'Nachführungsverzögerung', - 'TrackMotion' => 'Bewegungs-Nachführung', - 'Triggers' => 'Auslöser', + 'TrackDelay' => 'Nachfhrungsverzgerung', + 'TrackMotion' => 'Bewegungs-Nachfhrung', + 'Triggers' => 'Auslser', 'TurboPanSpeed' => 'Turbo-Pan-Geschwindigkeit', 'TurboTiltSpeed' => 'Turbo-Neigungsgeschwindigkeit', 'Type' => 'Typ', 'Unarchive' => 'Aus Archiv entfernen', - 'Undefined' => 'Undefined', // Added - 2009-02-08 + 'Undefined' => 'Undefiniert', // Added - 2009-02-08 'Units' => 'Einheiten', 'Unknown' => 'Unbekannt', 'Update' => 'Aktualisieren', - 'UpdateAvailable' => 'Eine Aktualisierung für ZoneMinder ist verfügbar.', - 'UpdateNotNecessary' => 'Es ist keine Aktualisierung verfügbar.', - 'Updated' => 'Updated', // Added - 2011-06-16 - 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', + 'UpdateAvailable' => 'Eine Aktualisierung fr ZoneMinder ist verfgbar.', + 'UpdateNotNecessary' => 'Es ist keine Aktualisierung verfgbar.', + 'Updated' => 'Aktualisiert', // Added - 2011-06-16 + 'Upload' => 'Hochladen', // Added - 2011-08-23 'UseFilter' => 'Benutze Filter', - 'UseFilterExprsPost' => ' Filter Ausdrücke', // This is used at the end of the phrase 'use N filter expressions' - 'UseFilterExprsPre' => 'Benutze ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UseFilterExprsPost' => ' Filter Ausdrcke', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Benutze ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => 'Benutzer', 'Username' => 'Benutzername', 'Users' => 'Benutzer', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Aufnahmen pro Bild', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'Wert', 'Version' => 'Version', 'VersionIgnore' => 'Ignoriere diese Version', 'VersionRemindDay' => 'Erinnere mich wieder in 1 Tag.', 'VersionRemindHour' => 'Erinnere mich wieder in 1 Stunde.', - 'VersionRemindNever' => 'Informiere mich nicht mehr über neue Versionen.', + 'VersionRemindNever' => 'Informiere mich nicht mehr ber neue Versionen.', 'VersionRemindWeek' => 'Erinnere mich wieder in 1 Woche.', 'Video' => 'Video', 'VideoFormat' => 'Videoformat', @@ -694,19 +717,19 @@ $SLANG = array( 'VideoGenNoFiles' => 'Keine Videodateien gefunden.', 'VideoGenParms' => 'Parameter der Videoerzeugung', 'VideoGenSucceeded' => 'Videoerzeugung erfolgreich!', - 'VideoSize' => 'Videogröße', + 'VideoSize' => 'Videogre', 'View' => 'Ansicht', 'ViewAll' => 'Alles ansehen', 'ViewEvent' => 'Zeige Ereignis', 'ViewPaged' => 'Seitenansicht', 'Wake' => 'Aufwachen', - 'WarmupFrames' => 'Aufwärmbilder', + 'WarmupFrames' => 'Aufwrmbilder', 'Watch' => 'Beobachte', 'Web' => 'Web', 'WebColour' => 'Webfarbe', 'Week' => 'Woche', - 'White' => 'Weiß', - 'WhiteBalance' => 'Weiß-Abgleich', + 'White' => 'Wei', + 'WhiteBalance' => 'Wei-Abgleich', 'Wide' => 'Weit', 'X' => 'X', 'X10' => 'X10', @@ -717,17 +740,17 @@ $SLANG = array( 'Yes' => 'Ja', 'YouNoPerms' => 'Keine Erlaubnis zum Zugang dieser Resource.', 'Zone' => 'Zone', - 'ZoneAlarmColour' => 'Alarmfarbe (Rot/Grün/Blau)', + 'ZoneAlarmColour' => 'Alarmfarbe (Rot/Grn/Blau)', 'ZoneArea' => 'Zone Area', - 'ZoneFilterSize' => 'Filter-Breite/-Höhe (Pixel)', - 'ZoneMinMaxAlarmArea' => 'Min./max. Alarmfläche', - 'ZoneMinMaxBlobArea' => 'Min./max. Blobfläche', + 'ZoneExtendAlarmFrames' => 'Alarmstatus nach Ende fr Frames aufrechterhalten', + 'ZoneFilterSize' => 'Filter-Breite/-Hhe (Pixel)', + 'ZoneMinMaxAlarmArea' => 'Min./max. Alarmflche', + 'ZoneMinMaxBlobArea' => 'Min./max. Blobflche', 'ZoneMinMaxBlobs' => 'Min./max. Blobs', - 'ZoneMinMaxFiltArea' => 'Min./max. Filterfläche', + 'ZoneMinMaxFiltArea' => 'Min./max. Filterflche', 'ZoneMinMaxPixelThres' => 'Min./max. Pixelschwellwert', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 - 'ZoneOverloadFrames' => 'Bildauslassrate bei Systemüberlastung', - 'ZoneExtendAlarmFrames' => 'Alarmstatus nach Ende für Frames aufrechterhalten', + 'ZoneOverloadFrames' => 'Bildauslassrate bei Systemberlastung', 'Zones' => 'Zonen', 'Zoom' => 'Zoom', 'ZoomIn' => 'Hineinzoomen', @@ -743,7 +766,7 @@ $CLANG = array( 'MonitorCount' => '%1$s %2$s', // For example '4 Monitors' (from Vlang below) 'MonitorFunction' => 'Monitor %1$s Funktion', 'RunningRecentVer' => 'Sie benutzen die aktuellste Version von Zoneminder, v%s.', - 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 + 'VersionMismatch' => 'Versionskonflikt, System-Version ist %1$s , Datenbank-Version ist %2$s.', // Added - 2011-05-25 ); // The next section allows you to describe a series of word ending and counts used to @@ -880,4 +903,4 @@ $OLANG = array( // ), ); -?> +?> \ No newline at end of file diff --git a/web/lang/dk_dk.php b/web/lang/dk_dk.php index 927440513..08795edf4 100644 --- a/web/lang/dk_dk.php +++ b/web/lang/dk_dk.php @@ -89,6 +89,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Alarm Maximum FPS', 'AlarmPx' => 'Alarm Px', 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'Alarm', 'All' => 'Alle', 'Apply' => 'Aktiver', @@ -133,13 +134,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', 'BadFormat' => 'Format must be set to an integer of zero or more', 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'Height must be set to a valid value', 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'Navne m kun indeholde alphanumeric karaktere plus hyphen og underscore', 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 'BadPath' => 'Path must be set to a valid value', @@ -159,7 +160,9 @@ $SLANG = array( 'BlobSizes' => 'Blob Strelse', 'Blobs' => 'Blobs', 'Brightness' => 'Brightness', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'Buffere', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Kan Auto Focus', 'CanAutoGain' => 'Kan Auto Gain', 'CanAutoIris' => 'Kan Auto Iris', @@ -203,6 +206,7 @@ $SLANG = array( 'CaptureHeight' => 'Capture Height', 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 'CapturePalette' => 'Capture Palette', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => 'Capture Width', 'Cause' => 'rsag', 'CheckMethod' => 'Alarm Check Methode', @@ -233,6 +237,7 @@ $SLANG = array( 'ControlDevice' => 'Kontrol Enhed', 'ControlType' => 'Kontrol Type', 'Controllable' => 'Controllable', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Cycle', 'CycleWatch' => 'Cycle Watch', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -241,12 +246,15 @@ $SLANG = array( 'DefaultRate' => 'Default Rate', 'DefaultScale' => 'Default Scale', 'DefaultView' => 'Default View', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => 'Slet', 'DeleteAndNext' => 'Slet & Nste', 'DeleteAndPrev' => 'Slet & Forrige', 'DeleteSavedFilter' => 'Slet Gemte filter', 'Description' => 'Beskrivelse', 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Device', // Added - 2009-02-08 'DeviceChannel' => 'Enheds Kanal', 'DeviceFormat' => 'Enheds Format', @@ -258,6 +266,7 @@ $SLANG = array( 'Disk' => 'Disk', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => 'Please Donate', 'DonateAlready' => 'No, I\'ve already donated', 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', @@ -267,7 +276,6 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Forlb', @@ -310,10 +318,12 @@ $SLANG = array( 'Feed' => 'Feed', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'File', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Arkiver alle matchende', 'FilterDeleteEvents' => 'Slet alle matchende', 'FilterEmailEvents' => 'Email detalier af alle matchende', 'FilterExecuteEvents' => 'Kr kommando p alle matchende', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Send detalier af alle matchende', 'FilterPx' => 'Filter Px', 'FilterUnset' => 'You must specify a filter width and height', @@ -323,12 +333,12 @@ $SLANG = array( 'First' => 'Frste', 'FlippedHori' => 'Flipped Horizontally', 'FlippedVert' => 'Flipped Vertically', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Fokus', 'ForceAlarm' => 'Tving Alarm', 'Format' => 'Format', @@ -336,7 +346,6 @@ $SLANG = array( 'FrameId' => 'Billede Id', 'FrameRate' => 'Billede Rate', 'FrameSkip' => 'Billede Skip', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'Billede', 'Func' => 'Func', 'Function' => 'Funktion', @@ -463,6 +472,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min Zoom Speed', 'MinZoomStep' => 'Min Zoom Step', 'Misc' => 'Misc', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => 'Monitor', 'MonitorIds' => 'Monitor Ids', 'MonitorPreset' => 'Monitor Preset', @@ -473,12 +483,13 @@ $SLANG = array( 'Montage' => 'Montage', 'Month' => 'Mned', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Flyt', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => 'skal vre stre end eller ligmed', 'MustBeLe' => 'Skal vre mindre end eller ligmed', 'MustConfirmPassword' => 'Du skal konfimere password', @@ -507,6 +518,9 @@ $SLANG = array( 'NumPresets' => 'Num Presets', 'Off' => 'Off', 'On' => 'On', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => 'ligmed', 'OpGt' => 'stre end', 'OpGtEq' => 'stre end eller ligmed', @@ -553,6 +567,9 @@ $SLANG = array( 'Presets' => 'Presets', 'Prev' => 'Prev', 'Probe' => 'Probe', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => 'Rate', 'Real' => 'Real', @@ -640,6 +657,7 @@ $SLANG = array( 'Submit' => 'Submit', 'System' => 'System', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => 'Thumbnail', 'Tilt' => 'Tilt', @@ -674,13 +692,16 @@ $SLANG = array( 'UpdateNotNecessary' => 'Ingen updatering er ndvendig.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Brug Filter', 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Brug ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => 'Bruger', 'Username' => 'Bruger Navn', 'Users' => 'Brugere', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'Vrdig', 'Version' => 'Version', 'VersionIgnore' => 'Ignorer denne version', @@ -720,6 +741,7 @@ $SLANG = array( 'Zone' => 'Zone', 'ZoneAlarmColour' => 'Alarm Farve (Red/Green/Blue)', 'ZoneArea' => 'Zone Area', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Filter Width/Height (pixels)', 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', @@ -728,7 +750,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => 'Zoner', 'Zoom' => 'Zoom', 'ZoomIn' => 'Zoom In', diff --git a/web/lang/en_gb.php b/web/lang/en_gb.php index 77c968645..ceaabad02 100644 --- a/web/lang/en_gb.php +++ b/web/lang/en_gb.php @@ -96,6 +96,7 @@ $SLANG = array( 'AlarmLimits' => 'Alarm Limits', 'AlarmMaximumFPS' => 'Alarm Maximum FPS', 'AlarmPx' => 'Alarm Px', + 'AlarmRefImageBlendPct' => 'Alarm Reference Image Blend %ge', 'AlarmRGBUnset' => 'You must set an alarm RGB colour', 'Alert' => 'Alert', 'All' => 'All', @@ -168,6 +169,7 @@ $SLANG = array( 'Blobs' => 'Blobs', 'BlobSizes' => 'Blob Sizes', 'Brightness' => 'Brightness', + 'Buffer' => 'Buffer', 'Buffers' => 'Buffers', 'CanAutoFocus' => 'Can Auto Focus', 'CanAutoGain' => 'Can Auto Gain', @@ -241,6 +243,7 @@ $SLANG = array( 'ControlDevice' => 'Control Device', 'Controllable' => 'Controllable', 'ControlType' => 'Control Type', + 'Current' => 'Current', 'Cycle' => 'Cycle', 'CycleWatch' => 'Cycle Watch', 'Day' => 'Day', @@ -248,6 +251,8 @@ $SLANG = array( 'DefaultRate' => 'Default Rate', 'DefaultScale' => 'Default Scale', 'DefaultView' => 'Default View', + 'Deinterlacing' => 'Deinterlacing', + 'Delay' => 'Delay', 'DeleteAndNext' => 'Delete & Next', 'DeleteAndPrev' => 'Delete & Prev', 'Delete' => 'Delete', @@ -319,8 +324,10 @@ $SLANG = array( 'FilterDeleteEvents' => 'Delete all matches', 'FilterEmailEvents' => 'Email details of all matches', 'FilterExecuteEvents' => 'Execute command on all matches', + 'FilterLog' => 'Filter log', 'FilterMessageEvents' => 'Message details of all matches', 'FilterPx' => 'Filter Px', + 'Filter' => 'Filter', 'Filters' => 'Filters', 'FilterUnset' => 'You must specify a filter width and height', 'FilterUploadEvents' => 'Upload all matches', @@ -468,6 +475,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min Zoom Speed', 'MinZoomStep' => 'Min Zoom Step', 'Misc' => 'Misc', + 'Mode' => 'Mode', 'MonitorIds' => 'Monitor Ids', 'Monitor' => 'Monitor', 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for the current monitor.

', @@ -561,6 +569,7 @@ $SLANG = array( 'Probe' => 'Probe', 'ProfileProbe' => 'Stream Probe', 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', + 'Progress' => 'Progress', 'Protocol' => 'Protocol', 'Rate' => 'Rate', 'Real' => 'Real', @@ -648,6 +657,7 @@ $SLANG = array( 'Stream' => 'Stream', 'Submit' => 'Submit', 'System' => 'System', + 'TargetColorspace' => 'Target colorspace', 'Tele' => 'Tele', 'Thumbnail' => 'Thumbnail', 'Tilt' => 'Tilt', @@ -879,7 +889,7 @@ $OLANG = array( "\"loglevel=debug\" Set verbosiy of FFmpeg (quiet, panic, fatal, error, warning, info, verbose, debug)" ), 'OPTIONS_LIBVLC' => array( - 'Help' => "Parameters in this field are passwd on to libVLC. Multiple parameters can be separated by ,~~ ". + 'Help' => "Parameters in this field are passed on to libVLC. Multiple parameters can be separated by ,~~ ". "Examples (do not enter quotes)~~~~". "\"--rtp-client-port=nnn\" Set local port to use for rtp data~~~~". "\"--verbose=2\" Set verbosity of libVLC" diff --git a/web/lang/es_ar.php b/web/lang/es_ar.php index ee1508723..1445437f6 100644 --- a/web/lang/es_ar.php +++ b/web/lang/es_ar.php @@ -39,6 +39,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Alarm Maximum FPS', 'AlarmPx' => 'Alarm Px', 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'Alerta', 'All' => 'Todo', 'Apply' => 'Aplicar', @@ -83,13 +84,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', 'BadFormat' => 'Format must be set to an integer of zero or more', 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'Height must be set to a valid value', 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'Los nombres pueden contener solamente caracteres alfanumricos ms el guin y la raya', 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 'BadPath' => 'Path must be set to a valid value', @@ -109,7 +110,9 @@ $SLANG = array( 'BlobSizes' => 'Blob Sizes', 'Blobs' => 'Blobs', 'Brightness' => 'Brillo', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'Buffers', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Can Auto Focus', 'CanAutoGain' => 'Can Auto Gain', 'CanAutoIris' => 'Can Auto Iris', @@ -153,6 +156,7 @@ $SLANG = array( 'CaptureHeight' => 'Captura Alto', 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 'CapturePalette' => 'Captura Paleta', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => 'Captura Ancho', 'Cause' => 'Cause', 'CheckMethod' => 'Alarm Check Method', @@ -183,6 +187,7 @@ $SLANG = array( 'ControlDevice' => 'Control Device', 'ControlType' => 'Control Type', 'Controllable' => 'Controllable', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Cycle', 'CycleWatch' => 'Cycle Watch', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -191,12 +196,15 @@ $SLANG = array( 'DefaultRate' => 'Default Rate', 'DefaultScale' => 'Default Scale', 'DefaultView' => 'Default View', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => 'Borrar', 'DeleteAndNext' => 'Borrar & Prximo', 'DeleteAndPrev' => 'Borrar & Anterior', 'DeleteSavedFilter' => 'Borrar Filtro Guardado', 'Description' => 'Descripcin', 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Device', // Added - 2009-02-08 'DeviceChannel' => 'Canal', 'DeviceFormat' => 'Seal', @@ -208,6 +216,7 @@ $SLANG = array( 'Disk' => 'Disco', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => 'Please Donate', 'DonateAlready' => 'No, I\'ve already donated', 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', @@ -217,7 +226,6 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Duracin', @@ -260,10 +268,12 @@ $SLANG = array( 'Feed' => 'Vista', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'File', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Archivar todos los eventos', 'FilterDeleteEvents' => 'Borrar todos los eventos', 'FilterEmailEvents' => 'Mandar un mail de todos los eventos', 'FilterExecuteEvents' => 'Ejecutar un comando en las coincidencias', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Mandar un mensaje de los eventos', 'FilterPx' => 'Filtro Px', 'FilterUnset' => 'You must specify a filter width and height', @@ -273,12 +283,12 @@ $SLANG = array( 'First' => 'Primero', 'FlippedHori' => 'Flipped Horizontally', 'FlippedVert' => 'Flipped Vertically', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Focus', 'ForceAlarm' => 'Forzar Alarma', 'Format' => 'Format', @@ -286,7 +296,6 @@ $SLANG = array( 'FrameId' => 'Id Cuadro', 'FrameRate' => 'Velocidad del video', 'FrameSkip' => 'Saltear Cuadro', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'Cuadros', 'Func' => 'Func', 'Function' => 'Funcin', @@ -413,6 +422,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min Zoom Speed', 'MinZoomStep' => 'Min Zoom Step', 'Misc' => 'Otros', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => 'Monitor', 'MonitorIds' => 'Ids Monitor', 'MonitorPreset' => 'Monitor Preset', @@ -423,12 +433,13 @@ $SLANG = array( 'Montage' => 'Cmara Mltiple', 'Month' => 'Mes', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Move', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => 'Debe ser mayor o igual que', 'MustBeLe' => 'Debe ser menor o igual que', 'MustConfirmPassword' => 'Debe confirmar la contrasea', @@ -457,6 +468,9 @@ $SLANG = array( 'NumPresets' => 'Num Presets', 'Off' => 'Off', 'On' => 'On', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => 'igual que', 'OpGt' => 'mayor que', 'OpGtEq' => 'mayor o igual que', @@ -503,6 +517,9 @@ $SLANG = array( 'Presets' => 'Presets', 'Prev' => 'Prev', 'Probe' => 'Probe', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => 'Ritmo', 'Real' => 'Real', @@ -590,6 +607,7 @@ $SLANG = array( 'Submit' => 'Submit', 'System' => 'Sistema', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => 'Thumbnail', 'Tilt' => 'Tilt', @@ -624,13 +642,16 @@ $SLANG = array( 'UpdateNotNecessary' => 'No se requiere Actualizacin', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Usar Filtro', 'UseFilterExprsPost' => ' filtrar sentencias', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Utilizar ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => 'Usuario', 'Username' => 'Nombre', 'Users' => 'Usuarios', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'Valor', 'Version' => 'Versin', 'VersionIgnore' => 'Ignore esta versin', @@ -670,6 +691,7 @@ $SLANG = array( 'Zone' => 'Zona', 'ZoneAlarmColour' => 'Color Alarma (Red/Green/Blue)', 'ZoneArea' => 'Zone Area', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Filter Width/Height (pixels)', 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', @@ -678,7 +700,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => 'Zonas', 'Zoom' => 'Zoom', 'ZoomIn' => 'Zoom In', diff --git a/web/lang/es_es.php b/web/lang/es_es.php index 1e80f6500..38b879814 100644 --- a/web/lang/es_es.php +++ b/web/lang/es_es.php @@ -72,6 +72,7 @@ header ('Content-type: text/html; charset=utf-8'); // Simple String Replacements $SLANG = array( '24BitColour' => 'Color 24 bits', + '32BitColour' => '32 bit colour', // Added - 2015-04-18 '8BitGrey' => 'Grises 8 bits', 'Action' => 'Acción', 'Actual' => 'Actual', @@ -87,6 +88,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Máximos MPS alarma', 'AlarmPx' => 'Px alarma', 'AlarmRGBUnset' => 'Debe establecer un color RGB para alarma', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'Alerta', 'All' => 'Todo', 'Apply' => 'Aplicar', @@ -126,17 +128,18 @@ $SLANG = array( 'BadAlarmFrameCount' => 'El número de marcos de alarma debe tener un número entero de uno o más', 'BadAlarmMaxFPS' => 'Máximos MPS de alarma debe ser un valor entero positivo o de punto flotante', 'BadChannel' => 'El canal debe estar establecido en un entero de cero o más', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2015-04-18 'BadDevice' => 'El dispositivo debe tener un valor válido', 'BadFPSReportInterval' => 'El registro de intervalo de recuento búfer de MPS debe ser un entero de 100 o más', 'BadFormat' => 'El formato debe tener un valor válido', 'BadFrameSkip' => 'El número de omisión de marcos debe ser un entero de cero o más', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'La altura debe tener un valor válido', 'BadHost' => 'El host debe tener una dirección ip o nombre de host válidos, no incluir http://', 'BadImageBufferCount' => 'El tamaño de búfer de imagen debe serun entero de 10 o más', 'BadLabelX' => 'La coordenada de la etiqueta X debe ser un entero de cero o más', 'BadLabelY' => 'La coordenada de la etiqueta Y debe ser un entero de cero o más', 'BadMaxFPS' => 'MPS máximos debe tener un valor entero positivo o de punto flotante', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'Los nombre sólo pueden contener carácteres alfanuméricos además de guiones y guiones bajos', 'BadPalette' => 'La paleta debe tener un valor válido', 'BadPath' => 'La ruta debe tener un valo válido', @@ -156,7 +159,9 @@ $SLANG = array( 'BlobSizes' => 'Tamaño gotas', 'Blobs' => 'Gotas', 'Brightness' => 'Brillo', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'Búfers', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Puede enfocar automáticamente', 'CanAutoGain' => 'Puede usar ganancia automática', 'CanAutoIris' => 'Puede ajustar el iris automáticamente', @@ -200,6 +205,7 @@ $SLANG = array( 'CaptureHeight' => 'Altura de captura', 'CaptureMethod' => 'Método de captura', 'CapturePalette' => 'Paleta de captura', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => 'Ancho de captura', 'Cause' => 'Causa', 'CheckMethod' => 'Método de comprobación de alarma', @@ -230,6 +236,7 @@ $SLANG = array( 'ControlDevice' => 'Controlar dispositivo', 'ControlType' => 'Tipo de control', 'Controllable' => 'Controlable', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Ciclo', 'CycleWatch' => 'Visión ciclo', 'DateTime' => 'Fecha/Hora', @@ -238,12 +245,15 @@ $SLANG = array( 'DefaultRate' => 'Tasa por defecto', 'DefaultScale' => 'Escala por defecto', 'DefaultView' => 'Vista por defecto', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => 'Borrar', 'DeleteAndNext' => 'Borrar & siguiente', 'DeleteAndPrev' => 'Borrar & anterior', 'DeleteSavedFilter' => 'Borrar filtro guardado', 'Description' => 'Descripción', 'DetectedCameras' => 'Cámaras detectadas', + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Dispositivo', 'DeviceChannel' => 'Canal de dispositivo', 'DeviceFormat' => 'Formato de dispositivo', @@ -255,6 +265,7 @@ $SLANG = array( 'Disk' => 'Disco', 'Display' => 'Visualizar', 'Displaying' => 'Visualizando', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', // Added - 2015-04-18 'Donate' => 'Por favor, done', 'DonateAlready' => 'No, ya he donado', 'DonateEnticement' => 'Ha estado ejecutando ZoneMinder por un tiempo y con suerte le resultará un útil complemento para su seguridad en hogar y trabajo. Aunque ZoneMinder es, y será, libre y de código abierto, cuesta dinero desarrollarlo y mantenerlo. Si quiere ayudar a mantener un futuro desarrollo y nuevas funciones entonces considere hacer un donativo por favor. Donar es, por supuesto, opcional pero muy apreciado y puede donar tanto como desee sin importar la cantidad.

Si desea hacer una donación por favor seleccione la opción de debajo o vaya a http://www.zoneminder.com/donate.html en su navegador.

Muchas gracias por usar ZoneMinder y no se olvide de vistar los foros en ZoneMinder.com para obtener soporte o hacer sugerencias sobre cómo mejorar su experiencia con ZoneMinder aún más.', @@ -306,10 +317,12 @@ $SLANG = array( 'Feed' => 'Feed', 'Ffmpeg' => 'Ffmpeg', 'File' => 'Archivo', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Archivar todas las coincidencias', 'FilterDeleteEvents' => 'Borrar todas las coincidencias', 'FilterEmailEvents' => 'Enviar detalles de todas las coincidencias por email', 'FilterExecuteEvents' => 'Ejecutar comando para todas las coincidencias', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Detalles de mensaje de todas las coincidencias', 'FilterPx' => 'Filtrar Px', 'FilterUnset' => 'Debe especificar un ancho y un alto para el filtro', @@ -319,12 +332,12 @@ $SLANG = array( 'First' => 'Primero', 'FlippedHori' => 'Girado horizontalmente', 'FlippedVert' => 'Girado verticalmente', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Enfoque', 'ForceAlarm' => 'Forzar alama', 'Format' => 'Formato', @@ -332,7 +345,6 @@ $SLANG = array( 'FrameId' => 'Id del marco', 'FrameRate' => 'Ratío del marco', 'FrameSkip' => 'Omisión de marcos', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'Marcos', 'Func' => 'Func', 'Function' => 'Función', @@ -459,6 +471,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Velocidad de zoom mínima', 'MinZoomStep' => 'Grado de zoom mínimo', 'Misc' => 'Misc', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => 'Monitor', 'MonitorIds' => 'Ids monitor', 'MonitorPreset' => 'Programar monitor', @@ -469,12 +482,13 @@ $SLANG = array( 'Montage' => 'Montaje', 'Month' => 'Mes', 'More' => 'Más', + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Mover', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => 'debe ser mayor o igual que', 'MustBeLe' => 'debe ser menor o igual que', 'MustConfirmPassword' => 'Debe confirmar la contraseña', @@ -503,6 +517,9 @@ $SLANG = array( 'NumPresets' => 'Número programa', 'Off' => 'Off', 'On' => 'On', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => 'igual a', 'OpGt' => 'mayor que', 'OpGtEq' => 'mayor que o igual a', @@ -540,6 +557,7 @@ $SLANG = array( 'Play' => 'Reproducir', 'PlayAll' => 'Reproducir rodo', 'PleaseWait' => 'Espere por favor', + 'Plugins' => 'Plugins', // Added - 2015-04-18 'Point' => 'Punto', 'PostEventImageBuffer' => 'Cuenta de imagen post evento', 'PreEventImageBuffer' => 'Cuenta de imagen pre evento', @@ -548,6 +566,9 @@ $SLANG = array( 'Presets' => 'Programas', 'Prev' => 'Anterior', 'Probe' => 'Sondear', + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocolo', 'Rate' => 'Valorar', 'Real' => 'Real', @@ -635,6 +656,7 @@ $SLANG = array( 'Submit' => 'Enviar', 'System' => 'Sistema', 'SystemLog' => 'Registros del sistema', + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => 'Thumbnail', 'Tilt' => 'Inclinar', @@ -672,9 +694,13 @@ $SLANG = array( 'UseFilter' => 'Usar filtro', 'UseFilterExprsPost' => ' filtros de expresión', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Usar ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', // Added - 2015-04-18 'User' => 'Usuario', 'Username' => 'Nombre de usuario', 'Users' => 'Usuarios', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'Valor', 'Version' => 'Versión', 'VersionIgnore' => 'Ignorar esta versión', @@ -714,6 +740,7 @@ $SLANG = array( 'Zone' => 'Zona', 'ZoneAlarmColour' => 'Color de alarma (rojo/verde/bzul)', 'ZoneArea' => 'Área de zona', + 'ZoneExtendAlarmFrames'=> 'Extend Alarm Frame Count', // Added - 2015-04-18 'ZoneFilterSize' => 'Filtrar anchura/altura (píxeles)', 'ZoneMinMaxAlarmArea' => 'Mín/Máx área de alarma', 'ZoneMinMaxBlobArea' => 'Mín/Máx área de goteo', diff --git a/web/lang/et_ee.php b/web/lang/et_ee.php index f328fb9e3..21274663d 100644 --- a/web/lang/et_ee.php +++ b/web/lang/et_ee.php @@ -89,6 +89,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Alarmi Maksimaalne FPS', 'AlarmPx' => 'Alarm Px', 'AlarmRGBUnset' => 'Sa pead panema alarmi RGB värvi', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'Hoiatus', 'All' => 'All', 'Apply' => 'Apply', @@ -133,13 +134,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'FPS raporteerimise intervall puhvri hulk peab olema integer, null või rohkem', 'BadFormat' => 'Formaadiks peab olema pandud õige väärtus', 'BadFrameSkip' => 'Kaadri vahelejätmise hulk peab olema integer, null või rohkem', - 'BadMotionFrameSkip' => 'Liikumise kaadri vahelejätmise hulk peab olema integer, null või rohkem', 'BadHeight' => 'Kõrguseks peab olema valitud õige väärtus', 'BadHost' => 'Host ipeab olema õige. Ip aadress või hostinimi, ei tohi sisaldada http://', 'BadImageBufferCount' => 'Pildi puhvri suurus peab olema integer, 10 või rohkem', 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadMotionFrameSkip' => 'Liikumise kaadri vahelejätmise hulk peab olema integer, null või rohkem', 'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore', 'BadPalette' => 'Palette must be set to a valid value', 'BadPath' => 'Path must be set to a valid value', @@ -159,7 +160,9 @@ $SLANG = array( 'BlobSizes' => 'Blob Sizes', 'Blobs' => 'Blobs', 'Brightness' => 'Heledus', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'Puhver', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Can Auto Focus', 'CanAutoGain' => 'Can Auto Gain', 'CanAutoIris' => 'Can Auto Iris', @@ -203,6 +206,7 @@ $SLANG = array( 'CaptureHeight' => 'Capture Height', 'CaptureMethod' => 'Capture Method', 'CapturePalette' => 'Capture Palette', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => 'Capture Width', 'Cause' => 'Cause', 'CheckMethod' => 'Alarm Check Method', @@ -233,6 +237,7 @@ $SLANG = array( 'ControlDevice' => 'Control Device', 'ControlType' => 'Control Type', 'Controllable' => 'Controllable', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Cycle', 'CycleWatch' => 'Cycle Watch', 'DateTime' => 'Kuupäev/Aeg', // Added - 2011-06-16 @@ -241,12 +246,15 @@ $SLANG = array( 'DefaultRate' => 'Default Kiirus', 'DefaultScale' => 'Default Suurus', 'DefaultView' => 'Default Vaade', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => 'Kustuta', 'DeleteAndNext' => 'Kustuta & Järgmine', 'DeleteAndPrev' => 'Kustuta & Eelmine', 'DeleteSavedFilter' => 'Kustuta salvestatud filter', 'Description' => 'Kirjeldus', 'DetectedCameras' => 'Tuvastatud kaamerad', + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Seade', 'DeviceChannel' => 'Seadme Kanal', 'DeviceFormat' => 'Seadme Formaat', @@ -258,6 +266,7 @@ $SLANG = array( 'Disk' => 'Ketas', 'Display' => 'Ekraan', // Added - 2011-03-02 'Displaying' => 'Väljapanek', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', // Added - 2015-04-18 'Donate' => 'Palun Anneta', 'DonateAlready' => 'EI, Ma olen juba annetanud', 'DonateEnticement' => 'Sa oled juba kasutanud ZoneMinderit juba mõnda aega. Nüüd kus sa oled leidnud, et see on kasulik lisa sinu kodule või sinu töökohale. Kuigi ZoneMinder on, jääb alatiseks, vabaks ja avatud lähtekoodiks, siiski selle arendamiseks kulub aega ja raha. Kui sa soovid meid aidata, siis toeta meid tuleviku arendusteks ja uute lisade loomiseks. Palun mõelge annetuse peale. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', @@ -309,10 +318,12 @@ $SLANG = array( 'Feed' => 'Feed', 'Ffmpeg' => 'Ffmpeg', 'File' => 'Fail', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Archive all matches', 'FilterDeleteEvents' => 'Delete all matches', 'FilterEmailEvents' => 'Email details of all matches', 'FilterExecuteEvents' => 'Execute command on all matches', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Message details of all matches', 'FilterPx' => 'Filter Px', 'FilterUnset' => 'You must specify a filter width and height', @@ -322,12 +333,12 @@ $SLANG = array( 'First' => 'Esimene', 'FlippedHori' => 'Flipped Horizontally', 'FlippedVert' => 'Flipped Vertically', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Fookus', 'ForceAlarm' => 'Force Alarm', 'Format' => 'Format', @@ -335,7 +346,6 @@ $SLANG = array( 'FrameId' => 'Frame Id', 'FrameRate' => 'Kaadri Sagedus', 'FrameSkip' => 'Frame Skip', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'Kaadrid', 'Func' => 'Func', 'Function' => 'Funktsioon', @@ -462,6 +472,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min Zoom Speed', 'MinZoomStep' => 'Min Zoom Step', 'Misc' => 'Misc', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => 'Monitor', 'MonitorIds' => 'Monitor Ids', 'MonitorPreset' => 'Monitor Preset', @@ -472,12 +483,13 @@ $SLANG = array( 'Montage' => 'Montage', 'Month' => 'Kuus', 'More' => 'Veel', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Liiguta', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-pildi ruudustik', // Added 2013.08.15. 'Mtg3widgrd' => '3-pildi ruudustik', // Added 2013.08.15. - 'Mtg4widgrd' => '4-pildi ruudustik', // Added 2013.08.15. 'Mtg3widgrx' => '3-pildi ruudustik, skaleeritud, suurenda kui on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-pildi ruudustik', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => 'peab olema suurem kui või võrdne ', 'MustBeLe' => 'peab olema väiksem kui või võrdne', 'MustConfirmPassword' => 'Sa pead kinnitama parooli', @@ -506,6 +518,9 @@ $SLANG = array( 'NumPresets' => 'Num Presets', 'Off' => 'Väljas', 'On' => 'Sees', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => 'Võrdne', 'OpGt' => 'Suurem kui', 'OpGtEq' => 'suurem kui või võrdne', @@ -552,6 +567,9 @@ $SLANG = array( 'Presets' => 'Eelseaded', 'Prev' => 'Prev', 'Probe' => 'Probe', + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => 'Rate', 'Real' => 'Reaaalne', @@ -639,6 +657,7 @@ $SLANG = array( 'Submit' => 'Submit', 'System' => 'Süsteem', 'SystemLog' => 'Süsteemi Logi', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => 'Thumbnail', 'Tilt' => 'Tilt', @@ -676,9 +695,13 @@ $SLANG = array( 'UseFilter' => 'Kasuta Filtrit', 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Use ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', // Added - 2015-04-18 'User' => 'Kasutaja', 'Username' => 'Kasutajanimi', 'Users' => 'Kasutajad', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'Väärtus', 'Version' => 'Versioon', 'VersionIgnore' => 'Ignoreeri See Versioon', @@ -718,6 +741,7 @@ $SLANG = array( 'Zone' => 'Tsoon', 'ZoneAlarmColour' => 'Alarmi Värv (Red"Punane"/Green"Roheline"/Blue"Sinine")', 'ZoneArea' => 'Tsooni Ala', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Filter Width/Height (pixels)', 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', @@ -726,7 +750,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => 'Tsoone', 'Zoom' => 'Suurenda', 'ZoomIn' => 'Suurenda lähemale', diff --git a/web/lang/fr_fr.php b/web/lang/fr_fr.php index 3ee74aa23..afab7db14 100644 --- a/web/lang/fr_fr.php +++ b/web/lang/fr_fr.php @@ -69,544 +69,567 @@ // setlocale( LC_CTYPE, 'en_GB' ); Character class settings 4.3.0 and after // setlocale( LC_TIME, 'en_GB' ); Date and time formatting 4.3.0 and after +// Set date and time format (example: sam. 18 avril, 19h02) +setlocale(LC_ALL, "fr_FR.UTF-8"); +define("DATE_FMT_CONSOLE_LONG", "%a %d %b, %Hh%M"); +define( "STRF_FMT_DATETIME_SHORT", "%d/%m/%y %H:%M:%S" ); +define( "STRF_FMT_DATETIME_SHORTER", "%d/%m %H:%M:%S" ); + // Simple String Replacements $SLANG = array( - '24BitColour' => 'Couleur 24 bit', - '32BitColour' => 'Couleur 32 bit', // Added - 2011-06-15 - '8BitGrey' => 'Gris 8 bit', + '24BitColour' => 'Couleur 24 bits', + '32BitColour' => 'Couleur 32 bits', // Added - 2011-06-15 + '8BitGrey' => 'Gris 8 bits', 'Action' => 'Action', - 'Actual' => 'RÈel', - 'AddNewControl' => 'Ajouter controle', - 'AddNewMonitor' => 'Ajouter camÈra', + 'Actual' => 'Réel', + 'AddNewControl' => 'Ajouter contrôle', + 'AddNewMonitor' => 'Ajouter caméra', 'AddNewUser' => 'Ajouter utilisateur', 'AddNewZone' => 'Ajouter zone', 'Alarm' => 'Alarme', 'AlarmBrFrames' => 'Images
alarme', 'AlarmFrame' => 'Image alarme', - 'AlarmFrameCount' => 'Nombre dimage alarme', + 'AlarmFrameCount' => 'Nb d\'image(s) en alarme', 'AlarmLimits' => 'Limites alarme', 'AlarmMaximumFPS' => 'i/s maximum pendant alarme', - 'AlarmPx' => 'Px Alarme', - 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'AlarmPx' => 'Px alarme', + 'AlarmRGBUnset' => 'Vous devez définir une couleur RVB pour l\'alarme', + 'AlarmRefImageBlendPct'=> '% fusion image référence en alarme', // Added - 2015-04-18 'Alert' => 'Alerte', 'All' => 'Tous', 'Apply' => 'Appliquer', - 'ApplyingStateChange' => 'Appl. chgt Ètat', - 'ArchArchived' => 'ArchivÈ seul.', + 'ApplyingStateChange' => 'Appl. chgt état', + 'ArchArchived' => 'Archivé seul.', 'ArchUnarchived' => 'Non-arch. seul.', 'Archive' => 'Archiver', - 'Archived' => 'ArchivÈs', - 'Area' => 'Area', - 'AreaUnits' => 'Area (px/%)', + 'Archived' => 'Archivés', + 'Area' => 'Surface', + 'AreaUnits' => 'Surface (px/%)', 'AttrAlarmFrames' => 'Images alarme', 'AttrArchiveStatus' => 'Etat Archive', 'AttrAvgScore' => 'Score moy.', 'AttrCause' => 'Cause', 'AttrDate' => 'Date', 'AttrDateTime' => 'Date/Heure', - 'AttrDiskBlocks' => 'Disk Blocks', - 'AttrDiskPercent' => 'Disk Percent', - 'AttrDuration' => 'DurÈe', + 'AttrDiskBlocks' => 'Blocs disque', + 'AttrDiskPercent' => '% disque', + 'AttrDuration' => 'Durée', 'AttrFrames' => 'Images', 'AttrId' => 'Id', 'AttrMaxScore' => 'Score max.', - 'AttrMonitorId' => 'N∞ camÈra', - 'AttrMonitorName' => 'Nom camÈra', + 'AttrMonitorId' => 'N°', + 'AttrMonitorName' => 'Nom caméra', 'AttrName' => 'Nom', 'AttrNotes' => 'Notes', - 'AttrSystemLoad' => 'Charge SystËme', + 'AttrSystemLoad' => 'Charge système', 'AttrTime' => 'Heure', 'AttrTotalScore' => 'Score total', 'AttrWeekday' => 'Semaine', 'Auto' => 'Auto', - 'AutoStopTimeout' => 'Auto Stop Timeout', - 'Available' => 'Disponible', // Added - 2009-03-31 + 'AutoStopTimeout' => 'Temporisation arrêt', + 'Available' => 'Disponibles', // Added - 2009-03-31 'AvgBrScore' => 'Score
moy.', - 'Background' => 'ArriËre-plan', - 'BackgroundFilter' => 'Lancer les filtres en arriËre-plan', - 'BadAlarmFrameCount' => 'Alarm frame count must be an integer of one or more', - 'BadAlarmMaxFPS' => 'Alarm Maximum FPS must be a positive integer or floating point value', - 'BadChannel' => 'Channel must be set to an integer of zero or more', - 'BadColours' => 'Target colour must be set to a valid value', // Added - 2011-06-15 - 'BadDevice' => 'Device must be set to a valid value', - 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', - 'BadFormat' => 'Format must be set to an integer of zero or more', - 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', - 'BadHeight' => 'Height must be set to a valid value', - 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', - 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', - 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', - 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', - 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', - 'BadNameChars' => 'Les noms ne peuvent contenir que des lettres, chiffres, trait d\'union ou soulignÈ', - 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 - 'BadPath' => 'Path must be set to a valid value', - 'BadPort' => 'Port must be set to a valid number', - 'BadPostEventCount' => 'Post event image count must be an integer of zero or more', - 'BadPreEventCount' => 'Pre event image count must be at least zero, and less than image buffer size', - 'BadRefBlendPerc' => 'Reference blend percentage must be a positive integer', - 'BadSectionLength' => 'Section length must be an integer of 30 or more', - 'BadSignalCheckColour' => 'Signal check colour must be a valid RGB colour string', - 'BadStreamReplayBuffer'=> 'Stream replay buffer must be an integer of zero or more', - 'BadWarmupCount' => 'Warmup frames must be an integer of zero or more', - 'BadWebColour' => 'Web colour must be a valid web colour string', - 'BadWidth' => 'Width must be set to a valid value', - 'Bandwidth' => 'dÈbit', - 'BandwidthHead' => 'dÈbit', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing - 'BlobPx' => 'Px forme', - 'BlobSizes' => 'Taille forme', + 'Background' => 'Arrière-plan', + 'BackgroundFilter' => 'Lancer les filtres en arrière-plan', + 'BadAlarmFrameCount' => 'Le nombre d\'images en alarme doit être un entier supérieur ou égal à 1', + 'BadAlarmMaxFPS' => 'Le nombre maximum d\'i/s en alarme doit être un entier ou un nombre à virgule flottante supérieur à 0', + 'BadChannel' => 'Le canal doit être un nombre entier supérieur ou égal à 0', + 'BadColours' => 'La valeur de la couleur cible est invalide', // Added - 2011-06-15 + 'BadDevice' => 'Le chemin de l\'équipement être défini', + 'BadFPSReportInterval' => 'L\'intervalle de rafraîchissement de l\'information i/s doit être un entier supérieur ou égal à 0', + 'BadFormat' => 'Le format doit être un nombre entier supérieur ou égal à 0', + 'BadFrameSkip' => 'Le nombre d\'images à sauter doit être un entier supérieur ou égal à 0', + 'BadHeight' => 'La valeur de la hauteur est invalide', + 'BadHost' => 'Le nom d\'hôte doit être une adresse ip ou un nom dns valide sans le préfixe http://', + 'BadImageBufferCount' => 'La taille du tampon d \'images doit être un entier supérieur ou égal à 10', + 'BadLabelX' => 'La coordonnée X pour l\'horodatage doit être un entier supérieur ou égal à 0', + 'BadLabelY' => 'La coordonnée Y pour l\'horodatage doit être un entier supérieur ou égal à 0', + 'BadMaxFPS' => 'Le nombre maximum d\'i/s doit être un entier ou un nombre à virgule flottante supérieur à 0', + 'BadMotionFrameSkip' => 'Le nombre d\'images à sauter en cas de détection doit être un entier supérieur ou égal à 0', + 'BadNameChars' => 'Les noms ne peuvent contenir que des lettres, chiffres, trait d\'union ou souligné', + 'BadPalette' => 'La palette doit être définie', // Added - 2009-03-31 + 'BadPath' => 'Le chemin doit être défini', + 'BadPort' => 'Le port doit être un nombre entier supérieur ou égal à 0', + 'BadPostEventCount' => 'Le nombre d\'images post-événements doit être un entier supérieur ou égal à 0', + 'BadPreEventCount' => 'Le nombre d\'images pré-événements doit être un entier supérieur ou égal à 0 et doit rester inférieur à la taille du tampon d\'images', + 'BadRefBlendPerc' => 'Le pourcentage de fusion de l\'image de référence doit être un entier supérieur à 0 et inférieur à 100', + 'BadSectionLength' => 'La longueur de la section doit être un entier supérieur ou égal à 30', + 'BadSignalCheckColour' => 'La chaîne de caractères pour la couleur d\'état du signal est invalide', + 'BadStreamReplayBuffer'=> 'Le tampon d\'images pour la relecture doit être un entier supérieur ou égal à 0', + 'BadWarmupCount' => 'Le nombre d\'images tests doit être un entier supérieur ou égal à 0', + 'BadWebColour' => 'La chaîne de caractères pour la couleur web est invalide', + 'BadWidth' => 'La valeur de la largeur est invalide', + 'Bandwidth' => 'Débit', + 'BandwidthHead' => 'Débit', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing + 'BlobPx' => 'Pix. forme', + 'BlobSizes' => 'Tailles de forme', 'Blobs' => 'Formes', - 'Brightness' => 'LuminositÈ;', + 'Brightness' => 'Luminosité;', + 'Buffer' => 'Tampon', // Added - 2015-04-18 'Buffers' => 'Tampons', - 'CanAutoFocus' => 'Can Auto Focus', - 'CanAutoGain' => 'Can Auto Gain', - 'CanAutoIris' => 'Can Auto Iris', - 'CanAutoWhite' => 'Can Auto White Bal.', - 'CanAutoZoom' => 'Can Auto Zoom', - 'CanFocus' => 'Can Focus', - 'CanFocusAbs' => 'Can Focus Absolute', - 'CanFocusCon' => 'Can Focus Continuous', - 'CanFocusRel' => 'Can Focus Relative', - 'CanGain' => 'Can Gain ', - 'CanGainAbs' => 'Can Gain Absolute', - 'CanGainCon' => 'Can Gain Continuous', - 'CanGainRel' => 'Can Gain Relative', - 'CanIris' => 'Can Iris', - 'CanIrisAbs' => 'Can Iris Absolute', - 'CanIrisCon' => 'Can Iris Continuous', - 'CanIrisRel' => 'Can Iris Relative', - 'CanMove' => 'Can Move', - 'CanMoveAbs' => 'Can Move Absolute', - 'CanMoveCon' => 'Can Move Continuous', - 'CanMoveDiag' => 'Can Move Diagonally', - 'CanMoveMap' => 'Can Move Mapped', - 'CanMoveRel' => 'Can Move Relative', - 'CanPan' => 'Can Pan' , - 'CanReset' => 'Can Reset', - 'CanSetPresets' => 'Can Set Presets', - 'CanSleep' => 'Can Sleep', - 'CanTilt' => 'Can Tilt', - 'CanWake' => 'Can Wake', - 'CanWhite' => 'Can White Balance', - 'CanWhiteAbs' => 'Can White Bal. Absolute', - 'CanWhiteBal' => 'Can White Bal.', - 'CanWhiteCon' => 'Can White Bal. Continuous', - 'CanWhiteRel' => 'Can White Bal. Relative', - 'CanZoom' => 'Can Zoom', - 'CanZoomAbs' => 'Can Zoom Absolute', - 'CanZoomCon' => 'Can Zoom Continuous', - 'CanZoomRel' => 'Can Zoom Relative', + 'CSSDescription' => 'Remplacer la feuille de style CSS par défaut', // Added - 2015-04-18 + 'CanAutoFocus' => 'Automatique', + 'CanAutoGain' => 'Automatique', + 'CanAutoIris' => 'Automatique', + 'CanAutoWhite' => 'Automatique', + 'CanAutoZoom' => 'Automatique', + 'CanFocus' => 'Focus', + 'CanFocusAbs' => 'Absolu', + 'CanFocusCon' => 'Continu', + 'CanFocusRel' => 'Relatif', + 'CanGain' => 'Gain', + 'CanGainAbs' => 'Absolu', + 'CanGainCon' => 'Continu', + 'CanGainRel' => 'Relatif', + 'CanIris' => 'Iris', + 'CanIrisAbs' => 'Absolu', + 'CanIrisCon' => 'Continu', + 'CanIrisRel' => 'Relatif', + 'CanMove' => 'Déplacer', + 'CanMoveAbs' => 'Absolu', + 'CanMoveCon' => 'Continu', + 'CanMoveDiag' => 'Diagonale', + 'CanMoveMap' => 'Sur plan', + 'CanMoveRel' => 'Relatif', + 'CanPan' => 'Panoramique' , + 'CanReset' => 'RàZ', + 'CanSetPresets' => 'Stockage prépos.', + 'CanSleep' => 'Veille', + 'CanTilt' => 'Inclinaison', + 'CanWake' => 'Réveil', + 'CanWhite' => 'Bal. des blancs', + 'CanWhiteAbs' => 'Absolu', + 'CanWhiteBal' => 'Bal. des blancs', + 'CanWhiteCon' => 'Continu', + 'CanWhiteRel' => 'Relatif', + 'CanZoom' => 'Zoom', + 'CanZoomAbs' => 'Absolu', + 'CanZoomCon' => 'Continu', + 'CanZoomRel' => 'Relatif', 'Cancel' => 'Annuler', - 'CancelForcedAlarm' => 'Annuler Alarme ForcÈe', + 'CancelForcedAlarm' => 'Annuler alarme forcée', 'CaptureHeight' => 'Hauteur', - 'CaptureMethod' => 'MÈthode', // Added - 2009-02-08 + 'CaptureMethod' => 'Méthode', // Added - 2009-02-08 'CapturePalette' => 'Palette', + 'CaptureResolution' => 'Résolution', // Added - 2015-04-18 'CaptureWidth' => 'Largeur', 'Cause' => 'Cause', - 'CheckMethod' => 'MÈthode vÈrif. alarme', - 'ChooseDetectedCamera' => 'Choose Detected Camera', // Added - 2009-03-31 + 'CheckMethod' => 'Méthode vérif. alarme', + 'ChooseDetectedCamera' => 'Choisir', // Added - 2009-03-31 'ChooseFilter' => 'Choisir filtre', - 'ChooseLogFormat' => 'Choose a log format', // Added - 2011-06-17 - 'ChooseLogSelection' => 'Choose a log selection', // Added - 2011-06-17 - 'ChoosePreset' => 'Choisir PrÈrÈglages', + 'ChooseLogFormat' => 'Choisir un format de journal', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Choisir une sélection de journaux', // Added - 2011-06-17 + 'ChoosePreset' => 'Choisir préréglage', 'Clear' => 'Effacer', // Added - 2011-06-16 'Close' => 'Fermer', 'Colour' => 'Couleur', 'Command' => 'Commande', - 'Component' => 'Component', // Added - 2011-06-16 + 'Component' => 'Composant', // Added - 2011-06-16 'Config' => 'Config', - 'ConfiguredFor' => 'ConfigurÈ pour', - 'ConfirmDeleteEvents' => 'Are you sure you wish to delete the selected events?', - 'ConfirmPassword' => 'Confirmer mot de passe', + 'ConfiguredFor' => 'Configuré pour', + 'ConfirmDeleteEvents' => 'Etes-vous sûr de vouloir effacer le(s) événement(s) sélectionné(s)?', + 'ConfirmPassword' => 'Répéter mot de passe', 'ConjAnd' => 'et', 'ConjOr' => 'ou', 'Console' => 'Console', 'ContactAdmin' => 'Contactez votre administrateur SVP', 'Continue' => 'Continuer', 'Contrast' => 'Contraste', - 'Control' => 'Control', - 'ControlAddress' => 'Control Address', - 'ControlCap' => 'Control Capability', - 'ControlCaps' => 'Control Capabilities', - 'ControlDevice' => 'Control Device', - 'ControlType' => 'Control Type', - 'Controllable' => 'Controllable', + 'Control' => 'Contrôle', + 'ControlAddress' => 'Adresse', + 'ControlCap' => 'Capacité de contrôle', + 'ControlCaps' => 'Capacités de contrôle', + 'ControlDevice' => 'Equipement', + 'ControlType' => 'Type', + 'Controllable' => 'Controlâble', + 'Current' => 'En cours', // Added - 2015-04-18 'Cycle' => 'Cycle', - 'CycleWatch' => 'Cycle vision', - 'DateTime' => 'Date/Time', // Added - 2011-06-16 - 'Day' => 'Aujourd'hui', + 'CycleWatch' => 'Vision de cycle', + 'DateTime' => 'Date/Heure', // Added - 2011-06-16 + 'Day' => 'Aujourd\'hui', 'Debug' => 'Debug', - 'DefaultRate' => 'Vitesse par dÈfaut', - 'DefaultScale' => 'Echelle par dÈfaut', - 'DefaultView' => 'Vue par dÈfaut', + 'DefaultRate' => 'Vitesse par défaut', + 'DefaultScale' => 'Echelle par défaut', + 'DefaultView' => 'Vue par défaut', + 'Deinterlacing' => 'Désentrelacement', // Added - 2015-04-18 + 'Delay' => 'Délai', // Added - 2015-04-18 'Delete' => 'Effacer', 'DeleteAndNext' => 'Eff. & suiv.', 'DeleteAndPrev' => 'Eff. & prec.', - 'DeleteSavedFilter' => 'Eff. filtre sauvÈ', + 'DeleteSavedFilter' => 'Eff. filtre sauvé', 'Description' => 'Description', - 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 - 'Device' => 'CamÈra', // Added - 2009-02-08 - 'DeviceChannel' => 'Canal camÈra', - 'DeviceFormat' => 'Format camÈra', - 'DeviceNumber' => 'NumÈro camÈra', - 'DevicePath' => 'Chemin', - 'Devices' => 'CamÈras', + 'DetectedCameras' => 'Caméra(s) détectée(s)', // Added - 2009-03-31 + 'DetectedProfiles' => 'Profil(s) détecté(s)', // Added - 2015-04-18 + 'Device' => 'Equipement', // Added - 2009-02-08 + 'DeviceChannel' => 'Canal', + 'DeviceFormat' => 'Format vidéo', + 'DeviceNumber' => 'Numéro caméra', + 'DevicePath' => 'Chemin de l\'équipement', + 'Devices' => 'Caméras', 'Dimensions' => 'Dimensions', - 'DisableAlarms' => 'DÈsactiver les alarmes', + 'DisableAlarms' => 'Désactiver les alarmes', 'Disk' => 'Stockage', 'Display' => 'Affichage', // Added - 2011-01-30 - 'Displaying' => 'Displaying', // Added - 2011-06-16 - 'Donate' => 'Please Donate', - 'DonateAlready' => 'No, I\'ve already donated', - 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', - 'DonateRemindDay' => 'Not yet, remind again in 1 day', - 'DonateRemindHour' => 'Not yet, remind again in 1 hour', - 'DonateRemindMonth' => 'Not yet, remind again in 1 month', - 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', - 'DonateRemindWeek' => 'Not yet, remind again in 1 week', - 'DonateYes' => 'Yes, I\'d like to donate now', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', - 'Download' => 'TÈlÈcharger', - 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 - 'Duration' => 'DurÈe', + 'Displaying' => 'Affichés', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Réaliser détection native', + 'Donate' => 'Veuillez faire un don', + 'DonateAlready' => 'Non, j\'ai déjà donné', + 'DonateEnticement' => 'Vous utilisez ZoneMinder depuis quelque temps et nous espérons que vous trouvez cette solution utile. Bien que ZoneMinder est, et restera, une solution libre et ouverte (open source), son développement et son maintien nécessitent des moyens financiers. Si vous voulez aider au développement et à l\'ajout de fonctionnalités, veuillez considérer la possibilité d\'effectuer un don. Les dons sont bien sûr optionnels mais grandement appréciés et vous pouvez donner le montant que vous désirez.

Si vous voulez effectuer un don, veuillez sélectionner l\'option ci-dessous ou veuillez vous rendre sur http://www.zoneminder.com/donate.html à l\'aide de votre navigateur internet.

Merci d\'utiliser ZoneMinder et n\'oubliez pas de visiter les forums sur ZoneMinder.com pour le support ou des suggestions pour rendre votre expérience de ZoneMinder encore meilleure.', + 'DonateRemindDay' => 'Pas encore, me rappeler dans 1 jour', + 'DonateRemindHour' => 'Pas encore, me rappeler dans 1 heure', + 'DonateRemindMonth' => 'Pas encore, me rappeler dans 1 mois', + 'DonateRemindNever' => 'Non, je ne veux pas faire de don, ne me rappeler pas', + 'DonateRemindWeek' => 'Pas encore, me rappeler dans 1 semaine', + 'DonateYes' => 'Oui, je souhaiterais faire un don maintenant', + 'Download' => 'Télécharger', + 'DuplicateMonitorName' => 'Dupliquer le nom de la caméra', // Added - 2009-03-31 + 'Duration' => 'Durée', 'Edit' => 'Editer', 'Email' => 'Email', 'EnableAlarms' => 'Activer les alarmes', - 'Enabled' => 'ActivÈ', + 'Enabled' => 'Activé', 'EnterNewFilterName' => 'Entrer nom nouv. filtre', 'Error' => 'Erreur', - 'ErrorBrackets' => 'Erreur, vÈrifiez que toutes les parenthËses ouvertes sont fermÈes', - 'ErrorValidValue' => 'Erreur, vÈrifiez que tous les termes ont une valeur valide', + 'ErrorBrackets' => 'Erreur, vérifiez que toutes les parenthèses ouvertes sont fermées', + 'ErrorValidValue' => 'Erreur, vérifiez que tous les termes ont une valeur valide', 'Etc' => 'etc', - 'Event' => 'ÈvÈnement', - 'EventFilter' => 'Filtre ÈvÈnement', + 'Event' => 'Evénement', + 'EventFilter' => 'Filtre événement', 'EventId' => 'Id', 'EventName' => 'Nom', - 'EventPrefix' => 'Prefix', - 'Events' => 'ÈvÈnements', + 'EventPrefix' => 'Préfixe', + 'Events' => 'Evénements', 'Exclude' => 'Exclure', - 'Execute' => 'Executer', + 'Execute' => 'Exécuter', 'Export' => 'Exporter', - 'ExportDetails' => 'Exporter dÈtails ÈvÈnement', - 'ExportFailed' => 'Exportation ÈchouÈe', + 'ExportDetails' => 'Exporter détails événements', + 'ExportFailed' => 'Exportation échouée', 'ExportFormat' => 'Format', 'ExportFormatTar' => 'Tar', 'ExportFormatZip' => 'Zip', - 'ExportFrames' => 'Exporter dÈtails image', - 'ExportImageFiles' => 'Exporter fichiers image', - 'ExportLog' => 'Exporter Log', // Added - 2011-06-17 + 'ExportFrames' => 'Exporter détails image', + 'ExportImageFiles' => 'Exporter fichiers images', + 'ExportLog' => 'Exporter fichiers journaux', // Added - 2011-06-17 'ExportMiscFiles' => 'Exporter autres fichiers', - 'ExportOptions' => 'Options d'exportation', - 'ExportSucceeded' => 'Exportation rÈussie', // Added - 2009-02-08 - 'ExportVideoFiles' => 'Exporter fichiers video', + 'ExportOptions' => 'Options d\'exportation', + 'ExportSucceeded' => 'Exportation réussie', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Exporter fichiers vidéo', 'Exporting' => 'Exportation', 'FPS' => 'i/s', - 'FPSReportInterval' => 'FPS Report Interval', + 'FPSReportInterval' => 'Interv. de rafraîch. i/s', 'FTP' => 'FTP', 'Far' => 'Loin', 'FastForward' => 'Avance rapide', 'Feed' => 'Flux', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'Fichier', + 'Filter' => 'Filtre', // Added - 2015-04-18 'FilterArchiveEvents' => 'Archiver', 'FilterDeleteEvents' => 'Effacer', - 'FilterEmailEvents' => 'Envoyer les dÈtails par mail', - 'FilterExecuteEvents' => 'Executer une commande', - 'FilterMessageEvents' => 'Envoyer les dÈtails par message', - 'FilterPx' => 'Filter Px', - 'FilterUnset' => 'You must specify a filter width and height', - 'FilterUploadEvents' => 'TransfÈrer', - 'FilterVideoEvents' => 'CrÈer video', + 'FilterEmailEvents' => 'Envoyer les détails par email', + 'FilterExecuteEvents' => 'Exécuter une commande', + 'FilterLog' => 'Filtre', // Added - 2015-04-18 + 'FilterMessageEvents' => 'Envoyer les détails par message', + 'FilterPx' => 'Filtre Px', + 'FilterUnset' => 'Vous devez spécifier une largeur et une hauteur de filtre', + 'FilterUploadEvents' => 'Transférer', + 'FilterVideoEvents' => 'Créer vidéo', 'Filters' => 'Filtres', 'First' => 'Prem.', - 'FlippedHori' => 'Flipped Horizontally', - 'FlippedVert' => 'Flipped Vertically', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. + 'FlippedHori' => 'Inversé horizontalement', + 'FlippedVert' => 'Inversé verticalement', 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'Aucun', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Focus', - 'ForceAlarm' => 'Force Alarme', + 'ForceAlarm' => 'Forcer alarme', 'Format' => 'Format', 'Frame' => 'Image', - 'FrameId' => 'N∞ image', - 'FrameRate' => 'Cadence Image', + 'FrameId' => 'N°', + 'FrameRate' => 'Cadence image', 'FrameSkip' => 'Saut image', - 'MotionFrameSkip' => 'Motion Frame Skip', - 'Frames' => 'images', + 'Frames' => 'Images', 'Func' => 'Fct', 'Function' => 'Mode', 'Gain' => 'Gain', - 'General' => 'GÈnÈral', - 'GenerateVideo' => 'GÈnÈrer VidÈo', - 'GeneratingVideo' => 'GÈnÈration VidÈo', + 'General' => 'Général', + 'GenerateVideo' => 'Générer vidéo', + 'GeneratingVideo' => 'Génération vidéo', 'GoToZoneMinder' => 'Aller sur ZoneMinder.com', 'Grey' => 'Gris', 'Group' => 'Groupe', 'Groups' => 'Groupes', - 'HasFocusSpeed' => 'Has Focus Speed', - 'HasGainSpeed' => 'Has Gain Speed', - 'HasHomePreset' => 'Has Home Preset', - 'HasIrisSpeed' => 'Has Iris Speed', - 'HasPanSpeed' => 'Has Pan Speed', - 'HasPresets' => 'Has Presets', - 'HasTiltSpeed' => 'Has Tilt Speed', - 'HasTurboPan' => 'Has Turbo Pan', - 'HasTurboTilt' => 'Has Turbo Tilt', - 'HasWhiteSpeed' => 'Has White Bal. Speed', - 'HasZoomSpeed' => 'Has Zoom Speed', + 'HasFocusSpeed' => 'Vitesse', + 'HasGainSpeed' => 'Vitesse gain', + 'HasHomePreset' => 'Position par défaut', + 'HasIrisSpeed' => 'Vitesse', + 'HasPanSpeed' => 'Vitesse', + 'HasPresets' => 'Prépositions', + 'HasTiltSpeed' => 'Vitesse', + 'HasTurboPan' => 'Turbo', + 'HasTurboTilt' => 'Incl. turbo', + 'HasWhiteSpeed' => 'Vitesse', + 'HasZoomSpeed' => 'Vitesse', 'High' => 'Haut', - 'HighBW' => 'Haut N/B', - 'Home' => 'Home', + 'HighBW' => 'Haut débit', + 'Home' => 'Maison', 'Hour' => 'Heure', 'Hue' => 'Teinte', - 'Id' => 'N∞', + 'Id' => 'N°', 'Idle' => 'Vide', 'Ignore' => 'Ignorer', 'Image' => 'Image', 'ImageBufferSize' => 'Taille tampon image', 'Images' => 'Images', - 'In' => 'In', + 'In' => 'Dans', 'Include' => 'Inclure', - 'Inverted' => 'InversÈ', + 'Inverted' => 'Inversé', 'Iris' => 'Iris', - 'KeyString' => 'Key String', - 'Label' => 'Label', + 'KeyString' => 'Chaîne clé', + 'Label' => 'Etiquette', 'Language' => 'Langue', 'Last' => 'Dernier', 'Layout' => 'Disposition', // Added - 2009-02-08 'Level' => 'Niveau', // Added - 2011-06-16 'Libvlc' => 'Libvlc', - 'LimitResultsPost' => 'rÈsultats seulement;', // This is used at the end of the phrase 'Limit to first N results only' - 'LimitResultsPre' => 'Limite au premier', // This is used at the beginning of the phrase 'Limit to first N results only' + 'LimitResultsPost' => 'résultat(s) seulement', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'Limiter au(x) premier(s)', // This is used at the beginning of the phrase 'Limit to first N results only' 'Line' => 'Ligne', // Added - 2011-06-16 - 'LinkedMonitors' => 'CamÈra(s) liÈ(s)', + 'LinkedMonitors' => 'Caméra(s) liée(s)', 'List' => 'Liste', - 'Load' => 'CPU', + 'Load' => 'Charge', 'Local' => 'Local', - 'Log' => 'Log', // Added - 2011-06-16 - 'LoggedInAs' => 'ConnectÈ cÙ', - 'Logging' => 'Logging', // Added - 2011-06-16 + 'Log' => 'Journal', // Added - 2011-06-16 + 'LoggedInAs' => 'Connecté en tant que', + 'Logging' => 'Journalisation', // Added - 2011-06-16 'LoggingIn' => 'Connexion', - 'Login' => 'Login', - 'Logout' => 'DÈconnexion', - 'Logs' => 'Logs', // Added - 2011-06-17 + 'Login' => 'Connexion', + 'Logout' => 'Déconnexion', + 'Logs' => 'Journaux', // Added - 2011-06-17 'Low' => 'Bas', - 'LowBW' => 'Basse N/B', + 'LowBW' => 'Bas débit', 'Main' => 'Principal', 'Man' => 'Man', 'Manual' => 'Manuel', - 'Mark' => 'SÈlÈctionner', + 'Mark' => 'Sélectionner', 'Max' => 'Max', - 'MaxBandwidth' => 'Max Bandwidth', + 'MaxBandwidth' => 'Débit max', 'MaxBrScore' => 'Score
max', - 'MaxFocusRange' => 'Max Focus Range', - 'MaxFocusSpeed' => 'Max Focus Speed', - 'MaxFocusStep' => 'Max Focus Step', - 'MaxGainRange' => 'Max Gain Range', - 'MaxGainSpeed' => 'Max Gain Speed', - 'MaxGainStep' => 'Max Gain Step', - 'MaxIrisRange' => 'Max Iris Range', - 'MaxIrisSpeed' => 'Max Iris Speed', - 'MaxIrisStep' => 'Max Iris Step', - 'MaxPanRange' => 'Max Pan Range', - 'MaxPanSpeed' => 'Max Pan Speed', - 'MaxPanStep' => 'Max Pan Step', - 'MaxTiltRange' => 'Max Tilt Range', - 'MaxTiltSpeed' => 'Max Tilt Speed', - 'MaxTiltStep' => 'Max Tilt Step', - 'MaxWhiteRange' => 'Max White Bal. Range', - 'MaxWhiteSpeed' => 'Max White Bal. Speed', - 'MaxWhiteStep' => 'Max White Bal. Step', - 'MaxZoomRange' => 'Max Zoom Range', - 'MaxZoomSpeed' => 'Max Zoom Speed', - 'MaxZoomStep' => 'Max Zoom Step', + 'MaxFocusRange' => 'Plage max', + 'MaxFocusSpeed' => 'Vitesse max', + 'MaxFocusStep' => 'Pas max', + 'MaxGainRange' => 'Plage gain max', + 'MaxGainSpeed' => 'Vitesse gain max', + 'MaxGainStep' => 'Pas gain max', + 'MaxIrisRange' => 'Plage max', + 'MaxIrisSpeed' => 'Vitesse max', + 'MaxIrisStep' => 'Pas max', + 'MaxPanRange' => 'Plage max', + 'MaxPanSpeed' => 'Vitesse max', + 'MaxPanStep' => 'Pas max', + 'MaxTiltRange' => 'Plage max', + 'MaxTiltSpeed' => 'Vitesse max', + 'MaxTiltStep' => 'Pas max', + 'MaxWhiteRange' => 'Plage max', + 'MaxWhiteSpeed' => 'Vitesse max', + 'MaxWhiteStep' => 'Pas max', + 'MaxZoomRange' => 'Plage max', + 'MaxZoomSpeed' => 'Vitesse max', + 'MaxZoomStep' => 'Pas max', 'MaximumFPS' => 'i/s maximum', 'Medium' => 'Moyen', - 'MediumBW' => 'Moy. N/B', + 'MediumBW' => 'Moy. débit', 'Message' => 'Message', // Added - 2011-06-16 - 'MinAlarmAreaLtMax' => 'Minimum alarm area should be less than maximum', - 'MinAlarmAreaUnset' => 'You must specify the minimum alarm pixel count', - 'MinBlobAreaLtMax' => 'Aire blob min. doit Í < aire blob maximum', - 'MinBlobAreaUnset' => 'You must specify the minimum blob pixel count', - 'MinBlobLtMinFilter' => 'Minimum blob area should be less than or equal to minimum filter area', - 'MinBlobsLtMax' => 'Blobs min. doit Í < blobs max.', - 'MinBlobsUnset' => 'You must specify the minimum blob count', - 'MinFilterAreaLtMax' => 'Minimum filter area should be less than maximum', - 'MinFilterAreaUnset' => 'You must specify the minimum filter pixel count', - 'MinFilterLtMinAlarm' => 'Minimum filter area should be less than or equal to minimum alarm area', - 'MinFocusRange' => 'Min Focus Range', - 'MinFocusSpeed' => 'Min Focus Speed', - 'MinFocusStep' => 'Min Focus Step', - 'MinGainRange' => 'Min Gain Range', - 'MinGainSpeed' => 'Min Gain Speed', - 'MinGainStep' => 'Min Gain Step', - 'MinIrisRange' => 'Min Iris Range', - 'MinIrisSpeed' => 'Min Iris Speed', - 'MinIrisStep' => 'Min Iris Step', - 'MinPanRange' => 'Min Pan Range', - 'MinPanSpeed' => 'Min Pan Speed', - 'MinPanStep' => 'Min Pan Step', - 'MinPixelThresLtMax' => 'Seuil pixel min. doit Í < seuil pixel max.', - 'MinPixelThresUnset' => 'You must specify a minimum pixel threshold', - 'MinTiltRange' => 'Min Tilt Range', - 'MinTiltSpeed' => 'Min Tilt Speed', - 'MinTiltStep' => 'Min Tilt Step', - 'MinWhiteRange' => 'Min White Bal. Range', - 'MinWhiteSpeed' => 'Min White Bal. Speed', - 'MinWhiteStep' => 'Min White Bal. Step', - 'MinZoomRange' => 'Min Zoom Range', - 'MinZoomSpeed' => 'Min Zoom Speed', - 'MinZoomStep' => 'Min Zoom Step', + 'MinAlarmAreaLtMax' => 'La surface minimum en alarme doit être inférieure au maximum', + 'MinAlarmAreaUnset' => 'Vous devez spécifier la surface minimum en alarme (nb de pixels)', + 'MinBlobAreaLtMax' => 'La surface minimum des formes doit être inférieure au maximum', + 'MinBlobAreaUnset' => 'Vous devez spécifier la surface minimum des formes (nb de pixels)', + 'MinBlobLtMinFilter' => 'La surface minimum des formes doit être inférieure à la surface minimum filtrée', + 'MinBlobsLtMax' => 'Le nombre minimum de formes doit être inférieur au maximum', + 'MinBlobsUnset' => 'Vous devez spécifier le nombre minimum de formes', + 'MinFilterAreaLtMax' => 'La surface minimum filtrée doit être inférieure au maximum', + 'MinFilterAreaUnset' => 'Vous devez spécifier la surface minimum filtrée (nb de pixels)', + 'MinFilterLtMinAlarm' => 'La surface minimum filtrée doit être inférieure à la surface minimum en alarme', + 'MinFocusRange' => 'Plage min', + 'MinFocusSpeed' => 'Vitesse min', + 'MinFocusStep' => 'Pas min', + 'MinGainRange' => 'Plage gain min', + 'MinGainSpeed' => 'Vitesse gain min', + 'MinGainStep' => 'Pas gain min', + 'MinIrisRange' => 'Plage min', + 'MinIrisSpeed' => 'Vitesse min', + 'MinIrisStep' => 'Pas min', + 'MinPanRange' => 'Plage min', + 'MinPanSpeed' => 'Vitesse min', + 'MinPanStep' => 'Pas min', + 'MinPixelThresLtMax' => 'Le seuil minimum de pixels doit être inférieur au maximum', + 'MinPixelThresUnset' => 'Vous devez spécifier le seuil minimum de pixels', + 'MinTiltRange' => 'Plage min', + 'MinTiltSpeed' => 'Vitesse min', + 'MinTiltStep' => 'Pas min', + 'MinWhiteRange' => 'Plage min', + 'MinWhiteSpeed' => 'Vitesse min', + 'MinWhiteStep' => 'Pas min', + 'MinZoomRange' => 'Plage min', + 'MinZoomSpeed' => 'Vitesse min', + 'MinZoomStep' => 'Pas min', 'Misc' => 'Divers', - 'Monitor' => 'CamÈra', - 'MonitorIds' => 'N∞ camÈra', - 'MonitorPreset' => 'PrÈrÈglages camÈra', - 'MonitorPresetIntro' => 'Select an appropriate preset from the list below.

Please note that this may overwrite any values you already have configured for this monitor.

', - 'MonitorProbe' => 'Scanner CamÈra', // Added - 2009-03-31 - 'MonitorProbeIntro' => 'The list below shows detected analog and network cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2009-03-31 - 'Monitors' => 'CamÈras', + 'Mode' => 'Mode', // Added - 2015-04-18 + 'Monitor' => 'Caméra', + 'MonitorIds' => 'N° caméra', + 'MonitorPreset' => 'Préréglage caméra', + 'MonitorPresetIntro' => 'Sélectionnez un préréglage dans la liste ci-dessous.

Veuillez noter que la sauvegarde entraînera l\'écrasement des paramètres déjà configurés pour la caméra en cours.

', + 'MonitorProbe' => 'Autodétection caméras', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'La liste ci-dessous montre les caméras détectées localement ou sur le réseau, qu\'elles soient déjà configurées ou non.

Sélectionnez la caméra désirée dans la liste.

Veuillez noter que toutes les caméras ne sont pas forcément détectées et que la sauvegarde entraînera l\'écrasement des paramètres déjà configurés pour la caméra en cours.

', // Added - 2009-03-31 + 'Monitors' => 'Caméras', 'Montage' => 'Montage', 'Month' => 'Mois', 'More' => 'Plus', // Added - 2011-06-16 - 'Move' => 'DÈplacer', - 'MtgDefault' => 'Default', // Added 2013.08.15. - 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. - 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. - 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. - 'MustBeGe' => 'doit Ítre sup. ou Ègal ‡', - 'MustBeLe' => 'doit Ítre inf. ou Ègal ‡', + 'MotionFrameSkip' => 'Saut image en alarme', + 'Move' => 'Déplacement', + 'Mtg2widgrd' => '2 colonnes', // Added 2013.08.15. + 'Mtg3widgrd' => '3 colonnes', // Added 2013.08.15. + 'Mtg3widgrx' => '3 colonnes, échelle auto, élargir sur alarme', // Added 2013.08.15. + 'Mtg4widgrd' => '4 colonnes', // Added 2013.08.15. + 'MtgDefault' => 'Défaut', // Added 2013.08.15. + 'MustBeGe' => 'doit être sup. ou égal à', + 'MustBeLe' => 'doit être inf. ou égal à', 'MustConfirmPassword' => 'Confirmez le mot de passe', 'MustSupplyPassword' => 'Entrez un mot de passe', 'MustSupplyUsername' => 'Entrez un nom d\'utilisateur', 'Name' => 'Nom', - 'Near' => 'PrËs', - 'Network' => 'RÈseau', + 'Near' => 'Près', + 'Network' => 'Réseau', 'New' => 'Nouv.', - 'NewGroup' => 'Nouv. Groupe', - 'NewLabel' => 'Nouv. Label', - 'NewPassword' => 'Nouv. mt de passe', - 'NewState' => 'Nv Ètat', - 'NewUser' => 'Nv util.', + 'NewGroup' => 'Nouv. groupe', + 'NewLabel' => 'Nouv. label', + 'NewPassword' => 'Mot de passe', + 'NewState' => 'Nouv. état', + 'NewUser' => 'Nouv. utilisateur', 'Next' => 'Suivant', 'No' => 'Non', - 'NoDetectedCameras' => 'Pas de caméras dÈtectÈ', // Added - 2009-03-31 - 'NoFramesRecorded' => 'Pas d\'image enregistrÈe pour cet ÈvÈnement', + 'NoDetectedCameras' => 'Pas de caméras détectées', // Added - 2009-03-31 + 'NoFramesRecorded' => 'Pas d\'images enregistrées pour cet événement', 'NoGroup' => 'Pas de groupe', - 'NoSavedFilters' => 'Pasfiltressauv', - 'NoStatisticsRecorded' => 'Pas de statistiques disponibles pour cet ÈvÈnmnt/imag.', + 'NoSavedFilters' => 'Pas de filtres sauvegardés', + 'NoStatisticsRecorded' => 'Pas de statistiques disponibles pour cet événmnt/imag.', 'None' => 'Aucun', 'NoneAvailable' => 'Aucun disponible', 'Normal' => 'Normal', 'Notes' => 'Notes', - 'NumPresets' => 'Num PrÈrÈglages', - 'Off' => 'Off', - 'On' => 'On', - 'OpEq' => 'Ègal ‡', - 'OpGt' => 'sup. ‡', - 'OpGtEq' => 'plus grand ou Ègal ‡', + 'NumPresets' => 'Nombre', + 'Off' => 'Désactiver', + 'On' => 'Activer', + 'OnvifCredentialsIntro'=> 'Veuillez fournir un nom d\'utilisateur et un mot de passe pour la caméra sélectionnée.
Si aucun utilisateur n\'a été créé pour la caméra alors l\'utilisateur saisi sera créé avec le mot de passe associé.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'La liste ci-dessous montre les caméras ONVIF détectées et si elles sont déjà utilisées ou disponibles.

Sélectionnez la caméra souhaitée dans la liste ci-dessous.

Veuillez noter que toutes les caméras ne sont pas forcément détectées et que la sauvegarde entraînera l\'écrasement des paramètres déjà configurés pour la caméra en cours.

', // Added - 2015-04-18 + 'OpEq' => 'égal à', + 'OpGt' => 'sup. à', + 'OpGtEq' => 'plus grand ou égal à', 'OpIn' => 'en lot', - 'OpLt' => 'inf. ‡', - 'OpLtEq' => 'inf. ou Ègal ‡', + 'OpLt' => 'inf. à', + 'OpLtEq' => 'inf. ou égal à', 'OpMatches' => 'correspond', 'OpNe' => 'diff. de', 'OpNotIn' => 'pas en lot', 'OpNotMatches' => 'ne correspond pas', 'Open' => 'Ouvrir', 'OptionHelp' => 'Aide', - 'OptionRestartWarning' => 'These changes may not come into effect fully\nwhile the system is running. When you have\nfinished making your changes please ensure that\nyou restart ZoneMinder.', + 'OptionRestartWarning' => 'Ces changements peuvent nécessiter un redémarrage de ZoneMinder pour être pleinement opérationnels.', 'Options' => 'Options', - 'OrEnterNewName' => 'ou entrez nv nom', + 'OrEnterNewName' => 'ou entrez nouv. nom', 'Order' => 'Ordre', 'Orientation' => 'Orientation', - 'Out' => 'Out', + 'Out' => 'Arrière', 'OverwriteExisting' => 'Ecraser l\'existant', - 'Paged' => 'PaginÈe', - 'Pan' => 'Pan', - 'PanLeft' => 'Pan Left', - 'PanRight' => 'Pan Right', - 'PanTilt' => 'Pan/Tilt', - 'Parameter' => 'ParamËtre', - 'Password' => 'Mt de passe', - 'PasswordsDifferent' => 'Les 2 mots de passe sont diffÈrents', + 'Paged' => 'Paginée', + 'Pan' => 'Panoramique', + 'PanLeft' => 'Pano. gauche', + 'PanRight' => 'Pano. droite', + 'PanTilt' => 'Pano. / Incl.', + 'Parameter' => 'Paramètre', + 'Password' => 'Mot de passe', + 'PasswordsDifferent' => 'Les 2 mots de passe sont différents', 'Paths' => 'Chemins', 'Pause' => 'Pause', - 'Phone' => 'TÈlÈphone', - 'PhoneBW' => 'Phone B/W', + 'Phone' => 'Téléphone', + 'PhoneBW' => 'Débit tél.', 'Pid' => 'PID', // Added - 2011-06-16 - 'PixelDiff' => 'Pixel Diff', - 'Pixels' => 'pixels', + 'PixelDiff' => 'Diff. pixel', + 'Pixels' => 'nb pixels', 'Play' => 'Lire', 'PlayAll' => 'Tout lire', 'PleaseWait' => 'Attendez', - 'Plugins' => 'Plugins', + 'Plugins' => 'Greffons', 'Point' => 'Point', - 'PostEventImageBuffer' => 'Nombre dimage(s) post-ÈvÈnement', - 'PreEventImageBuffer' => 'Nombre dimage(s) prÈ-ÈvÈnement', - 'PreserveAspect' => 'Conserver les proportions', - 'Preset' => 'PrÈrÈglage', - 'Presets' => 'PrÈrÈglages', - 'Prev' => 'PrecÈdent', - 'Probe' => 'Scanner', // Added - 2009-03-31 + 'PostEventImageBuffer' => 'Nb d\'image(s) post-événement', + 'PreEventImageBuffer' => 'Nb d\'image(s) pré-événement', + 'PreserveAspect' => 'Préserver les proportions', + 'Preset' => 'Préréglage', + 'Presets' => 'Préréglages', + 'Prev' => 'Précédent', + 'Probe' => 'Autodétection', // Added - 2009-03-31 + 'ProfileProbe' => 'Détection de flux', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'La liste ci-dessous montre les profils de flux existants pour la caméra sélectionnée.

Sélectionnez le profil désiré dans la liste ci-dessous.

Veuillez noter que ZoneMinder ne peut pas configurer de profils additionels et que la sauvegarde entraînera l\'écrasement des paramètres déjà configurés pour la caméra en cours.

', // Added - 2015-04-18 + 'Progress' => 'Progression', // Added - 2015-04-18 'Protocol' => 'Protocole', 'Rate' => 'Vitesse', - 'Real' => 'RÈel', + 'Real' => 'Réel', 'Record' => 'Enregistrer', - 'RefImageBlendPct' => 'Reference Image Blend %ge', - 'Refresh' => 'RafraÓchir', + 'RefImageBlendPct' => '% fusion image référence', + 'Refresh' => 'Rafraîchir', 'Remote' => 'Distant', - 'RemoteHostName' => 'IP/DNS', + 'RemoteHostName' => 'Nom d\'hôte', 'RemoteHostPath' => 'Chemin', 'RemoteHostPort' => 'Port', 'RemoteHostSubPath' => 'Sous-chemin', // Added - 2009-02-08 'RemoteImageColours' => 'Nombre de couleurs', - 'RemoteMethod' => 'MÈthode', // Added - 2009-02-08 + 'RemoteMethod' => 'Méthode', // Added - 2009-02-08 'RemoteProtocol' => 'Protocole', // Added - 2009-02-08 'Rename' => 'Renommer', 'Replay' => 'Relire', - 'ReplayAll' => 'Tous les ÈvÈnements', - 'ReplayGapless' => 'EvÈnement Gapless', - 'ReplaySingle' => 'EvÈnement unique', - 'Reset' => 'RAZ', - 'ResetEventCounts' => 'Rem. ‡ 0 comptage des Èvts', - 'Restart' => 'RedÈmarrer', - 'Restarting' => 'RedÈmarrage', - 'RestrictedCameraIds' => 'N∞ camÈras confid.', - 'RestrictedMonitors' => 'Restricted Monitors', - 'ReturnDelay' => 'Return Delay', - 'ReturnLocation' => 'Return Location', - 'Rewind' => 'Rembobiner', + 'ReplayAll' => 'Tous les événements', + 'ReplayGapless' => 'Rejouer sans blancs', + 'ReplaySingle' => 'Rejouer seul', + 'Reset' => 'RàZ', + 'ResetEventCounts' => 'RàZ compteur évts', + 'Restart' => 'Redémarrer', + 'Restarting' => 'Redémarrage', + 'RestrictedCameraIds' => 'N°', + 'RestrictedMonitors' => 'Caméra(s) uniquement visible(s)', + 'ReturnDelay' => 'Délai de retour', + 'ReturnLocation' => 'Position de retour', + 'Rewind' => 'Reculer', 'RotateLeft' => 'Rotation g.', 'RotateRight' => 'Rotation d.', - 'RunLocalUpdate' => 'Please run zmupdate.pl to update', // Added - 2011-05-25 + 'RunLocalUpdate' => 'Veuillez éxecuter zmupdate.pl pour mettre à jour', // Added - 2011-05-25 'RunMode' => 'Mode de lancement', - 'RunState' => 'Changer Ètat', - 'Running' => 'En Fonctionnement', - 'Save' => 'OK', + 'RunState' => 'Changer d\'état', + 'Running' => 'En marche', + 'Save' => 'Sauvegarder', 'SaveAs' => 'Sauvegarder sous', - 'SaveFilter' => 'Sauvegarder Filtre', + 'SaveFilter' => 'Sauvegarder filtre', 'Scale' => 'Echelle', 'Score' => 'Score', 'Secs' => 'Secs', 'Sectionlength' => 'Longueur section', - 'Select' => 'SÈlectionner', - 'SelectFormat' => 'SÈlectionner Format', // Added - 2011-06-17 - 'SelectLog' => 'SÈlectionner Log', // Added - 2011-06-17 - 'SelectMonitors' => 'SÈlectionner camÈras', - 'SelfIntersecting' => 'Polygon edges must not intersect', - 'Set' => 'DÉfinir', - 'SetNewBandwidth' => 'RÈgler le dÈbit', - 'SetPreset' => 'DÈfinir PrÈrÈglages', - 'Settings' => 'RÈglages', + 'Select' => 'Sélectionner', + 'SelectFormat' => 'Sélectionner format', // Added - 2011-06-17 + 'SelectLog' => 'Sélectionner journal', // Added - 2011-06-17 + 'SelectMonitors' => 'Sélectionner caméras', + 'SelfIntersecting' => 'Les bords du polygone ne doivent pas se croiser', + 'Set' => 'Définir', + 'SetNewBandwidth' => 'Régler le débit', + 'SetPreset' => 'Définir préréglage', + 'Settings' => 'Réglages', 'ShowFilterWindow' => 'Filtres', - 'ShowTimeline' => 'Afficher Chronologie', - 'SignalCheckColour' => 'Signal Check Colour', + 'ShowTimeline' => 'Afficher chronologie', + 'SignalCheckColour' => 'Couleur vérif. signal', 'Size' => 'Taille', - 'SkinDescription' => 'Change the default skin for this computer', // Added - 2011-01-30 + 'SkinDescription' => 'Remplacer le skin par défaut', // Added - 2011-01-30 'Sleep' => 'Veille', 'SortAsc' => 'Asc', 'SortBy' => 'Trier par', @@ -614,136 +637,140 @@ $SLANG = array( 'Source' => 'Source', 'SourceColours' => 'Couleurs', // Added - 2009-02-08 'SourcePath' => 'Chemin', // Added - 2009-02-08 - 'SourceType' => 'Type de Source', + 'SourceType' => 'Type de source', 'Speed' => 'Vitesse', 'SpeedHigh' => 'Rapide', 'SpeedLow' => 'Lent', 'SpeedMedium' => 'Moyen', 'SpeedTurbo' => 'Turbo', - 'Start' => 'DÈmarrer', + 'Start' => 'Démarrer', 'State' => 'Etat', 'Stats' => 'Stats', 'Status' => 'Statut', - 'Step' => 'Step', - 'StepBack' => 'Step Back', - 'StepForward' => 'Step Forward', - 'StepLarge' => 'Large Step', - 'StepMedium' => 'Medium Step', - 'StepNone' => 'No Step', - 'StepSmall' => 'Small Step', + 'Step' => 'Pas', + 'StepBack' => 'Reculer', + 'StepForward' => 'Avancer', + 'StepLarge' => 'Pas large', + 'StepMedium' => 'Pas moyen', + 'StepNone' => 'Pas nul', + 'StepSmall' => 'Pas faible', 'Stills' => 'Photos', - 'Stop' => 'ArrÍter', - 'Stopped' => 'ArrÍtÈ', + 'Stop' => 'Arrêter', + 'Stopped' => 'Arrêté', 'Stream' => 'Flux', - 'StreamReplayBuffer' => 'Stream Replay Image Buffer', + 'StreamReplayBuffer' => 'Nb d\'image(s) pour relecture', 'Submit' => 'Soumettre', - 'System' => 'SystËme', - 'SystemLog' => 'System Log', // Added - 2011-06-16 - 'Tele' => 'Tele', + 'System' => 'Système', + 'SystemLog' => 'Journal système', // Added - 2011-06-16 + 'TargetColorspace' => 'Espace de couleur cible', // Added - 2015-04-18 + 'Tele' => 'Télé', 'Thumbnail' => 'Miniature', - 'Tilt' => 'Tilt', + 'Tilt' => 'Incliner', 'Time' => 'Heure', - 'TimeDelta' => 'Time Delta', + 'TimeDelta' => 'Temps', 'TimeStamp' => 'Horodatage', 'Timeline' => 'Chronologie', - 'TimelineTip1' => 'Pass your mouse over the graph to view a snapshot image and event details.', // Added 2013.08.15. - 'TimelineTip2' => 'Click on the coloured sections of the graph, or the image, to view the event.', // Added 2013.08.15. - 'TimelineTip3' => 'Click on the background to zoom in to a smaller time period based around your click.', // Added 2013.08.15. - 'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15. + 'TimelineTip1' => 'Passez votre souris sur le graphique pour visualiser un aperçu de l\'image et les détails de l\'événement.', // Added 2013.08.15. + 'TimelineTip2' => 'Cliquez sur les sections colorées du graphique ou sur l\'image pour voir l\'événement.', // Added 2013.08.15. + 'TimelineTip3' => 'Cliquez sur le fond pour zoomer sur une plage de temps plus réduite autour de votre clic.', // Added 2013.08.15. + 'TimelineTip4' => 'Utilisez les contrôles ci-dessous pour faire un zoom arrière ou naviguer en arrière et avancer sur l\'intervalle de temps.', // Added 2013.08.15. 'Timestamp' => 'Horodatage', - 'TimestampLabelFormat' => 'Format Horodatage', - 'TimestampLabelX' => 'Label Horodatage X', - 'TimestampLabelY' => 'Label Horodatage Y', - 'Today' => 'Aujourd'hui', + 'TimestampLabelFormat' => 'Format', + 'TimestampLabelX' => 'Coordonnée X', + 'TimestampLabelY' => 'Coordonnée Y', + 'Today' => 'Aujourd\'hui', 'Tools' => 'Outils', 'Total' => 'Total', // Added - 2011-06-16 'TotalBrScore' => 'Score
total', - 'TrackDelay' => 'Track Delay', - 'TrackMotion' => 'Track Motion', - 'Triggers' => 'DÈclenchements', - 'TurboPanSpeed' => 'Turbo Pan Speed', - 'TurboTiltSpeed' => 'Turbo Tilt Speed', + 'TrackDelay' => 'Délai suivi', + 'TrackMotion' => 'Suivre détection', + 'Triggers' => 'Déclenchements', + 'TurboPanSpeed' => 'Vitesse turbo', + 'TurboTiltSpeed' => 'Vitesse turbo', 'Type' => 'Type', - 'Unarchive' => 'DÈsarchiver', - 'Undefined' => 'indÈfini', // Added - 2009-02-08 - 'Units' => 'UnitÈs', + 'Unarchive' => 'Désarchiver', + 'Undefined' => 'Indéfini', // Added - 2009-02-08 + 'Units' => 'Unité', 'Unknown' => 'Inconnu', - 'Update' => 'Actualiser', - 'UpdateAvailable' => 'Mise ‡ jour de ZM disponible', - 'UpdateNotNecessary' => 'Pas de mise ‡ jour disponible', - 'Updated' => 'ActualisÈ', // Added - 2011-06-16 - 'Upload' => 'TransfÈrer', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', - 'UseFilter' => 'Utiliser Filtre', - 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' - 'UseFilterExprsPre' => 'Util. ', // This is used at the beginning of the phrase 'use N filter expressions' + 'Update' => 'Mettre à jour', + 'UpdateAvailable' => 'Mise à jour dispo.', + 'UpdateNotNecessary' => 'Pas de mise à jour dispo.', + 'Updated' => 'Mis à jour', // Added - 2011-06-16 + 'Upload' => 'Transférer', // Added - 2011-08-23 + 'UseFilter' => 'Utiliser filtre', + 'UseFilterExprsPost' => ' filtre expressions', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Utiliser ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Filtres utilisés', 'User' => 'Utilisateur', - 'Username' => 'Login', + 'Username' => 'Nom', 'Users' => 'Utilisateurs', + 'V4L' => 'V4L', + 'V4LCapturesPerFrame' => 'Nb captures par image', + 'V4LMultiBuffer' => 'Mise en tampon multiple', 'Value' => 'Valeur', 'Version' => 'Version', 'VersionIgnore' => 'Ignorer cette version', - 'VersionRemindDay' => 'Me rappeler ds 1 j.', - 'VersionRemindHour' => 'Me rappleler dans 1 h.', + 'VersionRemindDay' => 'Me rappeler dans 1 jour', + 'VersionRemindHour' => 'Me rappeler dans 1 heure', 'VersionRemindNever' => 'Ne pas avertir des nvelles versions', - 'VersionRemindWeek' => 'Me rappeler ds 1 sem.', - 'Video' => 'VidÈo', - 'VideoFormat' => 'Format de la VidÈo', - 'VideoGenFailed' => 'Echec gÈnÈration vidÈo!', - 'VideoGenFiles' => 'Existing Video Files', + 'VersionRemindWeek' => 'Me rappeler dans 1 sem.', + 'Video' => 'Vidéo', + 'VideoFormat' => 'Format de la vidéo', + 'VideoGenFailed' => 'Echec génération vidéo !', + 'VideoGenFiles' => 'Fichiers vidéo existants', 'VideoGenNoFiles' => 'Aucun fichier vidéo trouvé', - 'VideoGenParms' => 'ParamËtres gÈnÈration vidÈo', - 'VideoGenSucceeded' => 'VidÈo gÈnÈrÈe avec succËs!', - 'VideoSize' => 'taille vidÈo', + 'VideoGenParms' => 'Paramètres génération vidéo', + 'VideoGenSucceeded' => 'Vidéo générée avec succès !', + 'VideoSize' => 'Taille vidéo', 'View' => 'Voir', 'ViewAll' => 'Tout voir', - 'ViewEvent' => 'Voir ÈvÈnement', - 'ViewPaged' => 'Vue paginÈe', - 'Wake' => 'RÈveiller', - 'WarmupFrames' => 'Images test', + 'ViewEvent' => 'Voir événement', + 'ViewPaged' => 'Vue paginée', + 'Wake' => 'Réveiller', + 'WarmupFrames' => 'Nb d\'image(s) tests', 'Watch' => 'Regarder', 'Web' => 'Web', - 'WebColour' => 'Web Colour', + 'WebColour' => 'Couleur web', 'Week' => 'Semaine', - 'White' => 'White', - 'WhiteBalance' => 'White Balance', + 'White' => 'Blanc', + 'WhiteBalance' => 'Balance des blancs', 'Wide' => 'Large', 'X' => 'X', 'X10' => 'X10', - 'X10ActivationString' => 'X10:chaÓne activation', - 'X10InputAlarmString' => 'X10:chaÓne alarme entrÈe', - 'X10OutputAlarmString' => 'X10:chaÓne alarme sortie', + 'X10ActivationString' => 'X10:chaîne activation', + 'X10InputAlarmString' => 'X10:chaîne alarme entrée', + 'X10OutputAlarmString' => 'X10:chaîne alarme sortie', 'Y' => 'Y', 'Yes' => 'Oui', - 'YouNoPerms' => 'Permissions nÈcessaires pour cette ressource.', + 'YouNoPerms' => 'Permissions nécessaires pour cette ressource.', 'Zone' => 'Zone', - 'ZoneAlarmColour' => 'Couleur alarme (Red/Green/Blue)', - 'ZoneArea' => 'Zone Area', - 'ZoneFilterSize' => 'Filter Width/Height (pixels)', - 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', - 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', - 'ZoneMinMaxBlobs' => 'Min/Max Blobs', - 'ZoneMinMaxFiltArea' => 'Min/Max Filtered Area', - 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', - 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 - 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', + 'ZoneAlarmColour' => 'Couleur alarme (Rouge/Vert/Bleu)', + 'ZoneArea' => 'Surface de la zone', + 'ZoneExtendAlarmFrames' => 'Nb image(s) pour extension alarme', + 'ZoneFilterSize' => 'Largeur/hauteur surface filtrée (nb pixels)', + 'ZoneMinMaxAlarmArea' => 'Surface en alarme min/max (nb pixels)', + 'ZoneMinMaxBlobArea' => 'Surface des formes min/max (nb pixels)', + 'ZoneMinMaxBlobs' => 'Nombre de formes min/max', + 'ZoneMinMaxFiltArea' => 'Surface filtrée min/max (nb pixels)', + 'ZoneMinMaxPixelThres' => 'Seuil pixels min/max (0-255)', + 'ZoneMinderLog' => 'Journal de ZoneMinder', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Nb image(s) ignorée(s) après dépass. seuil', 'Zones' => 'Zones', 'Zoom' => 'Zoom', 'ZoomIn' => 'Zoom avant', - 'ZoomOut' => 'Zoom arriËre', + 'ZoomOut' => 'Zoom arrière', ); // Complex replacements with formatting and/or placements, must be passed through sprintf $CLANG = array( - 'CurrentLogin' => 'Util. Actuel: \'%1$s\'', - 'EventCount' => '%1$s %2$s', // par ex. '37 ÈvËnts' (voir Vlang ci-dessous) - 'LastEvents' => '%1$s derniers %2$s', // par ex. '37 derniers ÈvËnts' (voir Vlang ci-dessous) - 'LatestRelease' => 'La derniËre version est v%1$s, vous avez v%2$s.', - 'MonitorCount' => '%1$s %2$s', // par exemple '4 camÈras' (voir Vlang ci-dessous) - 'MonitorFunction' => 'CamÈra %1$s Fonction', - 'RunningRecentVer' => 'Vs avez la derniËre version de ZoneMinder, v%s.', - 'VersionMismatch' => 'Version mismatch, system is version %1$s, database is %2$s.', // Added - 2011-05-25 + 'CurrentLogin' => 'Utilisateur actuel: \'%1$s\'', + 'EventCount' => '%1$s %2$s', // par ex. '37 évènts' (voir Vlang ci-dessous) + 'LastEvents' => '%1$s derniers %2$s', // par ex. '37 derniers évènts' (voir Vlang ci-dessous) + 'LatestRelease' => 'La dernière version est v%1$s, vous avez v%2$s.', + 'MonitorCount' => '%1$s %2$s', // par exemple '4 caméras' (voir Vlang ci-dessous) + 'MonitorFunction' => 'Caméra %1$s Fonction', + 'RunningRecentVer' => 'Vous avez la dernière version de ZoneMinder, v%s.', + 'VersionMismatch' => 'Discordance entre version système (%1$s) et base de données (%2$s).', // Added - 2011-05-25 ); // The next section allows you to describe a series of word ending and counts used to @@ -780,8 +807,8 @@ $CLANG = array( // Variable arrays expressing plurality, see the zmVlang description above $VLANG = array( - 'Event' => array( 0=>'ÈvÈnements', 1=>'ÈvÈnement', 2=>'ÈvÈnements' ), - 'Monitor' => array( 0=>'camÈras', 1=>'camÈra', 2=>'camÈras' ), + 'Event' => array( 0=>'événements', 1=>'événement', 2=>'événements' ), + 'Monitor' => array( 0=>'caméras', 1=>'caméra', 2=>'caméras' ), ); // You will need to choose or write a function that can correlate the plurality string arrays @@ -800,7 +827,7 @@ function zmVlang( $langVarArray, $count ) return( $value ); } } - die( 'Error, unable to correlate variable language string' ); + die( 'Erreur, impossible de corréler la chaîne de caractères' ); } // This is an version that could be used in the Russian example above @@ -874,10 +901,10 @@ $OLANG = array( "\"--verbose=2\" Set verbosity of libVLC" ), -// 'LANG_DEFAULT' => array( -// 'Prompt' => "This is a new prompt for this option", -// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" -// ), + 'LANG_DEFAULT' => array( + 'Prompt' => "Langage par défaut pour l'interface web", + 'Help' => "ZoneMinder est exploitable dans votre langue si le fichier de traduction approprié est disponible sur votre système. Cette option permet de changer la langue anglaise par défaut par la langue de votre choix dans la liste." + ), ); ?> diff --git a/web/lang/he_il.php b/web/lang/he_il.php index 83f165cef..b7e89858c 100644 --- a/web/lang/he_il.php +++ b/web/lang/he_il.php @@ -88,6 +88,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Alarm Maximum FPS', 'AlarmPx' => ' Px', 'AlarmRGBUnset' => ' ', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => '', 'All' => '', 'Apply' => '', @@ -132,13 +133,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', 'BadFormat' => 'Format must be set to an integer of zero or more', 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'Height must be set to a valid value', 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore', 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 'BadPath' => 'Path must be set to a valid value', @@ -158,7 +159,9 @@ $SLANG = array( 'BlobSizes' => 'Blob Sizes', 'Blobs' => 'Blobs', 'Brightness' => '', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'Buffers', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => ' ', 'CanAutoGain' => 'Can Auto Gain', 'CanAutoIris' => 'Can Auto Iris', @@ -202,6 +205,7 @@ $SLANG = array( 'CaptureHeight' => 'Capture Height', 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 'CapturePalette' => 'Capture Palette', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => 'Capture Width', 'Cause' => '', 'CheckMethod' => 'Alarm Check Method', @@ -232,6 +236,7 @@ $SLANG = array( 'ControlDevice' => ' ', 'ControlType' => ' ', 'Controllable' => 'Controllable', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => '', 'CycleWatch' => ' ', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -240,12 +245,15 @@ $SLANG = array( 'DefaultRate' => 'Default Rate', 'DefaultScale' => 'Default Scale', 'DefaultView' => 'Default View', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => '', 'DeleteAndNext' => ' & ', 'DeleteAndPrev' => ' & ', 'DeleteSavedFilter' => ' ', 'Description' => '', 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Device', // Added - 2009-02-08 'DeviceChannel' => ' ', 'DeviceFormat' => ' ', @@ -257,6 +265,7 @@ $SLANG = array( 'Disk' => '', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => ' ', 'DonateAlready' => ', ', 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', @@ -266,7 +275,6 @@ $SLANG = array( 'DonateRemindNever' => ', , ', 'DonateRemindWeek' => ' , ', 'DonateYes' => ', ', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => '', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => ' ', @@ -309,10 +317,12 @@ $SLANG = array( 'Feed' => 'Feed', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => '', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => ' ', 'FilterDeleteEvents' => ' ', 'FilterEmailEvents' => ' ', 'FilterExecuteEvents' => 'Execute command on all matches', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Message details of all matches', 'FilterPx' => 'Filter Px', 'FilterUnset' => ' ', @@ -322,12 +332,12 @@ $SLANG = array( 'First' => '', 'FlippedHori' => 'Flipped Horizontally', 'FlippedVert' => 'Flipped Vertically', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => '', 'ForceAlarm' => ' ', 'Format' => '', @@ -335,7 +345,6 @@ $SLANG = array( 'FrameId' => 'Frame Id', 'FrameRate' => 'Frame Rate', 'FrameSkip' => ' ', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => '', 'Func' => '', 'Function' => '', @@ -462,6 +471,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min Zoom Speed', 'MinZoomStep' => 'Min Zoom Step', 'Misc' => 'Misc', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => '', 'MonitorIds' => 'Monitor Ids', 'MonitorPreset' => 'Monitor Preset', @@ -472,12 +482,13 @@ $SLANG = array( 'Montage' => 'Montage', 'Month' => '', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => '', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => 'must be greater than or equal to', 'MustBeLe' => 'must be less than or equal to', 'MustConfirmPassword' => 'You must confirm the password', @@ -506,6 +517,9 @@ $SLANG = array( 'NumPresets' => 'Num Presets', 'Off' => '', 'On' => '', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => ' ', 'OpGt' => ' ', 'OpGtEq' => 'greater than or equal to', @@ -552,6 +566,9 @@ $SLANG = array( 'Presets' => 'Presets', 'Prev' => '', 'Probe' => 'Probe', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => '', 'Real' => '', @@ -639,6 +656,7 @@ $SLANG = array( 'Submit' => 'Submit', 'System' => '', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => '', 'Thumbnail' => 'Thumbnail', 'Tilt' => 'Tilt', @@ -673,13 +691,16 @@ $SLANG = array( 'UpdateNotNecessary' => ' .', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => ' ', 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => ' ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => '', 'Username' => ' ', 'Users' => '', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => '', 'Version' => '', 'VersionIgnore' => ' ', @@ -719,6 +740,7 @@ $SLANG = array( 'Zone' => '', 'ZoneAlarmColour' => 'Alarm Colour (Red/Green/Blue)', 'ZoneArea' => 'Zone Area', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Filter Width/Height (pixels)', 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', @@ -727,7 +749,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => '', 'Zoom' => '', 'ZoomIn' => ' ', diff --git a/web/lang/hu_hu.php b/web/lang/hu_hu.php index 130899a27..6c97fa150 100644 --- a/web/lang/hu_hu.php +++ b/web/lang/hu_hu.php @@ -115,6 +115,7 @@ define( "STRF_FMT_DATETIME_SHORTER", "%m.%d. %H:%M:%S" ); // Strftime shor // Simple String Replacements $SLANG = array( '24BitColour' => '24 bites szín', + '32BitColour' => '32 bit colour', // Added - 2015-04-18 '8BitGrey' => '8 bit szürkeárnyalat', 'Action' => 'Művelet', 'Actual' => 'Valós', @@ -130,6 +131,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Maximális FPS riasztott állapotban', 'AlarmPx' => 'Riasztó képpont', 'AlarmRGBUnset' => 'Be kell állítani egy RGB színt a riasztáshoz', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'Figyelem', 'All' => 'Mind', 'Apply' => 'Alkalmaz', @@ -169,17 +171,18 @@ $SLANG = array( 'BadAlarmFrameCount' => 'Riasztáshoz szükséges képkockák száma legyen legalább 1', 'BadAlarmMaxFPS' => 'Maximális FPS riasztott állapotban legyen megadva', 'BadChannel' => 'A csatorna száma legyen legalább 0', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2015-04-18 'BadDevice' => 'Az eszköz elérése valós legyen', 'BadFPSReportInterval' => 'Az FPS naplózásának gyakorisága legyen legalább 0', 'BadFormat' => 'A típus 0 vagy nagyobb egész szám legyen', 'BadFrameSkip' => 'Az eldobott képkockák száma legyen legalább 0', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'A képmagasság legyen érvényes érték képpontban megadva', 'BadHost' => 'A hoszt legyen valós IP cím vagy hosztnév http:// nélkül', 'BadImageBufferCount' => 'A képkockák száma a pufferben legyen legalább 10', 'BadLabelX' => 'A cimke X koordinátája legyen legalább 0', 'BadLabelY' => 'A cimke Y koordinátája legyen legalább 0', 'BadMaxFPS' => 'Maximális FPS nyugalmi állapotban legyen megadva', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'A név csak betűket, számokat, plusz-, kötő-, és aláhúzásjelet tartalmazhat', 'BadPalette' => 'A szín-palettának válasszin egy helyes értéket', 'BadPath' => 'A kép elérési útvonala helytelen', @@ -199,7 +202,9 @@ $SLANG = array( 'BlobSizes' => 'Blob méretek', 'Blobs' => 'Blob-ok', 'Brightness' => 'Fényerő', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'Pufferek', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Van autofókusza', 'CanAutoGain' => 'Van AGC-je', 'CanAutoIris' => 'Van autoírisze', @@ -243,6 +248,7 @@ $SLANG = array( 'CaptureHeight' => 'Képmagasság', 'CaptureMethod' => 'Digitalizálás módszere', 'CapturePalette' => 'Digitalizálás szín-palettája', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => 'Képszélesség', 'Cause' => 'Okozó', 'CheckMethod' => 'A riasztás figyelésének módja', @@ -273,6 +279,7 @@ $SLANG = array( 'ControlDevice' => 'Vezérlő eszköz', 'ControlType' => 'Vezérlés típusa', 'Controllable' => 'Vezérelhető', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Ciklikus nézet', 'CycleWatch' => 'Ciklikus nézet', 'DateTime' => 'Dátum/Idő', @@ -281,12 +288,15 @@ $SLANG = array( 'DefaultRate' => 'Alapértelmezett sebesség', 'DefaultScale' => 'Alapértelmezett méret', 'DefaultView' => 'Alapértelmezett nézet', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => 'Törlés', 'DeleteAndNext' => 'Törlés &
következő', 'DeleteAndPrev' => 'Törlés &
előző', 'DeleteSavedFilter' => 'Mentett szűrő törlése', 'Description' => 'Leírás', 'DetectedCameras' => 'Érzékelt kamerák', + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Eszköz', 'DeviceChannel' => 'Eszköz csatornája', 'DeviceFormat' => 'Eszköz formátuma', @@ -298,6 +308,7 @@ $SLANG = array( 'Disk' => 'Tárhely', 'Display' => 'Megjelenés', 'Displaying' => 'Megjelenítés', + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', // Added - 2015-04-18 'Donate' => 'Kérem támogasson', 'DonateAlready' => 'Nem, én már támogattam', 'DonateEnticement' => 'Ön már jó ideje használja a ZoneMindert, és reméljük hasznos eszköznek tartja háza vagy munkahelye biztonságában. Bár a ZoneMinder egy szabad, nyílt forráskódú termék és az is marad, a fejlesztése pénzbe kerül. Ha van lehetősége támogatni a jövőbeni fejlesztéseket és az új funkciókat kérem, tegye meg. A támogatás teljesen önkéntes, de nagyon megbecsült és mértéke is tetszőleges.

Ha támogatni szertne, kérem, válasszon az alábbi lehetőségekből vagy látogassa meg a http://www.zoneminder.com/donate.html oldalt.

Köszönjük, hogy használja a ZoneMinder-t és ne felejtse el meglátogatni a fórumokat a ZoneMinder.com oldalon támogatásért és ötletekért, hogy a jövőben is még jobban ki tudja használni a ZoneMinder lehetőségeit.', @@ -349,10 +360,12 @@ $SLANG = array( 'Feed' => 'Folyam', 'Ffmpeg' => 'ffmpeg', 'File' => 'Fájl', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Minden találat archiválása', 'FilterDeleteEvents' => 'Minden találat törlése', 'FilterEmailEvents' => 'Minden találat adatainak küldése E-mailben', 'FilterExecuteEvents' => 'Parancs futtatása minden találaton', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Minden találat adatainak üzenése', 'FilterPx' => 'Szűrt képkockák', 'FilterUnset' => 'Meg kell adnod a szűrő szélességét és magasságát', @@ -362,12 +375,12 @@ $SLANG = array( 'First' => 'Első', 'FlippedHori' => 'Vízszintes tükrözés', 'FlippedVert' => 'Függőleges tükrözés', - 'FnNone' => 'Letiltva', - 'FnMonitor' => 'Csak monitorozás', - 'FnModect' => 'Mozgásérzékelő', - 'FnRecord' => 'Folyamatos felvétel', 'FnMocord' => 'Folyamatos mozgással', + 'FnModect' => 'Mozgásérzékelő', + 'FnMonitor' => 'Csak monitorozás', 'FnNodect' => 'Külső érzékelő', + 'FnNone' => 'Letiltva', + 'FnRecord' => 'Folyamatos felvétel', 'Focus' => 'Fókusz', 'ForceAlarm' => 'Kézi riasztás', 'Format' => 'Formátum', @@ -375,7 +388,6 @@ $SLANG = array( 'FrameId' => 'Képkocka azonosító', 'FrameRate' => 'FPS', 'FrameSkip' => 'Képkocka kihagyás', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'Képkocka', 'Func' => 'Funk.', 'Function' => 'Funkció', @@ -502,6 +514,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min. zoom sebesség', 'MinZoomStep' => 'Min. zoom lépték', 'Misc' => 'Egyéb', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => 'Kamera', 'MonitorIds' => 'Kamera azonosítók', 'MonitorPreset' => 'Előre beállított kameraprofilok', @@ -512,12 +525,13 @@ $SLANG = array( 'Montage' => 'Többkamerás nézet', 'Month' => 'Hónapban', 'More' => 'Több', + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Mozgás', - 'MtgDefault' => 'Böngésző alapértelmezése szerint', 'Mtg2widgrd' => '2 oszlopban', 'Mtg3widgrd' => '3 oszlopban', - 'Mtg4widgrd' => '4 oszlopban', 'Mtg3widgrx' => '3 oszlopban skálázva, riasztás esetén kinagyítva', + 'Mtg4widgrd' => '4 oszlopban', + 'MtgDefault' => 'Böngésző alapértelmezése szerint', 'MustBeGe' => 'nagyobbnak vagy egyenlőnek kell lennie', 'MustBeLe' => 'kisebbnek vagy egyenlőnek kell lennie', 'MustConfirmPassword' => 'Meg kell erősítenie a jelszót', @@ -546,6 +560,9 @@ $SLANG = array( 'NumPresets' => 'Profilok száma', 'Off' => 'Ki', 'On' => 'Be', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => 'egyenlő', 'OpGt' => 'nagyobb mint', 'OpGtEq' => 'nagyobb van egyenlő', @@ -583,6 +600,7 @@ $SLANG = array( 'Play' => 'Lejátszás', 'PlayAll' => 'Mind lejátszása', 'PleaseWait' => 'Kérlek várj...', + 'Plugins' => 'Plugins', // Added - 2015-04-18 'Point' => 'Pont', 'PostEventImageBuffer' => 'Esemény utáni képkockák a pufferben', 'PreEventImageBuffer' => 'Esemény elötti képkockák a pufferben', @@ -591,6 +609,9 @@ $SLANG = array( 'Presets' => 'Előre beállított profilok', 'Prev' => 'Előző', 'Probe' => 'Érzékelés', + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => 'FPS', 'Real' => 'Valós', @@ -678,6 +699,7 @@ $SLANG = array( 'Submit' => 'Küldés', 'System' => 'Rendszer', 'SystemLog' => 'Rendszernapló', + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Táv', 'Thumbnail' => 'Előnézet', 'Tilt' => 'Fel-le mozgás', @@ -715,9 +737,13 @@ $SLANG = array( 'UseFilter' => 'Szűrőt használ', 'UseFilterExprsPost' => ' szürés  használata', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => ' ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', // Added - 2015-04-18 'User' => 'Felhasználó', 'Username' => 'Felhasználónév', 'Users' => 'Felhasználók', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'Érték', 'Version' => 'Verzió', 'VersionIgnore' => 'Ezen verzió figyelmen kívül hagyása', @@ -757,6 +783,7 @@ $SLANG = array( 'Zone' => 'Zóna:', 'ZoneAlarmColour' => 'Riasztott terület
színezése (R/G/B)', 'ZoneArea' => 'Zóna lefedettsége', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Szélesség és magasság
szűrés képpontban', 'ZoneMinMaxAlarmArea' => 'Min/Max riasztó terület', 'ZoneMinMaxBlobArea' => 'Min/Max Blob terület', @@ -765,7 +792,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max képpont változási
küszöb (0-255)', 'ZoneMinderLog' => 'ZoneMinder Napló', 'ZoneOverloadFrames' => 'Túlterhelés esetén
ennyi képkocka hagyható ki', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => 'Zónák', 'Zoom' => 'Zoom', 'ZoomIn' => 'Zoom be', diff --git a/web/lang/it_it.php b/web/lang/it_it.php index 8842cfacf..b367da15a 100644 --- a/web/lang/it_it.php +++ b/web/lang/it_it.php @@ -93,6 +93,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'FPS massimi durante l\'allarme', 'AlarmPx' => 'Pixel Allarme', 'AlarmRGBUnset' => 'Devi settare un colore RGB di allarme', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'Attenzione', 'All' => 'Tutto', 'Apply' => 'Applica', @@ -137,13 +138,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'L\'intervallo di FPS per i report deve essere un numero intero superiore a 0', 'BadFormat' => 'Il formato deve essere impostato con un numero intero come 0 o maggiore', 'BadFrameSkip' => 'Il numero di Frame da scartare deve essere un intero uguale a 0 o superiore', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'L\'altezza deve essere impostata con un valore valido', 'BadHost' => 'L\'host deve essere impostato con un indirizzo ip valido o con un hostname, non includendo http://', 'BadImageBufferCount' => 'La dimensione del buffer dell\'immagine deve essere impostata con un numero intero pari a 10 o maggiore', 'BadLabelX' => 'L\'etichetta della coordinata X deve essere un numero intero pari a 0 o maggiore', 'BadLabelY' => 'L\'etichetta della coordinata Y deve essere un numero intero pari a 0 o maggiore', 'BadMaxFPS' => 'I frame per secondo (FPS) massimi devono essere un numero intero positivo o un valore in virgola mobile', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'I nomi possono contenere solo caratteri alfanumerici più i caratteri - e _', 'BadPalette' => 'La palette dei colori deve essere impostata ad un valore valido', // Added - 2009-03-31 'BadPath' => 'Il percorso deve essere impostato con un valore valido', @@ -163,7 +164,9 @@ $SLANG = array( 'BlobSizes' => 'Dimensioni Blob', 'Blobs' => 'Blobs', 'Brightness' => 'Luminosità', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'Buffers', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Puo\' Auto Focus', 'CanAutoGain' => 'Puo\' Auto Gains', 'CanAutoIris' => 'Puo\' Auto Iris', @@ -207,6 +210,7 @@ $SLANG = array( 'CaptureHeight' => 'Altezza img catturata', 'CaptureMethod' => 'Metodo di cattura', // Added - 2009-02-08 'CapturePalette' => 'Paletta img Catturata', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => 'Larghezza img Catturata', 'Cause' => 'Causa', 'CheckMethod' => 'Metodo di Controllo Allarme', @@ -237,6 +241,7 @@ $SLANG = array( 'ControlDevice' => 'Dispositivo di controllo', 'ControlType' => 'Tipo Controllo', 'Controllable' => 'Controllabile', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Cicla', 'CycleWatch' => 'Vista Ciclica', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -245,12 +250,15 @@ $SLANG = array( 'DefaultRate' => 'Default Rate', 'DefaultScale' => 'Scala di default', 'DefaultView' => 'Visualizzazione di default', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => 'Elimina', 'DeleteAndNext' => 'Elimina & Prossimo', 'DeleteAndPrev' => 'Elimina & Precedente', 'DeleteSavedFilter' => 'Elimina il filtro salvato', 'Description' => 'Descrizione', 'DetectedCameras' => 'Telecamere Rilevate', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Periferica', // Added - 2009-02-08 'DeviceChannel' => 'Canale Periferica', 'DeviceFormat' => 'Formato', @@ -262,6 +270,7 @@ $SLANG = array( 'Disk' => 'Utilizzo Disco', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => 'Donate,per favore', 'DonateAlready' => 'No, ho gia donato... ', 'DonateEnticement' => 'Stai usando ZoneMinder da un po\' di tempo e spero che tu lo stia trovando utile per la sicurezza di casa tua o del tuo posto di lavoro..Anche se ZoneMinder e\' distribuito liberamente come software libero,costa soldi sia svilupparlo che supportarlo. Se preferisci che questo software continui ad avere supporto e sviluppo in futuro allora considera l\idea di fare una piccola donazione. Donare e\' ovviamente opzionale, ma apprezzato e puoi donare quanto vuoi,quel poco o tanto che tu desideri.

Se hai voglia per cortesia seleziona l\'opzione sotto o punta il tuo browser a http://www.zoneminder.com/donate.html .

Grazie per usare ZoneMinder e non dimenticare di visitare il forum in ZoneMinder.com se cerchi supporto o hai suggerimenti riguardo a come rendere migliore Zoneminder.', @@ -271,7 +280,6 @@ $SLANG = array( 'DonateRemindNever' => 'No, io non voglio donare, non lo faro\' mai', 'DonateRemindWeek' => 'Non ancora, ricordamelo ancora tra 1 settimana', 'DonateYes' => 'Si,mi piacerebbe donare qualcosa ora', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Il nome del monitor e\' gia\' presente', // Added - 2009-03-31 'Duration' => 'Durata', @@ -314,10 +322,12 @@ $SLANG = array( 'Feed' => 'Feed', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'File', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Archivia gli eventi', 'FilterDeleteEvents' => 'Elimina gli eventi', 'FilterEmailEvents' => 'Invia dettagli via email', 'FilterExecuteEvents' => 'Esegui un comando', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Invia dettagli tramite messaggio', 'FilterPx' => 'Px Filtro', 'FilterUnset' => 'Devi specificare altezza e larghezza per il filtro', @@ -327,12 +337,12 @@ $SLANG = array( 'First' => 'Primo', 'FlippedHori' => 'ribaltato orizzontale', 'FlippedVert' => 'ribaltato verticale', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Focus', 'ForceAlarm' => 'Forza Allarme', 'Format' => 'Formato', @@ -340,7 +350,6 @@ $SLANG = array( 'FrameId' => 'Id Immagine', 'FrameRate' => 'Immagini al secondo', 'FrameSkip' => 'Immagini saltate', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'Immagini', 'Func' => 'Funz', 'Function' => 'Funzione', @@ -467,6 +476,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Velocita\' minima dello zoom', 'MinZoomStep' => 'Step minimo dello zoom', 'Misc' => 'Altro', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => 'Monitor', 'MonitorIds' => 'Monitor Ids', 'MonitorPreset' => 'Monitor Presenti', @@ -477,12 +487,13 @@ $SLANG = array( 'Montage' => 'Montaggio', 'Month' => 'Mese', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Sposta', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => 'deve essere superiore a', 'MustBeLe' => 'deve essere inferiore o pari a', 'MustConfirmPassword' => 'Devi confermare la password', @@ -511,6 +522,9 @@ $SLANG = array( 'NumPresets' => 'Num Presets', 'Off' => 'Off', 'On' => 'On', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => 'uguale a', 'OpGt' => 'maggiore di', 'OpGtEq' => 'maggiore o uguale a', @@ -557,6 +571,9 @@ $SLANG = array( 'Presets' => 'Presets', 'Prev' => 'Prec', 'Probe' => 'Prova la telecamera', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => 'Velocita\'', 'Real' => 'Reale', @@ -644,6 +661,7 @@ $SLANG = array( 'Submit' => 'Accetta', 'System' => 'Sistema', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => 'Anteprima', 'Tilt' => 'Tilt', @@ -678,13 +696,16 @@ $SLANG = array( 'UpdateNotNecessary' => 'Nessun aggiornamento necessario.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Usa Filtro', 'UseFilterExprsPost' => ' espressioni filtri', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Usa ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => 'Utente', 'Username' => 'Nome Utente', 'Users' => 'Utenti', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'Valore', 'Version' => 'Versione', 'VersionIgnore' => 'Ignora questa versione', @@ -724,6 +745,7 @@ $SLANG = array( 'Zone' => 'Zona', 'ZoneAlarmColour' => 'Colore Allarme (RGB)', 'ZoneArea' => 'Zone Area', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Larghezza/Altezza Filtro (pixels)', 'ZoneMinMaxAlarmArea' => 'Min/Max Area Allarmata', 'ZoneMinMaxBlobArea' => 'Min/Max Area di Blob', @@ -732,7 +754,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max Soglia Pixel (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => 'Zone', 'Zoom' => 'Zoom', 'ZoomIn' => 'Ingrandisci', diff --git a/web/lang/ja_jp.php b/web/lang/ja_jp.php index 89f19bb1d..9f0134f0a 100644 --- a/web/lang/ja_jp.php +++ b/web/lang/ja_jp.php @@ -88,6 +88,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Alarm Maximum FPS', 'AlarmPx' => 'װ Px', 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'x', 'All' => 'S', 'Apply' => 'Kp', @@ -132,13 +133,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', 'BadFormat' => 'Format must be set to an integer of zero or more', 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'Height must be set to a valid value', 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore', 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 'BadPath' => 'Path must be set to a valid value', @@ -158,7 +159,9 @@ $SLANG = array( 'BlobSizes' => ' ', 'Blobs' => '', 'Brightness' => 'Px', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'ޯ̧', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Can Auto Focus', 'CanAutoGain' => 'Can Auto Gain', 'CanAutoIris' => 'Can Auto Iris', @@ -202,6 +205,7 @@ $SLANG = array( 'CaptureHeight' => '荞ݍ', 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 'CapturePalette' => '荞گ', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => '荞ݕ', 'Cause' => 'Cause', 'CheckMethod' => 'װ @', @@ -232,6 +236,7 @@ $SLANG = array( 'ControlDevice' => 'Control Device', 'ControlType' => 'Control Type', 'Controllable' => 'Controllable', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Cycle', 'CycleWatch' => 'يώ@', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -240,12 +245,15 @@ $SLANG = array( 'DefaultRate' => 'Default Rate', 'DefaultScale' => 'Default Scale', 'DefaultView' => 'Default View', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => '폜', 'DeleteAndNext' => '폜', 'DeleteAndPrev' => 'O폜', 'DeleteSavedFilter' => 'ۑ̨̍폜', 'Description' => '', 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Device', // Added - 2009-02-08 'DeviceChannel' => '޲ ', 'DeviceFormat' => '޲ ̫ϯ', @@ -257,6 +265,7 @@ $SLANG = array( 'Disk' => 'Disk', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => 'Please Donate', 'DonateAlready' => 'No, I\'ve already donated', 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', @@ -266,7 +275,6 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'p', @@ -309,10 +317,12 @@ $SLANG = array( 'Feed' => '荞', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'File', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Archive all matches', 'FilterDeleteEvents' => 'Delete all matches', 'FilterEmailEvents' => 'Email details of all matches', 'FilterExecuteEvents' => 'Execute command on all matches', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Message details of all matches', 'FilterPx' => '̨ Px', 'FilterUnset' => 'You must specify a filter width and height', @@ -322,12 +332,12 @@ $SLANG = array( 'First' => 'ŏ', 'FlippedHori' => 'Flipped Horizontally', 'FlippedVert' => 'Flipped Vertically', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Focus', 'ForceAlarm' => 'װ', 'Format' => 'Format', @@ -335,7 +345,6 @@ $SLANG = array( 'FrameId' => 'ڰ ID', 'FrameRate' => 'ڰڰ', 'FrameSkip' => 'ڰѽ', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'ڰ', 'Func' => '@\\', 'Function' => '@\\', @@ -462,6 +471,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min Zoom Speed', 'MinZoomStep' => 'Min Zoom Step', 'Misc' => '̑', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => '', 'MonitorIds' => ' ID', 'MonitorPreset' => 'Monitor Preset', @@ -472,12 +482,13 @@ $SLANG = array( 'Montage' => 'ޭ', 'Month' => '', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Move', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => 'ȏłȂ΂Ȃ', 'MustBeLe' => 'ȉłȂ΂Ȃ', 'MustConfirmPassword' => 'pX[h̊mFĂ', @@ -506,6 +517,9 @@ $SLANG = array( 'NumPresets' => 'Num Presets', 'Off' => 'Off', 'On' => 'On', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => '', 'OpGt' => 'ȉ', 'OpGtEq' => 'ȏ', @@ -552,6 +566,9 @@ $SLANG = array( 'Presets' => 'Presets', 'Prev' => 'O', 'Probe' => 'Probe', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => 'ڰ', 'Real' => 'p', @@ -639,6 +656,7 @@ $SLANG = array( 'Submit' => 'Submit', 'System' => '', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => 'Thumbnail', 'Tilt' => 'Tilt', @@ -673,13 +691,16 @@ $SLANG = array( 'UpdateNotNecessary' => 'ްĂ̕Kv͂܂', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => '̨gpĂ', 'UseFilterExprsPost' => ' ̨', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'w肵Ă: ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => 'հ', 'Username' => 'հޖ', 'Users' => 'հ', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'l', 'Version' => 'ްޮ', 'VersionIgnore' => 'ްޮ݂𖳎', @@ -719,6 +740,7 @@ $SLANG = array( 'Zone' => 'ް', 'ZoneAlarmColour' => 'װ װ (Red/Green/Blue)', 'ZoneArea' => 'Zone Area', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Filter Width/Height (pixels)', 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', @@ -727,7 +749,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => 'ް', 'Zoom' => 'Zoom', 'ZoomIn' => 'Zoom In', diff --git a/web/lang/nl_nl.php b/web/lang/nl_nl.php index 877fddec0..298521b6a 100644 --- a/web/lang/nl_nl.php +++ b/web/lang/nl_nl.php @@ -1,877 +1,904 @@ - '24 bits kleuren', - '8BitGrey' => '8 bits grijstinten', - 'Action' => 'Actie', - 'Actual' => 'Aktueel', - 'AddNewControl' => 'Nieuwe controle toevoegen', - 'AddNewMonitor' => 'Nieuwe monitor toevoegen', - 'AddNewUser' => 'Nieuwe gebruiker toevoegen', - 'AddNewZone' => 'Nieuw gebied toevoegen', - 'Alarm' => 'Alarm', - 'AlarmBrFrames' => 'Alarm
Frames', - 'AlarmFrame' => 'Alarm Frame', - 'AlarmFrameCount' => 'Alarm Frame Aantal', - 'AlarmLimits' => 'Alarm Limieten', - 'AlarmMaximumFPS' => 'Alarm Maximum FPS', - 'AlarmPx' => 'Alarm Px', - 'AlarmRGBUnset' => 'U moet een RGB alarm kleur keizen', - 'Alert' => 'Waarschuwing', - 'All' => 'Alle', - 'Apply' => 'Voer uit', - 'ApplyingStateChange' => 'Status verandering aan het uitvoeren', - 'ArchArchived' => 'Alleen gearchiveerd', - 'ArchUnarchived' => 'Alleen ongearchiveerd', - 'Archive' => 'Archief', - 'Archived' => 'Archived', - 'Area' => 'Gebied', - 'AreaUnits' => 'Gebied (px/%)', - 'AttrAlarmFrames' => 'Alarm frames', - 'AttrArchiveStatus' => 'Archief status', - 'AttrAvgScore' => 'Gem. score', - 'AttrCause' => 'Oorzaak', - 'AttrDate' => 'Datum', - 'AttrDateTime' => 'Datum/tijd', - 'AttrDiskBlocks' => 'Disk Blocks', - 'AttrDiskPercent' => 'Disk Percent', - 'AttrDuration' => 'Duur', - 'AttrFrames' => 'Frames', - 'AttrId' => 'Id', - 'AttrMaxScore' => 'Max. Score', - 'AttrMonitorId' => 'Monitor Id', - 'AttrMonitorName' => 'Monitor Naam', - 'AttrName' => 'Naam', - 'AttrNotes' => 'Notities', - 'AttrSystemLoad' => 'System Belasting', - 'AttrTime' => 'Tijd', - 'AttrTotalScore' => 'Totale Score', - 'AttrWeekday' => 'Weekdag', - 'Auto' => 'Auto', - 'AutoStopTimeout' => 'Auto Stop Timeout', - 'Available' => 'Beschikbaar', // Added - 2009-03-31 - 'AvgBrScore' => 'Gem.
score', - 'Background' => 'Achtergrond', - 'BackgroundFilter' => 'Run filter in achtergrond', - 'BadAlarmFrameCount' => 'Alarm frame moet een getal zijn van 1 of meer', - 'BadAlarmMaxFPS' => 'Alarm Maximum FPS moet een positiev getal zijn of een floating point waarde', - 'BadChannel' => 'Kanaal moet een getal zijn van 1 of meer', - 'BadDevice' => 'Apparaat moet een bestaande waarde krijgen', - 'BadFPSReportInterval' => 'FPS rapport interval buffer en aantal moet een nummer groter dan nul zijn', - 'BadFormat' => 'Formaat moet een nummer nul of groter zijn', - 'BadFrameSkip' => 'Frame skip aantal moet een nummer nul of groter zijn', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', - 'BadHeight' => 'Hoogte moet een geldige waarde zijn', - 'BadHost' => 'Host moet een juiste address or hostname zijn, laat http:// weg ', - 'BadImageBufferCount' => 'Foto buffer groote moet een nummer 10 of groter zijn', - 'BadLabelX' => 'Label X co-ordinate moet een nummer nul of groter zijn', - 'BadLabelY' => 'Label Y co-ordinate moet een nummer nul of groter zijn', - 'BadMaxFPS' => 'Maximum FPS moet een positieve integer of floating point waarde zijn', - 'BadNameChars' => 'Namen mogen alleen alpha numerieke karakters bevatten plus hyphens en underscores', - 'BadPalette' => 'Palette moet een geldige waarde zijn', // Added - 2009-03-31 - 'BadPath' => 'Pad moet een geldige waarde zijn', - 'BadPort' => 'Port moet een geldige nummer zijn', - 'BadPostEventCount' => 'Post gebeurtenis foto aantal moet een geldige waarde van nul of groter zijn', - 'BadPreEventCount' => 'Pre gebeurtenis aantal moe minimaal nul en lager dan de buffert grote', - 'BadRefBlendPerc' => 'Reference blend percentage moet een geldige waarde van nul of groter zijn', - 'BadSectionLength' => 'Selectie lengte moet een integer van 30 of meer zijn', - 'BadSignalCheckColour' => 'Signaal controle kleur moet een geldige RGB waarde zijn', - 'BadStreamReplayBuffer'=> 'Stream replay buffer moet een geldige waarde van nul of groter zijn', - 'BadWarmupCount' => 'Warmop frames moet een geldige waarde van nul of groter zijn', - 'BadWebColour' => 'Web kleur moeten een geldige webkleurwaarde bevatten', - 'BadWidth' => 'Breedte moet ingevuld worden', - 'Bandwidth' => 'Bandbreedte', - 'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing - 'BlobPx' => 'Blob px', - 'BlobSizes' => 'Blob grootte', - 'Blobs' => 'Blobs', - 'Brightness' => 'Helderheid', - 'Buffers' => 'Buffers', - 'CanAutoFocus' => 'Can Auto Focus', - 'CanAutoGain' => 'Can Auto Gain', - 'CanAutoIris' => 'Can Auto Iris', - 'CanAutoWhite' => 'Can Auto White Bal.', - 'CanAutoZoom' => 'Can Auto Zoom', - 'CanFocus' => 'Can Focus', - 'CanFocusAbs' => 'Can Focus Absoluut', - 'CanFocusCon' => 'Can Focus Continue', - 'CanFocusRel' => 'Can Focus Relatief', - 'CanGain' => 'Can Gain ', - 'CanGainAbs' => 'Can Gain Absoluut', - 'CanGainCon' => 'Can Gain Continue', - 'CanGainRel' => 'Can Gain Relatief', - 'CanIris' => 'Can Iris', - 'CanIrisAbs' => 'Can Iris Absoluut', - 'CanIrisCon' => 'Can Iris Continue', - 'CanIrisRel' => 'Can Iris Relatief', - 'CanMove' => 'Can Move', - 'CanMoveAbs' => 'Can Move Absoluut', - 'CanMoveCon' => 'Can Move Continue', - 'CanMoveDiag' => 'Can Move Diagonaal', - 'CanMoveMap' => 'Can Move Mapped', - 'CanMoveRel' => 'Can Move Relatief', - 'CanPan' => 'Can Pan' , - 'CanReset' => 'Can Reset', - 'CanSetPresets' => 'Can Set Presets', - 'CanSleep' => 'Can Sleep', - 'CanTilt' => 'Can Tilt', - 'CanWake' => 'Can Wake', - 'CanWhite' => 'Can White Balance', - 'CanWhiteAbs' => 'Can White Bal. Absoluut', - 'CanWhiteBal' => 'Can White Bal.', - 'CanWhiteCon' => 'Can White Bal. Continue', - 'CanWhiteRel' => 'Can White Bal. Relatief', - 'CanZoom' => 'Can Zoom', - 'CanZoomAbs' => 'Can Zoom Absoluut', - 'CanZoomCon' => 'Can Zoom Continue', - 'CanZoomRel' => 'Can Zoom Relatief', - 'Cancel' => 'Afbreken', - 'CancelForcedAlarm' => 'Afbreken geforceerd alarm', - 'CaptureHeight' => 'Opname hoogte', - 'CaptureMethod' => 'Opname Methode', // Added - 2009-02-08 - 'CapturePalette' => 'Opname pallet', - 'CaptureWidth' => 'Opname breedte', - 'Cause' => 'Oorzaak', - 'CheckMethod' => 'Alarm controle Methode', - 'ChooseDetectedCamera' => 'Kies gedetecteerde Camera', // Added - 2009-03-31 - 'ChooseFilter' => 'Kies filter', - 'ChooseLogFormat' => 'Kies en log formaat', // Added - 2011-06-17 - 'ChooseLogSelection' => 'Kies een log selectie', // Added - 2011-06-17 - 'ChoosePreset' => 'Kies voorkeur', - 'Clear' => 'Leeg', // Added - 2011-06-16 - 'Close' => 'Sluit', - 'Colour' => 'Kleur', - 'Command' => 'Commando', - 'Component' => 'Component', // Added - 2011-06-16 - 'Config' => 'Configuratie', - 'ConfiguredFor' => 'Geconfigureerd voor', - 'ConfirmDeleteEvents' => 'Weet uw zeker dat uw deze gebeurtenissen wil verwijderen?', - 'ConfirmPassword' => 'Bevestig wachtwoord', - 'ConjAnd' => 'en', - 'ConjOr' => 'of', - 'Console' => 'Console', - 'ContactAdmin' => 'Neem A.U.B. contact op met uw beheerder voor details.', - 'Continue' => 'Continue', - 'Contrast' => 'Contrast', - 'Control' => 'Bestuur', - 'ControlAddress' => 'Bestuur adres', - 'ControlCap' => 'Bestuur mogelijkheid', - 'ControlCaps' => 'Bestuur mogelijkheden', - 'ControlDevice' => 'Bestuur apparaat', - 'ControlType' => 'Bestuur Type', - 'Controllable' => 'Bestuurbaar', - 'Cycle' => 'Cyclus', - 'CycleWatch' => 'Observeer cyclus', - 'DateTime' => 'Datum/Tijd', // Added - 2011-06-16 - 'Day' => 'Dag', - 'Debug' => 'Debug', - 'DefaultRate' => 'Standaard Radius', - 'DefaultScale' => 'Standaard Schaal', - 'DefaultView' => 'Standaard scherm', - 'Delete' => 'verwijder', - 'DeleteAndNext' => 'verwijder & volgende', - 'DeleteAndPrev' => 'verwijder & vorige', - 'DeleteSavedFilter' => 'verwijder opgeslagen filter', - 'Description' => 'Omschrijving', - 'DetectedCameras' => 'Gedetecteerde Cameras', // Added - 2009-03-31 - 'Device' => 'Apparaat', // Added - 2009-02-08 - 'DeviceChannel' => 'Apparaat kanaal', - 'DeviceFormat' => 'Apparaat formaat', - 'DeviceNumber' => 'Apparaat nummer', - 'DevicePath' => 'Apparaat pad', - 'Devices' => 'Apparaten', - 'Dimensions' => 'Afmetingen', - 'DisableAlarms' => 'Alarmen uitschakelen', - 'Disk' => 'Schijf', - 'Display' => 'Weergave', // Added - 2011-01-30 - 'Displaying' => 'Weergaven', // Added - 2011-06-16 - 'Donate' => 'A.U.B geef ons een donatie', - 'DonateAlready' => 'Nee, ik heb al gedoneerd', - 'DonateEnticement' => 'U gebruikt Zoneminder nu voor een geruime tijd, hopelijk vindt je het een nuttige toevoeging voor u huis of werkplek beveiliging. Natuurlijk is en blijft Zoneminder gratis en open source software. Maar het kost geld om te ontwikkelen en support te onderhouden. Ik vraag u dan ook om er over na te denken om een donatie te doen om zo de ontwikkeling en support te ondersteunen. Natuurlijk bent u hier vrij in, en elke donatie hoe klein dan ook wordt erg gewaardeerd.

Als u wilt donderen geef dat hier onder dan aan of ga naar http://www.zoneminder.com/dontate.html in uw browser.

Bedankt voor het gebruiken van Zoneminder en vergeet niet om ons forum op ZoneMinder.com te bezoeken voor ondersteuning of suggesties waarmee u ZoneMinder beleving nog beter wordt.', - 'DonateRemindDay' => 'Nu niet, herinner mij over 1 dag hieraan', - 'DonateRemindHour' => 'Nu niet, herinner mij over een uur hieraan', - 'DonateRemindMonth' => 'Nu niet, herinner mij over een maand hieraan', - 'DonateRemindNever' => 'Nee, ik hiervoor wil niet doneren', - 'DonateRemindWeek' => 'Nu niet, herinner mij over een week hieraan', - 'DonateYes' => 'Ja, ik wil nu doneren', - 'Download' => 'Download', - 'DuplicateMonitorName' => 'Duplicaat Monitor Naam', // Added - 2009-03-31 - 'Duration' => 'Duur', - 'Edit' => 'Bewerk', - 'Email' => 'Email', - 'EnableAlarms' => 'Enable Alarms', - 'Enabled' => 'Ingeschakeld', - 'EnterNewFilterName' => 'Voer nieuwe filter naam in', - 'Error' => 'Fout', - 'ErrorBrackets' => 'Fout, controleer of je even veel openings als afsluiting brackets hebt gebruikt', - 'ErrorValidValue' => 'Fout, Controleer of alle termen een geldige waarde hebben', - 'Etc' => 'etc', - 'Event' => 'Gebeurtenis', - 'EventFilter' => 'Gebeurtenis filter', - 'EventId' => 'Gebeurtenis Id', - 'EventName' => 'Gebeurtenis Name', - 'EventPrefix' => 'Gebeurtenis Prefix', - 'Events' => 'Gebeurtenissen', - 'Exclude' => 'Sluit uit', - 'Execute' => 'Execute', - 'Export' => 'Exporteer', - 'ExportDetails' => 'Exporteer Gebeurtenis Details', - 'ExportFailed' => 'Exporteer gefaald', - 'ExportFormat' => 'Exporteer File Formaat', - 'ExportFormatTar' => 'Tar', - 'ExportFormatZip' => 'Zip', - 'ExportFrames' => 'Exporteer Frame Details', - 'ExportImageFiles' => 'Exporteer foto bestanden', - 'ExportLog' => 'Exporteer Log', // Added - 2011-06-17 - 'ExportMiscFiles' => 'Exporteer andere bestanden (wanneer aanwezig)', - 'ExportOptions' => 'Exporteer Opties', - 'ExportSucceeded' => 'Exporteren geslaagd', // Added - 2009-02-08 - 'ExportVideoFiles' => 'Exporteer Video bestanden (wanneer aanwezig)', - 'Exporting' => 'Exporteerd', - 'FPS' => 'fps', - 'FPSReportInterval' => 'FPS rapportage interval', - 'FTP' => 'FTP', - 'Far' => 'Far', - 'FastForward' => 'Snel vooruit', - 'Feed' => 'toevoer', - 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 - 'File' => 'Bestand', - 'FilterArchiveEvents' => 'Archiveer alle overeenkomsten', - 'FilterDeleteEvents' => 'Verwijder alle overeenkomsten', - 'FilterEmailEvents' => 'Email de details van alle overeenkomsten', - 'FilterExecuteEvents' => 'Voer opdrachten op alle overeenkomsten uit', - 'FilterMessageEvents' => 'Bericht de details van alle overeenkomsten', - 'FilterPx' => 'Filter px', - 'FilterUnset' => 'Je moet de filter hoogte en breedte opgeven', - 'FilterUploadEvents' => 'Verstuur alle overeenkomsten', - 'FilterVideoEvents' => 'Maak video voor alle matches', - 'Filters' => 'Filters', - 'First' => 'Eerste', - 'FlippedHori' => 'Horizontaal gedraait', - 'FlippedVert' => 'Vertikaal gedraait', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. - 'FnMocord' => 'Mocord', // Added 2013.08.16. - 'FnNodect' => 'Nodect', // Added 2013.08.16. - 'Focus' => 'Focus', - 'ForceAlarm' => 'Forceeer alarm', - 'Format' => 'Formaat', - 'Frame' => 'Frame', - 'FrameId' => 'Frame id', - 'FrameRate' => 'Frame rate', - 'FrameSkip' => 'Frame overgeslagen', - 'MotionFrameSkip' => 'Motion Frame Skip', - 'Frames' => 'Frames', - 'Func' => 'Func', - 'Function' => 'Functie', - 'Gain' => 'Gain', - 'General' => 'Generiek', - 'GenerateVideo' => 'Genereer Video', - 'GeneratingVideo' => 'Genereren Video', - 'GoToZoneMinder' => 'Ga naar ZoneMinder.com', - 'Grey' => 'Grijs', - 'Group' => 'Groep', - 'Groups' => 'Groepen', - 'HasFocusSpeed' => 'Heeft Focus Sneldheid', - 'HasGainSpeed' => 'Heeft Gain Snelheid', - 'HasHomePreset' => 'Heeft start Voorkeuren', - 'HasIrisSpeed' => 'Heeft Iris Snelheid', - 'HasPanSpeed' => 'Heeft Pan Snelheid', - 'HasPresets' => 'Heeft Voorkeuren', - 'HasTiltSpeed' => 'Heeft Tilt Snelheid', - 'HasTurboPan' => 'Heeft Turbo Pan', - 'HasTurboTilt' => 'Heeft Turbo Tilt', - 'HasWhiteSpeed' => 'Heeft White Bal. Snelheid', - 'HasZoomSpeed' => 'Heeft Zoom Snelheid', - 'High' => 'Hoog', - 'HighBW' => 'Hoog B/W', - 'Home' => 'Home', - 'Hour' => 'Uur', - 'Hue' => 'Hue', - 'Id' => 'Id', - 'Idle' => 'Ongebruikt', - 'Ignore' => 'Negeer', - 'Image' => 'Foto', - 'ImageBufferSize' => 'Foto buffer grootte (frames)', - 'Images' => 'Fotos', - 'In' => 'In', - 'Include' => 'voeg in', - 'Inverted' => 'Omgedraaid', - 'Iris' => 'Iris', - 'KeyString' => 'Sleutel waarde', - 'Label' => 'Label', - 'Language' => 'Taal', - 'Last' => 'Laatste', - 'Layout' => 'Layout', // Added - 2009-02-08 - 'Level' => 'Nivo', // Added - 2011-06-16 - 'Libvlc' => 'Libvlc', - 'LimitResultsPost' => 'resultaten;', // This is used at the end of the phrase 'Limit to first N results only' - 'LimitResultsPre' => 'beperk tot eerste', // This is used at the beginning of the phrase 'Limit to first N results only' - 'Line' => 'Lijn', // Added - 2011-06-16 - 'LinkedMonitors' => 'Gekoppelde monitoren', - 'List' => 'Lijst', - 'Load' => 'Belasting', - 'Local' => 'Lokaal', - 'Log' => 'Log', // Added - 2011-06-16 - 'LoggedInAs' => 'Aangemeld als', - 'Logging' => 'Logging', // Added - 2011-06-16 - 'LoggingIn' => 'Aanmelden..', - 'Login' => 'Aanmelden', - 'Logout' => 'Afmelden', - 'Logs' => 'Logs', // Added - 2011-06-17 - 'Low' => 'Laag', - 'LowBW' => 'Laag B/W', - 'Main' => 'Main', - 'Man' => 'Man', - 'Manual' => 'Handmatig', - 'Mark' => 'Markeer', - 'Max' => 'Max', - 'MaxBandwidth' => 'Max Bandbreedte', - 'MaxBrScore' => 'Max.
score', - 'MaxFocusRange' => 'Max Focus Bereik', - 'MaxFocusSpeed' => 'Max Focus Snelheid', - 'MaxFocusStep' => 'Max Focus Stap', - 'MaxGainRange' => 'Max Gain Bereik', - 'MaxGainSpeed' => 'Max Gain Snelheid', - 'MaxGainStep' => 'Max Gain Stap', - 'MaxIrisRange' => 'Max Iris Bereik', - 'MaxIrisSpeed' => 'Max Iris Snelheid', - 'MaxIrisStep' => 'Max Iris Stap', - 'MaxPanRange' => 'Max Pan Bereik', - 'MaxPanSpeed' => 'Max Pan Snelheid', - 'MaxPanStep' => 'Max Pan Stap', - 'MaxTiltRange' => 'Max Tilt Bereik', - 'MaxTiltSpeed' => 'Max Tilt Snelheid', - 'MaxTiltStep' => 'Max Tilt Stap', - 'MaxWhiteRange' => 'Max White Bal. Bereik', - 'MaxWhiteSpeed' => 'Max White Bal. Snelheid', - 'MaxWhiteStep' => 'Max White Bal. Stap', - 'MaxZoomRange' => 'Max Zoom Bereik', - 'MaxZoomSpeed' => 'Max Zoom Snelheid', - 'MaxZoomStep' => 'Max Zoom Stap', - 'MaximumFPS' => 'Maximum FPS', - 'Medium' => 'Medium', - 'MediumBW' => 'Medium B/W', - 'Message' => 'Message', // Added - 2011-06-16 - 'MinAlarmAreaLtMax' => 'Minimum alarm moet kleiner dan het maximum', - 'MinAlarmAreaUnset' => 'Specificeer het minimaal aantal alarm pixels', - 'MinBlobAreaLtMax' => 'minimum blob gebied moet kleiner zijn dan maximum blob gebied', - 'MinBlobAreaUnset' => 'Specificeer het minimaal aantal blob pixels', - 'MinBlobLtMinFilter' => 'Minimum blob gebied moet kleiner of gelijk aan het minimale filter gebied zijn', - 'MinBlobsLtMax' => 'Minimum blobs moet kleiner zijn dan maximum blobs', - 'MinBlobsUnset' => 'Specificeer het minimaal blob aantal', - 'MinFilterAreaLtMax' => 'Minimum filter gebied moet minder dan het maximum zijn', - 'MinFilterAreaUnset' => 'Specificeer het minimaal aantal filter pixels', - 'MinFilterLtMinAlarm' => 'Minimum filter gebied moet kleiner of gelijk aan het minimale alarm gebied zijn', - 'MinFocusRange' => 'Min Focus Bereik', - 'MinFocusSpeed' => 'Min Focus Snelheid', - 'MinFocusStep' => 'Min Focus Step', - 'MinGainRange' => 'Min Gain Bereik', - 'MinGainSpeed' => 'Min Gain Snelheid', - 'MinGainStep' => 'Min Gain Step', - 'MinIrisRange' => 'Min Iris Bereik', - 'MinIrisSpeed' => 'Min Iris Snelheid', - 'MinIrisStep' => 'Min Iris Step', - 'MinPanRange' => 'Min Draai Bereik', - 'MinPanSpeed' => 'Min Draai Snelheid', - 'MinPanStep' => 'Min Draai Step', - 'MinPixelThresLtMax' => 'Minimum pixel kleurdiepte moet kleiner zijn dan maximum pixel bereikwaarde', - 'MinPixelThresUnset' => 'Specificeer een minimale pixel bereikwaarde', - 'MinTiltRange' => 'Min Tilt Bereik', - 'MinTiltSpeed' => 'Min Tilt Snelheid', - 'MinTiltStep' => 'Min Tilt Step', - 'MinWhiteRange' => 'Min White Bal. Bereik', - 'MinWhiteSpeed' => 'Min White Bal. Snelheid', - 'MinWhiteStep' => 'Min White Bal. Step', - 'MinZoomRange' => 'Min Zoom Bereik', - 'MinZoomSpeed' => 'Min Zoom Snelheid', - 'MinZoomStep' => 'Min Zoom Step', - 'Misc' => 'Misc', - 'Monitor' => 'Monitor', - 'MonitorIds' => 'Monitor Ids', - 'MonitorPreset' => 'Monitor Preset', - 'MonitorPresetIntro' => 'Selecteer een preset uit de lijst.

let op dit overschrijft de reeds ingevoerde waarden voor deze monitor!

', - 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 - 'MonitorProbeIntro' => 'Deze lijst toont gedeteerde analoge en netwerk cameras en of deze al ingebruik of beschikbaar zijn.

Selecteer de gewenste waarde uit de lijst hier beneden.

Let er op dat het mogelijk is dat niet alle cameras hier worden weer gegeven, en dat alle ingevoerde waarden voor de huidige monitor worden overschreven.

', // Added - 2009-03-31 - 'Monitors' => 'Monitoren', - 'Montage' => 'Montage', - 'Month' => 'Maand', - 'More' => 'Meer', // Added - 2011-06-16 - 'Move' => 'Verplaats', - 'MtgDefault' => 'Default', // Added 2013.08.15. - 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. - 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. - 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. - 'MustBeGe' => 'Moet groter zijn of gelijk aan', - 'MustBeLe' => 'Moet kleiner zijn of gelijk aan', - 'MustConfirmPassword' => 'Je moet je wachtwoord bevestigen', - 'MustSupplyPassword' => 'Je moet een wachtwoord geven', - 'MustSupplyUsername' => 'Je moet een gebruikersnaam geven', - 'Name' => 'Naam', - 'Near' => 'Dichtbij', - 'Network' => 'Netwerk', - 'New' => 'Nieuw', - 'NewGroup' => 'Niew Groep', - 'NewLabel' => 'Niew Label', - 'NewPassword' => 'Nieuw wachtwoord', - 'NewState' => 'Nieuwe status', - 'NewUser' => 'Nieuwe gebruiker', - 'Next' => 'Volgende', - 'No' => 'Nee', - 'NoDetectedCameras' => 'Geen cameras gedeteceerd', // Added - 2009-03-31 - 'NoFramesRecorded' => 'Er zijn geen frames opgenomen voor deze gebeurtenis', - 'NoGroup' => 'Geeb Groep', - 'NoSavedFilters' => 'Geen Opgeslagen Filters', - 'NoStatisticsRecorded' => 'Er zijn geen statistieken opgenomen voor deze gebeurenis', - 'None' => 'Geen', - 'NoneAvailable' => 'Geen beschikbaar', - 'Normal' => 'Normaal', - 'Notes' => 'Notities', - 'NumPresets' => 'Num Voorkeuren', - 'Off' => 'Uit', - 'On' => 'Aan', - 'OpEq' => 'gelijk aan', - 'OpGt' => 'groter dan', - 'OpGtEq' => 'groter dan of gelijk aan', - 'OpIn' => 'in set', - 'OpLt' => 'kleiner dan', - 'OpLtEq' => 'kleiner dan of gelijk aan', - 'OpMatches' => 'Komt overeen', - 'OpNe' => 'niet gelijk aan', - 'OpNotIn' => 'niet in set', - 'OpNotMatches' => 'Komt niet overeen', - 'Open' => 'Open', - 'OptionHelp' => 'OptieHelp', - 'OptionRestartWarning' => 'Deze veranderingen passen niet aan\nals het systeem loopt. Als je\nKlaar bent met veranderen vergeet dan niet dat\nje ZoneMinder herstart.', - 'Options' => 'Opties', - 'OrEnterNewName' => 'of voer een nieuwe naam in', - 'Order' => 'Sorteer', - 'Orientation' => 'Orientatie', - 'Out' => 'Uit', - 'OverwriteExisting' => 'Overschrijf bestaande', - 'Paged' => 'Paged', - 'Pan' => 'Pan', - 'PanLeft' => 'Pan Links', - 'PanRight' => 'Pan Rechts', - 'PanTilt' => 'Pan/Tilt', - 'Parameter' => 'Parameter', - 'Password' => 'Wachtwoord', - 'PasswordsDifferent' => 'Het nieuwe en bevestigde wachtwoord zijn verschillend', - 'Paths' => 'Paden', - 'Pause' => 'Pause', - 'Phone' => 'Telefoon', - 'PhoneBW' => 'Telefoon B/W', - 'Pid' => 'PID', // Added - 2011-06-16 - 'PixelDiff' => 'Pixel Diff', - 'Pixels' => 'pixels', - 'Play' => 'Speel', - 'PlayAll' => 'Speel Alles', - 'PleaseWait' => 'Wacht A.U.B.', - 'Point' => 'Punt', - 'PostEventImageBuffer' => 'Post gebeurtenis foto Buffer', - 'PreEventImageBuffer' => 'Pre gebeurtenis foto Buffer', - 'PreserveAspect' => 'Beeld verhouding bewaren', - 'Preset' => 'Voorkeur', - 'Presets' => 'Voorkeuren', - 'Prev' => 'Vorige', - 'Probe' => 'Scan', // Added - 2009-03-31 - 'Protocol' => 'Protocol', - 'Rate' => 'Waardering', - 'Real' => 'Echte', - 'Record' => 'Record', - 'RefImageBlendPct' => 'Referentie foto Blend %ge', - 'Refresh' => 'Ververs', - 'Remote' => 'Remote', - 'RemoteHostName' => 'Remote Host Naam', - 'RemoteHostPath' => 'Remote Host Pad', - 'RemoteHostPort' => 'Remote Host Poort', - 'RemoteHostSubPath' => 'Remote Host SubPad', // Added - 2009-02-08 - 'RemoteImageColours' => 'Remote foto kleuren', - 'RemoteMethod' => 'Remote Methode', // Added - 2009-02-08 - 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 - 'Rename' => 'Hernoem', - 'Replay' => 'Opnieuw', - 'ReplayAll' => 'Alle Gebeurtenissen', - 'ReplayGapless' => 'Opvolgende Gebeurtenissen', - 'ReplaySingle' => 'Enkele Gebeurtenis', - 'Reset' => 'Herstel', - 'ResetEventCounts' => 'Herstel gebeurtenis teller', - 'Restart' => 'Herstart', - 'Restarting' => 'Herstarten', - 'RestrictedCameraIds' => 'Verboden Camera Ids', - 'RestrictedMonitors' => 'Beperkte Monitoren', - 'ReturnDelay' => 'Return Delay', - 'ReturnLocation' => 'Return Locatie', - 'Rewind' => 'Rewind', - 'RotateLeft' => 'Draai linksom', - 'RotateRight' => 'Draai rechtsom', - 'RunLocalUpdate' => 'Gebruik zmupdate.pl om up te daten', // Added - 2011-05-25 - 'RunMode' => 'Draai Modus', - 'RunState' => 'Draai Status', - 'Running' => 'Werkend', - 'Save' => 'Opslaan', - 'SaveAs' => 'Opslaan als', - 'SaveFilter' => 'Opslaan Filter', - 'Scale' => 'Schaal', - 'Score' => 'Score', - 'Secs' => 'Secs', - 'Sectionlength' => 'Sectie lengte', - 'Select' => 'Selecteer', - 'SelectFormat' => 'Selecteer Formaat', // Added - 2011-06-17 - 'SelectLog' => 'Selecteer Log', // Added - 2011-06-17 - 'SelectMonitors' => 'Selecteer Monitoren', - 'SelfIntersecting' => 'Polygon randen moeten niet overlappen', - 'Set' => 'Zet', - 'SetNewBandwidth' => 'Zet Nieuwe Bandbreedte', - 'SetPreset' => 'Zet Preset', - 'Settings' => 'Instellingen', - 'ShowFilterWindow' => 'Toon Filter Venster', - 'ShowTimeline' => 'Toon Tijdslijn', - 'SignalCheckColour' => 'Signaal controle kleur', - 'Size' => 'Groote', - 'SkinDescription' => 'Wijzig standaard uiterlijk voor deze computer', // Added - 2011-01-30 - 'Sleep' => 'Slaap', - 'SortAsc' => 'Opl.', - 'SortBy' => 'Sorteer op', - 'SortDesc' => 'Afl.', - 'Source' => 'Bron', - 'SourceColours' => 'Bron Colours', // Added - 2009-02-08 - 'SourcePath' => 'Bron Path', // Added - 2009-02-08 - 'SourceType' => 'Bron Type', - 'Speed' => 'Snelheid', - 'SpeedHigh' => 'Hoge Snelheid', - 'SpeedLow' => 'Lage Snelheid', - 'SpeedMedium' => 'Medium Snelheid', - 'SpeedTurbo' => 'Turbo Snelheid', - 'Start' => 'Start', - 'State' => 'Status', - 'Stats' => 'Stats', - 'Status' => 'Status', - 'Step' => 'Stap', - 'StepBack' => 'Stap Terug', - 'StepForward' => 'Stap Vooruit', - 'StepLarge' => 'Groten stap', - 'StepMedium' => 'Medium Stap', - 'StepNone' => 'Geen Stap', - 'StepSmall' => 'Smalle Stap', - 'Stills' => 'Plaatjes', - 'Stop' => 'Stop', - 'Stopped' => 'Gestopt', - 'Stream' => 'Stream', - 'StreamReplayBuffer' => 'Stream Replay foto Buffer', - 'Submit' => 'Verzenden', - 'System' => 'Systeem', - 'SystemLog' => 'Systeem Log', // Added - 2011-06-16 - 'Tele' => 'Tele', - 'Thumbnail' => 'Thumbnail', - 'Tilt' => 'Tilt', - 'Time' => 'Tijd', - 'TimeDelta' => 'Tijd Delta', - 'TimeStamp' => 'Tijdstempel', - 'Timeline' => 'Tijdslijn', - 'TimelineTip1' => 'Pass your mouse over the graph to view a snapshot image and event details.', // Added 2013.08.15. - 'TimelineTip2' => 'Click on the coloured sections of the graph, or the image, to view the event.', // Added 2013.08.15. - 'TimelineTip3' => 'Click on the background to zoom in to a smaller time period based around your click.', // Added 2013.08.15. - 'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15. - 'Timestamp' => 'Tijdstempel', - 'TimestampLabelFormat' => 'Tijdstempel Label Format', - 'TimestampLabelX' => 'Tijdstempel Label X', - 'TimestampLabelY' => 'Tijdstempel Label Y', - 'Today' => 'Vandaag', - 'Tools' => 'Gereedschappen', - 'Total' => 'Totaal', // Added - 2011-06-16 - 'TotalBrScore' => 'Totaal
Score', - 'TrackDelay' => 'Track Vertraging', - 'TrackMotion' => 'Track Beweging', - 'Triggers' => 'Triggers', - 'TurboPanSpeed' => 'Turbo Pan Snelheid', - 'TurboTiltSpeed' => 'Turbo Tilt Snelheid', - 'Type' => 'Type', - 'Unarchive' => 'Dearchiveer', - 'Undefined' => 'Ongedefineerd', // Added - 2009-02-08 - 'Units' => 'Eenheden', - 'Unknown' => 'Onbekend', - 'Update' => 'Ververs', - 'UpdateAvailable' => 'Een update voor ZoneMinder is beschikbaar', - 'UpdateNotNecessary' => 'Geen update noodzakelijk', - 'Updated' => 'Ververst', // Added - 2011-06-16 - 'UseFilter' => 'Gebruik Filter', - 'UseFilterExprsPost' => ' filter expressies', // This is used at the end of the phrase 'use N filter expressions' - 'UseFilterExprsPre' => 'Gebruik ', // This is used at the beginning of the phrase 'use N filter expressions' - 'User' => 'Gebruiker', - 'Username' => 'Gebruikersnaam', - 'Users' => 'Gebruikers', - 'Value' => 'Waarde', - 'Version' => 'Versie', - 'VersionIgnore' => 'Negeer deze versie', - 'VersionRemindDay' => 'Herinner mij na 1 dag', - 'VersionRemindHour' => 'Herinner mij na 1 uur', - 'VersionRemindNever' => 'Herinner mij niet aan nieuwe versies', - 'VersionRemindWeek' => 'Herinner mij na 1 week', - 'Video' => 'Video', - 'VideoFormat' => 'Video Formaat', - 'VideoGenFailed' => 'Video Generatie mislukt!', - 'VideoGenFiles' => 'Bestaande video bestanden', - 'VideoGenNoFiles' => 'Geen video bestanden gevonden', - 'VideoGenParms' => 'Video Generatie Parameters', - 'VideoGenSucceeded' => 'Video Generatie voltooid!', - 'VideoSize' => 'Video grootte', - 'View' => 'Bekijk', - 'ViewAll' => 'Bekijk Alles', - 'ViewEvent' => 'Bekijk Gebeurtenis', - 'ViewPaged' => 'Bekijk Pagina', - 'Wake' => 'Wakker', - 'WarmupFrames' => 'Warmop Frames', - 'Watch' => 'Observeer', - 'Web' => 'Web', - 'WebColour' => 'Web Kleur', - 'Week' => 'Week', - 'White' => 'Wit', - 'WhiteBalance' => 'Wit Balance', - 'Wide' => 'Wijd', - 'X' => 'X', - 'X10' => 'X10', - 'X10ActivationString' => 'X10 Activatie Waarde', - 'X10InputAlarmString' => 'X10 Input Alarm Waarde', - 'X10OutputAlarmString' => 'X10 Output Alarm Waarde', - 'Y' => 'Y', - 'Yes' => 'Ja', - 'YouNoPerms' => 'U heeft niet de rechten om toegang te krijgen tot deze bronnen.', - 'Zone' => 'Zone', - 'ZoneAlarmColour' => 'Alarm Kleur (Rood/Groen/Blauw)', - 'ZoneArea' => 'Zone Gebied', - 'ZoneFilterSize' => 'Filter Hoogte/Breedte (pixels)', - 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmeer Gebied', - 'ZoneMinMaxBlobArea' => 'Min/Max Blob Gebied', - 'ZoneMinMaxBlobs' => 'Min/Max Blobs', - 'ZoneMinMaxFiltArea' => 'Min/Max Gefilterd Gebied', - 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', - 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 - 'ZoneOverloadFrames' => 'Overload Frame negeer aantal', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', - 'Zones' => 'Zones', - 'Zoom' => 'Zoom', - 'ZoomIn' => 'Zoom In', - 'ZoomOut' => 'Zoom Uit', -); - -// Complex replacements with formatting and/or placements, must be passed through sprintf -$CLANG = array( - 'CurrentLogin' => 'huidige login is \'%1$s\'', - 'EventCount' => '%1$s %2$s', // Als voorbeeld '37 gebeurtenissen' (from Vlang below) - 'LastEvents' => 'Last %1$s %2$s', // Als voorbeeld 'Laatste 37 gebeurtenissen' (from Vlang below) - 'LatestRelease' => 'de laatste release is v%1$s, jij hebt v%2$s.', - 'MonitorCount' => '%1$s %2$s', // Als voorbeeld '4 Monitoren' (from Vlang below) - 'MonitorFunction' => 'Monitor %1$s Functie', - 'RunningRecentVer' => 'U draait al met de laatste versie van ZoneMinder, v%s.', - 'VersionMismatch' => 'Versie verschil, systeem is versie %1$s, database is %2$s.', // Added - 2011-05-25 -); - -// The next section allows you to describe a series of word ending and counts used to -// generate the correctly conjugated forms of words depending on a count that is associated -// with that word. -// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to -// conjugate correctly with the associated count. -// In some languages such as English this is fairly simple and can be expressed by assigning -// a count with a singular or plural form of a word and then finding the nearest (lower) value. -// So '0' of something generally ends in 's', 1 of something is singular and has no extra -// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of -// something you would find the nearest lower count (2) and use that ending. -// -// So examples of this would be -// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); -// $zmVlangSheep = array( 0=>'Sheep' ); -// -// where you can have as few or as many entries in the array as necessary -// If your language is similar in form to this then use the same format and choose the -// appropriate zmVlang function below. -// If however you have a language with a different format of plural endings then another -// approach is required . For instance in Russian the word endings change continuously -// depending on the last digit (or digits) of the numerator. In this case then zmVlang -// arrays could be written so that the array index just represents an arbitrary 'type' -// and the zmVlang function does the calculation about which version is appropriate. -// -// So an example in Russian might be (using English words, and made up endings as I -// don't know any Russian!!) -// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); -// -// and the zmVlang function decides that the first form is used for counts ending in -// 0, 5-9 or 11-19 and the second form when ending in 1 etc. -// - -// Variable arrays expressing plurality, see the zmVlang description above -$VLANG = array( - 'Event' => array( 0=>'gebeurtenissen', 1=>'gebeurtenis', 2=>'gebeurtenissen' ), - 'Monitor' => array( 0=>'Monitoren', 1=>'Monitor', 2=>'Monitoren' ), -); - -// You will need to choose or write a function that can correlate the plurality string arrays -// with variable counts. This is used to conjugate the Vlang arrays above with a number passed -// in to generate the correct noun form. -// -// In languages such as English this is fairly simple -// Note this still has to be used with printf etc to get the right formating -function zmVlang( $langVarArray, $count ) -{ - krsort( $langVarArray ); - foreach ( $langVarArray as $key=>$value ) - { - if ( abs($count) >= $key ) - { - return( $value ); - } - } - die( 'Error, unable to correlate variable language string' ); -} - -// This is an version that could be used in the Russian example above -// The rules are that the first word form is used if the count ends in -// 0, 5-9 or 11-19. The second form is used then the count ends in 1 -// (not including 11 as above) and the third form is used when the -// count ends in 2-4, again excluding any values ending in 12-14. -// -// function zmVlang( $langVarArray, $count ) -// { -// $secondlastdigit = substr( $count, -2, 1 ); -// $lastdigit = substr( $count, -1, 1 ); -// // or -// // $secondlastdigit = ($count/10)%10; -// // $lastdigit = $count%10; -// -// // Get rid of the special cases first, the teens -// if ( $secondlastdigit == 1 && $lastdigit != 0 ) -// { -// return( $langVarArray[1] ); -// } -// switch ( $lastdigit ) -// { -// case 0 : -// case 5 : -// case 6 : -// case 7 : -// case 8 : -// case 9 : -// { -// return( $langVarArray[1] ); -// break; -// } -// case 1 : -// { -// return( $langVarArray[2] ); -// break; -// } -// case 2 : -// case 3 : -// case 4 : -// { -// return( $langVarArray[3] ); -// break; -// } -// } -// die( 'Error, unable to correlate variable language string' ); -// } - -// This is an example of how the function is used in the code which you can uncomment and -// use to test your custom function. -//$monitors = array(); -//$monitors[] = 1; // Choose any number -//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); - -// In this section you can override the default prompt and help texts for the options area -// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ -// So for example, to override the help text for ZM_LANG_DEFAULT do -$OLANG = array( - 'OPTIONS_FFMPEG' => array( - 'Help' => "Parameters in this field are passwd on to FFmpeg. Multiple parameters can be separated by ,~~ ". - "Examples (do not enter quotes)~~~~". - "\"allowed_media_types=video\" Set datatype to request fromcam (audio, video, data)~~~~". - "\"reorder_queue_size=nnn\" Set number of packets to buffer for handling of reordered packets~~~~". - "\"loglevel=debug\" Set verbosiy of FFmpeg (quiet, panic, fatal, error, warning, info, verbose, debug)" - ), - 'OPTIONS_LIBVLC' => array( - 'Help' => "Parameters in this field are passwd on to libVLC. Multiple parameters can be separated by ,~~ ". - "Examples (do not enter quotes)~~~~". - "\"--rtp-client-port=nnn\" Set local port to use for rtp data~~~~". - "\"--verbose=2\" Set verbosity of libVLC" - ), - -// 'LANG_DEFAULT' => array( -// 'Prompt' => "This is a new prompt for this option", -// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" -// ), -); - -?> + '24 bits kleuren', + '32BitColour' => '32 bit colour', // Added - 2015-04-18 + '8BitGrey' => '8 bits grijstinten', + 'Action' => 'Actie', + 'Actual' => 'Aktueel', + 'AddNewControl' => 'Nieuwe controle toevoegen', + 'AddNewMonitor' => 'Nieuwe monitor toevoegen', + 'AddNewUser' => 'Nieuwe gebruiker toevoegen', + 'AddNewZone' => 'Nieuw gebied toevoegen', + 'Alarm' => 'Alarm', + 'AlarmBrFrames' => 'Alarm
Frames', + 'AlarmFrame' => 'Alarm Frame', + 'AlarmFrameCount' => 'Alarm Frame Aantal', + 'AlarmLimits' => 'Alarm Limieten', + 'AlarmMaximumFPS' => 'Alarm Maximum FPS', + 'AlarmPx' => 'Alarm Px', + 'AlarmRGBUnset' => 'U moet een RGB alarm kleur keizen', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 + 'Alert' => 'Waarschuwing', + 'All' => 'Alle', + 'Apply' => 'Voer uit', + 'ApplyingStateChange' => 'Status verandering aan het uitvoeren', + 'ArchArchived' => 'Alleen gearchiveerd', + 'ArchUnarchived' => 'Alleen ongearchiveerd', + 'Archive' => 'Archief', + 'Archived' => 'Archived', + 'Area' => 'Gebied', + 'AreaUnits' => 'Gebied (px/%)', + 'AttrAlarmFrames' => 'Alarm frames', + 'AttrArchiveStatus' => 'Archief status', + 'AttrAvgScore' => 'Gem. score', + 'AttrCause' => 'Oorzaak', + 'AttrDate' => 'Datum', + 'AttrDateTime' => 'Datum/tijd', + 'AttrDiskBlocks' => 'Disk Blocks', + 'AttrDiskPercent' => 'Disk Percent', + 'AttrDuration' => 'Duur', + 'AttrFrames' => 'Frames', + 'AttrId' => 'Id', + 'AttrMaxScore' => 'Max. Score', + 'AttrMonitorId' => 'Monitor Id', + 'AttrMonitorName' => 'Monitor Naam', + 'AttrName' => 'Naam', + 'AttrNotes' => 'Notities', + 'AttrSystemLoad' => 'System Belasting', + 'AttrTime' => 'Tijd', + 'AttrTotalScore' => 'Totale Score', + 'AttrWeekday' => 'Weekdag', + 'Auto' => 'Auto', + 'AutoStopTimeout' => 'Auto Stop Timeout', + 'Available' => 'Beschikbaar', // Added - 2009-03-31 + 'AvgBrScore' => 'Gem.
score', + 'Background' => 'Achtergrond', + 'BackgroundFilter' => 'Run filter in achtergrond', + 'BadAlarmFrameCount' => 'Alarm frame moet een getal zijn van 1 of meer', + 'BadAlarmMaxFPS' => 'Alarm Maximum FPS moet een positiev getal zijn of een floating point waarde', + 'BadChannel' => 'Kanaal moet een getal zijn van 1 of meer', + 'BadColours' => 'Target colour must be set to a valid value', // Added - 2015-04-18 + 'BadDevice' => 'Apparaat moet een bestaande waarde krijgen', + 'BadFPSReportInterval' => 'FPS rapport interval buffer en aantal moet een nummer groter dan nul zijn', + 'BadFormat' => 'Formaat moet een nummer nul of groter zijn', + 'BadFrameSkip' => 'Frame skip aantal moet een nummer nul of groter zijn', + 'BadHeight' => 'Hoogte moet een geldige waarde zijn', + 'BadHost' => 'Host moet een juiste address or hostname zijn, laat http:// weg ', + 'BadImageBufferCount' => 'Foto buffer groote moet een nummer 10 of groter zijn', + 'BadLabelX' => 'Label X co-ordinate moet een nummer nul of groter zijn', + 'BadLabelY' => 'Label Y co-ordinate moet een nummer nul of groter zijn', + 'BadMaxFPS' => 'Maximum FPS moet een positieve integer of floating point waarde zijn', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', + 'BadNameChars' => 'Namen mogen alleen alpha numerieke karakters bevatten plus hyphens en underscores', + 'BadPalette' => 'Palette moet een geldige waarde zijn', // Added - 2009-03-31 + 'BadPath' => 'Pad moet een geldige waarde zijn', + 'BadPort' => 'Port moet een geldige nummer zijn', + 'BadPostEventCount' => 'Post gebeurtenis foto aantal moet een geldige waarde van nul of groter zijn', + 'BadPreEventCount' => 'Pre gebeurtenis aantal moe minimaal nul en lager dan de buffert grote', + 'BadRefBlendPerc' => 'Reference blend percentage moet een geldige waarde van nul of groter zijn', + 'BadSectionLength' => 'Selectie lengte moet een integer van 30 of meer zijn', + 'BadSignalCheckColour' => 'Signaal controle kleur moet een geldige RGB waarde zijn', + 'BadStreamReplayBuffer'=> 'Stream replay buffer moet een geldige waarde van nul of groter zijn', + 'BadWarmupCount' => 'Warmop frames moet een geldige waarde van nul of groter zijn', + 'BadWebColour' => 'Web kleur moeten een geldige webkleurwaarde bevatten', + 'BadWidth' => 'Breedte moet ingevuld worden', + 'Bandwidth' => 'Bandbreedte', + 'BandwidthHead' => 'Bandwidth', // This is the end of the bandwidth status on the top of the console, different in many language due to phrasing + 'BlobPx' => 'Blob px', + 'BlobSizes' => 'Blob grootte', + 'Blobs' => 'Blobs', + 'Brightness' => 'Helderheid', + 'Buffer' => 'Buffer', // Added - 2015-04-18 + 'Buffers' => 'Buffers', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 + 'CanAutoFocus' => 'Can Auto Focus', + 'CanAutoGain' => 'Can Auto Gain', + 'CanAutoIris' => 'Can Auto Iris', + 'CanAutoWhite' => 'Can Auto White Bal.', + 'CanAutoZoom' => 'Can Auto Zoom', + 'CanFocus' => 'Can Focus', + 'CanFocusAbs' => 'Can Focus Absoluut', + 'CanFocusCon' => 'Can Focus Continue', + 'CanFocusRel' => 'Can Focus Relatief', + 'CanGain' => 'Can Gain ', + 'CanGainAbs' => 'Can Gain Absoluut', + 'CanGainCon' => 'Can Gain Continue', + 'CanGainRel' => 'Can Gain Relatief', + 'CanIris' => 'Can Iris', + 'CanIrisAbs' => 'Can Iris Absoluut', + 'CanIrisCon' => 'Can Iris Continue', + 'CanIrisRel' => 'Can Iris Relatief', + 'CanMove' => 'Can Move', + 'CanMoveAbs' => 'Can Move Absoluut', + 'CanMoveCon' => 'Can Move Continue', + 'CanMoveDiag' => 'Can Move Diagonaal', + 'CanMoveMap' => 'Can Move Mapped', + 'CanMoveRel' => 'Can Move Relatief', + 'CanPan' => 'Can Pan' , + 'CanReset' => 'Can Reset', + 'CanSetPresets' => 'Can Set Presets', + 'CanSleep' => 'Can Sleep', + 'CanTilt' => 'Can Tilt', + 'CanWake' => 'Can Wake', + 'CanWhite' => 'Can White Balance', + 'CanWhiteAbs' => 'Can White Bal. Absoluut', + 'CanWhiteBal' => 'Can White Bal.', + 'CanWhiteCon' => 'Can White Bal. Continue', + 'CanWhiteRel' => 'Can White Bal. Relatief', + 'CanZoom' => 'Can Zoom', + 'CanZoomAbs' => 'Can Zoom Absoluut', + 'CanZoomCon' => 'Can Zoom Continue', + 'CanZoomRel' => 'Can Zoom Relatief', + 'Cancel' => 'Afbreken', + 'CancelForcedAlarm' => 'Afbreken geforceerd alarm', + 'CaptureHeight' => 'Opname hoogte', + 'CaptureMethod' => 'Opname Methode', // Added - 2009-02-08 + 'CapturePalette' => 'Opname pallet', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 + 'CaptureWidth' => 'Opname breedte', + 'Cause' => 'Oorzaak', + 'CheckMethod' => 'Alarm controle Methode', + 'ChooseDetectedCamera' => 'Kies gedetecteerde Camera', // Added - 2009-03-31 + 'ChooseFilter' => 'Kies filter', + 'ChooseLogFormat' => 'Kies en log formaat', // Added - 2011-06-17 + 'ChooseLogSelection' => 'Kies een log selectie', // Added - 2011-06-17 + 'ChoosePreset' => 'Kies voorkeur', + 'Clear' => 'Leeg', // Added - 2011-06-16 + 'Close' => 'Sluit', + 'Colour' => 'Kleur', + 'Command' => 'Commando', + 'Component' => 'Component', // Added - 2011-06-16 + 'Config' => 'Configuratie', + 'ConfiguredFor' => 'Geconfigureerd voor', + 'ConfirmDeleteEvents' => 'Weet uw zeker dat uw deze gebeurtenissen wil verwijderen?', + 'ConfirmPassword' => 'Bevestig wachtwoord', + 'ConjAnd' => 'en', + 'ConjOr' => 'of', + 'Console' => 'Console', + 'ContactAdmin' => 'Neem A.U.B. contact op met uw beheerder voor details.', + 'Continue' => 'Continue', + 'Contrast' => 'Contrast', + 'Control' => 'Bestuur', + 'ControlAddress' => 'Bestuur adres', + 'ControlCap' => 'Bestuur mogelijkheid', + 'ControlCaps' => 'Bestuur mogelijkheden', + 'ControlDevice' => 'Bestuur apparaat', + 'ControlType' => 'Bestuur Type', + 'Controllable' => 'Bestuurbaar', + 'Current' => 'Current', // Added - 2015-04-18 + 'Cycle' => 'Cyclus', + 'CycleWatch' => 'Observeer cyclus', + 'DateTime' => 'Datum/Tijd', // Added - 2011-06-16 + 'Day' => 'Dag', + 'Debug' => 'Debug', + 'DefaultRate' => 'Standaard Radius', + 'DefaultScale' => 'Standaard Schaal', + 'DefaultView' => 'Standaard scherm', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 + 'Delete' => 'verwijder', + 'DeleteAndNext' => 'verwijder & volgende', + 'DeleteAndPrev' => 'verwijder & vorige', + 'DeleteSavedFilter' => 'verwijder opgeslagen filter', + 'Description' => 'Omschrijving', + 'DetectedCameras' => 'Gedetecteerde Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 + 'Device' => 'Apparaat', // Added - 2009-02-08 + 'DeviceChannel' => 'Apparaat kanaal', + 'DeviceFormat' => 'Apparaat formaat', + 'DeviceNumber' => 'Apparaat nummer', + 'DevicePath' => 'Apparaat pad', + 'Devices' => 'Apparaten', + 'Dimensions' => 'Afmetingen', + 'DisableAlarms' => 'Alarmen uitschakelen', + 'Disk' => 'Schijf', + 'Display' => 'Weergave', // Added - 2011-01-30 + 'Displaying' => 'Weergaven', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', // Added - 2015-04-18 + 'Donate' => 'A.U.B geef ons een donatie', + 'DonateAlready' => 'Nee, ik heb al gedoneerd', + 'DonateEnticement' => 'U gebruikt Zoneminder nu voor een geruime tijd, hopelijk vindt je het een nuttige toevoeging voor u huis of werkplek beveiliging. Natuurlijk is en blijft Zoneminder gratis en open source software. Maar het kost geld om te ontwikkelen en support te onderhouden. Ik vraag u dan ook om er over na te denken om een donatie te doen om zo de ontwikkeling en support te ondersteunen. Natuurlijk bent u hier vrij in, en elke donatie hoe klein dan ook wordt erg gewaardeerd.

Als u wilt donderen geef dat hier onder dan aan of ga naar http://www.zoneminder.com/dontate.html in uw browser.

Bedankt voor het gebruiken van Zoneminder en vergeet niet om ons forum op ZoneMinder.com te bezoeken voor ondersteuning of suggesties waarmee u ZoneMinder beleving nog beter wordt.', + 'DonateRemindDay' => 'Nu niet, herinner mij over 1 dag hieraan', + 'DonateRemindHour' => 'Nu niet, herinner mij over een uur hieraan', + 'DonateRemindMonth' => 'Nu niet, herinner mij over een maand hieraan', + 'DonateRemindNever' => 'Nee, ik hiervoor wil niet doneren', + 'DonateRemindWeek' => 'Nu niet, herinner mij over een week hieraan', + 'DonateYes' => 'Ja, ik wil nu doneren', + 'Download' => 'Download', + 'DuplicateMonitorName' => 'Duplicaat Monitor Naam', // Added - 2009-03-31 + 'Duration' => 'Duur', + 'Edit' => 'Bewerk', + 'Email' => 'Email', + 'EnableAlarms' => 'Enable Alarms', + 'Enabled' => 'Ingeschakeld', + 'EnterNewFilterName' => 'Voer nieuwe filter naam in', + 'Error' => 'Fout', + 'ErrorBrackets' => 'Fout, controleer of je even veel openings als afsluiting brackets hebt gebruikt', + 'ErrorValidValue' => 'Fout, Controleer of alle termen een geldige waarde hebben', + 'Etc' => 'etc', + 'Event' => 'Gebeurtenis', + 'EventFilter' => 'Gebeurtenis filter', + 'EventId' => 'Gebeurtenis Id', + 'EventName' => 'Gebeurtenis Name', + 'EventPrefix' => 'Gebeurtenis Prefix', + 'Events' => 'Gebeurtenissen', + 'Exclude' => 'Sluit uit', + 'Execute' => 'Execute', + 'Export' => 'Exporteer', + 'ExportDetails' => 'Exporteer Gebeurtenis Details', + 'ExportFailed' => 'Exporteer gefaald', + 'ExportFormat' => 'Exporteer File Formaat', + 'ExportFormatTar' => 'Tar', + 'ExportFormatZip' => 'Zip', + 'ExportFrames' => 'Exporteer Frame Details', + 'ExportImageFiles' => 'Exporteer foto bestanden', + 'ExportLog' => 'Exporteer Log', // Added - 2011-06-17 + 'ExportMiscFiles' => 'Exporteer andere bestanden (wanneer aanwezig)', + 'ExportOptions' => 'Exporteer Opties', + 'ExportSucceeded' => 'Exporteren geslaagd', // Added - 2009-02-08 + 'ExportVideoFiles' => 'Exporteer Video bestanden (wanneer aanwezig)', + 'Exporting' => 'Exporteerd', + 'FPS' => 'fps', + 'FPSReportInterval' => 'FPS rapportage interval', + 'FTP' => 'FTP', + 'Far' => 'Far', + 'FastForward' => 'Snel vooruit', + 'Feed' => 'toevoer', + 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 + 'File' => 'Bestand', + 'Filter' => 'Filter', // Added - 2015-04-18 + 'FilterArchiveEvents' => 'Archiveer alle overeenkomsten', + 'FilterDeleteEvents' => 'Verwijder alle overeenkomsten', + 'FilterEmailEvents' => 'Email de details van alle overeenkomsten', + 'FilterExecuteEvents' => 'Voer opdrachten op alle overeenkomsten uit', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 + 'FilterMessageEvents' => 'Bericht de details van alle overeenkomsten', + 'FilterPx' => 'Filter px', + 'FilterUnset' => 'Je moet de filter hoogte en breedte opgeven', + 'FilterUploadEvents' => 'Verstuur alle overeenkomsten', + 'FilterVideoEvents' => 'Maak video voor alle matches', + 'Filters' => 'Filters', + 'First' => 'Eerste', + 'FlippedHori' => 'Horizontaal gedraait', + 'FlippedVert' => 'Vertikaal gedraait', + 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. + 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. + 'Focus' => 'Focus', + 'ForceAlarm' => 'Forceeer alarm', + 'Format' => 'Formaat', + 'Frame' => 'Frame', + 'FrameId' => 'Frame id', + 'FrameRate' => 'Frame rate', + 'FrameSkip' => 'Frame overgeslagen', + 'Frames' => 'Frames', + 'Func' => 'Func', + 'Function' => 'Functie', + 'Gain' => 'Gain', + 'General' => 'Generiek', + 'GenerateVideo' => 'Genereer Video', + 'GeneratingVideo' => 'Genereren Video', + 'GoToZoneMinder' => 'Ga naar ZoneMinder.com', + 'Grey' => 'Grijs', + 'Group' => 'Groep', + 'Groups' => 'Groepen', + 'HasFocusSpeed' => 'Heeft Focus Sneldheid', + 'HasGainSpeed' => 'Heeft Gain Snelheid', + 'HasHomePreset' => 'Heeft start Voorkeuren', + 'HasIrisSpeed' => 'Heeft Iris Snelheid', + 'HasPanSpeed' => 'Heeft Pan Snelheid', + 'HasPresets' => 'Heeft Voorkeuren', + 'HasTiltSpeed' => 'Heeft Tilt Snelheid', + 'HasTurboPan' => 'Heeft Turbo Pan', + 'HasTurboTilt' => 'Heeft Turbo Tilt', + 'HasWhiteSpeed' => 'Heeft White Bal. Snelheid', + 'HasZoomSpeed' => 'Heeft Zoom Snelheid', + 'High' => 'Hoog', + 'HighBW' => 'Hoog B/W', + 'Home' => 'Home', + 'Hour' => 'Uur', + 'Hue' => 'Hue', + 'Id' => 'Id', + 'Idle' => 'Ongebruikt', + 'Ignore' => 'Negeer', + 'Image' => 'Foto', + 'ImageBufferSize' => 'Foto buffer grootte (frames)', + 'Images' => 'Fotos', + 'In' => 'In', + 'Include' => 'voeg in', + 'Inverted' => 'Omgedraaid', + 'Iris' => 'Iris', + 'KeyString' => 'Sleutel waarde', + 'Label' => 'Label', + 'Language' => 'Taal', + 'Last' => 'Laatste', + 'Layout' => 'Layout', // Added - 2009-02-08 + 'Level' => 'Nivo', // Added - 2011-06-16 + 'Libvlc' => 'Libvlc', + 'LimitResultsPost' => 'resultaten;', // This is used at the end of the phrase 'Limit to first N results only' + 'LimitResultsPre' => 'beperk tot eerste', // This is used at the beginning of the phrase 'Limit to first N results only' + 'Line' => 'Lijn', // Added - 2011-06-16 + 'LinkedMonitors' => 'Gekoppelde monitoren', + 'List' => 'Lijst', + 'Load' => 'Belasting', + 'Local' => 'Lokaal', + 'Log' => 'Log', // Added - 2011-06-16 + 'LoggedInAs' => 'Aangemeld als', + 'Logging' => 'Logging', // Added - 2011-06-16 + 'LoggingIn' => 'Aanmelden..', + 'Login' => 'Aanmelden', + 'Logout' => 'Afmelden', + 'Logs' => 'Logs', // Added - 2011-06-17 + 'Low' => 'Laag', + 'LowBW' => 'Laag B/W', + 'Main' => 'Main', + 'Man' => 'Man', + 'Manual' => 'Handmatig', + 'Mark' => 'Markeer', + 'Max' => 'Max', + 'MaxBandwidth' => 'Max Bandbreedte', + 'MaxBrScore' => 'Max.
score', + 'MaxFocusRange' => 'Max Focus Bereik', + 'MaxFocusSpeed' => 'Max Focus Snelheid', + 'MaxFocusStep' => 'Max Focus Stap', + 'MaxGainRange' => 'Max Gain Bereik', + 'MaxGainSpeed' => 'Max Gain Snelheid', + 'MaxGainStep' => 'Max Gain Stap', + 'MaxIrisRange' => 'Max Iris Bereik', + 'MaxIrisSpeed' => 'Max Iris Snelheid', + 'MaxIrisStep' => 'Max Iris Stap', + 'MaxPanRange' => 'Max Pan Bereik', + 'MaxPanSpeed' => 'Max Pan Snelheid', + 'MaxPanStep' => 'Max Pan Stap', + 'MaxTiltRange' => 'Max Tilt Bereik', + 'MaxTiltSpeed' => 'Max Tilt Snelheid', + 'MaxTiltStep' => 'Max Tilt Stap', + 'MaxWhiteRange' => 'Max White Bal. Bereik', + 'MaxWhiteSpeed' => 'Max White Bal. Snelheid', + 'MaxWhiteStep' => 'Max White Bal. Stap', + 'MaxZoomRange' => 'Max Zoom Bereik', + 'MaxZoomSpeed' => 'Max Zoom Snelheid', + 'MaxZoomStep' => 'Max Zoom Stap', + 'MaximumFPS' => 'Maximum FPS', + 'Medium' => 'Medium', + 'MediumBW' => 'Medium B/W', + 'Message' => 'Message', // Added - 2011-06-16 + 'MinAlarmAreaLtMax' => 'Minimum alarm moet kleiner dan het maximum', + 'MinAlarmAreaUnset' => 'Specificeer het minimaal aantal alarm pixels', + 'MinBlobAreaLtMax' => 'minimum blob gebied moet kleiner zijn dan maximum blob gebied', + 'MinBlobAreaUnset' => 'Specificeer het minimaal aantal blob pixels', + 'MinBlobLtMinFilter' => 'Minimum blob gebied moet kleiner of gelijk aan het minimale filter gebied zijn', + 'MinBlobsLtMax' => 'Minimum blobs moet kleiner zijn dan maximum blobs', + 'MinBlobsUnset' => 'Specificeer het minimaal blob aantal', + 'MinFilterAreaLtMax' => 'Minimum filter gebied moet minder dan het maximum zijn', + 'MinFilterAreaUnset' => 'Specificeer het minimaal aantal filter pixels', + 'MinFilterLtMinAlarm' => 'Minimum filter gebied moet kleiner of gelijk aan het minimale alarm gebied zijn', + 'MinFocusRange' => 'Min Focus Bereik', + 'MinFocusSpeed' => 'Min Focus Snelheid', + 'MinFocusStep' => 'Min Focus Step', + 'MinGainRange' => 'Min Gain Bereik', + 'MinGainSpeed' => 'Min Gain Snelheid', + 'MinGainStep' => 'Min Gain Step', + 'MinIrisRange' => 'Min Iris Bereik', + 'MinIrisSpeed' => 'Min Iris Snelheid', + 'MinIrisStep' => 'Min Iris Step', + 'MinPanRange' => 'Min Draai Bereik', + 'MinPanSpeed' => 'Min Draai Snelheid', + 'MinPanStep' => 'Min Draai Step', + 'MinPixelThresLtMax' => 'Minimum pixel kleurdiepte moet kleiner zijn dan maximum pixel bereikwaarde', + 'MinPixelThresUnset' => 'Specificeer een minimale pixel bereikwaarde', + 'MinTiltRange' => 'Min Tilt Bereik', + 'MinTiltSpeed' => 'Min Tilt Snelheid', + 'MinTiltStep' => 'Min Tilt Step', + 'MinWhiteRange' => 'Min White Bal. Bereik', + 'MinWhiteSpeed' => 'Min White Bal. Snelheid', + 'MinWhiteStep' => 'Min White Bal. Step', + 'MinZoomRange' => 'Min Zoom Bereik', + 'MinZoomSpeed' => 'Min Zoom Snelheid', + 'MinZoomStep' => 'Min Zoom Step', + 'Misc' => 'Misc', + 'Mode' => 'Mode', // Added - 2015-04-18 + 'Monitor' => 'Monitor', + 'MonitorIds' => 'Monitor Ids', + 'MonitorPreset' => 'Monitor Preset', + 'MonitorPresetIntro' => 'Selecteer een preset uit de lijst.

let op dit overschrijft de reeds ingevoerde waarden voor deze monitor!

', + 'MonitorProbe' => 'Monitor Probe', // Added - 2009-03-31 + 'MonitorProbeIntro' => 'Deze lijst toont gedeteerde analoge en netwerk cameras en of deze al ingebruik of beschikbaar zijn.

Selecteer de gewenste waarde uit de lijst hier beneden.

Let er op dat het mogelijk is dat niet alle cameras hier worden weer gegeven, en dat alle ingevoerde waarden voor de huidige monitor worden overschreven.

', // Added - 2009-03-31 + 'Monitors' => 'Monitoren', + 'Montage' => 'Montage', + 'Month' => 'Maand', + 'More' => 'Meer', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', + 'Move' => 'Verplaats', + 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. + 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. + 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. + 'MustBeGe' => 'Moet groter zijn of gelijk aan', + 'MustBeLe' => 'Moet kleiner zijn of gelijk aan', + 'MustConfirmPassword' => 'Je moet je wachtwoord bevestigen', + 'MustSupplyPassword' => 'Je moet een wachtwoord geven', + 'MustSupplyUsername' => 'Je moet een gebruikersnaam geven', + 'Name' => 'Naam', + 'Near' => 'Dichtbij', + 'Network' => 'Netwerk', + 'New' => 'Nieuw', + 'NewGroup' => 'Niew Groep', + 'NewLabel' => 'Niew Label', + 'NewPassword' => 'Nieuw wachtwoord', + 'NewState' => 'Nieuwe status', + 'NewUser' => 'Nieuwe gebruiker', + 'Next' => 'Volgende', + 'No' => 'Nee', + 'NoDetectedCameras' => 'Geen cameras gedeteceerd', // Added - 2009-03-31 + 'NoFramesRecorded' => 'Er zijn geen frames opgenomen voor deze gebeurtenis', + 'NoGroup' => 'Geeb Groep', + 'NoSavedFilters' => 'Geen Opgeslagen Filters', + 'NoStatisticsRecorded' => 'Er zijn geen statistieken opgenomen voor deze gebeurenis', + 'None' => 'Geen', + 'NoneAvailable' => 'Geen beschikbaar', + 'Normal' => 'Normaal', + 'Notes' => 'Notities', + 'NumPresets' => 'Num Voorkeuren', + 'Off' => 'Uit', + 'On' => 'Aan', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'OpEq' => 'gelijk aan', + 'OpGt' => 'groter dan', + 'OpGtEq' => 'groter dan of gelijk aan', + 'OpIn' => 'in set', + 'OpLt' => 'kleiner dan', + 'OpLtEq' => 'kleiner dan of gelijk aan', + 'OpMatches' => 'Komt overeen', + 'OpNe' => 'niet gelijk aan', + 'OpNotIn' => 'niet in set', + 'OpNotMatches' => 'Komt niet overeen', + 'Open' => 'Open', + 'OptionHelp' => 'OptieHelp', + 'OptionRestartWarning' => 'Deze veranderingen passen niet aan\nals het systeem loopt. Als je\nKlaar bent met veranderen vergeet dan niet dat\nje ZoneMinder herstart.', + 'Options' => 'Opties', + 'OrEnterNewName' => 'of voer een nieuwe naam in', + 'Order' => 'Sorteer', + 'Orientation' => 'Orientatie', + 'Out' => 'Uit', + 'OverwriteExisting' => 'Overschrijf bestaande', + 'Paged' => 'Paged', + 'Pan' => 'Pan', + 'PanLeft' => 'Pan Links', + 'PanRight' => 'Pan Rechts', + 'PanTilt' => 'Pan/Tilt', + 'Parameter' => 'Parameter', + 'Password' => 'Wachtwoord', + 'PasswordsDifferent' => 'Het nieuwe en bevestigde wachtwoord zijn verschillend', + 'Paths' => 'Paden', + 'Pause' => 'Pause', + 'Phone' => 'Telefoon', + 'PhoneBW' => 'Telefoon B/W', + 'Pid' => 'PID', // Added - 2011-06-16 + 'PixelDiff' => 'Pixel Diff', + 'Pixels' => 'pixels', + 'Play' => 'Speel', + 'PlayAll' => 'Speel Alles', + 'PleaseWait' => 'Wacht A.U.B.', + 'Plugins' => 'Plugins', // Added - 2015-04-18 + 'Point' => 'Punt', + 'PostEventImageBuffer' => 'Post gebeurtenis foto Buffer', + 'PreEventImageBuffer' => 'Pre gebeurtenis foto Buffer', + 'PreserveAspect' => 'Beeld verhouding bewaren', + 'Preset' => 'Voorkeur', + 'Presets' => 'Voorkeuren', + 'Prev' => 'Vorige', + 'Probe' => 'Scan', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 + 'Protocol' => 'Protocol', + 'Rate' => 'Waardering', + 'Real' => 'Echte', + 'Record' => 'Record', + 'RefImageBlendPct' => 'Referentie foto Blend %ge', + 'Refresh' => 'Ververs', + 'Remote' => 'Remote', + 'RemoteHostName' => 'Remote Host Naam', + 'RemoteHostPath' => 'Remote Host Pad', + 'RemoteHostPort' => 'Remote Host Poort', + 'RemoteHostSubPath' => 'Remote Host SubPad', // Added - 2009-02-08 + 'RemoteImageColours' => 'Remote foto kleuren', + 'RemoteMethod' => 'Remote Methode', // Added - 2009-02-08 + 'RemoteProtocol' => 'Remote Protocol', // Added - 2009-02-08 + 'Rename' => 'Hernoem', + 'Replay' => 'Opnieuw', + 'ReplayAll' => 'Alle Gebeurtenissen', + 'ReplayGapless' => 'Opvolgende Gebeurtenissen', + 'ReplaySingle' => 'Enkele Gebeurtenis', + 'Reset' => 'Herstel', + 'ResetEventCounts' => 'Herstel gebeurtenis teller', + 'Restart' => 'Herstart', + 'Restarting' => 'Herstarten', + 'RestrictedCameraIds' => 'Verboden Camera Ids', + 'RestrictedMonitors' => 'Beperkte Monitoren', + 'ReturnDelay' => 'Return Delay', + 'ReturnLocation' => 'Return Locatie', + 'Rewind' => 'Rewind', + 'RotateLeft' => 'Draai linksom', + 'RotateRight' => 'Draai rechtsom', + 'RunLocalUpdate' => 'Gebruik zmupdate.pl om up te daten', // Added - 2011-05-25 + 'RunMode' => 'Draai Modus', + 'RunState' => 'Draai Status', + 'Running' => 'Werkend', + 'Save' => 'Opslaan', + 'SaveAs' => 'Opslaan als', + 'SaveFilter' => 'Opslaan Filter', + 'Scale' => 'Schaal', + 'Score' => 'Score', + 'Secs' => 'Secs', + 'Sectionlength' => 'Sectie lengte', + 'Select' => 'Selecteer', + 'SelectFormat' => 'Selecteer Formaat', // Added - 2011-06-17 + 'SelectLog' => 'Selecteer Log', // Added - 2011-06-17 + 'SelectMonitors' => 'Selecteer Monitoren', + 'SelfIntersecting' => 'Polygon randen moeten niet overlappen', + 'Set' => 'Zet', + 'SetNewBandwidth' => 'Zet Nieuwe Bandbreedte', + 'SetPreset' => 'Zet Preset', + 'Settings' => 'Instellingen', + 'ShowFilterWindow' => 'Toon Filter Venster', + 'ShowTimeline' => 'Toon Tijdslijn', + 'SignalCheckColour' => 'Signaal controle kleur', + 'Size' => 'Groote', + 'SkinDescription' => 'Wijzig standaard uiterlijk voor deze computer', // Added - 2011-01-30 + 'Sleep' => 'Slaap', + 'SortAsc' => 'Opl.', + 'SortBy' => 'Sorteer op', + 'SortDesc' => 'Afl.', + 'Source' => 'Bron', + 'SourceColours' => 'Bron Colours', // Added - 2009-02-08 + 'SourcePath' => 'Bron Path', // Added - 2009-02-08 + 'SourceType' => 'Bron Type', + 'Speed' => 'Snelheid', + 'SpeedHigh' => 'Hoge Snelheid', + 'SpeedLow' => 'Lage Snelheid', + 'SpeedMedium' => 'Medium Snelheid', + 'SpeedTurbo' => 'Turbo Snelheid', + 'Start' => 'Start', + 'State' => 'Status', + 'Stats' => 'Stats', + 'Status' => 'Status', + 'Step' => 'Stap', + 'StepBack' => 'Stap Terug', + 'StepForward' => 'Stap Vooruit', + 'StepLarge' => 'Groten stap', + 'StepMedium' => 'Medium Stap', + 'StepNone' => 'Geen Stap', + 'StepSmall' => 'Smalle Stap', + 'Stills' => 'Plaatjes', + 'Stop' => 'Stop', + 'Stopped' => 'Gestopt', + 'Stream' => 'Stream', + 'StreamReplayBuffer' => 'Stream Replay foto Buffer', + 'Submit' => 'Verzenden', + 'System' => 'Systeem', + 'SystemLog' => 'Systeem Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 + 'Tele' => 'Tele', + 'Thumbnail' => 'Thumbnail', + 'Tilt' => 'Tilt', + 'Time' => 'Tijd', + 'TimeDelta' => 'Tijd Delta', + 'TimeStamp' => 'Tijdstempel', + 'Timeline' => 'Tijdslijn', + 'TimelineTip1' => 'Pass your mouse over the graph to view a snapshot image and event details.', // Added 2013.08.15. + 'TimelineTip2' => 'Click on the coloured sections of the graph, or the image, to view the event.', // Added 2013.08.15. + 'TimelineTip3' => 'Click on the background to zoom in to a smaller time period based around your click.', // Added 2013.08.15. + 'TimelineTip4' => 'Use the controls below to zoom out or navigate back and forward through the time range.', // Added 2013.08.15. + 'Timestamp' => 'Tijdstempel', + 'TimestampLabelFormat' => 'Tijdstempel Label Format', + 'TimestampLabelX' => 'Tijdstempel Label X', + 'TimestampLabelY' => 'Tijdstempel Label Y', + 'Today' => 'Vandaag', + 'Tools' => 'Gereedschappen', + 'Total' => 'Totaal', // Added - 2011-06-16 + 'TotalBrScore' => 'Totaal
Score', + 'TrackDelay' => 'Track Vertraging', + 'TrackMotion' => 'Track Beweging', + 'Triggers' => 'Triggers', + 'TurboPanSpeed' => 'Turbo Pan Snelheid', + 'TurboTiltSpeed' => 'Turbo Tilt Snelheid', + 'Type' => 'Type', + 'Unarchive' => 'Dearchiveer', + 'Undefined' => 'Ongedefineerd', // Added - 2009-02-08 + 'Units' => 'Eenheden', + 'Unknown' => 'Onbekend', + 'Update' => 'Ververs', + 'UpdateAvailable' => 'Een update voor ZoneMinder is beschikbaar', + 'UpdateNotNecessary' => 'Geen update noodzakelijk', + 'Updated' => 'Ververst', // Added - 2011-06-16 + 'Upload' => 'Upload', // Added - 2015-04-18 + 'UseFilter' => 'Gebruik Filter', + 'UseFilterExprsPost' => ' filter expressies', // This is used at the end of the phrase 'use N filter expressions' + 'UseFilterExprsPre' => 'Gebruik ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', // Added - 2015-04-18 + 'User' => 'Gebruiker', + 'Username' => 'Gebruikersnaam', + 'Users' => 'Gebruikers', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 + 'Value' => 'Waarde', + 'Version' => 'Versie', + 'VersionIgnore' => 'Negeer deze versie', + 'VersionRemindDay' => 'Herinner mij na 1 dag', + 'VersionRemindHour' => 'Herinner mij na 1 uur', + 'VersionRemindNever' => 'Herinner mij niet aan nieuwe versies', + 'VersionRemindWeek' => 'Herinner mij na 1 week', + 'Video' => 'Video', + 'VideoFormat' => 'Video Formaat', + 'VideoGenFailed' => 'Video Generatie mislukt!', + 'VideoGenFiles' => 'Bestaande video bestanden', + 'VideoGenNoFiles' => 'Geen video bestanden gevonden', + 'VideoGenParms' => 'Video Generatie Parameters', + 'VideoGenSucceeded' => 'Video Generatie voltooid!', + 'VideoSize' => 'Video grootte', + 'View' => 'Bekijk', + 'ViewAll' => 'Bekijk Alles', + 'ViewEvent' => 'Bekijk Gebeurtenis', + 'ViewPaged' => 'Bekijk Pagina', + 'Wake' => 'Wakker', + 'WarmupFrames' => 'Warmop Frames', + 'Watch' => 'Observeer', + 'Web' => 'Web', + 'WebColour' => 'Web Kleur', + 'Week' => 'Week', + 'White' => 'Wit', + 'WhiteBalance' => 'Wit Balance', + 'Wide' => 'Wijd', + 'X' => 'X', + 'X10' => 'X10', + 'X10ActivationString' => 'X10 Activatie Waarde', + 'X10InputAlarmString' => 'X10 Input Alarm Waarde', + 'X10OutputAlarmString' => 'X10 Output Alarm Waarde', + 'Y' => 'Y', + 'Yes' => 'Ja', + 'YouNoPerms' => 'U heeft niet de rechten om toegang te krijgen tot deze bronnen.', + 'Zone' => 'Zone', + 'ZoneAlarmColour' => 'Alarm Kleur (Rood/Groen/Blauw)', + 'ZoneArea' => 'Zone Gebied', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', + 'ZoneFilterSize' => 'Filter Hoogte/Breedte (pixels)', + 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmeer Gebied', + 'ZoneMinMaxBlobArea' => 'Min/Max Blob Gebied', + 'ZoneMinMaxBlobs' => 'Min/Max Blobs', + 'ZoneMinMaxFiltArea' => 'Min/Max Gefilterd Gebied', + 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', + 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 + 'ZoneOverloadFrames' => 'Overload Frame negeer aantal', + 'Zones' => 'Zones', + 'Zoom' => 'Zoom', + 'ZoomIn' => 'Zoom In', + 'ZoomOut' => 'Zoom Uit', +); + +// Complex replacements with formatting and/or placements, must be passed through sprintf +$CLANG = array( + 'CurrentLogin' => 'huidige login is \'%1$s\'', + 'EventCount' => '%1$s %2$s', // Als voorbeeld '37 gebeurtenissen' (from Vlang below) + 'LastEvents' => 'Last %1$s %2$s', // Als voorbeeld 'Laatste 37 gebeurtenissen' (from Vlang below) + 'LatestRelease' => 'de laatste release is v%1$s, jij hebt v%2$s.', + 'MonitorCount' => '%1$s %2$s', // Als voorbeeld '4 Monitoren' (from Vlang below) + 'MonitorFunction' => 'Monitor %1$s Functie', + 'RunningRecentVer' => 'U draait al met de laatste versie van ZoneMinder, v%s.', + 'VersionMismatch' => 'Versie verschil, systeem is versie %1$s, database is %2$s.', // Added - 2011-05-25 +); + +// The next section allows you to describe a series of word ending and counts used to +// generate the correctly conjugated forms of words depending on a count that is associated +// with that word. +// This intended to allow phrases such a '0 potatoes', '1 potato', '2 potatoes' etc to +// conjugate correctly with the associated count. +// In some languages such as English this is fairly simple and can be expressed by assigning +// a count with a singular or plural form of a word and then finding the nearest (lower) value. +// So '0' of something generally ends in 's', 1 of something is singular and has no extra +// ending and 2 or more is a plural and ends in 's' also. So to find the ending for '187' of +// something you would find the nearest lower count (2) and use that ending. +// +// So examples of this would be +// $zmVlangPotato = array( 0=>'Potatoes', 1=>'Potato', 2=>'Potatoes' ); +// $zmVlangSheep = array( 0=>'Sheep' ); +// +// where you can have as few or as many entries in the array as necessary +// If your language is similar in form to this then use the same format and choose the +// appropriate zmVlang function below. +// If however you have a language with a different format of plural endings then another +// approach is required . For instance in Russian the word endings change continuously +// depending on the last digit (or digits) of the numerator. In this case then zmVlang +// arrays could be written so that the array index just represents an arbitrary 'type' +// and the zmVlang function does the calculation about which version is appropriate. +// +// So an example in Russian might be (using English words, and made up endings as I +// don't know any Russian!!) +// $zmVlangPotato = array( 1=>'Potati', 2=>'Potaton', 3=>'Potaten' ); +// +// and the zmVlang function decides that the first form is used for counts ending in +// 0, 5-9 or 11-19 and the second form when ending in 1 etc. +// + +// Variable arrays expressing plurality, see the zmVlang description above +$VLANG = array( + 'Event' => array( 0=>'gebeurtenissen', 1=>'gebeurtenis', 2=>'gebeurtenissen' ), + 'Monitor' => array( 0=>'Monitoren', 1=>'Monitor', 2=>'Monitoren' ), +); + +// You will need to choose or write a function that can correlate the plurality string arrays +// with variable counts. This is used to conjugate the Vlang arrays above with a number passed +// in to generate the correct noun form. +// +// In languages such as English this is fairly simple +// Note this still has to be used with printf etc to get the right formating +function zmVlang( $langVarArray, $count ) +{ + krsort( $langVarArray ); + foreach ( $langVarArray as $key=>$value ) + { + if ( abs($count) >= $key ) + { + return( $value ); + } + } + die( 'Error, unable to correlate variable language string' ); +} + +// This is an version that could be used in the Russian example above +// The rules are that the first word form is used if the count ends in +// 0, 5-9 or 11-19. The second form is used then the count ends in 1 +// (not including 11 as above) and the third form is used when the +// count ends in 2-4, again excluding any values ending in 12-14. +// +// function zmVlang( $langVarArray, $count ) +// { +// $secondlastdigit = substr( $count, -2, 1 ); +// $lastdigit = substr( $count, -1, 1 ); +// // or +// // $secondlastdigit = ($count/10)%10; +// // $lastdigit = $count%10; +// +// // Get rid of the special cases first, the teens +// if ( $secondlastdigit == 1 && $lastdigit != 0 ) +// { +// return( $langVarArray[1] ); +// } +// switch ( $lastdigit ) +// { +// case 0 : +// case 5 : +// case 6 : +// case 7 : +// case 8 : +// case 9 : +// { +// return( $langVarArray[1] ); +// break; +// } +// case 1 : +// { +// return( $langVarArray[2] ); +// break; +// } +// case 2 : +// case 3 : +// case 4 : +// { +// return( $langVarArray[3] ); +// break; +// } +// } +// die( 'Error, unable to correlate variable language string' ); +// } + +// This is an example of how the function is used in the code which you can uncomment and +// use to test your custom function. +//$monitors = array(); +//$monitors[] = 1; // Choose any number +//echo sprintf( $zmClangMonitorCount, count($monitors), zmVlang( $zmVlangMonitor, count($monitors) ) ); + +// In this section you can override the default prompt and help texts for the options area +// These overrides are in the form show below where the array key represents the option name minus the initial ZM_ +// So for example, to override the help text for ZM_LANG_DEFAULT do +$OLANG = array( + 'OPTIONS_FFMPEG' => array( + 'Help' => "Parameters in this field are passwd on to FFmpeg. Multiple parameters can be separated by ,~~ ". + "Examples (do not enter quotes)~~~~". + "\"allowed_media_types=video\" Set datatype to request fromcam (audio, video, data)~~~~". + "\"reorder_queue_size=nnn\" Set number of packets to buffer for handling of reordered packets~~~~". + "\"loglevel=debug\" Set verbosiy of FFmpeg (quiet, panic, fatal, error, warning, info, verbose, debug)" + ), + 'OPTIONS_LIBVLC' => array( + 'Help' => "Parameters in this field are passwd on to libVLC. Multiple parameters can be separated by ,~~ ". + "Examples (do not enter quotes)~~~~". + "\"--rtp-client-port=nnn\" Set local port to use for rtp data~~~~". + "\"--verbose=2\" Set verbosity of libVLC" + ), + +// 'LANG_DEFAULT' => array( +// 'Prompt' => "This is a new prompt for this option", +// 'Help' => "This is some new help for this option which will be displayed in the popup window when the ? is clicked" +// ), +); + +?> diff --git a/web/lang/pl_pl.php b/web/lang/pl_pl.php index 9ba171fcb..71c4bbac6 100644 --- a/web/lang/pl_pl.php +++ b/web/lang/pl_pl.php @@ -88,6 +88,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Alarm Maximum FPS', 'AlarmPx' => 'Alarm Px', 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'Gotowosc', 'All' => 'Wszystko', 'Apply' => 'Zastosuj', @@ -132,13 +133,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', 'BadFormat' => 'Format must be set to an integer of zero or more', 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'Height must be set to a valid value', 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'Nazwy mog zawiera tylko litery, cyfry oraz mylnik i podkrelenie', 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 'BadPath' => 'Path must be set to a valid value', @@ -158,7 +159,9 @@ $SLANG = array( 'BlobSizes' => 'Rozmiary plamek', 'Blobs' => 'Plamki', 'Brightness' => 'Jaskrawo', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'Bufory', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Can Auto Focus', 'CanAutoGain' => 'Can Auto Gain', 'CanAutoIris' => 'Can Auto Iris', @@ -202,6 +205,7 @@ $SLANG = array( 'CaptureHeight' => 'Wysoko obrazu', 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 'CapturePalette' => 'Paleta kolorw obrazu', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => 'Szeroko obrazu', 'Cause' => 'Cause', 'CheckMethod' => 'Metoda sprawdzenia alarmu', @@ -232,6 +236,7 @@ $SLANG = array( 'ControlDevice' => 'Control Device', 'ControlType' => 'Control Type', 'Controllable' => 'Controllable', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Cycle', 'CycleWatch' => 'Cykl podgldu', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -240,12 +245,15 @@ $SLANG = array( 'DefaultRate' => 'Default Rate', 'DefaultScale' => 'Default Scale', 'DefaultView' => 'Default View', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => 'Usu', 'DeleteAndNext' => 'Usu & nastpny', 'DeleteAndPrev' => 'Usu & poprzedni', 'DeleteSavedFilter' => 'Usu zapisany filtr', 'Description' => 'Opis', 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Device', // Added - 2009-02-08 'DeviceChannel' => 'Numer wejcia w urzdzeniu', 'DeviceFormat' => 'System TV', @@ -257,6 +265,7 @@ $SLANG = array( 'Disk' => 'Dysk', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => 'Please Donate', 'DonateAlready' => 'No, I\'ve already donated', 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', @@ -266,7 +275,6 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Czas trwania', @@ -309,10 +317,12 @@ $SLANG = array( 'Feed' => 'Dostarcz', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'File', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Archiwizuj wszystkie pasujce', 'FilterDeleteEvents' => 'Usuwaj wszystkie pasujce', 'FilterEmailEvents' => 'Wysyaj poczt wszystkie pasujce', 'FilterExecuteEvents' => 'Wywouj komend na wszystkie pasujce', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Wywietlaj komunikat na wszystkie pasujce', 'FilterPx' => 'Filtr Px', 'FilterUnset' => 'You must specify a filter width and height', @@ -322,12 +332,12 @@ $SLANG = array( 'First' => 'Pierwszy', 'FlippedHori' => 'Flipped Horizontally', 'FlippedVert' => 'Flipped Vertically', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Focus', 'ForceAlarm' => 'Wymu alarm', 'Format' => 'Format', @@ -335,7 +345,6 @@ $SLANG = array( 'FrameId' => 'Nr ramki', 'FrameRate' => 'Tempo ramek', 'FrameSkip' => 'Pomi ramk', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'Ramek', 'Func' => 'Funkcja', 'Function' => 'Funkcja', @@ -462,6 +471,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min Zoom Speed', 'MinZoomStep' => 'Min Zoom Step', 'Misc' => 'Inne', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => 'Monitor', 'MonitorIds' => 'Numery monitorw', 'MonitorPreset' => 'Monitor Preset', @@ -472,12 +482,13 @@ $SLANG = array( 'Montage' => 'Monta', 'Month' => 'Miesic', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Move', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => 'musi by wiksze lub rwne od', 'MustBeLe' => 'musi by mniejsze lub rwne od', 'MustConfirmPassword' => 'Musisz potwierdzi haso', @@ -506,6 +517,9 @@ $SLANG = array( 'NumPresets' => 'Num Presets', 'Off' => 'Off', 'On' => 'On', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => 'rwny', 'OpGt' => 'wiksze od', 'OpGtEq' => 'wiksze lub rwne od', @@ -552,6 +566,9 @@ $SLANG = array( 'Presets' => 'Presets', 'Prev' => 'Poprzedni', 'Probe' => 'Probe', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => 'Tempo', 'Real' => 'Rzeczywiste', @@ -639,6 +656,7 @@ $SLANG = array( 'Submit' => 'Submit', 'System' => 'System', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => 'Thumbnail', 'Tilt' => 'Tilt', @@ -673,13 +691,16 @@ $SLANG = array( 'UpdateNotNecessary' => 'Nie jest wymagane uaktualnienie', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Uyj filtru', 'UseFilterExprsPost' => ' wyraenie filtru', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Uyj ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => 'Uytkownik', 'Username' => 'Nazwa uytkownika', 'Users' => 'Uytkownicy', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'Warto', 'Version' => 'Wersja', 'VersionIgnore' => 'Zignoruj t wersj', @@ -719,6 +740,7 @@ $SLANG = array( 'Zone' => 'Strefa', 'ZoneAlarmColour' => 'Kolor alarmu (Red/Green/Blue)', 'ZoneArea' => 'Zone Area', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Filter Width/Height (pixels)', 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', @@ -727,7 +749,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => 'Strefy', 'Zoom' => 'Zoom', 'ZoomIn' => 'Zoom In', diff --git a/web/lang/pt_br.php b/web/lang/pt_br.php index 91830ebf4..d079db359 100644 --- a/web/lang/pt_br.php +++ b/web/lang/pt_br.php @@ -28,6 +28,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Alarm Maximum FPS', 'AlarmPx' => 'Pixel de Alarme', 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'Alerta', 'All' => 'Tudo', 'Apply' => 'Aplicar', @@ -72,13 +73,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', 'BadFormat' => 'Format must be set to an integer of zero or more', 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'Height must be set to a valid value', 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'Nomes devem ser caracteres alfanumricos mais hfen e underscore', 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 'BadPath' => 'Path must be set to a valid value', @@ -98,7 +99,9 @@ $SLANG = array( 'BlobSizes' => 'Tam Blob', 'Blobs' => 'Blobs', 'Brightness' => 'Brilho', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'Buffers', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Can Auto Focus', 'CanAutoGain' => 'Can Auto Gain', 'CanAutoIris' => 'Can Auto Iris', @@ -142,6 +145,7 @@ $SLANG = array( 'CaptureHeight' => 'Altura da Captura', 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 'CapturePalette' => 'Paleta de Captura', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => 'Largura de Captura', 'Cause' => 'Cause', 'CheckMethod' => 'Metodo marcar por alarme', @@ -172,6 +176,7 @@ $SLANG = array( 'ControlDevice' => 'Control Device', 'ControlType' => 'Control Type', 'Controllable' => 'Controllable', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Cycle', 'CycleWatch' => 'Ciclo Monitor', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -180,12 +185,15 @@ $SLANG = array( 'DefaultRate' => 'Default Rate', 'DefaultScale' => 'Default Scale', 'DefaultView' => 'Default View', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => 'Deletar', 'DeleteAndNext' => 'Deletar & Prx', 'DeleteAndPrev' => 'Deletar & Ant', 'DeleteSavedFilter' => 'Deletar Filtros Salvos', 'Description' => 'Descrio', 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Device', // Added - 2009-02-08 'DeviceChannel' => 'Canal do Dispositivo', 'DeviceFormat' => 'Formato do Dispos.', @@ -197,6 +205,7 @@ $SLANG = array( 'Disk' => 'Disco', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => 'Please Donate', 'DonateAlready' => 'No, I\'ve already donated', 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', @@ -206,7 +215,6 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Durao', @@ -249,10 +257,12 @@ $SLANG = array( 'Feed' => 'Alimentar', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'File', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Arquivar resultados', 'FilterDeleteEvents' => 'Apagar resultados', 'FilterEmailEvents' => 'Enviar e-mail com detalhes dos resultados', 'FilterExecuteEvents' => 'Executar comando p/ resultados', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Enviar Mensagem dos resultados', 'FilterPx' => 'Px de Filtro', 'FilterUnset' => 'You must specify a filter width and height', @@ -262,12 +272,12 @@ $SLANG = array( 'First' => 'Primeiro', 'FlippedHori' => 'Flipped Horizontally', 'FlippedVert' => 'Flipped Vertically', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Focus', 'ForceAlarm' => 'Forar Alarme', 'Format' => 'Format', @@ -275,7 +285,6 @@ $SLANG = array( 'FrameId' => 'Id de Imagem', 'FrameRate' => 'Velocidade de Imagem', 'FrameSkip' => 'Salto de Imagem', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'Imagens', 'Func' => 'Func', 'Function' => 'Funo', @@ -402,6 +411,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min Zoom Speed', 'MinZoomStep' => 'Min Zoom Step', 'Misc' => 'Misc', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => 'Monitor', 'MonitorIds' => 'Ids de Monitor', 'MonitorPreset' => 'Monitor Preset', @@ -412,12 +422,13 @@ $SLANG = array( 'Montage' => 'Montagem', 'Month' => 'Ms', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Move', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => 'deve ser maior ou igual a', 'MustBeLe' => 'deve ser menor ou igual a', 'MustConfirmPassword' => 'Voce deve Confirmar a senha', @@ -446,6 +457,9 @@ $SLANG = array( 'NumPresets' => 'Num Presets', 'Off' => 'Off', 'On' => 'On', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => 'igual a', 'OpGt' => 'maior que', 'OpGtEq' => 'maior que ou igual a', @@ -492,6 +506,9 @@ $SLANG = array( 'Presets' => 'Presets', 'Prev' => 'Ant.', 'Probe' => 'Probe', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => 'Vel.', 'Real' => 'Real', @@ -579,6 +596,7 @@ $SLANG = array( 'Submit' => 'Submit', 'System' => 'Sistema', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => 'Thumbnail', 'Tilt' => 'Tilt', @@ -613,13 +631,16 @@ $SLANG = array( 'UpdateNotNecessary' => 'No necessrio update.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Use Filtro', 'UseFilterExprsPost' => ' expresses de filtragem', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Use ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => 'Usurio', 'Username' => 'Nome de Usurio', 'Users' => 'Usurios', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'Valor', 'Version' => 'Verso', 'VersionIgnore' => 'Ignorar esta verso', @@ -659,6 +680,7 @@ $SLANG = array( 'Zone' => 'Zona', 'ZoneAlarmColour' => 'Cor de Alarme (Red/Green/Blue)', 'ZoneArea' => 'Zone Area', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Filter Width/Height (pixels)', 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', @@ -667,7 +689,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => 'Zonas', 'Zoom' => 'Zoom', 'ZoomIn' => 'Zoom In', diff --git a/web/lang/ro_ro.php b/web/lang/ro_ro.php index 74da43406..1b1bcb6dc 100644 --- a/web/lang/ro_ro.php +++ b/web/lang/ro_ro.php @@ -59,6 +59,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Alarm Maximum FPS', 'AlarmPx' => 'Alarm Px', 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'Alert', 'All' => 'Toate', 'Apply' => 'Accept', @@ -103,13 +104,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', 'BadFormat' => 'Format must be set to an integer of zero or more', 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'Height must be set to a valid value', 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'Denumirea poate contine doar caractere alfanumerice, cratima si underline.', 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 'BadPath' => 'Path must be set to a valid value', @@ -129,7 +130,9 @@ $SLANG = array( 'BlobSizes' => 'Blob Sizes', 'Blobs' => 'Blobs', 'Brightness' => 'Luminozitate', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'Zonă tampon', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Focalizare automată', 'CanAutoGain' => 'Can Auto Gain', 'CanAutoIris' => 'Can Auto Iris', @@ -173,6 +176,7 @@ $SLANG = array( 'CaptureHeight' => 'Înălţime captură', 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 'CapturePalette' => 'Paletă captură', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => 'Lăţime captură', 'Cause' => 'Cauza', 'CheckMethod' => 'Alarm Check Method', @@ -203,6 +207,7 @@ $SLANG = array( 'ControlDevice' => 'Dispozitiv control', 'ControlType' => 'Tip control', 'Controllable' => 'Controlabil', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Ciclu', 'CycleWatch' => 'Vizual. ciclu', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -211,12 +216,15 @@ $SLANG = array( 'DefaultRate' => 'Default Rate', 'DefaultScale' => 'Default Scale', 'DefaultView' => 'Default View', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => 'Şterge', 'DeleteAndNext' => 'Şterge & Următor', 'DeleteAndPrev' => 'Şterge & Precedent', 'DeleteSavedFilter' => 'Şterge filtrul salvat', 'Description' => 'Descriere', 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Device', // Added - 2009-02-08 'DeviceChannel' => 'Canal dispozitiv', 'DeviceFormat' => 'Format dispozitiv', @@ -228,6 +236,7 @@ $SLANG = array( 'Disk' => 'Disc', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => 'Please Donate', 'DonateAlready' => 'No, I\'ve already donated', 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', @@ -237,7 +246,6 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Durata', @@ -280,10 +288,12 @@ $SLANG = array( 'Feed' => 'Feed', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'File', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Arhivează toate rezultatele', 'FilterDeleteEvents' => 'Şterge toate rezultatele', 'FilterEmailEvents' => 'Trimite email ale tuturor rezultatelor', 'FilterExecuteEvents' => 'Execută comanda pentru toate rezultatele', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Trimite mesaj pentru toate rezultatele', 'FilterPx' => 'Filter Px', 'FilterUnset' => 'You must specify a filter width and height', @@ -293,12 +303,12 @@ $SLANG = array( 'First' => 'First', 'FlippedHori' => 'Flipped Horizontally', 'FlippedVert' => 'Flipped Vertically', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Focalizare', 'ForceAlarm' => 'Alarmă forţată', 'Format' => 'Format', @@ -306,7 +316,6 @@ $SLANG = array( 'FrameId' => 'Nr. cadru', 'FrameRate' => 'Frecv. cadre', 'FrameSkip' => 'Omite cadre', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'Cadre', 'Func' => 'Func', 'Function' => 'Funcţie', @@ -433,6 +442,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Viteză zoom min', 'MinZoomStep' => 'Pas zoom min', 'Misc' => 'Divers', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => 'Monitor', 'MonitorIds' => 'Nr. Monitor', 'MonitorPreset' => 'Monitor Preset', @@ -443,12 +453,13 @@ $SLANG = array( 'Montage' => 'Montage', 'Month' => 'Luna', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Mişcare', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => 'trebuie sa fie mai mare sau egal cu', 'MustBeLe' => 'trebuie sa fie mai mic sau egal cu', 'MustConfirmPassword' => 'Trebuie sa confirmati parola', @@ -477,6 +488,9 @@ $SLANG = array( 'NumPresets' => 'Num Presets', 'Off' => 'Off', 'On' => 'On', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => 'egal cu', 'OpGt' => 'mai mare ca', 'OpGtEq' => 'mai mare sau egal cu', @@ -523,6 +537,9 @@ $SLANG = array( 'Presets' => 'Presetări', 'Prev' => 'Prev', 'Probe' => 'Probe', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => 'Rate', 'Real' => 'Real', @@ -610,6 +627,7 @@ $SLANG = array( 'Submit' => 'Trimite', 'System' => 'Sistem', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => 'Miniatură', 'Tilt' => 'Înclinare', @@ -644,13 +662,16 @@ $SLANG = array( 'UpdateNotNecessary' => 'Actulizarea nu este necesară.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Foloseşte filtru', 'UseFilterExprsPost' => ' expresii de filtrare ', 'UseFilterExprsPre' => 'Foloseşte ', + 'UsedPlugins' => 'Used Plugins', 'User' => 'Utilizator', 'Username' => 'Nume', 'Users' => 'Utilizatori', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'Valoare', 'Version' => 'Versiune', 'VersionIgnore' => 'Ignoră această versiune', @@ -690,6 +711,7 @@ $SLANG = array( 'Zone' => 'Zone', 'ZoneAlarmColour' => 'Alarm Colour (Red/Green/Blue)', 'ZoneArea' => 'Zone Area', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Filter Width/Height (pixels)', 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', @@ -698,7 +720,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => 'Zona', 'Zoom' => 'Zoom', 'ZoomIn' => 'Zoom In', @@ -1144,14 +1165,6 @@ $OLANG = array( 'Prompt' => "Opţiuni adiţionale pentru ffmpeg", 'Help' => "Ffmpeg suportă multe opţiuni pentru controlul calităţii secvenţei video produse. Această opţiune vă permite să specificaţi propriile opţiuni. Citiţi documentaţia ffmpeg pentru mai multe detalii." ), - 'OPT_NETPBM' => array( - 'Prompt' => "Sunt instalate utilitarele Netpbm (opţional)", - 'Help' => "În cazul laţimii de bandă redusă ZoneMinder va miniaturiza imaginile înainte de a le direcţiona spre browser pentru a reduce traficul. Pentru aceasta foloseşte pachetul Netpbm; această opţiune ar trebuie să direcţioneze ZoneMinder spre binarele pachetului. Dacă nu aveţi pachetul Netpbm instalat imaginilor vor fi întotdeauna trimise la scară reală şi redimensionate în browser." - ), - 'PATH_NETPBM' => array( - 'Prompt' => "Cale la utilitarele Netpbm (opţional)", - 'Help' => "Calea la utilitarele Netpbm (opţional)" - ), 'OPT_TRIGGERS' => array( 'Prompt' => "Interacţionează cu declanşatoare externe via socket sau fişierele dispozitivelor", 'Help' => "ZoneMinder poate interacţiona cu sisteme externe care acţionează sau revocă o alarmă. Acest lucru este realizat prin intermediului script-ului zmtrigger.pl. Această opţiune indică folosirea declanşatoarelor externe, majoritatea vor alege nu aici." diff --git a/web/lang/ru_ru.php b/web/lang/ru_ru.php index 0c4bfbf3b..7c98e4f48 100644 --- a/web/lang/ru_ru.php +++ b/web/lang/ru_ru.php @@ -88,6 +88,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Alarm Maximum FPS', 'AlarmPx' => ' .', 'AlarmRGBUnset' => 'You must set an alarm RGB colour', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => '', 'All' => '', 'Apply' => '', @@ -132,13 +133,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'FPS report interval buffer count must be an integer of 0 or more', 'BadFormat' => 'Format must be set to an integer of zero or more', 'BadFrameSkip' => 'Frame skip count must be an integer of zero or more', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'Height must be set to a valid value', 'BadHost' => 'Host must be set to a valid ip address or hostname, do not include http://', 'BadImageBufferCount' => 'Image buffer size must be an integer of 10 or more', 'BadLabelX' => 'Label X co-ordinate must be set to an integer of zero or more', 'BadLabelY' => 'Label Y co-ordinate must be set to an integer of zero or more', 'BadMaxFPS' => 'Maximum FPS must be a positive integer or floating point value', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'Names may only contain alphanumeric characters plus hyphen and underscore', 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 'BadPath' => 'Path must be set to a valid value', @@ -158,7 +159,9 @@ $SLANG = array( 'BlobSizes' => ' ', 'Blobs' => '- ', 'Brightness' => '', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => '', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Can Auto Focus', 'CanAutoGain' => 'Can Auto Gain', 'CanAutoIris' => 'Can Auto Iris', @@ -202,6 +205,7 @@ $SLANG = array( 'CaptureHeight' => ' Y', 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 'CapturePalette' => ' ', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => ' X', 'Cause' => 'Cause', 'CheckMethod' => ' ', @@ -232,6 +236,7 @@ $SLANG = array( 'ControlDevice' => 'Control Device', 'ControlType' => 'Control Type', 'Controllable' => 'Controllable', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Cycle', 'CycleWatch' => ' ', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -240,12 +245,15 @@ $SLANG = array( 'DefaultRate' => 'Default Rate', 'DefaultScale' => 'Default Scale', 'DefaultView' => 'Default View', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => '', 'DeleteAndNext' => ' & .', 'DeleteAndPrev' => ' & .', 'DeleteSavedFilter' => ' ', 'Description' => '', 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Device', // Added - 2009-02-08 'DeviceChannel' => '', 'DeviceFormat' => '', @@ -257,6 +265,7 @@ $SLANG = array( 'Disk' => 'Disk', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => 'Please Donate', 'DonateAlready' => 'No, I\'ve already donated', 'DonateEnticement' => 'You\'ve been running ZoneMinder for a while now and hopefully are finding it a useful addition to your home or workplace security. Although ZoneMinder is, and will remain, free and open source, it costs money to develop and support. If you would like to help support future development and new features then please consider donating. Donating is, of course, optional but very much appreciated and you can donate as much or as little as you like.

If you would like to donate please select the option below or go to http://www.zoneminder.com/donate.html in your browser.

Thank you for using ZoneMinder and don\'t forget to visit the forums on ZoneMinder.com for support or suggestions about how to make your ZoneMinder experience even better.', @@ -266,7 +275,6 @@ $SLANG = array( 'DonateRemindNever' => 'No, I don\'t want to donate, never remind', 'DonateRemindWeek' => 'Not yet, remind again in 1 week', 'DonateYes' => 'Yes, I\'d like to donate now', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Download', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => '', @@ -309,10 +317,12 @@ $SLANG = array( 'Feed' => 'Feed', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'File', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Archive all matches', 'FilterDeleteEvents' => 'Delete all matches', 'FilterEmailEvents' => 'Email details of all matches', 'FilterExecuteEvents' => 'Execute command on all matches', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Message details of all matches', 'FilterPx' => ' ', 'FilterUnset' => 'You must specify a filter width and height', @@ -322,12 +332,12 @@ $SLANG = array( 'First' => '', 'FlippedHori' => 'Flipped Horizontally', 'FlippedVert' => 'Flipped Vertically', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Focus', 'ForceAlarm' => ' ', 'Format' => 'Format', @@ -335,7 +345,6 @@ $SLANG = array( 'FrameId' => 'Id ', 'FrameRate' => '', 'FrameSkip' => ' ', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => '', 'Func' => '.', 'Function' => '', @@ -462,6 +471,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min Zoom Speed', 'MinZoomStep' => 'Min Zoom Step', 'Misc' => '', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => '', 'MonitorIds' => 'Id ', 'MonitorPreset' => 'Monitor Preset', @@ -472,12 +482,13 @@ $SLANG = array( 'Montage' => 'Montage', 'Month' => '', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Move', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => ' ', 'MustBeLe' => ' ', 'MustConfirmPassword' => ' ', @@ -506,6 +517,9 @@ $SLANG = array( 'NumPresets' => 'Num Presets', 'Off' => 'Off', 'On' => 'On', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => '', 'OpGt' => '', 'OpGtEq' => ' ', @@ -552,6 +566,9 @@ $SLANG = array( 'Presets' => 'Presets', 'Prev' => '.', 'Probe' => 'Probe', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protocol', 'Rate' => '', 'Real' => '', @@ -639,6 +656,7 @@ $SLANG = array( 'Submit' => 'Submit', 'System' => '', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => 'Thumbnail', 'Tilt' => 'Tilt', @@ -673,13 +691,16 @@ $SLANG = array( 'UpdateNotNecessary' => ' ', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => ' ', 'UseFilterExprsPost' => '   ', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => '. ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => '', 'Username' => ' ', 'Users' => '', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => '', 'Version' => '', 'VersionIgnore' => ' ', @@ -719,6 +740,7 @@ $SLANG = array( 'Zone' => '', 'ZoneAlarmColour' => ' (Red/Green/Blue)', 'ZoneArea' => 'Zone Area', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Filter Width/Height (pixels)', 'ZoneMinMaxAlarmArea' => 'Min/Max Alarmed Area', 'ZoneMinMaxBlobArea' => 'Min/Max Blob Area', @@ -727,7 +749,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max Pixel Threshold (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => '', 'Zoom' => 'Zoom', 'ZoomIn' => 'Zoom In', diff --git a/web/lang/se_se.php b/web/lang/se_se.php index 968804fed..ca4f05254 100644 --- a/web/lang/se_se.php +++ b/web/lang/se_se.php @@ -89,6 +89,7 @@ $SLANG = array( 'AlarmMaximumFPS' => 'Max. ramar/s fr larm', 'AlarmPx' => 'Larmpunkter', 'AlarmRGBUnset' => 'Du mste stta en frg fr RGB-larm', + 'AlarmRefImageBlendPct'=> 'Alarm Reference Image Blend %ge', // Added - 2015-04-18 'Alert' => 'Varning', 'All' => 'Alla', 'Apply' => 'Lgg till', @@ -133,13 +134,13 @@ $SLANG = array( 'BadFPSReportInterval' => 'Buffern fr ramintervallrapporten mste vara ett heltal p minst 0 eller hgre', 'BadFormat' => 'Formatet mste vara ett heltal, noll eller hgre', 'BadFrameSkip' => 'Vrdet fr ramverhopp mste vara ett heltal p 0 eller hgre', - 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadHeight' => 'Hjden mste sttas till ett giltigt vrde', 'BadHost' => 'Detta flt ska innehlla en giltig ip-adress eller vrdnamn, inkludera inte http://', 'BadImageBufferCount' => 'Bufferstorleken fr avbilden mste vara ett heltal p minst 10 eller hgre', 'BadLabelX' => 'Etiketten fr X koordinaten mste sttas till ett heltal, 0 eller hgre', 'BadLabelY' => 'Etiketten fr Y koordinaten mste sttas till ett heltal, 0 eller hgre', 'BadMaxFPS' => 'Max. ramar/s mste vara ett positivt heltal eller ett flyttal', + 'BadMotionFrameSkip' => 'Motion Frame skip count must be an integer of zero or more', 'BadNameChars' => 'Namn kan endast innehlla alfanumeriska tecken, bindestreck och understreck', 'BadPalette' => 'Palette must be set to a valid value', // Added - 2009-03-31 'BadPath' => 'Skvgen mste innehlla ett giltigt vrde', @@ -159,7 +160,9 @@ $SLANG = array( 'BlobSizes' => 'Blobstorlek', 'Blobs' => 'Blobbar', 'Brightness' => 'Ljusstyrka', + 'Buffer' => 'Buffer', // Added - 2015-04-18 'Buffers' => 'Buffrar', + 'CSSDescription' => 'Change the default css for this computer', // Added - 2015-04-18 'CanAutoFocus' => 'Har autofokus', 'CanAutoGain' => 'Har autoniv', 'CanAutoIris' => 'Har autoiris', @@ -203,6 +206,7 @@ $SLANG = array( 'CaptureHeight' => 'Fngsthjd', 'CaptureMethod' => 'Capture Method', // Added - 2009-02-08 'CapturePalette' => 'Fngstpalett', + 'CaptureResolution' => 'Capture Resolution', // Added - 2015-04-18 'CaptureWidth' => 'Fngstbredd', 'Cause' => 'Orsak', 'CheckMethod' => 'Larmkontrollmetod', @@ -233,6 +237,7 @@ $SLANG = array( 'ControlDevice' => 'Kontrollenhet', 'ControlType' => 'Kontrolltyp', 'Controllable' => 'Kontrollerbar', + 'Current' => 'Current', // Added - 2015-04-18 'Cycle' => 'Period', 'CycleWatch' => 'Cycle Watch', 'DateTime' => 'Date/Time', // Added - 2011-06-16 @@ -241,12 +246,15 @@ $SLANG = array( 'DefaultRate' => 'Standardhastighet', 'DefaultScale' => 'Standardskala', 'DefaultView' => 'Standardvy', + 'Deinterlacing' => 'Deinterlacing', // Added - 2015-04-18 + 'Delay' => 'Delay', // Added - 2015-04-18 'Delete' => 'Radera', 'DeleteAndNext' => 'Radera & Nsta', 'DeleteAndPrev' => 'Radera & Freg.', 'DeleteSavedFilter' => 'Radera sparade filter', 'Description' => 'Beskrivning', 'DetectedCameras' => 'Detected Cameras', // Added - 2009-03-31 + 'DetectedProfiles' => 'Detected Profiles', // Added - 2015-04-18 'Device' => 'Device', // Added - 2009-02-08 'DeviceChannel' => 'Enhetskanal', 'DeviceFormat' => 'Enhetsformat', @@ -258,6 +266,7 @@ $SLANG = array( 'Disk' => 'Disk', 'Display' => 'Display', // Added - 2011-01-30 'Displaying' => 'Displaying', // Added - 2011-06-16 + 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Donate' => 'Var vnlig och donera', 'DonateAlready' => 'Nej, Jag har redan donerat', 'DonateEnticement' => 'Du har krt ZoneMinder ett tag nu och frhoppningsvis har du sett att det fungerar bra hemma eller p ditt fretag. ven om ZoneMinder r, och kommer att vara, fri programvara och ppen kallkod, s kostar det pengar att utveckla och underhlla. Om du vill hjlpa till med framtida utveckling och nya funktioner s var vanlig och bidrag med en slant. Bidragen r naturligtvis en option men mycket uppskattade och du kan bidra med precis hur mycket du vill.

Om du vill ge ett bidrag vljer du nedan eller surfar till http://www.zoneminder.com/donate.html.

Tack fr att du anvnder ZoneMinder, glm inte att beska forumen p ZoneMinder.com fr support och frslag om hur du fr din ZoneMinder att fungera lite bttre.', @@ -267,7 +276,6 @@ $SLANG = array( 'DonateRemindNever' => 'Nej, Jag vill inte donera, pminn mig inte mer', 'DonateRemindWeek' => 'Inte n, pminn om 1 vecka', 'DonateYes' => 'Ja, jag vill grna donera nu', - 'DoNativeMotionDetection'=> 'Do Native Motion Detection', 'Download' => 'Ladda ner', 'DuplicateMonitorName' => 'Duplicate Monitor Name', // Added - 2009-03-31 'Duration' => 'Lngd', @@ -310,10 +318,12 @@ $SLANG = array( 'Feed' => 'Matning', 'Ffmpeg' => 'Ffmpeg', // Added - 2009-02-08 'File' => 'Fil', + 'Filter' => 'Filter', // Added - 2015-04-18 'FilterArchiveEvents' => 'Arkivera alla trffar', 'FilterDeleteEvents' => 'Radera alla trffar', 'FilterEmailEvents' => 'Skicka e-post med detaljer om alla trffar', 'FilterExecuteEvents' => 'Utfr kommando p alla trffar', + 'FilterLog' => 'Filter log', // Added - 2015-04-18 'FilterMessageEvents' => 'Meddela detaljer om alla trffar', 'FilterPx' => 'Filter Px', 'FilterUnset' => 'Du mste specificera filtrets bredd och hjd', @@ -323,12 +333,12 @@ $SLANG = array( 'First' => 'Frst', 'FlippedHori' => 'Vnd horisontellt', 'FlippedVert' => 'Vnd vertikalt', - 'FnNone' => 'None', // Added 2013.08.16. - 'FnMonitor' => 'Monitor', // Added 2013.08.16. - 'FnModect' => 'Modect', // Added 2013.08.16. - 'FnRecord' => 'Record', // Added 2013.08.16. 'FnMocord' => 'Mocord', // Added 2013.08.16. + 'FnModect' => 'Modect', // Added 2013.08.16. + 'FnMonitor' => 'Monitor', // Added 2013.08.16. 'FnNodect' => 'Nodect', // Added 2013.08.16. + 'FnNone' => 'None', // Added 2013.08.16. + 'FnRecord' => 'Record', // Added 2013.08.16. 'Focus' => 'Fokus', 'ForceAlarm' => 'Tvinga larm', 'Format' => 'Format', @@ -336,7 +346,6 @@ $SLANG = array( 'FrameId' => 'Ram id', 'FrameRate' => 'Ram hastighet', 'FrameSkip' => 'Hoppa ver ram', - 'MotionFrameSkip' => 'Motion Frame Skip', 'Frames' => 'Ramar', 'Func' => 'Funk', 'Function' => 'Funktion', @@ -463,6 +472,7 @@ $SLANG = array( 'MinZoomSpeed' => 'Min zoomhastighet', 'MinZoomStep' => 'Min zoomsteg', 'Misc' => 'vrigt', + 'Mode' => 'Mode', // Added - 2015-04-18 'Monitor' => 'Bevakning', 'MonitorIds' => 'Bevakningsnr', 'MonitorPreset' => 'Frinstlld bevakning', @@ -473,12 +483,13 @@ $SLANG = array( 'Montage' => 'Montera', 'Month' => 'Mnad', 'More' => 'More', // Added - 2011-06-16 + 'MotionFrameSkip' => 'Motion Frame Skip', 'Move' => 'Flytta', - 'MtgDefault' => 'Default', // Added 2013.08.15. 'Mtg2widgrd' => '2-wide grid', // Added 2013.08.15. 'Mtg3widgrd' => '3-wide grid', // Added 2013.08.15. - 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. 'Mtg3widgrx' => '3-wide grid, scaled, enlarge on alarm', // Added 2013.08.15. + 'Mtg4widgrd' => '4-wide grid', // Added 2013.08.15. + 'MtgDefault' => 'Default', // Added 2013.08.15. 'MustBeGe' => 'mste vara strre n eller lika med', 'MustBeLe' => 'mste vara mindre n eller lika med', 'MustConfirmPassword' => 'Du mste bekrfta lsenordet', @@ -507,6 +518,9 @@ $SLANG = array( 'NumPresets' => 'Antal frinstllningar', 'Off' => 'Av', 'On' => 'P', + 'OnvifCredentialsIntro'=> 'Please supply user name and password for the selected camera.
If no user has been created for the camera then the user given here will be created with the given password.

', // Added - 2015-04-18 + 'OnvifProbe' => 'ONVIF', // Added - 2015-04-18 + 'OnvifProbeIntro' => 'The list below shows detected ONVIF cameras and whether they are already being used or available for selection.

Select the desired entry from the list below.

Please note that not all cameras may be detected and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 'OpEq' => 'lika med', 'OpGt' => 'strre n', 'OpGtEq' => 'strre n eller lika med', @@ -553,6 +567,9 @@ $SLANG = array( 'Presets' => 'Frinstllningar', 'Prev' => 'Freg.', 'Probe' => 'Probe', // Added - 2009-03-31 + 'ProfileProbe' => 'Stream Probe', // Added - 2015-04-18 + 'ProfileProbeIntro' => 'The list below shows the existing stream profiles of the selected camera .

Select the desired entry from the list below.

Please note that ZoneMinder cannot configure additional profiles and that choosing a camera here may overwrite any values you already have configured for the current monitor.

', // Added - 2015-04-18 + 'Progress' => 'Progress', // Added - 2015-04-18 'Protocol' => 'Protokol', 'Rate' => 'Hastighet', 'Real' => 'Verklig', @@ -640,6 +657,7 @@ $SLANG = array( 'Submit' => 'Skicka', 'System' => 'System', 'SystemLog' => 'System Log', // Added - 2011-06-16 + 'TargetColorspace' => 'Target colorspace', // Added - 2015-04-18 'Tele' => 'Tele', 'Thumbnail' => 'Miniatyrer', 'Tilt' => 'Tilt', @@ -674,13 +692,16 @@ $SLANG = array( 'UpdateNotNecessary' => 'Ingen uppdatering behvs.', 'Updated' => 'Updated', // Added - 2011-06-16 'Upload' => 'Upload', // Added - 2011-08-23 - 'UsedPlugins' => 'Used Plugins', 'UseFilter' => 'Anvnd filter', 'UseFilterExprsPost' => ' filter expressions', // This is used at the end of the phrase 'use N filter expressions' 'UseFilterExprsPre' => 'Anvnd ', // This is used at the beginning of the phrase 'use N filter expressions' + 'UsedPlugins' => 'Used Plugins', 'User' => 'Anvndare', 'Username' => 'Anvndarnamn', 'Users' => 'Anvndare', + 'V4L' => 'V4L', // Added - 2015-04-18 + 'V4LCapturesPerFrame' => 'Captures Per Frame', // Added - 2015-04-18 + 'V4LMultiBuffer' => 'Multi Buffering', // Added - 2015-04-18 'Value' => 'Vrde', 'Version' => 'Version', 'VersionIgnore' => 'Ignorera denna version', @@ -720,6 +741,7 @@ $SLANG = array( 'Zone' => 'Zon', 'ZoneAlarmColour' => 'Larmfrg (Rd/Grn/Bl)', 'ZoneArea' => 'Zonarea', + 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'ZoneFilterSize' => 'Filterbredd/hjd (pixlar)', 'ZoneMinMaxAlarmArea' => 'Min/Max larmarea', 'ZoneMinMaxBlobArea' => 'Min/Max blobbarea', @@ -728,7 +750,6 @@ $SLANG = array( 'ZoneMinMaxPixelThres' => 'Min/Max pixel Threshold (0-255)', 'ZoneMinderLog' => 'ZoneMinder Log', // Added - 2011-06-17 'ZoneOverloadFrames' => 'Overload Frame Ignore Count', - 'ZoneExtendAlarmFrames' => 'Extend Alarm Frame Count', 'Zones' => 'Zoner', 'Zoom' => 'Zoom', 'ZoomIn' => 'Zooma in', diff --git a/web/skins/classic/css/classic/control.css b/web/skins/classic/css/classic/control.css index 685258614..4a7f05a5b 100644 --- a/web/skins/classic/css/classic/control.css +++ b/web/skins/classic/css/classic/control.css @@ -46,11 +46,11 @@ */ .ptzControls .controlsPanel .upBtn { - background: url("../graphics/arrow-l-u.gif") no-repeat 0 0; + background: url("../../graphics/arrow-l-u.gif") no-repeat 0 0; } .ptzControls .controlsPanel .downBtn { - background: url("../graphics/arrow-l-d.gif") no-repeat 0 0; + background: url("../../graphics/arrow-l-d.gif") no-repeat 0 0; } .ptzControls .controlsPanel .focusControls { diff --git a/web/skins/classic/css/flat/control.css b/web/skins/classic/css/flat/control.css index 685258614..4a7f05a5b 100644 --- a/web/skins/classic/css/flat/control.css +++ b/web/skins/classic/css/flat/control.css @@ -46,11 +46,11 @@ */ .ptzControls .controlsPanel .upBtn { - background: url("../graphics/arrow-l-u.gif") no-repeat 0 0; + background: url("../../graphics/arrow-l-u.gif") no-repeat 0 0; } .ptzControls .controlsPanel .downBtn { - background: url("../graphics/arrow-l-d.gif") no-repeat 0 0; + background: url("../../graphics/arrow-l-d.gif") no-repeat 0 0; } .ptzControls .controlsPanel .focusControls { diff --git a/web/skins/classic/css/flat/views/control.css b/web/skins/classic/css/flat/views/control.css index e881ba70b..5e10dcfd9 100644 --- a/web/skins/classic/css/flat/views/control.css +++ b/web/skins/classic/css/flat/views/control.css @@ -1 +1 @@ -@import url(../css/control.css); +@import url(../control.css); diff --git a/web/skins/classic/css/flat/views/watch.css b/web/skins/classic/css/flat/views/watch.css index 41b8c03b4..5fec8ec82 100644 --- a/web/skins/classic/css/flat/views/watch.css +++ b/web/skins/classic/css/flat/views/watch.css @@ -1,4 +1,4 @@ -@import url(../css/control.css); +@import url(../control.css); #menuBar { margin: 6px auto 4px; diff --git a/web/skins/classic/includes/config.php b/web/skins/classic/includes/config.php index 9599c6112..d586f90c8 100644 --- a/web/skins/classic/includes/config.php +++ b/web/skins/classic/includes/config.php @@ -25,7 +25,7 @@ $rates = array( "1000" => "10x", "400" => "4x", "200" => "2x", - "100" => $SLANG['Real'], + "100" => translate('Real'), "50" => "1/2x", "25" => "1/4x", ); @@ -35,7 +35,7 @@ $scales = array( "300" => "3x", "200" => "2x", "150" => "1.5x", - "100" => $SLANG['Actual'], + "100" => translate('Actual'), "75" => "3/4x", "50" => "1/2x", "33" => "1/3x", @@ -43,9 +43,9 @@ $scales = array( ); $bwArray = array( - "high" => $SLANG['High'], - "medium" => $SLANG['Medium'], - "low" => $SLANG['Low'] + "high" => translate('High'), + "medium" => translate('Medium'), + "low" => translate('Low') ); switch ( $_COOKIE['zmBandwidth'] ) diff --git a/web/skins/classic/includes/control_functions.php b/web/skins/classic/includes/control_functions.php index 6fc2cd72b..b09a53138 100644 --- a/web/skins/classic/includes/control_functions.php +++ b/web/skins/classic/includes/control_functions.php @@ -137,22 +137,20 @@ function getControlCommands( $monitor ) function controlFocus( $monitor, $cmds ) { - global $SLANG; - ob_start(); ?>
-
+
-
onclick="controlCmd('')">
+
onclick="controlCmd('')">
-
+
- - + + @@ -168,17 +166,17 @@ function controlZoom( $monitor, $cmds ) ob_start(); ?>
-
+
-
onclick="controlCmd('')">
+
onclick="controlCmd('')">
-
+
- - + + @@ -193,17 +191,17 @@ function controlIris( $monitor, $cmds ) ob_start(); ?>
-
+
-
onclick="controlCmd('')">
+
onclick="controlCmd('')">
-
+
- - + + @@ -219,17 +217,17 @@ function controlWhite( $monitor, $cmds ) ob_start(); ?>
-
+
-
onclick="controlCmd('')">
+
onclick="controlCmd('')">
-
+
- - + + @@ -245,7 +243,7 @@ function controlPanTilt( $monitor, $cmds ) ob_start(); ?>
-
+
- +
- + - + @@ -326,25 +324,25 @@ function controlPower( $monitor, $cmds ) ob_start(); ?>
-
+
- + - + - + diff --git a/web/skins/classic/includes/export_functions.php b/web/skins/classic/includes/export_functions.php index 42b03a8da..e604536e8 100644 --- a/web/skins/classic/includes/export_functions.php +++ b/web/skins/classic/includes/export_functions.php @@ -71,7 +71,7 @@ html ul.tabs li.active, html ul.tabs li.active a:hover { } --> - + + + )[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
'.$SLANG['DateTime'].''.$SLANG['Component'].''.$SLANG['Pid'].''.$SLANG['Level'].''.$SLANG['Message'].''.$SLANG['File'].''.$SLANG['Line'].'
'.translate('DateTime').''.translate('Component').''.translate('Pid').''.translate('Level').''.translate('Message').''.translate('File').''.translate('Line').'
a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/web/skins/classic/js/jquery-1.7.2.js b/web/skins/classic/js/jquery-1.7.2.js new file mode 100644 index 000000000..3774ff986 --- /dev/null +++ b/web/skins/classic/js/jquery-1.7.2.js @@ -0,0 +1,9404 @@ +/*! + * jQuery JavaScript Library v1.7.2 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Wed Mar 21 12:46:34 2012 -0700 + */ +(function( window, undefined ) { + +// Use the correct document accordingly with window argument (sandbox) +var document = window.document, + navigator = window.navigator, + location = window.location; +var jQuery = (function() { + +// Define a local copy of jQuery +var jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' + return new jQuery.fn.init( selector, context, rootjQuery ); + }, + + // Map over jQuery in case of overwrite + _jQuery = window.jQuery, + + // Map over the $ in case of overwrite + _$ = window.$, + + // A central reference to the root jQuery(document) + rootjQuery, + + // A simple way to check for HTML strings or ID strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + + // Check if a string has a non-whitespace character in it + rnotwhite = /\S/, + + // Used for trimming whitespace + trimLeft = /^\s+/, + trimRight = /\s+$/, + + // Match a standalone tag + rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/, + + // JSON RegExp + rvalidchars = /^[\],:{}\s]*$/, + rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, + rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, + rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, + + // Useragent RegExp + rwebkit = /(webkit)[ \/]([\w.]+)/, + ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/, + rmsie = /(msie) ([\w.]+)/, + rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, + + // Matches dashed string for camelizing + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return ( letter + "" ).toUpperCase(); + }, + + // Keep a UserAgent string for use with jQuery.browser + userAgent = navigator.userAgent, + + // For matching the engine and version of the browser + browserMatch, + + // The deferred used on DOM ready + readyList, + + // The ready event handler + DOMContentLoaded, + + // Save a reference to some core methods + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty, + push = Array.prototype.push, + slice = Array.prototype.slice, + trim = String.prototype.trim, + indexOf = Array.prototype.indexOf, + + // [[Class]] -> type pairs + class2type = {}; + +jQuery.fn = jQuery.prototype = { + constructor: jQuery, + init: function( selector, context, rootjQuery ) { + var match, elem, ret, doc; + + // Handle $(""), $(null), or $(undefined) + if ( !selector ) { + return this; + } + + // Handle $(DOMElement) + if ( selector.nodeType ) { + this.context = this[0] = selector; + this.length = 1; + return this; + } + + // The body element only exists once, optimize finding it + if ( selector === "body" && !context && document.body ) { + this.context = document; + this[0] = document.body; + this.selector = selector; + this.length = 1; + return this; + } + + // Handle HTML strings + if ( typeof selector === "string" ) { + // Are we dealing with HTML string or an ID? + if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = quickExpr.exec( selector ); + } + + // Verify a match, and that no context was specified for #id + if ( match && (match[1] || !context) ) { + + // HANDLE: $(html) -> $(array) + if ( match[1] ) { + context = context instanceof jQuery ? context[0] : context; + doc = ( context ? context.ownerDocument || context : document ); + + // If a single string is passed in and it's a single tag + // just do a createElement and skip the rest + ret = rsingleTag.exec( selector ); + + if ( ret ) { + if ( jQuery.isPlainObject( context ) ) { + selector = [ document.createElement( ret[1] ) ]; + jQuery.fn.attr.call( selector, context, true ); + + } else { + selector = [ doc.createElement( ret[1] ) ]; + } + + } else { + ret = jQuery.buildFragment( [ match[1] ], [ doc ] ); + selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes; + } + + return jQuery.merge( this, selector ); + + // HANDLE: $("#id") + } else { + elem = document.getElementById( match[2] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id !== match[2] ) { + return rootjQuery.find( selector ); + } + + // Otherwise, we inject the element directly into the jQuery object + this.length = 1; + this[0] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || rootjQuery ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return rootjQuery.ready( selector ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }, + + // Start with an empty selector + selector: "", + + // The current version of jQuery being used + jquery: "1.7.2", + + // The default length of a jQuery object is 0 + length: 0, + + // The number of elements contained in the matched element set + size: function() { + return this.length; + }, + + toArray: function() { + return slice.call( this, 0 ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num == null ? + + // Return a 'clean' array + this.toArray() : + + // Return just the object + ( num < 0 ? this[ this.length + num ] : this[ num ] ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems, name, selector ) { + // Build a new jQuery matched element set + var ret = this.constructor(); + + if ( jQuery.isArray( elems ) ) { + push.apply( ret, elems ); + + } else { + jQuery.merge( ret, elems ); + } + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + ret.context = this.context; + + if ( name === "find" ) { + ret.selector = this.selector + ( this.selector ? " " : "" ) + selector; + } else if ( name ) { + ret.selector = this.selector + "." + name + "(" + selector + ")"; + } + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + // (You can seed the arguments with an array of args, but this is + // only used internally.) + each: function( callback, args ) { + return jQuery.each( this, callback, args ); + }, + + ready: function( fn ) { + // Attach the listeners + jQuery.bindReady(); + + // Add the callback + readyList.add( fn ); + + return this; + }, + + eq: function( i ) { + i = +i; + return i === -1 ? + this.slice( i ) : + this.slice( i, i + 1 ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ), + "slice", slice.call(arguments).join(",") ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map(this, function( elem, i ) { + return callback.call( elem, i, elem ); + })); + }, + + end: function() { + return this.prevObject || this.constructor(null); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: [].sort, + splice: [].splice +}; + +// Give the init function the jQuery prototype for later instantiation +jQuery.fn.init.prototype = jQuery.fn; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray(src) ? src : []; + + } else { + clone = src && jQuery.isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend({ + noConflict: function( deep ) { + if ( window.$ === jQuery ) { + window.$ = _$; + } + + if ( deep && window.jQuery === jQuery ) { + window.jQuery = _jQuery; + } + + return jQuery; + }, + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + // Either a released hold or an DOMready/load event and not yet ready + if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( !document.body ) { + return setTimeout( jQuery.ready, 1 ); + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.fireWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.trigger ) { + jQuery( document ).trigger( "ready" ).off( "ready" ); + } + } + }, + + bindReady: function() { + if ( readyList ) { + return; + } + + readyList = jQuery.Callbacks( "once memory" ); + + // Catch cases where $(document).ready() is called after the + // browser event has already occurred. + if ( document.readyState === "complete" ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready + return setTimeout( jQuery.ready, 1 ); + } + + // Mozilla, Opera and webkit nightlies currently support this event + if ( document.addEventListener ) { + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", jQuery.ready, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload, + // maybe late but safe also for iframes + document.attachEvent( "onreadystatechange", DOMContentLoaded ); + + // A fallback to window.onload, that will always work + window.attachEvent( "onload", jQuery.ready ); + + // If IE and not a frame + // continually check to see if the document is ready + var toplevel = false; + + try { + toplevel = window.frameElement == null; + } catch(e) {} + + if ( document.documentElement.doScroll && toplevel ) { + doScrollCheck(); + } + } + }, + + // See test/unit/core.js for details concerning isFunction. + // Since version 1.3, DOM methods and functions like alert + // aren't supported. They return false on IE (#2968). + isFunction: function( obj ) { + return jQuery.type(obj) === "function"; + }, + + isArray: Array.isArray || function( obj ) { + return jQuery.type(obj) === "array"; + }, + + isWindow: function( obj ) { + return obj != null && obj == obj.window; + }, + + isNumeric: function( obj ) { + return !isNaN( parseFloat(obj) ) && isFinite( obj ); + }, + + type: function( obj ) { + return obj == null ? + String( obj ) : + class2type[ toString.call(obj) ] || "object"; + }, + + isPlainObject: function( obj ) { + // Must be an Object. + // Because of IE, we also have to check the presence of the constructor property. + // Make sure that DOM nodes and window objects don't pass through, as well + if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + for ( var name in obj ) { + return false; + } + return true; + }, + + error: function( msg ) { + throw new Error( msg ); + }, + + parseJSON: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + + // Make sure leading/trailing whitespace is removed (IE can't handle it) + data = jQuery.trim( data ); + + // Attempt to parse using the native JSON parser first + if ( window.JSON && window.JSON.parse ) { + return window.JSON.parse( data ); + } + + // Make sure the incoming data is actual JSON + // Logic borrowed from http://json.org/json2.js + if ( rvalidchars.test( data.replace( rvalidescape, "@" ) + .replace( rvalidtokens, "]" ) + .replace( rvalidbraces, "")) ) { + + return ( new Function( "return " + data ) )(); + + } + jQuery.error( "Invalid JSON: " + data ); + }, + + // Cross-browser xml parsing + parseXML: function( data ) { + if ( typeof data !== "string" || !data ) { + return null; + } + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; + } + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; + }, + + noop: function() {}, + + // Evaluates a script in a global context + // Workarounds based on findings by Jim Driscoll + // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context + globalEval: function( data ) { + if ( data && rnotwhite.test( data ) ) { + // We use execScript on Internet Explorer + // We use an anonymous function so that context is window + // rather than jQuery in Firefox + ( window.execScript || function( data ) { + window[ "eval" ].call( window, data ); + } )( data ); + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase(); + }, + + // args is for internal usage only + each: function( object, callback, args ) { + var name, i = 0, + length = object.length, + isObj = length === undefined || jQuery.isFunction( object ); + + if ( args ) { + if ( isObj ) { + for ( name in object ) { + if ( callback.apply( object[ name ], args ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.apply( object[ i++ ], args ) === false ) { + break; + } + } + } + + // A special, fast, case for the most common use of each + } else { + if ( isObj ) { + for ( name in object ) { + if ( callback.call( object[ name ], name, object[ name ] ) === false ) { + break; + } + } + } else { + for ( ; i < length; ) { + if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) { + break; + } + } + } + } + + return object; + }, + + // Use native String.trim function wherever possible + trim: trim ? + function( text ) { + return text == null ? + "" : + trim.call( text ); + } : + + // Otherwise use our own trimming functionality + function( text ) { + return text == null ? + "" : + text.toString().replace( trimLeft, "" ).replace( trimRight, "" ); + }, + + // results is for internal usage only + makeArray: function( array, results ) { + var ret = results || []; + + if ( array != null ) { + // The window, strings (and functions) also have 'length' + // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930 + var type = jQuery.type( array ); + + if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) { + push.call( ret, array ); + } else { + jQuery.merge( ret, array ); + } + } + + return ret; + }, + + inArray: function( elem, array, i ) { + var len; + + if ( array ) { + if ( indexOf ) { + return indexOf.call( array, elem, i ); + } + + len = array.length; + i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; + + for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays + if ( i in array && array[ i ] === elem ) { + return i; + } + } + } + + return -1; + }, + + merge: function( first, second ) { + var i = first.length, + j = 0; + + if ( typeof second.length === "number" ) { + for ( var l = second.length; j < l; j++ ) { + first[ i++ ] = second[ j ]; + } + + } else { + while ( second[j] !== undefined ) { + first[ i++ ] = second[ j++ ]; + } + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, inv ) { + var ret = [], retVal; + inv = !!inv; + + // Go through the array, only saving the items + // that pass the validator function + for ( var i = 0, length = elems.length; i < length; i++ ) { + retVal = !!callback( elems[ i ], i ); + if ( inv !== retVal ) { + ret.push( elems[ i ] ); + } + } + + return ret; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var value, key, ret = [], + i = 0, + length = elems.length, + // jquery objects are treated as arrays + isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ; + + // Go through the array, translating each of the items to their + if ( isArray ) { + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + + // Go through every key on the object, + } else { + for ( key in elems ) { + value = callback( elems[ key ], key, arg ); + + if ( value != null ) { + ret[ ret.length ] = value; + } + } + } + + // Flatten any nested arrays + return ret.concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + if ( typeof context === "string" ) { + var tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + var args = slice.call( arguments, 2 ), + proxy = function() { + return fn.apply( context, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; + + return proxy; + }, + + // Mutifunctional method to get and set values to a collection + // The value/s can optionally be executed if it's a function + access: function( elems, fn, key, value, chainable, emptyGet, pass ) { + var exec, + bulk = key == null, + i = 0, + length = elems.length; + + // Sets many values + if ( key && typeof key === "object" ) { + for ( i in key ) { + jQuery.access( elems, fn, i, key[i], 1, emptyGet, value ); + } + chainable = 1; + + // Sets one value + } else if ( value !== undefined ) { + // Optionally, function values get executed if exec is true + exec = pass === undefined && jQuery.isFunction( value ); + + if ( bulk ) { + // Bulk operations only iterate when executing function values + if ( exec ) { + exec = fn; + fn = function( elem, key, value ) { + return exec.call( jQuery( elem ), value ); + }; + + // Otherwise they run against the entire set + } else { + fn.call( elems, value ); + fn = null; + } + } + + if ( fn ) { + for (; i < length; i++ ) { + fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass ); + } + } + + chainable = 1; + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + length ? fn( elems[0], key ) : emptyGet; + }, + + now: function() { + return ( new Date() ).getTime(); + }, + + // Use of jQuery.browser is frowned upon. + // More details: http://docs.jquery.com/Utilities/jQuery.browser + uaMatch: function( ua ) { + ua = ua.toLowerCase(); + + var match = rwebkit.exec( ua ) || + ropera.exec( ua ) || + rmsie.exec( ua ) || + ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) || + []; + + return { browser: match[1] || "", version: match[2] || "0" }; + }, + + sub: function() { + function jQuerySub( selector, context ) { + return new jQuerySub.fn.init( selector, context ); + } + jQuery.extend( true, jQuerySub, this ); + jQuerySub.superclass = this; + jQuerySub.fn = jQuerySub.prototype = this(); + jQuerySub.fn.constructor = jQuerySub; + jQuerySub.sub = this.sub; + jQuerySub.fn.init = function init( selector, context ) { + if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) { + context = jQuerySub( context ); + } + + return jQuery.fn.init.call( this, selector, context, rootjQuerySub ); + }; + jQuerySub.fn.init.prototype = jQuerySub.fn; + var rootjQuerySub = jQuerySub(document); + return jQuerySub; + }, + + browser: {} +}); + +// Populate the class2type map +jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +}); + +browserMatch = jQuery.uaMatch( userAgent ); +if ( browserMatch.browser ) { + jQuery.browser[ browserMatch.browser ] = true; + jQuery.browser.version = browserMatch.version; +} + +// Deprecated, use jQuery.browser.webkit instead +if ( jQuery.browser.webkit ) { + jQuery.browser.safari = true; +} + +// IE doesn't match non-breaking spaces with \s +if ( rnotwhite.test( "\xA0" ) ) { + trimLeft = /^[\s\xA0]+/; + trimRight = /[\s\xA0]+$/; +} + +// All jQuery objects should point back to these +rootjQuery = jQuery(document); + +// Cleanup functions for the document ready method +if ( document.addEventListener ) { + DOMContentLoaded = function() { + document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false ); + jQuery.ready(); + }; + +} else if ( document.attachEvent ) { + DOMContentLoaded = function() { + // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", DOMContentLoaded ); + jQuery.ready(); + } + }; +} + +// The DOM ready check for Internet Explorer +function doScrollCheck() { + if ( jQuery.isReady ) { + return; + } + + try { + // If IE is used, use the trick by Diego Perini + // http://javascript.nwbox.com/IEContentLoaded/ + document.documentElement.doScroll("left"); + } catch(e) { + setTimeout( doScrollCheck, 1 ); + return; + } + + // and execute any waiting functions + jQuery.ready(); +} + +return jQuery; + +})(); + + +// String to Object flags format cache +var flagsCache = {}; + +// Convert String-formatted flags into Object-formatted ones and store in cache +function createFlags( flags ) { + var object = flagsCache[ flags ] = {}, + i, length; + flags = flags.split( /\s+/ ); + for ( i = 0, length = flags.length; i < length; i++ ) { + object[ flags[i] ] = true; + } + return object; +} + +/* + * Create a callback list using the following parameters: + * + * flags: an optional list of space-separated flags that will change how + * the callback list behaves + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible flags: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( flags ) { + + // Convert flags from String-formatted to Object-formatted + // (we check in cache first) + flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {}; + + var // Actual callback list + list = [], + // Stack of fire calls for repeatable lists + stack = [], + // Last fire value (for non-forgettable lists) + memory, + // Flag to know if list was already fired + fired, + // Flag to know if list is currently firing + firing, + // First callback to fire (used internally by add and fireWith) + firingStart, + // End of the loop when firing + firingLength, + // Index of currently firing callback (modified by remove if needed) + firingIndex, + // Add one or several callbacks to the list + add = function( args ) { + var i, + length, + elem, + type, + actual; + for ( i = 0, length = args.length; i < length; i++ ) { + elem = args[ i ]; + type = jQuery.type( elem ); + if ( type === "array" ) { + // Inspect recursively + add( elem ); + } else if ( type === "function" ) { + // Add if not in unique mode and callback is not in + if ( !flags.unique || !self.has( elem ) ) { + list.push( elem ); + } + } + } + }, + // Fire callbacks + fire = function( context, args ) { + args = args || []; + memory = !flags.memory || [ context, args ]; + fired = true; + firing = true; + firingIndex = firingStart || 0; + firingStart = 0; + firingLength = list.length; + for ( ; list && firingIndex < firingLength; firingIndex++ ) { + if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) { + memory = true; // Mark as halted + break; + } + } + firing = false; + if ( list ) { + if ( !flags.once ) { + if ( stack && stack.length ) { + memory = stack.shift(); + self.fireWith( memory[ 0 ], memory[ 1 ] ); + } + } else if ( memory === true ) { + self.disable(); + } else { + list = []; + } + } + }, + // Actual Callbacks object + self = { + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + var length = list.length; + add( arguments ); + // Do we need to add the callbacks to the + // current firing batch? + if ( firing ) { + firingLength = list.length; + // With memory, if we're not firing then + // we should call right away, unless previous + // firing was halted (stopOnFalse) + } else if ( memory && memory !== true ) { + firingStart = length; + fire( memory[ 0 ], memory[ 1 ] ); + } + } + return this; + }, + // Remove a callback from the list + remove: function() { + if ( list ) { + var args = arguments, + argIndex = 0, + argLength = args.length; + for ( ; argIndex < argLength ; argIndex++ ) { + for ( var i = 0; i < list.length; i++ ) { + if ( args[ argIndex ] === list[ i ] ) { + // Handle firingIndex and firingLength + if ( firing ) { + if ( i <= firingLength ) { + firingLength--; + if ( i <= firingIndex ) { + firingIndex--; + } + } + } + // Remove the element + list.splice( i--, 1 ); + // If we have some unicity property then + // we only need to do this once + if ( flags.unique ) { + break; + } + } + } + } + } + return this; + }, + // Control if a given callback is in the list + has: function( fn ) { + if ( list ) { + var i = 0, + length = list.length; + for ( ; i < length; i++ ) { + if ( fn === list[ i ] ) { + return true; + } + } + } + return false; + }, + // Remove all callbacks from the list + empty: function() { + list = []; + return this; + }, + // Have the list do nothing anymore + disable: function() { + list = stack = memory = undefined; + return this; + }, + // Is it disabled? + disabled: function() { + return !list; + }, + // Lock the list in its current state + lock: function() { + stack = undefined; + if ( !memory || memory === true ) { + self.disable(); + } + return this; + }, + // Is it locked? + locked: function() { + return !stack; + }, + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( stack ) { + if ( firing ) { + if ( !flags.once ) { + stack.push( [ context, args ] ); + } + } else if ( !( flags.once && memory ) ) { + fire( context, args ); + } + } + return this; + }, + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + + + +var // Static reference to slice + sliceDeferred = [].slice; + +jQuery.extend({ + + Deferred: function( func ) { + var doneList = jQuery.Callbacks( "once memory" ), + failList = jQuery.Callbacks( "once memory" ), + progressList = jQuery.Callbacks( "memory" ), + state = "pending", + lists = { + resolve: doneList, + reject: failList, + notify: progressList + }, + promise = { + done: doneList.add, + fail: failList.add, + progress: progressList.add, + + state: function() { + return state; + }, + + // Deprecated + isResolved: doneList.fired, + isRejected: failList.fired, + + then: function( doneCallbacks, failCallbacks, progressCallbacks ) { + deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks ); + return this; + }, + always: function() { + deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments ); + return this; + }, + pipe: function( fnDone, fnFail, fnProgress ) { + return jQuery.Deferred(function( newDefer ) { + jQuery.each( { + done: [ fnDone, "resolve" ], + fail: [ fnFail, "reject" ], + progress: [ fnProgress, "notify" ] + }, function( handler, data ) { + var fn = data[ 0 ], + action = data[ 1 ], + returned; + if ( jQuery.isFunction( fn ) ) { + deferred[ handler ](function() { + returned = fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify ); + } else { + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); + } + }); + } else { + deferred[ handler ]( newDefer[ action ] ); + } + }); + }).promise(); + }, + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + if ( obj == null ) { + obj = promise; + } else { + for ( var key in promise ) { + obj[ key ] = promise[ key ]; + } + } + return obj; + } + }, + deferred = promise.promise({}), + key; + + for ( key in lists ) { + deferred[ key ] = lists[ key ].fire; + deferred[ key + "With" ] = lists[ key ].fireWith; + } + + // Handle state + deferred.done( function() { + state = "resolved"; + }, failList.disable, progressList.lock ).fail( function() { + state = "rejected"; + }, doneList.disable, progressList.lock ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( firstParam ) { + var args = sliceDeferred.call( arguments, 0 ), + i = 0, + length = args.length, + pValues = new Array( length ), + count = length, + pCount = length, + deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ? + firstParam : + jQuery.Deferred(), + promise = deferred.promise(); + function resolveFunc( i ) { + return function( value ) { + args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + if ( !( --count ) ) { + deferred.resolveWith( deferred, args ); + } + }; + } + function progressFunc( i ) { + return function( value ) { + pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value; + deferred.notifyWith( promise, pValues ); + }; + } + if ( length > 1 ) { + for ( ; i < length; i++ ) { + if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) { + args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) ); + } else { + --count; + } + } + if ( !count ) { + deferred.resolveWith( deferred, args ); + } + } else if ( deferred !== firstParam ) { + deferred.resolveWith( deferred, length ? [ firstParam ] : [] ); + } + return promise; + } +}); + + + + +jQuery.support = (function() { + + var support, + all, + a, + select, + opt, + input, + fragment, + tds, + events, + eventName, + i, + isSupported, + div = document.createElement( "div" ), + documentElement = document.documentElement; + + // Preliminary tests + div.setAttribute("className", "t"); + div.innerHTML = "
a"; + + all = div.getElementsByTagName( "*" ); + a = div.getElementsByTagName( "a" )[ 0 ]; + + // Can't get basic test support + if ( !all || !all.length || !a ) { + return {}; + } + + // First batch of supports tests + select = document.createElement( "select" ); + opt = select.appendChild( document.createElement("option") ); + input = div.getElementsByTagName( "input" )[ 0 ]; + + support = { + // IE strips leading whitespace when .innerHTML is used + leadingWhitespace: ( div.firstChild.nodeType === 3 ), + + // Make sure that tbody elements aren't automatically inserted + // IE will insert them into empty tables + tbody: !div.getElementsByTagName("tbody").length, + + // Make sure that link elements get serialized correctly by innerHTML + // This requires a wrapper element in IE + htmlSerialize: !!div.getElementsByTagName("link").length, + + // Get the style information from getAttribute + // (IE uses .cssText instead) + style: /top/.test( a.getAttribute("style") ), + + // Make sure that URLs aren't manipulated + // (IE normalizes it by default) + hrefNormalized: ( a.getAttribute("href") === "/a" ), + + // Make sure that element opacity exists + // (IE uses filter instead) + // Use a regex to work around a WebKit issue. See #5145 + opacity: /^0.55/.test( a.style.opacity ), + + // Verify style float existence + // (IE uses styleFloat instead of cssFloat) + cssFloat: !!a.style.cssFloat, + + // Make sure that if no value is specified for a checkbox + // that it defaults to "on". + // (WebKit defaults to "" instead) + checkOn: ( input.value === "on" ), + + // Make sure that a selected-by-default option has a working selected property. + // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) + optSelected: opt.selected, + + // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) + getSetAttribute: div.className !== "t", + + // Tests for enctype support on a form(#6743) + enctype: !!document.createElement("form").enctype, + + // Makes sure cloning an html5 element does not cause problems + // Where outerHTML is undefined, this still works + html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", + + // Will be defined later + submitBubbles: true, + changeBubbles: true, + focusinBubbles: false, + deleteExpando: true, + noCloneEvent: true, + inlineBlockNeedsLayout: false, + shrinkWrapBlocks: false, + reliableMarginRight: true, + pixelMargin: true + }; + + // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead + jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); + + // Make sure checked status is properly cloned + input.checked = true; + support.noCloneChecked = input.cloneNode( true ).checked; + + // Make sure that the options inside disabled selects aren't marked as disabled + // (WebKit marks them as disabled) + select.disabled = true; + support.optDisabled = !opt.disabled; + + // Test to see if it's possible to delete an expando from an element + // Fails in Internet Explorer + try { + delete div.test; + } catch( e ) { + support.deleteExpando = false; + } + + if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { + div.attachEvent( "onclick", function() { + // Cloning a node shouldn't copy over any + // bound event handlers (IE does this) + support.noCloneEvent = false; + }); + div.cloneNode( true ).fireEvent( "onclick" ); + } + + // Check if a radio maintains its value + // after being appended to the DOM + input = document.createElement("input"); + input.value = "t"; + input.setAttribute("type", "radio"); + support.radioValue = input.value === "t"; + + input.setAttribute("checked", "checked"); + + // #11217 - WebKit loses check when the name is after the checked attribute + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + fragment = document.createDocumentFragment(); + fragment.appendChild( div.lastChild ); + + // WebKit doesn't clone checked state correctly in fragments + support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Check if a disconnected checkbox will retain its checked + // value of true after appended to the DOM (IE6/7) + support.appendChecked = input.checked; + + fragment.removeChild( input ); + fragment.appendChild( div ); + + // Technique from Juriy Zaytsev + // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ + // We only care about the case where non-standard event systems + // are used, namely in IE. Short-circuiting here helps us to + // avoid an eval call (in setAttribute) which can cause CSP + // to go haywire. See: https://developer.mozilla.org/en/Security/CSP + if ( div.attachEvent ) { + for ( i in { + submit: 1, + change: 1, + focusin: 1 + }) { + eventName = "on" + i; + isSupported = ( eventName in div ); + if ( !isSupported ) { + div.setAttribute( eventName, "return;" ); + isSupported = ( typeof div[ eventName ] === "function" ); + } + support[ i + "Bubbles" ] = isSupported; + } + } + + fragment.removeChild( div ); + + // Null elements to avoid leaks in IE + fragment = select = opt = div = input = null; + + // Run tests that need a body at doc ready + jQuery(function() { + var container, outer, inner, table, td, offsetSupport, + marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, + paddingMarginBorderVisibility, paddingMarginBorder, + body = document.getElementsByTagName("body")[0]; + + if ( !body ) { + // Return for frameset docs that don't have a body + return; + } + + conMarginTop = 1; + paddingMarginBorder = "padding:0;margin:0;border:"; + positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; + paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; + style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; + html = "
" + + "" + + "
"; + + container = document.createElement("div"); + container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; + body.insertBefore( container, body.firstChild ); + + // Construct the test element + div = document.createElement("div"); + container.appendChild( div ); + + // Check if table cells still have offsetWidth/Height when they are set + // to display:none and there are still other visible table cells in a + // table row; if so, offsetWidth/Height are not reliable for use when + // determining if an element has been hidden directly using + // display:none (it is still safe to use offsets if a parent element is + // hidden; don safety goggles and see bug #4512 for more information). + // (only IE 8 fails this test) + div.innerHTML = "
t
"; + tds = div.getElementsByTagName( "td" ); + isSupported = ( tds[ 0 ].offsetHeight === 0 ); + + tds[ 0 ].style.display = ""; + tds[ 1 ].style.display = "none"; + + // Check if empty table cells still have offsetWidth/Height + // (IE <= 8 fail this test) + support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); + + // Check if div with explicit width and no margin-right incorrectly + // gets computed margin-right based on width of container. For more + // info see bug #3333 + // Fails in WebKit before Feb 2011 nightlies + // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right + if ( window.getComputedStyle ) { + div.innerHTML = ""; + marginDiv = document.createElement( "div" ); + marginDiv.style.width = "0"; + marginDiv.style.marginRight = "0"; + div.style.width = "2px"; + div.appendChild( marginDiv ); + support.reliableMarginRight = + ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; + } + + if ( typeof div.style.zoom !== "undefined" ) { + // Check if natively block-level elements act like inline-block + // elements when setting their display to 'inline' and giving + // them layout + // (IE < 8 does this) + div.innerHTML = ""; + div.style.width = div.style.padding = "1px"; + div.style.border = 0; + div.style.overflow = "hidden"; + div.style.display = "inline"; + div.style.zoom = 1; + support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); + + // Check if elements with layout shrink-wrap their children + // (IE 6 does this) + div.style.display = "block"; + div.style.overflow = "visible"; + div.innerHTML = "
"; + support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); + } + + div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; + div.innerHTML = html; + + outer = div.firstChild; + inner = outer.firstChild; + td = outer.nextSibling.firstChild.firstChild; + + offsetSupport = { + doesNotAddBorder: ( inner.offsetTop !== 5 ), + doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) + }; + + inner.style.position = "fixed"; + inner.style.top = "20px"; + + // safari subtracts parent border width here which is 5px + offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); + inner.style.position = inner.style.top = ""; + + outer.style.overflow = "hidden"; + outer.style.position = "relative"; + + offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); + offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); + + if ( window.getComputedStyle ) { + div.style.marginTop = "1%"; + support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; + } + + if ( typeof container.style.zoom !== "undefined" ) { + container.style.zoom = 1; + } + + body.removeChild( container ); + marginDiv = div = container = null; + + jQuery.extend( support, offsetSupport ); + }); + + return support; +})(); + + + + +var rbrace = /^(?:\{.*\}|\[.*\])$/, + rmultiDash = /([A-Z])/g; + +jQuery.extend({ + cache: {}, + + // Please use with caution + uuid: 0, + + // Unique for each copy of jQuery on the page + // Non-digits removed to match rinlinejQuery + expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ), + + // The following elements throw uncatchable exceptions if you + // attempt to add expando properties to them. + noData: { + "embed": true, + // Ban all objects except for Flash (which handle expandos) + "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + "applet": true + }, + + hasData: function( elem ) { + elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + return !!elem && !isEmptyDataObject( elem ); + }, + + data: function( elem, name, data, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var privateCache, thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", + + // We have to handle DOM nodes and JS objects differently because IE6-7 + // can't GC object references properly across the DOM-JS boundary + isNode = elem.nodeType, + + // Only DOM nodes need the global jQuery cache; JS object data is + // attached directly to the object so GC can occur automatically + cache = isNode ? jQuery.cache : elem, + + // Only defining an ID for JS objects if its cache already exists allows + // the code to shortcut on the same path as a DOM node with no cache + id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey, + isEvents = name === "events"; + + // Avoid doing any more work than we need to when trying to get data on an + // object that has no data at all + if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) { + return; + } + + if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data + // ends up in the global cache + if ( isNode ) { + elem[ internalKey ] = id = ++jQuery.uuid; + } else { + id = internalKey; + } + } + + if ( !cache[ id ] ) { + cache[ id ] = {}; + + // Avoids exposing jQuery metadata on plain JS objects when the object + // is serialized using JSON.stringify + if ( !isNode ) { + cache[ id ].toJSON = jQuery.noop; + } + } + + // An object can be passed to jQuery.data instead of a key/value pair; this gets + // shallow copied over onto the existing cache + if ( typeof name === "object" || typeof name === "function" ) { + if ( pvt ) { + cache[ id ] = jQuery.extend( cache[ id ], name ); + } else { + cache[ id ].data = jQuery.extend( cache[ id ].data, name ); + } + } + + privateCache = thisCache = cache[ id ]; + + // jQuery data() is stored in a separate object inside the object's internal data + // cache in order to avoid key collisions between internal data and user-defined + // data. + if ( !pvt ) { + if ( !thisCache.data ) { + thisCache.data = {}; + } + + thisCache = thisCache.data; + } + + if ( data !== undefined ) { + thisCache[ jQuery.camelCase( name ) ] = data; + } + + // Users should not attempt to inspect the internal events object using jQuery.data, + // it is undocumented and subject to change. But does anyone listen? No. + if ( isEvents && !thisCache[ name ] ) { + return privateCache.events; + } + + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; + }, + + removeData: function( elem, name, pvt /* Internal Use Only */ ) { + if ( !jQuery.acceptData( elem ) ) { + return; + } + + var thisCache, i, l, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, + + // See jQuery.data for more information + cache = isNode ? jQuery.cache : elem, + + // See jQuery.data for more information + id = isNode ? elem[ internalKey ] : internalKey; + + // If there is already no cache entry for this object, there is no + // purpose in continuing + if ( !cache[ id ] ) { + return; + } + + if ( name ) { + + thisCache = pvt ? cache[ id ] : cache[ id ].data; + + if ( thisCache ) { + + // Support array or space separated string names for data keys + if ( !jQuery.isArray( name ) ) { + + // try the string as a key before any manipulation + if ( name in thisCache ) { + name = [ name ]; + } else { + + // split the camel cased version by spaces unless a key with the spaces exists + name = jQuery.camelCase( name ); + if ( name in thisCache ) { + name = [ name ]; + } else { + name = name.split( " " ); + } + } + } + + for ( i = 0, l = name.length; i < l; i++ ) { + delete thisCache[ name[i] ]; + } + + // If there is no data left in the cache, we want to continue + // and let the cache object itself get destroyed + if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { + return; + } + } + } + + // See jQuery.data for more information + if ( !pvt ) { + delete cache[ id ].data; + + // Don't destroy the parent cache unless the internal data object + // had been the only thing left in it + if ( !isEmptyDataObject(cache[ id ]) ) { + return; + } + } + + // Browsers that fail expando deletion also refuse to delete expandos on + // the window, but it will allow it on all other JS objects; other browsers + // don't care + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { + delete cache[ id ]; + } else { + cache[ id ] = null; + } + + // We destroyed the cache and need to eliminate the expando on the node to avoid + // false lookups in the cache for entries that no longer exist + if ( isNode ) { + // IE does not allow us to delete expando properties from nodes, + // nor does it have a removeAttribute function on Document nodes; + // we must handle all of these cases + if ( jQuery.support.deleteExpando ) { + delete elem[ internalKey ]; + } else if ( elem.removeAttribute ) { + elem.removeAttribute( internalKey ); + } else { + elem[ internalKey ] = null; + } + } + }, + + // For internal use only. + _data: function( elem, name, data ) { + return jQuery.data( elem, name, data, true ); + }, + + // A method for determining if a DOM node can handle the data expando + acceptData: function( elem ) { + if ( elem.nodeName ) { + var match = jQuery.noData[ elem.nodeName.toLowerCase() ]; + + if ( match ) { + return !(match === true || elem.getAttribute("classid") !== match); + } + } + + return true; + } +}); + +jQuery.fn.extend({ + data: function( key, value ) { + var parts, part, attr, name, l, + elem = this[0], + i = 0, + data = null; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = jQuery.data( elem ); + + if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { + attr = elem.attributes; + for ( l = attr.length; i < l; i++ ) { + name = attr[i].name; + + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.substring(5) ); + + dataAttr( elem, name, data[ name ] ); + } + } + jQuery._data( elem, "parsedAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each(function() { + jQuery.data( this, key ); + }); + } + + parts = key.split( ".", 2 ); + parts[1] = parts[1] ? "." + parts[1] : ""; + part = parts[1] + "!"; + + return jQuery.access( this, function( value ) { + + if ( value === undefined ) { + data = this.triggerHandler( "getData" + part, [ parts[0] ] ); + + // Try to fetch any internally stored data first + if ( data === undefined && elem ) { + data = jQuery.data( elem, key ); + data = dataAttr( elem, key, data ); + } + + return data === undefined && parts[1] ? + this.data( parts[0] ) : + data; + } + + parts[1] = value; + this.each(function() { + var self = jQuery( this ); + + self.triggerHandler( "setData" + part, parts ); + jQuery.data( this, key, value ); + self.triggerHandler( "changeData" + part, parts ); + }); + }, null, value, arguments.length > 1, null, false ); + }, + + removeData: function( key ) { + return this.each(function() { + jQuery.removeData( this, key ); + }); + } +}); + +function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); + + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + jQuery.isNumeric( data ) ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch( e ) {} + + // Make sure we set the data so it isn't changed later + jQuery.data( elem, key, data ); + + } else { + data = undefined; + } + } + + return data; +} + +// checks a cache object for emptiness +function isEmptyDataObject( obj ) { + for ( var name in obj ) { + + // if the public data object is empty, the private is still empty + if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + continue; + } + if ( name !== "toJSON" ) { + return false; + } + } + + return true; +} + + + + +function handleQueueMarkDefer( elem, type, src ) { + var deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + defer = jQuery._data( elem, deferDataKey ); + if ( defer && + ( src === "queue" || !jQuery._data(elem, queueDataKey) ) && + ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) { + // Give room for hard-coded callbacks to fire first + // and eventually mark/queue something else on the element + setTimeout( function() { + if ( !jQuery._data( elem, queueDataKey ) && + !jQuery._data( elem, markDataKey ) ) { + jQuery.removeData( elem, deferDataKey, true ); + defer.fire(); + } + }, 0 ); + } +} + +jQuery.extend({ + + _mark: function( elem, type ) { + if ( elem ) { + type = ( type || "fx" ) + "mark"; + jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 ); + } + }, + + _unmark: function( force, elem, type ) { + if ( force !== true ) { + type = elem; + elem = force; + force = false; + } + if ( elem ) { + type = type || "fx"; + var key = type + "mark", + count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 ); + if ( count ) { + jQuery._data( elem, key, count ); + } else { + jQuery.removeData( elem, key, true ); + handleQueueMarkDefer( elem, type, "mark" ); + } + } + }, + + queue: function( elem, type, data ) { + var q; + if ( elem ) { + type = ( type || "fx" ) + "queue"; + q = jQuery._data( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !q || jQuery.isArray(data) ) { + q = jQuery._data( elem, type, jQuery.makeArray(data) ); + } else { + q.push( data ); + } + } + return q || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + fn = queue.shift(), + hooks = {}; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + } + + if ( fn ) { + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + jQuery._data( elem, type + ".run", hooks ); + fn.call( elem, function() { + jQuery.dequeue( elem, type ); + }, hooks ); + } + + if ( !queue.length ) { + jQuery.removeData( elem, type + "queue " + type + ".run", true ); + handleQueueMarkDefer( elem, type, "queue" ); + } + } +}); + +jQuery.fn.extend({ + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[0], type ); + } + + return data === undefined ? + this : + this.each(function() { + var queue = jQuery.queue( this, type, data ); + + if ( type === "fx" && queue[0] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + }); + }, + dequeue: function( type ) { + return this.each(function() { + jQuery.dequeue( this, type ); + }); + }, + // Based off of the plugin by Clint Helfers, with permission. + // http://blindsignals.com/index.php/2009/07/jquery-delay/ + delay: function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = setTimeout( next, time ); + hooks.stop = function() { + clearTimeout( timeout ); + }; + }); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, object ) { + if ( typeof type !== "string" ) { + object = type; + type = undefined; + } + type = type || "fx"; + var defer = jQuery.Deferred(), + elements = this, + i = elements.length, + count = 1, + deferDataKey = type + "defer", + queueDataKey = type + "queue", + markDataKey = type + "mark", + tmp; + function resolve() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + } + while( i-- ) { + if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) || + ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) || + jQuery.data( elements[ i ], markDataKey, undefined, true ) ) && + jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) { + count++; + tmp.add( resolve ); + } + } + resolve(); + return defer.promise( object ); + } +}); + + + + +var rclass = /[\n\t\r]/g, + rspace = /\s+/, + rreturn = /\r/g, + rtype = /^(?:button|input)$/i, + rfocusable = /^(?:button|input|object|select|textarea)$/i, + rclickable = /^a(?:rea)?$/i, + rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + getSetAttribute = jQuery.support.getSetAttribute, + nodeHook, boolHook, fixSpecified; + +jQuery.fn.extend({ + attr: function( name, value ) { + return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each(function() { + jQuery.removeAttr( this, name ); + }); + }, + + prop: function( name, value ) { + return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + name = jQuery.propFix[ name ] || name; + return this.each(function() { + // try/catch handles cases where IE balks (such as removing a property on window) + try { + this[ name ] = undefined; + delete this[ name ]; + } catch( e ) {} + }); + }, + + addClass: function( value ) { + var classNames, i, l, elem, + setClass, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).addClass( value.call(this, j, this.className) ); + }); + } + + if ( value && typeof value === "string" ) { + classNames = value.split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 ) { + if ( !elem.className && classNames.length === 1 ) { + elem.className = value; + + } else { + setClass = " " + elem.className + " "; + + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) { + setClass += classNames[ c ] + " "; + } + } + elem.className = jQuery.trim( setClass ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classNames, i, l, elem, className, c, cl; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( j ) { + jQuery( this ).removeClass( value.call(this, j, this.className) ); + }); + } + + if ( (value && typeof value === "string") || value === undefined ) { + classNames = ( value || "" ).split( rspace ); + + for ( i = 0, l = this.length; i < l; i++ ) { + elem = this[ i ]; + + if ( elem.nodeType === 1 && elem.className ) { + if ( value ) { + className = (" " + elem.className + " ").replace( rclass, " " ); + for ( c = 0, cl = classNames.length; c < cl; c++ ) { + className = className.replace(" " + classNames[ c ] + " ", " "); + } + elem.className = jQuery.trim( className ); + + } else { + elem.className = ""; + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isBool = typeof stateVal === "boolean"; + + if ( jQuery.isFunction( value ) ) { + return this.each(function( i ) { + jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); + }); + } + + return this.each(function() { + if ( type === "string" ) { + // toggle individual class names + var className, + i = 0, + self = jQuery( this ), + state = stateVal, + classNames = value.split( rspace ); + + while ( (className = classNames[ i++ ]) ) { + // check each className given, space seperated list + state = isBool ? state : !self.hasClass( className ); + self[ state ? "addClass" : "removeClass" ]( className ); + } + + } else if ( type === "undefined" || type === "boolean" ) { + if ( this.className ) { + // store className if set + jQuery._data( this, "__className__", this.className ); + } + + // toggle whole className + this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; + } + }); + }, + + hasClass: function( selector ) { + var className = " " + selector + " ", + i = 0, + l = this.length; + for ( ; i < l; i++ ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + return true; + } + } + + return false; + }, + + val: function( value ) { + var hooks, ret, isFunction, + elem = this[0]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { + return ret; + } + + ret = elem.value; + + return typeof ret === "string" ? + // handle most common string cases + ret.replace(rreturn, "") : + // handle cases where value is null/undef or number + ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each(function( i ) { + var self = jQuery(this), val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, self.val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + } else if ( typeof val === "number" ) { + val += ""; + } else if ( jQuery.isArray( val ) ) { + val = jQuery.map(val, function ( value ) { + return value == null ? "" : value + ""; + }); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + }); + } +}); + +jQuery.extend({ + valHooks: { + option: { + get: function( elem ) { + // attributes.value is undefined in Blackberry 4.7 but + // uses .value. See #6932 + var val = elem.attributes.value; + return !val || val.specified ? elem.value : elem.text; + } + }, + select: { + get: function( elem ) { + var value, i, max, option, + index = elem.selectedIndex, + values = [], + options = elem.options, + one = elem.type === "select-one"; + + // Nothing was selected + if ( index < 0 ) { + return null; + } + + // Loop through all the selected options + i = one ? index : 0; + max = one ? index + 1 : options.length; + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Don't return options that are disabled or in a disabled optgroup + if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) && + (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + // Fixes Bug #2551 -- select.val() broken in IE after form.reset() + if ( one && !values.length && options.length ) { + return jQuery( options[ index ] ).val(); + } + + return values; + }, + + set: function( elem, value ) { + var values = jQuery.makeArray( value ); + + jQuery(elem).find("option").each(function() { + this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; + }); + + if ( !values.length ) { + elem.selectedIndex = -1; + } + return values; + } + } + }, + + attrFn: { + val: true, + css: true, + html: true, + text: true, + data: true, + width: true, + height: true, + offset: true + }, + + attr: function( elem, name, value, pass ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set attributes on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( pass && name in jQuery.attrFn ) { + return jQuery( elem )[ name ]( value ); + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + // All attributes are lowercase + // Grab necessary hook if one is defined + if ( notxml ) { + name = name.toLowerCase(); + hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); + } + + if ( value !== undefined ) { + + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + + } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + elem.setAttribute( name, "" + value ); + return value; + } + + } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + + ret = elem.getAttribute( name ); + + // Non-existent attributes return null, we normalize to undefined + return ret === null ? + undefined : + ret; + } + }, + + removeAttr: function( elem, value ) { + var propName, attrNames, name, l, isBool, + i = 0; + + if ( value && elem.nodeType === 1 ) { + attrNames = value.toLowerCase().split( rspace ); + l = attrNames.length; + + for ( ; i < l; i++ ) { + name = attrNames[ i ]; + + if ( name ) { + propName = jQuery.propFix[ name ] || name; + isBool = rboolean.test( name ); + + // See #9699 for explanation of this approach (setting first, then removal) + // Do not do this for boolean attributes (see #10870) + if ( !isBool ) { + jQuery.attr( elem, name, "" ); + } + elem.removeAttribute( getSetAttribute ? name : propName ); + + // Set corresponding property to false for boolean attributes + if ( isBool && propName in elem ) { + elem[ propName ] = false; + } + } + } + } + }, + + attrHooks: { + type: { + set: function( elem, value ) { + // We can't allow the type property to be changed (since it causes problems in IE) + if ( rtype.test( elem.nodeName ) && elem.parentNode ) { + jQuery.error( "type property can't be changed" ); + } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { + // Setting the type on a radio button after the value resets the value in IE6-9 + // Reset value to it's default in case type is set after value + // This is for element creation + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + }, + // Use the value property for back compat + // Use the nodeHook for button elements in IE6/7 (#1954) + value: { + get: function( elem, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); + } + return name in elem ? + elem.value : + null; + }, + set: function( elem, value, name ) { + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); + } + // Does not return so that setAttribute is also used + elem.value = value; + } + } + }, + + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + + prop: function( elem, name, value ) { + var ret, hooks, notxml, + nType = elem.nodeType; + + // don't get/set properties on text, comment and attribute nodes + if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); + + if ( notxml ) { + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { + return ret; + + } else { + return ( elem[ name ] = value ); + } + + } else { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { + return ret; + + } else { + return elem[ name ]; + } + } + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } +}); + +// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional) +jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex; + +// Hook for boolean attributes +boolHook = { + get: function( elem, name ) { + // Align boolean attributes with corresponding properties + // Fall back to attribute presence where some booleans are not supported + var attrNode, + property = jQuery.prop( elem, name ); + return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ? + name.toLowerCase() : + undefined; + }, + set: function( elem, value, name ) { + var propName; + if ( value === false ) { + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + // value is true since we know at this point it's type boolean and not false + // Set boolean attributes to the same name and set the DOM property + propName = jQuery.propFix[ name ] || name; + if ( propName in elem ) { + // Only set the IDL specifically if it already exists on the element + elem[ propName ] = true; + } + + elem.setAttribute( name, name.toLowerCase() ); + } + return name; + } +}; + +// IE6/7 do not support getting/setting some attributes with get/setAttribute +if ( !getSetAttribute ) { + + fixSpecified = { + name: true, + id: true, + coords: true + }; + + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { + get: function( elem, name ) { + var ret; + ret = elem.getAttributeNode( name ); + return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ? + ret.nodeValue : + undefined; + }, + set: function( elem, value, name ) { + // Set the existing or create a new attribute node + var ret = elem.getAttributeNode( name ); + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); + } + return ( ret.nodeValue = value + "" ); + } + }; + + // Apply the nodeHook to tabindex + jQuery.attrHooks.tabindex.set = nodeHook.set; + + // Set width and height to auto instead of 0 on empty string( Bug #8150 ) + // This is for removals + jQuery.each([ "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + set: function( elem, value ) { + if ( value === "" ) { + elem.setAttribute( name, "auto" ); + return value; + } + } + }); + }); + + // Set contenteditable to false on removals(#10429) + // Setting to empty string throws an error as an invalid value + jQuery.attrHooks.contenteditable = { + get: nodeHook.get, + set: function( elem, value, name ) { + if ( value === "" ) { + value = "false"; + } + nodeHook.set( elem, value, name ); + } + }; +} + + +// Some attributes require a special call on IE +if ( !jQuery.support.hrefNormalized ) { + jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { + jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { + get: function( elem ) { + var ret = elem.getAttribute( name, 2 ); + return ret === null ? undefined : ret; + } + }); + }); +} + +if ( !jQuery.support.style ) { + jQuery.attrHooks.style = { + get: function( elem ) { + // Return undefined in the case of empty string + // Normalize to lowercase since IE uppercases css property names + return elem.style.cssText.toLowerCase() || undefined; + }, + set: function( elem, value ) { + return ( elem.style.cssText = "" + value ); + } + }; +} + +// Safari mis-reports the default selected property of an option +// Accessing the parent's selectedIndex property fixes it +if ( !jQuery.support.optSelected ) { + jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { + get: function( elem ) { + var parent = elem.parentNode; + + if ( parent ) { + parent.selectedIndex; + + // Make sure that it also works with optgroups, see #5701 + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + return null; + } + }); +} + +// IE6/7 call enctype encoding +if ( !jQuery.support.enctype ) { + jQuery.propFix.enctype = "encoding"; +} + +// Radios and checkboxes getter/setter +if ( !jQuery.support.checkOn ) { + jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + get: function( elem ) { + // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified + return elem.getAttribute("value") === null ? "on" : elem.value; + } + }; + }); +} +jQuery.each([ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { + set: function( elem, value ) { + if ( jQuery.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); + } + } + }); +}); + + + + +var rformElems = /^(?:textarea|input|select)$/i, + rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/, + rhoverHack = /(?:^|\s)hover(\.\S+)?\b/, + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|contextmenu)|click/, + rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/, + quickParse = function( selector ) { + var quick = rquickIs.exec( selector ); + if ( quick ) { + // 0 1 2 3 + // [ _, tag, id, class ] + quick[1] = ( quick[1] || "" ).toLowerCase(); + quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" ); + } + return quick; + }, + quickIs = function( elem, m ) { + var attrs = elem.attributes || {}; + return ( + (!m[1] || elem.nodeName.toLowerCase() === m[1]) && + (!m[2] || (attrs.id || {}).value === m[2]) && + (!m[3] || m[3].test( (attrs[ "class" ] || {}).value )) + ); + }, + hoverHack = function( events ) { + return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" ); + }; + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + add: function( elem, types, handler, data, selector ) { + + var elemData, eventHandle, events, + t, tns, type, namespaces, handleObj, + handleObjIn, quick, handlers, special; + + // Don't attach events to noData or text/comment nodes (allow plain objects tho) + if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + events = elemData.events; + if ( !events ) { + elemData.events = events = {}; + } + eventHandle = elemData.handle; + if ( !eventHandle ) { + elemData.handle = eventHandle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ? + jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : + undefined; + }; + // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + eventHandle.elem = elem; + } + + // Handle multiple events separated by a space + // jQuery(...).bind("mouseover mouseout", fn); + types = jQuery.trim( hoverHack(types) ).split( " " ); + for ( t = 0; t < types.length; t++ ) { + + tns = rtypenamespace.exec( types[t] ) || []; + type = tns[1]; + namespaces = ( tns[2] || "" ).split( "." ).sort(); + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend({ + type: type, + origType: tns[1], + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + quick: selector && quickParse( selector ), + namespace: namespaces.join(".") + }, handleObjIn ); + + // Init the event handler queue if we're the first + handlers = events[ type ]; + if ( !handlers ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener/attachEvent if the special events handler returns false + if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle, false ); + + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + // Nullify elem to prevent memory leaks in IE + elem = null; + }, + + global: {}, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var elemData = jQuery.hasData( elem ) && jQuery._data( elem ), + t, tns, type, origType, namespaces, origCount, + j, events, special, handle, eventType, handleObj; + + if ( !elemData || !(events = elemData.events) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = jQuery.trim( hoverHack( types || "" ) ).split(" "); + for ( t = 0; t < types.length; t++ ) { + tns = rtypenamespace.exec( types[t] ) || []; + type = origType = tns[1]; + namespaces = tns[2]; + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector? special.delegateType : special.bindType ) || type; + eventType = events[ type ] || []; + origCount = eventType.length; + namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + + // Remove matching events + for ( j = 0; j < eventType.length; j++ ) { + handleObj = eventType[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !namespaces || namespaces.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + eventType.splice( j--, 1 ); + + if ( handleObj.selector ) { + eventType.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( eventType.length === 0 && origCount !== eventType.length ) { + if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + handle = elemData.handle; + if ( handle ) { + handle.elem = null; + } + + // removeData also checks for emptiness and clears the expando if empty + // so use it instead of delete + jQuery.removeData( elem, [ "events", "handle" ], true ); + } + }, + + // Events that are safe to short-circuit if no handlers are attached. + // Native DOM events should not be added, they may have inline handlers. + customEvent: { + "getData": true, + "setData": true, + "changeData": true + }, + + trigger: function( event, data, elem, onlyHandlers ) { + // Don't do events on text and comment nodes + if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) { + return; + } + + // Event object or event type + var type = event.type || event, + namespaces = [], + cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType; + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "!" ) >= 0 ) { + // Exclusive events trigger only for the exact event (no namespaces) + type = type.slice(0, -1); + exclusive = true; + } + + if ( type.indexOf( "." ) >= 0 ) { + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split("."); + type = namespaces.shift(); + namespaces.sort(); + } + + if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) { + // No jQuery handlers for this event type, and it can't have inline handlers + return; + } + + // Caller can pass in an Event, Object, or just an event type string + event = typeof event === "object" ? + // jQuery.Event object + event[ jQuery.expando ] ? event : + // Object literal + new jQuery.Event( type, event ) : + // Just the event type (string) + new jQuery.Event( type ); + + event.type = type; + event.isTrigger = true; + event.exclusive = exclusive; + event.namespace = namespaces.join( "." ); + event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null; + ontype = type.indexOf( ":" ) < 0 ? "on" + type : ""; + + // Handle a global trigger + if ( !elem ) { + + // TODO: Stop taunting the data cache; remove global events and always attach to document + cache = jQuery.cache; + for ( i in cache ) { + if ( cache[ i ].events && cache[ i ].events[ type ] ) { + jQuery.event.trigger( event, data, cache[ i ].handle.elem, true ); + } + } + return; + } + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data != null ? jQuery.makeArray( data ) : []; + data.unshift( event ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + eventPath = [[ elem, special.bindType || type ]]; + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode; + old = null; + for ( ; cur; cur = cur.parentNode ) { + eventPath.push([ cur, bubbleType ]); + old = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( old && old === elem.ownerDocument ) { + eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]); + } + } + + // Fire handlers on the event path + for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) { + + cur = eventPath[i][0]; + event.type = eventPath[i][1]; + + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + // Note that this is a bare JS function and not a jQuery handler + handle = ontype && cur[ ontype ]; + if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) { + event.preventDefault(); + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && + !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name name as the event. + // Can't use an .isFunction() check here because IE6/7 fails that test. + // Don't do default actions on window, that's where global variables be (#6170) + // IE<9 dies on focus/blur to hidden element (#1486) + if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + old = elem[ ontype ]; + + if ( old ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( old ) { + elem[ ontype ] = old; + } + } + } + } + + return event.result; + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event || window.event ); + + var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []), + delegateCount = handlers.delegateCount, + args = [].slice.call( arguments, 0 ), + run_all = !event.exclusive && !event.namespace, + special = jQuery.event.special[ event.type ] || {}, + handlerQueue = [], + i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[0] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers that should run if there are delegated events + // Avoid non-left-click bubbling in Firefox (#3861) + if ( delegateCount && !(event.button && event.type === "click") ) { + + // Pregenerate a single jQuery object for reuse with .is() + jqcur = jQuery(this); + jqcur.context = this.ownerDocument || this; + + for ( cur = event.target; cur != this; cur = cur.parentNode || this ) { + + // Don't process events on disabled elements (#6911, #8165) + if ( cur.disabled !== true ) { + selMatch = {}; + matches = []; + jqcur[0] = cur; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + sel = handleObj.selector; + + if ( selMatch[ sel ] === undefined ) { + selMatch[ sel ] = ( + handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel ) + ); + } + if ( selMatch[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push({ elem: cur, matches: matches }); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( handlers.length > delegateCount ) { + handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) }); + } + + // Run delegates first; they may want to stop propagation beneath us + for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) { + matched = handlerQueue[ i ]; + event.currentTarget = matched.elem; + + for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) { + handleObj = matched.matches[ j ]; + + // Triggered event must either 1) be non-exclusive and have no namespace, or + // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). + if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) { + + event.data = handleObj.data; + event.handleObj = handleObj; + + ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) + .apply( matched.elem, args ); + + if ( ret !== undefined ) { + event.result = ret; + if ( ret === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 *** + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button, + fromElement = original.fromElement; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add relatedTarget, if necessary + if ( !event.relatedTarget && fromElement ) { + event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, + originalEvent = event, + fixHook = jQuery.event.fixHooks[ event.type ] || {}, + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = jQuery.Event( originalEvent ); + + for ( i = copy.length; i; ) { + prop = copy[ --i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2) + if ( !event.target ) { + event.target = originalEvent.srcElement || document; + } + + // Target should not be a text node (#504, Safari) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8) + if ( event.metaKey === undefined ) { + event.metaKey = event.ctrlKey; + } + + return fixHook.filter? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + ready: { + // Make sure the ready event is setup + setup: jQuery.bindReady + }, + + load: { + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + + beforeunload: { + setup: function( data, namespaces, eventHandle ) { + // We only want to do this special case on windows + if ( jQuery.isWindow( this ) ) { + this.onbeforeunload = eventHandle; + } + }, + + teardown: function( namespaces, eventHandle ) { + if ( this.onbeforeunload === eventHandle ) { + this.onbeforeunload = null; + } + } + } + }, + + simulate: function( type, elem, event, bubble ) { + // Piggyback on a donor event to simulate a different one. + // Fake originalEvent to avoid donor's stopPropagation, but if the + // simulated event prevents default then we do the same on the donor. + var e = jQuery.extend( + new jQuery.Event(), + event, + { type: type, + isSimulated: true, + originalEvent: {} + } + ); + if ( bubble ) { + jQuery.event.trigger( e, null, elem ); + } else { + jQuery.event.dispatch.call( elem, e ); + } + if ( e.isDefaultPrevented() ) { + event.preventDefault(); + } + } +}; + +// Some plugins are using, but it's undocumented/deprecated and will be removed. +// The 1.7 special event interface should provide all the hooks needed now. +jQuery.event.handle = jQuery.event.dispatch; + +jQuery.removeEvent = document.removeEventListener ? + function( elem, type, handle ) { + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle, false ); + } + } : + function( elem, type, handle ) { + if ( elem.detachEvent ) { + elem.detachEvent( "on" + type, handle ); + } + }; + +jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword + if ( !(this instanceof jQuery.Event) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || + src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +function returnFalse() { + return false; +} +function returnTrue() { + return true; +} + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + + // if preventDefault exists run it on the original event + if ( e.preventDefault ) { + e.preventDefault(); + + // otherwise set the returnValue property of the original event to false (IE) + } else { + e.returnValue = false; + } + }, + stopPropagation: function() { + this.isPropagationStopped = returnTrue; + + var e = this.originalEvent; + if ( !e ) { + return; + } + // if stopPropagation exists run it on the original event + if ( e.stopPropagation ) { + e.stopPropagation(); + } + // otherwise set the cancelBubble property of the original event to true (IE) + e.cancelBubble = true; + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = returnTrue; + this.stopPropagation(); + }, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +jQuery.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var target = this, + related = event.relatedTarget, + handleObj = event.handleObj, + selector = handleObj.selector, + ret; + + // For mousenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +}); + +// IE submit delegation +if ( !jQuery.support.submitBubbles ) { + + jQuery.event.special.submit = { + setup: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Lazy-add a submit handler when a descendant form may potentially be submitted + jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) + var elem = e.target, + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; + if ( form && !form._submit_attached ) { + jQuery.event.add( form, "submit._submit", function( event ) { + event._submit_bubble = true; + }); + form._submit_attached = true; + } + }); + // return undefined since we don't need an event listener + }, + + postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree + if ( event._submit_bubble ) { + delete event._submit_bubble; + if ( this.parentNode && !event.isTrigger ) { + jQuery.event.simulate( "submit", this.parentNode, event, true ); + } + } + }, + + teardown: function() { + // Only need this for delegated form submit events + if ( jQuery.nodeName( this, "form" ) ) { + return false; + } + + // Remove delegated handlers; cleanData eventually reaps submit handlers attached above + jQuery.event.remove( this, "._submit" ); + } + }; +} + +// IE change delegation and checkbox/radio fix +if ( !jQuery.support.changeBubbles ) { + + jQuery.event.special.change = { + + setup: function() { + + if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click + // after a propertychange. Eat the blur-change in special.change.handle. + // This still fires onchange a second time for check/radio after blur. + if ( this.type === "checkbox" || this.type === "radio" ) { + jQuery.event.add( this, "propertychange._change", function( event ) { + if ( event.originalEvent.propertyName === "checked" ) { + this._just_changed = true; + } + }); + jQuery.event.add( this, "click._change", function( event ) { + if ( this._just_changed && !event.isTrigger ) { + this._just_changed = false; + jQuery.event.simulate( "change", this, event, true ); + } + }); + } + return false; + } + // Delegated event; lazy-add a change handler on descendant inputs + jQuery.event.add( this, "beforeactivate._change", function( e ) { + var elem = e.target; + + if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) { + jQuery.event.add( elem, "change._change", function( event ) { + if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { + jQuery.event.simulate( "change", this.parentNode, event, true ); + } + }); + elem._change_attached = true; + } + }); + }, + + handle: function( event ) { + var elem = event.target; + + // Swallow native change events from checkbox/radio, we already triggered them above + if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + return event.handleObj.handler.apply( this, arguments ); + } + }, + + teardown: function() { + jQuery.event.remove( this, "._change" ); + + return rformElems.test( this.nodeName ); + } + }; +} + +// Create "bubbling" focus and blur events +if ( !jQuery.support.focusinBubbles ) { + jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler while someone wants focusin/focusout + var attaches = 0, + handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + if ( attaches++ === 0 ) { + document.addEventListener( orig, handler, true ); + } + }, + teardown: function() { + if ( --attaches === 0 ) { + document.removeEventListener( orig, handler, true ); + } + } + }; + }); +} + +jQuery.fn.extend({ + + on: function( types, selector, data, fn, /*INTERNAL*/ one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { // && selector != null + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + this.on( type, selector, data, types[ type ], one ); + } + return this; + } + + if ( data == null && fn == null ) { + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return this; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return this.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + }); + }, + one: function( types, selector, data, fn ) { + return this.on( types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event + var handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + // ( types-object [, selector] ) + for ( var type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each(function() { + jQuery.event.remove( this, types, fn, selector ); + }); + }, + + bind: function( types, data, fn ) { + return this.on( types, null, data, fn ); + }, + unbind: function( types, fn ) { + return this.off( types, null, fn ); + }, + + live: function( types, data, fn ) { + jQuery( this.context ).on( types, this.selector, data, fn ); + return this; + }, + die: function( types, fn ) { + jQuery( this.context ).off( types, this.selector || "**", fn ); + return this; + }, + + delegate: function( selector, types, data, fn ) { + return this.on( types, selector, data, fn ); + }, + undelegate: function( selector, types, fn ) { + // ( namespace ) or ( selector, types [, fn] ) + return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn ); + }, + + trigger: function( type, data ) { + return this.each(function() { + jQuery.event.trigger( type, data, this ); + }); + }, + triggerHandler: function( type, data ) { + if ( this[0] ) { + return jQuery.event.trigger( type, data, this[0], true ); + } + }, + + toggle: function( fn ) { + // Save reference to arguments for access in closure + var args = arguments, + guid = fn.guid || jQuery.guid++, + i = 0, + toggler = function( event ) { + // Figure out which function to execute + var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i; + jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 ); + + // Make sure that clicks stop + event.preventDefault(); + + // and execute the function + return args[ lastToggle ].apply( this, arguments ) || false; + }; + + // link all the functions, so any of them can unbind this click handler + toggler.guid = guid; + while ( i < args.length ) { + args[ i++ ].guid = guid; + } + + return this.click( toggler ); + }, + + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +}); + +jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + if ( fn == null ) { + fn = data; + data = null; + } + + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; + + if ( jQuery.attrFn ) { + jQuery.attrFn[ name ] = true; + } + + if ( rkeyEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks; + } + + if ( rmouseEvent.test( name ) ) { + jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks; + } +}); + + + +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){ + +var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, + expando = "sizcache" + (Math.random() + '').replace('.', ''), + done = 0, + toString = Object.prototype.toString, + hasDuplicate = false, + baseHasDuplicate = true, + rBackslash = /\\/g, + rReturn = /\r\n/g, + rNonWord = /\W/; + +// Here we check if the JavaScript engine is using some sort of +// optimization where it does not always call our comparision +// function. If that is the case, discard the hasDuplicate value. +// Thus far that includes Google Chrome. +[0, 0].sort(function() { + baseHasDuplicate = false; + return 0; +}); + +var Sizzle = function( selector, context, results, seed ) { + results = results || []; + context = context || document; + + var origContext = context; + + if ( context.nodeType !== 1 && context.nodeType !== 9 ) { + return []; + } + + if ( !selector || typeof selector !== "string" ) { + return results; + } + + var m, set, checkSet, extra, ret, cur, pop, i, + prune = true, + contextXML = Sizzle.isXML( context ), + parts = [], + soFar = selector; + + // Reset the position of the chunker regexp (start from head) + do { + chunker.exec( "" ); + m = chunker.exec( soFar ); + + if ( m ) { + soFar = m[3]; + + parts.push( m[1] ); + + if ( m[2] ) { + extra = m[3]; + break; + } + } + } while ( m ); + + if ( parts.length > 1 && origPOS.exec( selector ) ) { + + if ( parts.length === 2 && Expr.relative[ parts[0] ] ) { + set = posProcess( parts[0] + parts[1], context, seed ); + + } else { + set = Expr.relative[ parts[0] ] ? + [ context ] : + Sizzle( parts.shift(), context ); + + while ( parts.length ) { + selector = parts.shift(); + + if ( Expr.relative[ selector ] ) { + selector += parts.shift(); + } + + set = posProcess( selector, set, seed ); + } + } + + } else { + // Take a shortcut and set the context if the root selector is an ID + // (but not if it'll be faster if the inner selector is an ID) + if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML && + Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) { + + ret = Sizzle.find( parts.shift(), context, contextXML ); + context = ret.expr ? + Sizzle.filter( ret.expr, ret.set )[0] : + ret.set[0]; + } + + if ( context ) { + ret = seed ? + { expr: parts.pop(), set: makeArray(seed) } : + Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML ); + + set = ret.expr ? + Sizzle.filter( ret.expr, ret.set ) : + ret.set; + + if ( parts.length > 0 ) { + checkSet = makeArray( set ); + + } else { + prune = false; + } + + while ( parts.length ) { + cur = parts.pop(); + pop = cur; + + if ( !Expr.relative[ cur ] ) { + cur = ""; + } else { + pop = parts.pop(); + } + + if ( pop == null ) { + pop = context; + } + + Expr.relative[ cur ]( checkSet, pop, contextXML ); + } + + } else { + checkSet = parts = []; + } + } + + if ( !checkSet ) { + checkSet = set; + } + + if ( !checkSet ) { + Sizzle.error( cur || selector ); + } + + if ( toString.call(checkSet) === "[object Array]" ) { + if ( !prune ) { + results.push.apply( results, checkSet ); + + } else if ( context && context.nodeType === 1 ) { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) { + results.push( set[i] ); + } + } + + } else { + for ( i = 0; checkSet[i] != null; i++ ) { + if ( checkSet[i] && checkSet[i].nodeType === 1 ) { + results.push( set[i] ); + } + } + } + + } else { + makeArray( checkSet, results ); + } + + if ( extra ) { + Sizzle( extra, origContext, results, seed ); + Sizzle.uniqueSort( results ); + } + + return results; +}; + +Sizzle.uniqueSort = function( results ) { + if ( sortOrder ) { + hasDuplicate = baseHasDuplicate; + results.sort( sortOrder ); + + if ( hasDuplicate ) { + for ( var i = 1; i < results.length; i++ ) { + if ( results[i] === results[ i - 1 ] ) { + results.splice( i--, 1 ); + } + } + } + } + + return results; +}; + +Sizzle.matches = function( expr, set ) { + return Sizzle( expr, null, null, set ); +}; + +Sizzle.matchesSelector = function( node, expr ) { + return Sizzle( expr, null, null, [node] ).length > 0; +}; + +Sizzle.find = function( expr, context, isXML ) { + var set, i, len, match, type, left; + + if ( !expr ) { + return []; + } + + for ( i = 0, len = Expr.order.length; i < len; i++ ) { + type = Expr.order[i]; + + if ( (match = Expr.leftMatch[ type ].exec( expr )) ) { + left = match[1]; + match.splice( 1, 1 ); + + if ( left.substr( left.length - 1 ) !== "\\" ) { + match[1] = (match[1] || "").replace( rBackslash, "" ); + set = Expr.find[ type ]( match, context, isXML ); + + if ( set != null ) { + expr = expr.replace( Expr.match[ type ], "" ); + break; + } + } + } + } + + if ( !set ) { + set = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( "*" ) : + []; + } + + return { set: set, expr: expr }; +}; + +Sizzle.filter = function( expr, set, inplace, not ) { + var match, anyFound, + type, found, item, filter, left, + i, pass, + old = expr, + result = [], + curLoop = set, + isXMLFilter = set && set[0] && Sizzle.isXML( set[0] ); + + while ( expr && set.length ) { + for ( type in Expr.filter ) { + if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) { + filter = Expr.filter[ type ]; + left = match[1]; + + anyFound = false; + + match.splice(1,1); + + if ( left.substr( left.length - 1 ) === "\\" ) { + continue; + } + + if ( curLoop === result ) { + result = []; + } + + if ( Expr.preFilter[ type ] ) { + match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter ); + + if ( !match ) { + anyFound = found = true; + + } else if ( match === true ) { + continue; + } + } + + if ( match ) { + for ( i = 0; (item = curLoop[i]) != null; i++ ) { + if ( item ) { + found = filter( item, match, i, curLoop ); + pass = not ^ found; + + if ( inplace && found != null ) { + if ( pass ) { + anyFound = true; + + } else { + curLoop[i] = false; + } + + } else if ( pass ) { + result.push( item ); + anyFound = true; + } + } + } + } + + if ( found !== undefined ) { + if ( !inplace ) { + curLoop = result; + } + + expr = expr.replace( Expr.match[ type ], "" ); + + if ( !anyFound ) { + return []; + } + + break; + } + } + } + + // Improper expression + if ( expr === old ) { + if ( anyFound == null ) { + Sizzle.error( expr ); + + } else { + break; + } + } + + old = expr; + } + + return curLoop; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Utility function for retreiving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +var getText = Sizzle.getText = function( elem ) { + var i, node, + nodeType = elem.nodeType, + ret = ""; + + if ( nodeType ) { + if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent || innerText for elements + if ( typeof elem.textContent === 'string' ) { + return elem.textContent; + } else if ( typeof elem.innerText === 'string' ) { + // Replace IE's carriage returns + return elem.innerText.replace( rReturn, '' ); + } else { + // Traverse it's children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + } else { + + // If no nodeType, this is expected to be an array + for ( i = 0; (node = elem[i]); i++ ) { + // Do not traverse comment nodes + if ( node.nodeType !== 8 ) { + ret += getText( node ); + } + } + } + return ret; +}; + +var Expr = Sizzle.selectors = { + order: [ "ID", "NAME", "TAG" ], + + match: { + ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/, + NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/, + ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/, + TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/, + CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/, + POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/, + PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/ + }, + + leftMatch: {}, + + attrMap: { + "class": "className", + "for": "htmlFor" + }, + + attrHandle: { + href: function( elem ) { + return elem.getAttribute( "href" ); + }, + type: function( elem ) { + return elem.getAttribute( "type" ); + } + }, + + relative: { + "+": function(checkSet, part){ + var isPartStr = typeof part === "string", + isTag = isPartStr && !rNonWord.test( part ), + isPartStrNotTag = isPartStr && !isTag; + + if ( isTag ) { + part = part.toLowerCase(); + } + + for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) { + if ( (elem = checkSet[i]) ) { + while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {} + + checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ? + elem || false : + elem === part; + } + } + + if ( isPartStrNotTag ) { + Sizzle.filter( part, checkSet, true ); + } + }, + + ">": function( checkSet, part ) { + var elem, + isPartStr = typeof part === "string", + i = 0, + l = checkSet.length; + + if ( isPartStr && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + var parent = elem.parentNode; + checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false; + } + } + + } else { + for ( ; i < l; i++ ) { + elem = checkSet[i]; + + if ( elem ) { + checkSet[i] = isPartStr ? + elem.parentNode : + elem.parentNode === part; + } + } + + if ( isPartStr ) { + Sizzle.filter( part, checkSet, true ); + } + } + }, + + "": function(checkSet, part, isXML){ + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML ); + }, + + "~": function( checkSet, part, isXML ) { + var nodeCheck, + doneName = done++, + checkFn = dirCheck; + + if ( typeof part === "string" && !rNonWord.test( part ) ) { + part = part.toLowerCase(); + nodeCheck = part; + checkFn = dirNodeCheck; + } + + checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML ); + } + }, + + find: { + ID: function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + return m && m.parentNode ? [m] : []; + } + }, + + NAME: function( match, context ) { + if ( typeof context.getElementsByName !== "undefined" ) { + var ret = [], + results = context.getElementsByName( match[1] ); + + for ( var i = 0, l = results.length; i < l; i++ ) { + if ( results[i].getAttribute("name") === match[1] ) { + ret.push( results[i] ); + } + } + + return ret.length === 0 ? null : ret; + } + }, + + TAG: function( match, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( match[1] ); + } + } + }, + preFilter: { + CLASS: function( match, curLoop, inplace, result, not, isXML ) { + match = " " + match[1].replace( rBackslash, "" ) + " "; + + if ( isXML ) { + return match; + } + + for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) { + if ( elem ) { + if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) { + if ( !inplace ) { + result.push( elem ); + } + + } else if ( inplace ) { + curLoop[i] = false; + } + } + } + + return false; + }, + + ID: function( match ) { + return match[1].replace( rBackslash, "" ); + }, + + TAG: function( match, curLoop ) { + return match[1].replace( rBackslash, "" ).toLowerCase(); + }, + + CHILD: function( match ) { + if ( match[1] === "nth" ) { + if ( !match[2] ) { + Sizzle.error( match[0] ); + } + + match[2] = match[2].replace(/^\+|\s*/g, ''); + + // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' + var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec( + match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" || + !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]); + + // calculate the numbers (first)n+(last) including if they are negative + match[2] = (test[1] + (test[2] || 1)) - 0; + match[3] = test[3] - 0; + } + else if ( match[2] ) { + Sizzle.error( match[0] ); + } + + // TODO: Move to normal caching system + match[0] = done++; + + return match; + }, + + ATTR: function( match, curLoop, inplace, result, not, isXML ) { + var name = match[1] = match[1].replace( rBackslash, "" ); + + if ( !isXML && Expr.attrMap[name] ) { + match[1] = Expr.attrMap[name]; + } + + // Handle if an un-quoted value was used + match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" ); + + if ( match[2] === "~=" ) { + match[4] = " " + match[4] + " "; + } + + return match; + }, + + PSEUDO: function( match, curLoop, inplace, result, not ) { + if ( match[1] === "not" ) { + // If we're dealing with a complex expression, or a simple one + if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) { + match[3] = Sizzle(match[3], null, null, curLoop); + + } else { + var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not); + + if ( !inplace ) { + result.push.apply( result, ret ); + } + + return false; + } + + } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) { + return true; + } + + return match; + }, + + POS: function( match ) { + match.unshift( true ); + + return match; + } + }, + + filters: { + enabled: function( elem ) { + return elem.disabled === false && elem.type !== "hidden"; + }, + + disabled: function( elem ) { + return elem.disabled === true; + }, + + checked: function( elem ) { + return elem.checked === true; + }, + + selected: function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + parent: function( elem ) { + return !!elem.firstChild; + }, + + empty: function( elem ) { + return !elem.firstChild; + }, + + has: function( elem, i, match ) { + return !!Sizzle( match[3], elem ).length; + }, + + header: function( elem ) { + return (/h\d/i).test( elem.nodeName ); + }, + + text: function( elem ) { + var attr = elem.getAttribute( "type" ), type = elem.type; + // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) + // use getAttribute instead to test this case + return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null ); + }, + + radio: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type; + }, + + checkbox: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type; + }, + + file: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "file" === elem.type; + }, + + password: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "password" === elem.type; + }, + + submit: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "submit" === elem.type; + }, + + image: function( elem ) { + return elem.nodeName.toLowerCase() === "input" && "image" === elem.type; + }, + + reset: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && "reset" === elem.type; + }, + + button: function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && "button" === elem.type || name === "button"; + }, + + input: function( elem ) { + return (/input|select|textarea|button/i).test( elem.nodeName ); + }, + + focus: function( elem ) { + return elem === elem.ownerDocument.activeElement; + } + }, + setFilters: { + first: function( elem, i ) { + return i === 0; + }, + + last: function( elem, i, match, array ) { + return i === array.length - 1; + }, + + even: function( elem, i ) { + return i % 2 === 0; + }, + + odd: function( elem, i ) { + return i % 2 === 1; + }, + + lt: function( elem, i, match ) { + return i < match[3] - 0; + }, + + gt: function( elem, i, match ) { + return i > match[3] - 0; + }, + + nth: function( elem, i, match ) { + return match[3] - 0 === i; + }, + + eq: function( elem, i, match ) { + return match[3] - 0 === i; + } + }, + filter: { + PSEUDO: function( elem, match, i, array ) { + var name = match[1], + filter = Expr.filters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + + } else if ( name === "contains" ) { + return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0; + + } else if ( name === "not" ) { + var not = match[3]; + + for ( var j = 0, l = not.length; j < l; j++ ) { + if ( not[j] === elem ) { + return false; + } + } + + return true; + + } else { + Sizzle.error( name ); + } + }, + + CHILD: function( elem, match ) { + var first, last, + doneName, parent, cache, + count, diff, + type = match[1], + node = elem; + + switch ( type ) { + case "only": + case "first": + while ( (node = node.previousSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + if ( type === "first" ) { + return true; + } + + node = elem; + + /* falls through */ + case "last": + while ( (node = node.nextSibling) ) { + if ( node.nodeType === 1 ) { + return false; + } + } + + return true; + + case "nth": + first = match[2]; + last = match[3]; + + if ( first === 1 && last === 0 ) { + return true; + } + + doneName = match[0]; + parent = elem.parentNode; + + if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) { + count = 0; + + for ( node = parent.firstChild; node; node = node.nextSibling ) { + if ( node.nodeType === 1 ) { + node.nodeIndex = ++count; + } + } + + parent[ expando ] = doneName; + } + + diff = elem.nodeIndex - last; + + if ( first === 0 ) { + return diff === 0; + + } else { + return ( diff % first === 0 && diff / first >= 0 ); + } + } + }, + + ID: function( elem, match ) { + return elem.nodeType === 1 && elem.getAttribute("id") === match; + }, + + TAG: function( elem, match ) { + return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match; + }, + + CLASS: function( elem, match ) { + return (" " + (elem.className || elem.getAttribute("class")) + " ") + .indexOf( match ) > -1; + }, + + ATTR: function( elem, match ) { + var name = match[1], + result = Sizzle.attr ? + Sizzle.attr( elem, name ) : + Expr.attrHandle[ name ] ? + Expr.attrHandle[ name ]( elem ) : + elem[ name ] != null ? + elem[ name ] : + elem.getAttribute( name ), + value = result + "", + type = match[2], + check = match[4]; + + return result == null ? + type === "!=" : + !type && Sizzle.attr ? + result != null : + type === "=" ? + value === check : + type === "*=" ? + value.indexOf(check) >= 0 : + type === "~=" ? + (" " + value + " ").indexOf(check) >= 0 : + !check ? + value && result !== false : + type === "!=" ? + value !== check : + type === "^=" ? + value.indexOf(check) === 0 : + type === "$=" ? + value.substr(value.length - check.length) === check : + type === "|=" ? + value === check || value.substr(0, check.length + 1) === check + "-" : + false; + }, + + POS: function( elem, match, i, array ) { + var name = match[2], + filter = Expr.setFilters[ name ]; + + if ( filter ) { + return filter( elem, i, match, array ); + } + } + } +}; + +var origPOS = Expr.match.POS, + fescape = function(all, num){ + return "\\" + (num - 0 + 1); + }; + +for ( var type in Expr.match ) { + Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) ); + Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) ); +} +// Expose origPOS +// "global" as in regardless of relation to brackets/parens +Expr.match.globalPOS = origPOS; + +var makeArray = function( array, results ) { + array = Array.prototype.slice.call( array, 0 ); + + if ( results ) { + results.push.apply( results, array ); + return results; + } + + return array; +}; + +// Perform a simple check to determine if the browser is capable of +// converting a NodeList to an array using builtin methods. +// Also verifies that the returned array holds DOM nodes +// (which is not the case in the Blackberry browser) +try { + Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType; + +// Provide a fallback method if it does not work +} catch( e ) { + makeArray = function( array, results ) { + var i = 0, + ret = results || []; + + if ( toString.call(array) === "[object Array]" ) { + Array.prototype.push.apply( ret, array ); + + } else { + if ( typeof array.length === "number" ) { + for ( var l = array.length; i < l; i++ ) { + ret.push( array[i] ); + } + + } else { + for ( ; array[i]; i++ ) { + ret.push( array[i] ); + } + } + } + + return ret; + }; +} + +var sortOrder, siblingCheck; + +if ( document.documentElement.compareDocumentPosition ) { + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) { + return a.compareDocumentPosition ? -1 : 1; + } + + return a.compareDocumentPosition(b) & 4 ? -1 : 1; + }; + +} else { + sortOrder = function( a, b ) { + // The nodes are identical, we can exit early + if ( a === b ) { + hasDuplicate = true; + return 0; + + // Fallback to using sourceIndex (in IE) if it's available on both nodes + } else if ( a.sourceIndex && b.sourceIndex ) { + return a.sourceIndex - b.sourceIndex; + } + + var al, bl, + ap = [], + bp = [], + aup = a.parentNode, + bup = b.parentNode, + cur = aup; + + // If the nodes are siblings (or identical) we can do a quick check + if ( aup === bup ) { + return siblingCheck( a, b ); + + // If no parents were found then the nodes are disconnected + } else if ( !aup ) { + return -1; + + } else if ( !bup ) { + return 1; + } + + // Otherwise they're somewhere else in the tree so we need + // to build up a full list of the parentNodes for comparison + while ( cur ) { + ap.unshift( cur ); + cur = cur.parentNode; + } + + cur = bup; + + while ( cur ) { + bp.unshift( cur ); + cur = cur.parentNode; + } + + al = ap.length; + bl = bp.length; + + // Start walking down the tree looking for a discrepancy + for ( var i = 0; i < al && i < bl; i++ ) { + if ( ap[i] !== bp[i] ) { + return siblingCheck( ap[i], bp[i] ); + } + } + + // We ended someplace up the tree so do a sibling check + return i === al ? + siblingCheck( a, bp[i], -1 ) : + siblingCheck( ap[i], b, 1 ); + }; + + siblingCheck = function( a, b, ret ) { + if ( a === b ) { + return ret; + } + + var cur = a.nextSibling; + + while ( cur ) { + if ( cur === b ) { + return -1; + } + + cur = cur.nextSibling; + } + + return 1; + }; +} + +// Check to see if the browser returns elements by name when +// querying by getElementById (and provide a workaround) +(function(){ + // We're going to inject a fake input element with a specified name + var form = document.createElement("div"), + id = "script" + (new Date()).getTime(), + root = document.documentElement; + + form.innerHTML = ""; + + // Inject it into the root element, check its status, and remove it quickly + root.insertBefore( form, root.firstChild ); + + // The workaround has to do additional checks after a getElementById + // Which slows things down for other browsers (hence the branching) + if ( document.getElementById( id ) ) { + Expr.find.ID = function( match, context, isXML ) { + if ( typeof context.getElementById !== "undefined" && !isXML ) { + var m = context.getElementById(match[1]); + + return m ? + m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? + [m] : + undefined : + []; + } + }; + + Expr.filter.ID = function( elem, match ) { + var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); + + return elem.nodeType === 1 && node && node.nodeValue === match; + }; + } + + root.removeChild( form ); + + // release memory in IE + root = form = null; +})(); + +(function(){ + // Check to see if the browser returns only elements + // when doing getElementsByTagName("*") + + // Create a fake element + var div = document.createElement("div"); + div.appendChild( document.createComment("") ); + + // Make sure no comments are found + if ( div.getElementsByTagName("*").length > 0 ) { + Expr.find.TAG = function( match, context ) { + var results = context.getElementsByTagName( match[1] ); + + // Filter out possible comments + if ( match[1] === "*" ) { + var tmp = []; + + for ( var i = 0; results[i]; i++ ) { + if ( results[i].nodeType === 1 ) { + tmp.push( results[i] ); + } + } + + results = tmp; + } + + return results; + }; + } + + // Check to see if an attribute returns normalized href attributes + div.innerHTML = ""; + + if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" && + div.firstChild.getAttribute("href") !== "#" ) { + + Expr.attrHandle.href = function( elem ) { + return elem.getAttribute( "href", 2 ); + }; + } + + // release memory in IE + div = null; +})(); + +if ( document.querySelectorAll ) { + (function(){ + var oldSizzle = Sizzle, + div = document.createElement("div"), + id = "__sizzle__"; + + div.innerHTML = "

"; + + // Safari can't handle uppercase or unicode characters when + // in quirks mode. + if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) { + return; + } + + Sizzle = function( query, context, extra, seed ) { + context = context || document; + + // Only use querySelectorAll on non-XML documents + // (ID selectors don't work in non-HTML documents) + if ( !seed && !Sizzle.isXML(context) ) { + // See if we find a selector to speed up + var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query ); + + if ( match && (context.nodeType === 1 || context.nodeType === 9) ) { + // Speed-up: Sizzle("TAG") + if ( match[1] ) { + return makeArray( context.getElementsByTagName( query ), extra ); + + // Speed-up: Sizzle(".CLASS") + } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) { + return makeArray( context.getElementsByClassName( match[2] ), extra ); + } + } + + if ( context.nodeType === 9 ) { + // Speed-up: Sizzle("body") + // The body element only exists once, optimize finding it + if ( query === "body" && context.body ) { + return makeArray( [ context.body ], extra ); + + // Speed-up: Sizzle("#ID") + } else if ( match && match[3] ) { + var elem = context.getElementById( match[3] ); + + // Check parentNode to catch when Blackberry 4.6 returns + // nodes that are no longer in the document #6963 + if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items + // by name instead of ID + if ( elem.id === match[3] ) { + return makeArray( [ elem ], extra ); + } + + } else { + return makeArray( [], extra ); + } + } + + try { + return makeArray( context.querySelectorAll(query), extra ); + } catch(qsaError) {} + + // qSA works strangely on Element-rooted queries + // We can work around this by specifying an extra ID on the root + // and working up from there (Thanks to Andrew Dupont for the technique) + // IE 8 doesn't work on object elements + } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { + var oldContext = context, + old = context.getAttribute( "id" ), + nid = old || id, + hasParent = context.parentNode, + relativeHierarchySelector = /^\s*[+~]/.test( query ); + + if ( !old ) { + context.setAttribute( "id", nid ); + } else { + nid = nid.replace( /'/g, "\\$&" ); + } + if ( relativeHierarchySelector && hasParent ) { + context = context.parentNode; + } + + try { + if ( !relativeHierarchySelector || hasParent ) { + return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra ); + } + + } catch(pseudoError) { + } finally { + if ( !old ) { + oldContext.removeAttribute( "id" ); + } + } + } + } + + return oldSizzle(query, context, extra, seed); + }; + + for ( var prop in oldSizzle ) { + Sizzle[ prop ] = oldSizzle[ prop ]; + } + + // release memory in IE + div = null; + })(); +} + +(function(){ + var html = document.documentElement, + matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector; + + if ( matches ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9 fails this) + var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ), + pseudoWorks = false; + + try { + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( document.documentElement, "[test!='']:sizzle" ); + + } catch( pseudoError ) { + pseudoWorks = true; + } + + Sizzle.matchesSelector = function( node, expr ) { + // Make sure that attribute selectors are quoted + expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']"); + + if ( !Sizzle.isXML( node ) ) { + try { + if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) { + var ret = matches.call( node, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || !disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9, so check for that + node.document && node.document.nodeType !== 11 ) { + return ret; + } + } + } catch(e) {} + } + + return Sizzle(expr, null, null, [node]).length > 0; + }; + } +})(); + +(function(){ + var div = document.createElement("div"); + + div.innerHTML = "
"; + + // Opera can't find a second classname (in 9.6) + // Also, make sure that getElementsByClassName actually exists + if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) { + return; + } + + // Safari caches class attributes, doesn't catch changes (in 3.2) + div.lastChild.className = "e"; + + if ( div.getElementsByClassName("e").length === 1 ) { + return; + } + + Expr.order.splice(1, 0, "CLASS"); + Expr.find.CLASS = function( match, context, isXML ) { + if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) { + return context.getElementsByClassName(match[1]); + } + }; + + // release memory in IE + div = null; +})(); + +function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 && !isXML ){ + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( elem.nodeName.toLowerCase() === cur ) { + match = elem; + break; + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) { + for ( var i = 0, l = checkSet.length; i < l; i++ ) { + var elem = checkSet[i]; + + if ( elem ) { + var match = false; + + elem = elem[dir]; + + while ( elem ) { + if ( elem[ expando ] === doneName ) { + match = checkSet[elem.sizset]; + break; + } + + if ( elem.nodeType === 1 ) { + if ( !isXML ) { + elem[ expando ] = doneName; + elem.sizset = i; + } + + if ( typeof cur !== "string" ) { + if ( elem === cur ) { + match = true; + break; + } + + } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) { + match = elem; + break; + } + } + + elem = elem[dir]; + } + + checkSet[i] = match; + } + } +} + +if ( document.documentElement.contains ) { + Sizzle.contains = function( a, b ) { + return a !== b && (a.contains ? a.contains(b) : true); + }; + +} else if ( document.documentElement.compareDocumentPosition ) { + Sizzle.contains = function( a, b ) { + return !!(a.compareDocumentPosition(b) & 16); + }; + +} else { + Sizzle.contains = function() { + return false; + }; +} + +Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement; + + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +var posProcess = function( selector, context, seed ) { + var match, + tmpSet = [], + later = "", + root = context.nodeType ? [context] : context; + + // Position selectors must be done after the filter + // And so must :not(positional) so we move all PSEUDOs to the end + while ( (match = Expr.match.PSEUDO.exec( selector )) ) { + later += match[0]; + selector = selector.replace( Expr.match.PSEUDO, "" ); + } + + selector = Expr.relative[selector] ? selector + "*" : selector; + + for ( var i = 0, l = root.length; i < l; i++ ) { + Sizzle( selector, root[i], tmpSet, seed ); + } + + return Sizzle.filter( later, tmpSet ); +}; + +// EXPOSE +// Override sizzle attribute retrieval +Sizzle.attr = jQuery.attr; +Sizzle.selectors.attrMap = {}; +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[":"] = jQuery.expr.filters; +jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + +})(); + + +var runtil = /Until$/, + rparentsprev = /^(?:parents|prevUntil|prevAll)/, + // Note: This RegExp should be improved, or likely pulled from Sizzle + rmultiselector = /,/, + isSimple = /^.[^:#\[\.,]*$/, + slice = Array.prototype.slice, + POS = jQuery.expr.match.globalPOS, + // methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend({ + find: function( selector ) { + var self = this, + i, l; + + if ( typeof selector !== "string" ) { + return jQuery( selector ).filter(function() { + for ( i = 0, l = self.length; i < l; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + }); + } + + var ret = this.pushStack( "", "find", selector ), + length, n, r; + + for ( i = 0, l = this.length; i < l; i++ ) { + length = ret.length; + jQuery.find( selector, this[i], ret ); + + if ( i > 0 ) { + // Make sure that the results are unique + for ( n = length; n < ret.length; n++ ) { + for ( r = 0; r < length; r++ ) { + if ( ret[r] === ret[n] ) { + ret.splice(n--, 1); + break; + } + } + } + } + } + + return ret; + }, + + has: function( target ) { + var targets = jQuery( target ); + return this.filter(function() { + for ( var i = 0, l = targets.length; i < l; i++ ) { + if ( jQuery.contains( this, targets[i] ) ) { + return true; + } + } + }); + }, + + not: function( selector ) { + return this.pushStack( winnow(this, selector, false), "not", selector); + }, + + filter: function( selector ) { + return this.pushStack( winnow(this, selector, true), "filter", selector ); + }, + + is: function( selector ) { + return !!selector && ( + typeof selector === "string" ? + // If this is a positional selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + POS.test( selector ) ? + jQuery( selector, this.context ).index( this[0] ) >= 0 : + jQuery.filter( selector, this ).length > 0 : + this.filter( selector ).length > 0 ); + }, + + closest: function( selectors, context ) { + var ret = [], i, l, cur = this[0]; + + // Array (deprecated as of jQuery 1.7) + if ( jQuery.isArray( selectors ) ) { + var level = 1; + + while ( cur && cur.ownerDocument && cur !== context ) { + for ( i = 0; i < selectors.length; i++ ) { + + if ( jQuery( cur ).is( selectors[ i ] ) ) { + ret.push({ selector: selectors[ i ], elem: cur, level: level }); + } + } + + cur = cur.parentNode; + level++; + } + + return ret; + } + + // String + var pos = POS.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( i = 0, l = this.length; i < l; i++ ) { + cur = this[i]; + + while ( cur ) { + if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { + ret.push( cur ); + break; + + } else { + cur = cur.parentNode; + if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { + break; + } + } + } + } + + ret = ret.length > 1 ? jQuery.unique( ret ) : ret; + + return this.pushStack( ret, "closest", selectors ); + }, + + // Determine the position of an element within + // the matched set of elements + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; + } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + + // Locate the position of the desired element + return jQuery.inArray( + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[0] : elem, this ); + }, + + add: function( selector, context ) { + var set = typeof selector === "string" ? + jQuery( selector, context ) : + jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), + all = jQuery.merge( this.get(), set ); + + return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ? + all : + jQuery.unique( all ) ); + }, + + andSelf: function() { + return this.add( this.prevObject ); + } +}); + +// A painfully simple check to see if an element is disconnected +// from a document (should be improved, where feasible). +function isDisconnected( node ) { + return !node || !node.parentNode || node.parentNode.nodeType === 11; +} + +jQuery.each({ + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return jQuery.dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return jQuery.dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return jQuery.nth( elem, 2, "nextSibling" ); + }, + prev: function( elem ) { + return jQuery.nth( elem, 2, "previousSibling" ); + }, + nextAll: function( elem ) { + return jQuery.dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return jQuery.dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return jQuery.dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return jQuery.dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return jQuery.sibling( elem.firstChild ); + }, + contents: function( elem ) { + return jQuery.nodeName( elem, "iframe" ) ? + elem.contentDocument || elem.contentWindow.document : + jQuery.makeArray( elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var ret = jQuery.map( this, fn, until ); + + if ( !runtil.test( name ) ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + ret = jQuery.filter( selector, ret ); + } + + ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; + + if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) { + ret = ret.reverse(); + } + + return this.pushStack( ret, name, slice.call( arguments ).join(",") ); + }; +}); + +jQuery.extend({ + filter: function( expr, elems, not ) { + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 ? + jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : + jQuery.find.matches(expr, elems); + }, + + dir: function( elem, dir, until ) { + var matched = [], + cur = elem[ dir ]; + + while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { + if ( cur.nodeType === 1 ) { + matched.push( cur ); + } + cur = cur[dir]; + } + return matched; + }, + + nth: function( cur, result, dir, elem ) { + result = result || 1; + var num = 0; + + for ( ; cur; cur = cur[dir] ) { + if ( cur.nodeType === 1 && ++num === result ) { + break; + } + } + + return cur; + }, + + sibling: function( n, elem ) { + var r = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + r.push( n ); + } + } + + return r; + } +}); + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, keep ) { + + // Can't pass null or undefined to indexOf in Firefox 4 + // Set to 0 to skip string check + qualifier = qualifier || 0; + + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep(elements, function( elem, i ) { + var retVal = !!qualifier.call( elem, i, elem ); + return retVal === keep; + }); + + } else if ( qualifier.nodeType ) { + return jQuery.grep(elements, function( elem, i ) { + return ( elem === qualifier ) === keep; + }); + + } else if ( typeof qualifier === "string" ) { + var filtered = jQuery.grep(elements, function( elem ) { + return elem.nodeType === 1; + }); + + if ( isSimple.test( qualifier ) ) { + return jQuery.filter(qualifier, filtered, !keep); + } else { + qualifier = jQuery.filter( qualifier, filtered ); + } + } + + return jQuery.grep(elements, function( elem, i ) { + return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; + }); +} + + + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g, + rleadingWhitespace = /^\s+/, + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig, + rtagName = /<([\w:]+)/, + rtbody = /]", "i"), + // checked="checked" or checked + rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, + rscriptType = /\/(java|ecma)script/i, + rcleanScript = /^\s*", "" ], + legend: [ 1, "
", "
" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + col: [ 2, "", "
" ], + area: [ 1, "", "" ], + _default: [ 0, "", "" ] + }, + safeFragment = createSafeFragment( document ); + +wrapMap.optgroup = wrapMap.option; +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// IE can't serialize and