diff --git a/.hgignore b/.hgignore index 32639a1458..b60e02f225 100644 --- a/.hgignore +++ b/.hgignore @@ -38,6 +38,7 @@ indra/newview/character indra/newview/fmod.dll indra/newview/mozilla-theme indra/newview/mozilla-universal-darwin.tgz +indra/newview/res/ll_icon.* indra/newview/res-sdl indra/newview/vivox-runtime indra/newview/English.lproj/InfoPlist.strings diff --git a/.hgtags b/.hgtags index dfdc850cd2..cf24c4e866 100644 --- a/.hgtags +++ b/.hgtags @@ -182,29 +182,14 @@ e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1 493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release 2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1 2c7e459e0c883f8e406b932e41e60097e9ee077e 2.8.1-beta1 +29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release +29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release +4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix +4780e3bd2b3042f91be3426151f28c30d199bb3b 2.8.1-hotfix 54bc7823ad4e3a436fef79710f685a7372bbf795 2.8.2-start -493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release +29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release +29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start -4f777ffb99fefdc6497c61385c22688ff149c659 SL-2.0.0 -668851b2ef0f8cf8df07a0fba429e4a6c1e70abb SL-2.0.1 -b03065d018b8a2e28b7de85b293a4c992cb4c12d SL-2.1.0 -bb38ff1a763738609e1b3cada6d15fa61e5e84b9 SL-2.1.1 -1415e6538d54fd5d568ee88343424d57c6803c2c SL-2.2.0 -6ad3d6fa35a4e320e9ce442fce2bf9c7fc852556 SL-2.3.0 -1ed382c6a08ba3850b6ce9061bc551ddece0ea07 SL-2.4.0 -b723921b5c711bd24dbe77dc76ef488b544dac78 SL-2.5.0 -4dede9ae1ec74d41f6887719f6f1de7340d8578d SL-2.5.1 -b53a0576eec80614d7767ed72b40ed67aeff27c9 SL-2.5.2 -42f32494bac475d0737799346f6831558ae8bf5d SL-2.6.0 -c9182ed77d427c759cfacf49a7b71a2e20d522aa SL-2.6.1 -214180ad5714ce8392b82bbebcc92f4babd98300 SL-2.6.2 -8f2da1701c81a62352df2b8d413d27fb2cade9a6 SL-2.6.3 -dac76a711da5f1489a01c1fa62ec97d99c25736d SL-2.6.6 -be2000b946f8cb3de5f44b2d419287d4c48ec4eb SL-2.6.8 -77e5a08344c95738ab879f9671b7758cddd712a3 SL-2.6.9 -a9abb9633a266c8d2fe62411cfd1c86d32da72bf SL-2.7.1 -057f319dd8eccdf63a54d99686c68cdcb31b6abc SL-2.7.4 -6866d9df6efbd441c66451debd376d21211de39c SL-2.7.5 493d9127ee50e84ba08a736a65a23ca86f7a5b01 SL-2-8-0 425f96b1e81e01644bf5e951961e7d1023bffb89 RLVa-1.2.0 fc0cbb86f5bd6e7737159e35aea2c4cf9f619b62 RLVa-1.2.1 @@ -214,3 +199,44 @@ fc0cbb86f5bd6e7737159e35aea2c4cf9f619b62 RLVa-1.2.1 a563f7e215c7883c1cfd20908085687a0ed96284 RLVa-1.4.0 40644beae9c4a617504163d5c9f195dc7bfff1b4 RLVa-1.4.1 637901b23d335e4240c2c1763b45d1df71be84be FSmerge-2.8.3 +599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1 +599677276b227357140dda35bea4a2c18e2e67b5 2.8.3-beta1 +fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release +fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release +46a010f4885a9d223b511eac553ba5720284b1dc 3.0.0-start +b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1 +b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1 +6b678ea52f90d5c14181661dcd2546e25bde483e 3.0.0-start +82a2079ffcb57ecb1b3849cb41376b443e1eb912 3.0.1-start +364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1 +364fd63517fbacbbcb9129d096187171ba8c9e48 3.0.1-beta1 +f2412ecd6740803ea9452f1d17fd872e263a0df7 3.0.2-start +1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-78_3.0.0-release +1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release +42784bf50fa01974bada2a1af3892ee09c93fcda DRTVWR-83_3.0.2-beta1 +42784bf50fa01974bada2a1af3892ee09c93fcda 3.0.2-beta1 +e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e DRTVWR-86_3.0.2-beta2 +e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e 3.0.2-beta2 +b95ddac176ac944efdc85cbee94ac2e1eab44c79 3.0.3-start +1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-78_3.0.0-release +0000000000000000000000000000000000000000 DRTVWR-78_3.0.0-release +1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release +6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1 +6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 3.0.3-beta1 +586907287be581817b2422b5137971b22d54ea48 3.0.4-start +61aa7974df089e8621fe9a4c69bcdefdb3cc208a DRTVWR-89_3.0.3-beta2 +61aa7974df089e8621fe9a4c69bcdefdb3cc208a 3.0.3-beta2 +0496d2f74043cf4e6058e76ac3db03d44cff42ce DRTVWR-84_3.0.3-release +0496d2f74043cf4e6058e76ac3db03d44cff42ce 3.0.3-release +92a3aa04775438226399b19deee12ac3b5a62838 3.0.5-start +c7282e59f374ee904bd793c3c444455e3399b0c5 3.1.0-start +2657fa785bbfac115852c41bd0adaff74c2ad5da DRTVWR-93_3.1.0-beta1 +2657fa785bbfac115852c41bd0adaff74c2ad5da 3.1.0-beta1 +dbaaef19266478a20654c46395300640163e98e3 DRTVWR-96_3.1.0-beta2 +dbaaef19266478a20654c46395300640163e98e3 3.1.0-beta2 +dbaaef19266478a20654c46395300640163e98e3 DRTVWR-96_3.1.0-beta2 +bc01ee26fd0f1866e266429e85f76340523e91f1 DRTVWR-96_3.1.0-beta2 +dbaaef19266478a20654c46395300640163e98e3 3.1.0-beta2 +bc01ee26fd0f1866e266429e85f76340523e91f1 3.1.0-beta2 +ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 DRTVWR-92_3.1.0-release +ae2de7b0b33c03dc5bdf3a7bfa54463b512221b2 3.1.0-release diff --git a/BuildParams b/BuildParams old mode 100755 new mode 100644 index 58852110ef..1c76b6f935 --- a/BuildParams +++ b/BuildParams @@ -42,9 +42,17 @@ snowstorm_viewer-development.viewer_channel = "Second Life Development" snowstorm_viewer-development.login_channel = "Second Life Development" snowstorm_viewer-development.build_viewer_update_version_manager = false snowstorm_viewer-development.email = viewer-development-builds@lists.secondlife.com +snowstorm_viewer-development.build_enforce_coding_policy = true +snowstorm_viewer-development.codeticket_add_context = true + +Snowstorm_viewer-project-review.build_debug_release_separately = true +Snowstorm_viewer-project-review.codeticket_add_context = true +Snowstorm_viewer-project-review.viewer_channel = "Project Viewer - Snowstorm Team" +Snowstorm_viewer-project-review.login_channel = "Project Viewer - Snowstorm Team" +Snowstorm_viewer-project-review.codeticket_add_context = true # ======================================== -# Viewer Beta +# Viewer Beta (Owner: Dessie Linden) # ======================================== viewer-beta.viewer_channel = "Second Life Beta Viewer" viewer-beta.login_channel = "Second Life Beta Viewer" @@ -58,7 +66,7 @@ viewer-pre-beta.build_viewer_update_version_manager = true # ======================================== -# Viewer Release +# Viewer Release (Owner: Dessie Linden) # ======================================== viewer-release.viewer_channel = "Second Life Release" viewer-release.login_channel = "Second Life Release" @@ -69,7 +77,7 @@ viewer-pre-release.viewer_channel = "Second Life Release" viewer-pre-release.login_channel = "Second Life Release" viewer-pre-release.build_debug_release_separately = true viewer-pre-release.build_viewer_update_version_manager = true -#viewer-pre-release.release-viewer.jira = DRTVWR-46 +#viewer-pre-release.release-viewer.jira = DRTVWR-92 # ======================================== @@ -140,12 +148,9 @@ cg_viewer-development_lenny.email = cg@lindenlab.com # oz # ================ -snowstorm_project-windlight.build_debug_release_separately = true -snowstorm_project-windlight.viewer_channel = "Second Life Project Windlight Region" -snowstorm_project-windlight.login_channel = "Second Life Project Windlight Region" - oz_viewer-devreview.build_debug_release_separately = true oz_viewer-devreview.codeticket_add_context = false +oz_viewer-devreview.build_enforce_coding_policy = true oz_project-1.build_debug_release_separately = true oz_project-1.codeticket_add_context = false @@ -158,9 +163,8 @@ oz_project-4.codeticket_add_context = false oz_viewer-beta-review.build_debug_release_separately = true oz_viewer-beta-review.codeticket_add_context = false - -oz_viewer-poreview.build_debug_release_separately = true -oz_viewer-poreview.codeticket_add_context = false +oz_viewer-beta-review.viewer_channel = "Second Life Beta Viewer" +oz_viewer-beta-review.login_channel = "Second Life Beta Viewer" # ================================================================= # asset delivery 2010 projects diff --git a/autobuild.xml b/autobuild.xml index cf76400c34..a41acfb731 100755 --- a/autobuild.xml +++ b/autobuild.xml @@ -1112,7 +1112,7 @@ hash 362654a472ef7368d4c803ae3fb89d95 url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/238959/arch/Darwin/installer/llconvexdecomposition-0.1-darwin-20110819.tar.bz2 + http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/238959/arch/Darwin/installer/llconvexdecomposition-0.1-darwin-20110819.tar.bz2 name darwin @@ -1124,7 +1124,7 @@ hash c7801d899daec5338fbe95053255b7e7 url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/238959/arch/Linux/installer/llconvexdecomposition-0.1-linux-20110819.tar.bz2 + http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/238959/arch/Linux/installer/llconvexdecomposition-0.1-linux-20110819.tar.bz2 name linux @@ -1136,7 +1136,7 @@ hash 6ecf2f85f03c5ae87fe45769566a5660 url - http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/238959/arch/CYGWIN/installer/llconvexdecomposition-0.1-windows-20110819.tar.bz2 + http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-llconvexdecomposition/rev/238959/arch/CYGWIN/installer/llconvexdecomposition-0.1-windows-20110819.tar.bz2 name windows @@ -1160,7 +1160,7 @@ hash a5f53e09f67271fd50f1131ffdda9d27 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/238958/arch/Darwin/installer/llconvexdecompositionstub-0.3-darwin-20110819.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/238958/arch/Darwin/installer/llconvexdecompositionstub-0.3-darwin-20110819.tar.bz2 name darwin @@ -1172,7 +1172,7 @@ hash 0006a964f1497f55a5f181b7042d2d22 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/238958/arch/Linux/installer/llconvexdecompositionstub-0.3-linux-20110819.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/238958/arch/Linux/installer/llconvexdecompositionstub-0.3-linux-20110819.tar.bz2 name linux @@ -1184,7 +1184,7 @@ hash b859e7e3bb03ebb467f0309f46422995 url - http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/238958/arch/CYGWIN/installer/llconvexdecompositionstub-0.3-windows-20110819.tar.bz2 + http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-llconvexdecompositionstub/rev/238958/arch/CYGWIN/installer/llconvexdecompositionstub-0.3-windows-20110819.tar.bz2 name windows @@ -2069,12 +2069,12 @@ build + command + xcodebuild filters setenv - command - xcodebuild options -configuration Debug @@ -2123,12 +2123,12 @@ build + command + xcodebuild filters setenv - command - xcodebuild options -configuration RelWithDebInfo @@ -2179,12 +2179,12 @@ build + command + xcodebuild filters setenv - command - xcodebuild options -configuration Release diff --git a/doc/contributions.txt b/doc/contributions.txt index bcdc5a63d2..a9c2f2caaf 100644 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -65,7 +65,7 @@ Aimee Trescothick Alejandro Rosenthal VWR-1184 Aleric Inglewood - SNOW-84 + OPEN-38 SNOW-240 SNOW-477 SNOW-522 @@ -575,6 +575,8 @@ Jonathan Yap STORM-1567 STORM-1572 STORM-1574 + STORM-1579 + STORM-1639 Kadah Coba STORM-1060 Jondan Lundquist @@ -622,6 +624,7 @@ Latif Khalifa VWR-5370 leliel Mirihi STORM-1100 + STORM-1602 len Starship Lisa Lowe CT-218 @@ -1032,6 +1035,9 @@ Synystyr Texan Takeda Terrawyng TankMaster Finesmith STORM-1100 + STORM-1602 + STORM-1258 + VWR-26622 Talamasca Tali Rosca Tayra Dagostino diff --git a/indra/Version b/indra/Version index d133faa312..8f6394c613 100644 --- a/indra/Version +++ b/indra/Version @@ -1 +1 @@ -VERSION_VIEWER=3.1.1 +VERSION_VIEWER=3.2.1 diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index d06306e8c5..29cedac1ac 100755 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -75,7 +75,7 @@ if(WINDOWS) if (MSVC80) FIND_PATH(debug_msvc8_redist_path msvcr80d.dll PATHS - ${MSVC_DEBUG_REDIST_PATH} + ${MSVC_DEBUG_REDIST_PATH} [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/Debug_NonRedist/x86/Microsoft.VC80.DebugCRT NO_DEFAULT_PATH NO_DEFAULT_PATH @@ -100,7 +100,7 @@ if (MSVC80) FIND_PATH(release_msvc8_redist_path msvcr80.dll PATHS - ${MSVC_REDIST_PATH} + ${MSVC_REDIST_PATH} [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\8.0\\Setup\\VC;ProductDir]/redist/x86/Microsoft.VC80.CRT NO_DEFAULT_PATH NO_DEFAULT_PATH @@ -213,12 +213,12 @@ elseif(DARWIN) libexpat.1.5.2.dylib libexpat.dylib libGLOD.dylib - libllqtwebkit.dylib - libminizip.a + libllqtwebkit.dylib + libminizip.a libndofdev.dylib libhunspell-1.3.dylib libexception_handler.dylib - libcollada14dom.dylib + libcollada14dom.dylib ) # fmod is statically linked on darwin @@ -254,19 +254,19 @@ elseif(LINUX) libaprutil-1.so.0 libatk-1.0.so libbreakpad_client.so.0 - libcollada14dom.so + libcollada14dom.so libcrypto.so.1.0.0 libdb-5.1.so libexpat.so libexpat.so.1 - libglod.so + libglod.so libgmock_main.so libgmock.so.0 libgmodule-2.0.so libgobject-2.0.so libgtest_main.so libgtest.so.0 - libminizip.so + libminizip.so libopenal.so libopenjpeg.so libssl.so diff --git a/indra/cmake/FMOD.cmake b/indra/cmake/FMOD.cmake index cb5124812d..3586c1160a 100644 --- a/indra/cmake/FMOD.cmake +++ b/indra/cmake/FMOD.cmake @@ -16,15 +16,15 @@ if (FMOD) include(FindFMOD) else (STANDALONE) if (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) - # If the path have been specified in the arguments, use that + # If the path have been specified in the arguments, use that set(FMOD_LIBRARIES ${FMOD_LIBRARY}) - MESSAGE(STATUS "Using FMOD path: ${FMOD_LIBRARIES}, ${FMOD_INCLUDE_DIR}") + MESSAGE(STATUS "Using FMOD path: ${FMOD_LIBRARIES}, ${FMOD_INCLUDE_DIR}") else (FMOD_LIBRARY AND FMOD_INCLUDE_DIR) - # If not, we're going to try to get the package listed in autobuild.xml - # Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL) - # as accessing the private LL location will fail if you don't have the credential - include(Prebuilt) - use_prebuilt_binary(fmod) + # If not, we're going to try to get the package listed in autobuild.xml + # Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL) + # as accessing the private LL location will fail if you don't have the credential + include(Prebuilt) + use_prebuilt_binary(fmod) if (WINDOWS) set(FMOD_LIBRARY fmod) elseif (DARWIN) diff --git a/indra/cmake/FindAutobuild.cmake b/indra/cmake/FindAutobuild.cmake index 45db2b6ed0..4b5fd484ae 100644 --- a/indra/cmake/FindAutobuild.cmake +++ b/indra/cmake/FindAutobuild.cmake @@ -21,10 +21,10 @@ IF (NOT AUTOBUILD_EXECUTABLE) AUTOBUILD_EXECUTABLE NAMES ${AUTOBUILD_EXE_NAMES} PATHS - ENV PATH - ${CMAKE_SOURCE_DIR}/.. - ${CMAKE_SOURCE_DIR}/../.. - ${CMAKE_SOURCE_DIR}/../../.. + ENV PATH + ${CMAKE_SOURCE_DIR}/.. + ${CMAKE_SOURCE_DIR}/../.. + ${CMAKE_SOURCE_DIR}/../../.. PATH_SUFFIXES "/autobuild/bin/" ) @@ -33,7 +33,7 @@ IF (NOT AUTOBUILD_EXECUTABLE) MESSAGE(STATUS "Using autobuild at: ${AUTOBUILD_EXECUTABLE}") ELSE (AUTOBUILD_EXECUTABLE) IF (AUTOBUILD_FIND_REQUIRED) - MESSAGE(FATAL_ERROR "Could not find autobuild executable") + MESSAGE(FATAL_ERROR "Could not find autobuild executable") ENDIF (AUTOBUILD_FIND_REQUIRED) ENDIF (AUTOBUILD_EXECUTABLE) diff --git a/indra/cmake/FindGLH.cmake b/indra/cmake/FindGLH.cmake new file mode 100644 index 0000000000..3d16adaf03 --- /dev/null +++ b/indra/cmake/FindGLH.cmake @@ -0,0 +1,30 @@ +# -*- cmake -*- + +# - Find GLH +# Find the Graphic Library Helper includes. +# This module defines +# GLH_INCLUDE_DIR, where to find glh/glh_linear.h. +# GLH_FOUND, If false, do not try to use GLH. + +find_path(GLH_INCLUDE_DIR glh/glh_linear.h + NO_SYSTEM_ENVIRONMENT_PATH + ) + +if (GLH_INCLUDE_DIR) + set(GLH_FOUND "YES") +else (GLH_INCLUDE_DIR) + set(GLH_FOUND "NO") +endif (GLH_INCLUDE_DIR) + +if (GLH_FOUND) + if (NOT GLH_FIND_QUIETLY) + message(STATUS "Found GLH: ${GLH_INCLUDE_DIR}") + set(GLH_FIND_QUIETLY TRUE) # Only alert us the first time + endif (NOT GLH_FIND_QUIETLY) +else (GLH_FOUND) + if (GLH_FIND_REQUIRED) + message(FATAL_ERROR "Could not find GLH") + endif (GLH_FIND_REQUIRED) +endif (GLH_FOUND) + +mark_as_advanced(GLH_INCLUDE_DIR) diff --git a/indra/cmake/FindJsonCpp.cmake b/indra/cmake/FindJsonCpp.cmake index cf84b309c1..0b056ada58 100644 --- a/indra/cmake/FindJsonCpp.cmake +++ b/indra/cmake/FindJsonCpp.cmake @@ -24,8 +24,8 @@ EXEC_PROGRAM(${CMAKE_CXX_COMPILER} # Try to find a library that was compiled with the same compiler version as we currently use. SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson_linux-gcc-${_gcc_COMPILER_VERSION}_libmt.so) IF (STANDALONE) - # On standalone, assume that the system installed library was compiled with the used compiler. - SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson.so) + # On standalone, assume that the system installed library was compiled with the used compiler. + SET(JSONCPP_NAMES ${JSONCPP_NAMES} libjson.so) ENDIF (STANDALONE) FIND_LIBRARY(JSONCPP_LIBRARY NAMES ${JSONCPP_NAMES} diff --git a/indra/cmake/FindLLQtWebkit.cmake b/indra/cmake/FindLLQtWebkit.cmake index 4bf5f5cb73..2f666d3bf0 100644 --- a/indra/cmake/FindLLQtWebkit.cmake +++ b/indra/cmake/FindLLQtWebkit.cmake @@ -35,7 +35,7 @@ find_path(LLQTWEBKIT_INCLUDE_DIR llqtwebkit.h NO_SYSTEM_ENVIRONMENT_PATH HINTS $ find_library(LLQTWEBKIT_LIBRARY NAMES llqtwebkit NO_SYSTEM_ENVIRONMENT_PATH HINTS ${LLQTWEBKIT_LIBRARY_DIRS}) -if (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND) # If pkg-config couldn't find it, pretend we don't have pkg-config. +if (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND) # If pkg-config couldn't find it, pretend we don't have pkg-config. set(LLQTWEBKIT_LIBRARIES llqtwebkit) get_filename_component(LLQTWEBKIT_LIBRARY_DIRS ${LLQTWEBKIT_LIBRARY} PATH) endif (NOT PKG_CONFIG_FOUND OR NOT LLQTWEBKIT_FOUND) diff --git a/indra/cmake/FindZLIB.cmake b/indra/cmake/FindZLIB.cmake index 6d630f1ba9..03a7db9d6f 100644 --- a/indra/cmake/FindZLIB.cmake +++ b/indra/cmake/FindZLIB.cmake @@ -30,12 +30,12 @@ endif (ZLIB_LIBRARY AND ZLIB_INCLUDE_DIR) if (ZLIB_FOUND) if (NOT ZLIB_FIND_QUIETLY) - message(STATUS "Found ZLIB: ${ZLIB_LIBRARIES}") - SET(ZLIB_FIND_QUIETLY TRUE) + message(STATUS "Found ZLIB: ${ZLIB_LIBRARIES}") + SET(ZLIB_FIND_QUIETLY TRUE) endif (NOT ZLIB_FIND_QUIETLY) else (ZLIB_FOUND) if (ZLIB_FIND_REQUIRED) - message(FATAL_ERROR "Could not find ZLIB library") + message(FATAL_ERROR "Could not find ZLIB library") endif (ZLIB_FIND_REQUIRED) endif (ZLIB_FOUND) diff --git a/indra/cmake/GLH.cmake b/indra/cmake/GLH.cmake new file mode 100644 index 0000000000..911dbe4017 --- /dev/null +++ b/indra/cmake/GLH.cmake @@ -0,0 +1,11 @@ +# -*- cmake -*- +include(Prebuilt) + +set(GLH_FIND_REQUIRED TRUE) +set(GLH_FIND_QUIETLY TRUE) + +if (STANDALONE) + include(FindGLH) +else (STANDALONE) + use_prebuilt_binary(glh_linear) +endif (STANDALONE) diff --git a/indra/cmake/GoogleMock.cmake b/indra/cmake/GoogleMock.cmake index 06d6d847a0..c4c96a9af7 100644 --- a/indra/cmake/GoogleMock.cmake +++ b/indra/cmake/GoogleMock.cmake @@ -8,7 +8,7 @@ set(GOOGLEMOCK_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include) if (LINUX) - # VWR-24366: gmock is underlinked, it needs gtest. + # VWR-24366: gmock is underlinked, it needs gtest. set(GOOGLEMOCK_LIBRARIES gmock -Wl,--no-as-needed gtest -Wl,--as-needed) diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake index 8740e36753..d9f91193be 100644 --- a/indra/cmake/GooglePerfTools.cmake +++ b/indra/cmake/GooglePerfTools.cmake @@ -14,7 +14,7 @@ else (STANDALONE) if (LINUX) use_prebuilt_binary(tcmalloc) set(TCMALLOC_LIBRARIES - tcmalloc) + tcmalloc) set(PROFILER_LIBRARIES profiler) set(GOOGLE_PERFTOOLS_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include) diff --git a/indra/cmake/LLPlugin.cmake b/indra/cmake/LLPlugin.cmake index 7ee404b9bd..399cb332dd 100644 --- a/indra/cmake/LLPlugin.cmake +++ b/indra/cmake/LLPlugin.cmake @@ -8,7 +8,7 @@ set(LLPLUGIN_INCLUDE_DIRS if (LINUX) # In order to support using ld.gold on linux, we need to explicitely # specify all libraries that llplugin uses. - set(LLPLUGIN_LIBRARIES llplugin pthread) + set(LLPLUGIN_LIBRARIES llplugin pthread) else (LINUX) - set(LLPLUGIN_LIBRARIES llplugin) + set(LLPLUGIN_LIBRARIES llplugin) endif (LINUX) diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake index e68d16ed08..f15a2c2649 100644 --- a/indra/cmake/LLPrimitive.cmake +++ b/indra/cmake/LLPrimitive.cmake @@ -10,7 +10,7 @@ set(LLPRIMITIVE_INCLUDE_DIRS ${LIBS_OPEN_DIR}/llprimitive ) if (WINDOWS) - set(LLPRIMITIVE_LIBRARIES + set(LLPRIMITIVE_LIBRARIES debug llprimitive optimized llprimitive debug libcollada14dom22-d diff --git a/indra/cmake/LLRender.cmake b/indra/cmake/LLRender.cmake index c47e8878e9..8427928151 100644 --- a/indra/cmake/LLRender.cmake +++ b/indra/cmake/LLRender.cmake @@ -1,9 +1,11 @@ # -*- cmake -*- include(FreeType) +include(GLH) set(LLRENDER_INCLUDE_DIRS ${LIBS_OPEN_DIR}/llrender + ${GLH_INCLUDE_DIR} ) if (SERVER AND LINUX) diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake index e29076c738..14dd67f32f 100644 --- a/indra/cmake/LLSharedLibs.cmake +++ b/indra/cmake/LLSharedLibs.cmake @@ -38,18 +38,17 @@ endmacro(ll_deploy_sharedlibs_command) # ll_stage_sharedlib # Performs config and adds a copy command for a sharedlib target. macro(ll_stage_sharedlib DSO_TARGET) - if(SHARED_LIB_STAGING_DIR) - # target gets written to the DLL staging directory. - # Also this directory is shared with RunBuildTest.cmake, y'know, for the tests. - set_target_properties(${DSO_TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${SHARED_LIB_STAGING_DIR}) - if(NOT WINDOWS) - get_target_property(DSO_PATH ${DSO_TARGET} LOCATION) - get_filename_component(DSO_FILE ${DSO_PATH} NAME) - if(DARWIN) - set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources) - else(DARWIN) - set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}) - endif(DARWIN) + # target gets written to the DLL staging directory. + # Also this directory is shared with RunBuildTest.cmake, y'know, for the tests. + set_target_properties(${DSO_TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${SHARED_LIB_STAGING_DIR}) + if(NOT WINDOWS) + get_target_property(DSO_PATH ${DSO_TARGET} LOCATION) + get_filename_component(DSO_FILE ${DSO_PATH} NAME) + if(DARWIN) + set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}/Resources) + else(DARWIN) + set(SHARED_LIB_STAGING_DIR_CONFIG ${SHARED_LIB_STAGING_DIR}/${CMAKE_CFG_INTDIR}) + endif(DARWIN) # *TODO - maybe make this a symbolic link? -brad add_custom_command( @@ -63,7 +62,6 @@ macro(ll_stage_sharedlib DSO_TARGET) COMMENT "Copying llcommon to the staging folder." ) endif(NOT WINDOWS) - endif(SHARED_LIB_STAGING_DIR) if (DARWIN) set_target_properties(${DSO_TARGET} PROPERTIES diff --git a/indra/cmake/LScript.cmake b/indra/cmake/LScript.cmake index 86bfcb7440..21e78fc2c0 100644 --- a/indra/cmake/LScript.cmake +++ b/indra/cmake/LScript.cmake @@ -13,4 +13,4 @@ set(LSCRIPT_LIBRARIES lscript_library ) -set(LSCRIPT_EXECUTE_MONO_LIBRARIES lscript_execute_mono) \ No newline at end of file +set(LSCRIPT_EXECUTE_MONO_LIBRARIES lscript_execute_mono) diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake index 07db6ab257..c5f9e2c579 100644 --- a/indra/cmake/Linking.cmake +++ b/indra/cmake/Linking.cmake @@ -2,22 +2,19 @@ include(Variables) - -if (NOT STANDALONE) - set(ARCH_PREBUILT_DIRS ${AUTOBUILD_INSTALL_DIR}/lib) - set(ARCH_PREBUILT_DIRS_RELEASE ${AUTOBUILD_INSTALL_DIR}/lib/release) - set(ARCH_PREBUILT_DIRS_DEBUG ${AUTOBUILD_INSTALL_DIR}/lib/debug) - if (WINDOWS) - set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs) - set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs) - elseif (LINUX) - set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/lib) - set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin) - elseif (DARWIN) - set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs) - set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs/\$(CONFIGURATION)") - endif (WINDOWS) -endif (NOT STANDALONE) +set(ARCH_PREBUILT_DIRS ${AUTOBUILD_INSTALL_DIR}/lib) +set(ARCH_PREBUILT_DIRS_RELEASE ${AUTOBUILD_INSTALL_DIR}/lib/release) +set(ARCH_PREBUILT_DIRS_DEBUG ${AUTOBUILD_INSTALL_DIR}/lib/debug) +if (WINDOWS) + set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs) + set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs) +elseif (LINUX) + set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/lib) + set(EXE_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs/bin) +elseif (DARWIN) + set(SHARED_LIB_STAGING_DIR ${CMAKE_BINARY_DIR}/sharedlibs) + set(EXE_STAGING_DIR "${CMAKE_BINARY_DIR}/sharedlibs/\$(CONFIGURATION)") +endif (WINDOWS) # Autobuild packages must provide 'release' versions of libraries, but may provide versions for # specific build types. AUTOBUILD_LIBS_INSTALL_DIRS lists first the build type directory and then diff --git a/indra/cmake/NDOF.cmake b/indra/cmake/NDOF.cmake index 7a463d1190..be6fe415f2 100644 --- a/indra/cmake/NDOF.cmake +++ b/indra/cmake/NDOF.cmake @@ -5,19 +5,19 @@ set(NDOF ON CACHE BOOL "Use NDOF space navigator joystick library.") if (NDOF) if (STANDALONE) - set(NDOF_FIND_REQUIRED ON) - include(FindNDOF) + set(NDOF_FIND_REQUIRED ON) + include(FindNDOF) else (STANDALONE) - use_prebuilt_binary(ndofdev) + use_prebuilt_binary(ndofdev) - if (WINDOWS) - set(NDOF_LIBRARY libndofdev) - elseif (DARWIN OR LINUX) - set(NDOF_LIBRARY ndofdev) - endif (WINDOWS) + if (WINDOWS) + set(NDOF_LIBRARY libndofdev) + elseif (DARWIN OR LINUX) + set(NDOF_LIBRARY ndofdev) + endif (WINDOWS) - set(NDOF_INCLUDE_DIR ${ARCH_PREBUILT_DIRS}/include/ndofdev) - set(NDOF_FOUND 1) + set(NDOF_INCLUDE_DIR ${ARCH_PREBUILT_DIRS}/include/ndofdev) + set(NDOF_FOUND 1) endif (STANDALONE) endif (NDOF) diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake index 7131445464..91b49e75d7 100644 --- a/indra/cmake/WebKitLibPlugin.cmake +++ b/indra/cmake/WebKitLibPlugin.cmake @@ -8,21 +8,21 @@ if (STANDALONE) include(${QT_USE_FILE}) set(QTDIR $ENV{QTDIR}) if (QTDIR AND NOT "${QT_BINARY_DIR}" STREQUAL "${QTDIR}/bin") - message(FATAL_ERROR "\"${QT_BINARY_DIR}\" is unequal \"${QTDIR}/bin\"; " - "Qt is found by looking for qmake in your PATH. " - "Please set your PATH such that 'qmake' is found in \$QTDIR/bin, " - "or unset QTDIR if the found Qt is correct.") - endif (QTDIR AND NOT "${QT_BINARY_DIR}" STREQUAL "${QTDIR}/bin") + message(FATAL_ERROR "\"${QT_BINARY_DIR}\" is unequal \"${QTDIR}/bin\"; " + "Qt is found by looking for qmake in your PATH. " + "Please set your PATH such that 'qmake' is found in \$QTDIR/bin, " + "or unset QTDIR if the found Qt is correct.") + endif (QTDIR AND NOT "${QT_BINARY_DIR}" STREQUAL "${QTDIR}/bin") find_package(LLQtWebkit REQUIRED QUIET) # Add the plugins. set(QT_PLUGIN_LIBRARIES) foreach(qlibname qgif qjpeg) - find_library(QT_PLUGIN_${qlibname} ${qlibname} PATHS ${QT_PLUGINS_DIR}/imageformats NO_DEFAULT_PATH) - if (QT_PLUGIN_${qlibname}) - list(APPEND QT_PLUGIN_LIBRARIES ${QT_PLUGIN_${qlibname}}) - else (QT_PLUGIN_${qtlibname}) - message(FATAL_ERROR "Could not find the Qt plugin ${qlibname} in \"${QT_PLUGINS_DIR}/imageformats\"!") - endif (QT_PLUGIN_${qlibname}) + find_library(QT_PLUGIN_${qlibname} ${qlibname} PATHS ${QT_PLUGINS_DIR}/imageformats NO_DEFAULT_PATH) + if (QT_PLUGIN_${qlibname}) + list(APPEND QT_PLUGIN_LIBRARIES ${QT_PLUGIN_${qlibname}}) + else (QT_PLUGIN_${qtlibname}) + message(FATAL_ERROR "Could not find the Qt plugin ${qlibname} in \"${QT_PLUGINS_DIR}/imageformats\"!") + endif (QT_PLUGIN_${qlibname}) endforeach(qlibname) # qjpeg depends on libjpeg list(APPEND QT_PLUGIN_LIBRARIES jpeg) diff --git a/indra/fix-incredibuild.py b/indra/fix-incredibuild.py index 4a28dd5011..171e4c7889 100644 --- a/indra/fix-incredibuild.py +++ b/indra/fix-incredibuild.py @@ -1,3 +1,26 @@ +#!/usr/bin/env python +## +## $LicenseInfo:firstyear=2011&license=viewerlgpl$ +## Second Life Viewer Source Code +## Copyright (C) 2011, Linden Research, Inc. +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; +## version 2.1 of the License only. +## +## This library 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 +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +## $/LicenseInfo$ + import sys import os import glob diff --git a/indra/integration_tests/llimage_libtest/CMakeLists.txt b/indra/integration_tests/llimage_libtest/CMakeLists.txt index a687e60610..af5c9fb2e7 100644 --- a/indra/integration_tests/llimage_libtest/CMakeLists.txt +++ b/indra/integration_tests/llimage_libtest/CMakeLists.txt @@ -59,15 +59,15 @@ endif (DARWIN) # Libraries on which this application depends on # Sort by high-level to low-level target_link_libraries(llimage_libtest - ${LLCOMMON_LIBRARIES} - ${LLVFS_LIBRARIES} + ${LLCOMMON_LIBRARIES} + ${LLVFS_LIBRARIES} ${LLIMAGE_LIBRARIES} ${LLKDU_LIBRARIES} ${KDU_LIBRARY} ${LLIMAGEJ2COJ_LIBRARIES} ${OS_LIBRARIES} ) - + if (DARWIN) # Path inside the app bundle where we'll need to copy libraries set(LLIMAGE_LIBTEST_DESTINATION_DIR diff --git a/indra/lib/python/indra/base/cllsd_test.py b/indra/lib/python/indra/base/cllsd_test.py index 0b20d99d80..1f06898ffd 100644 --- a/indra/lib/python/indra/base/cllsd_test.py +++ b/indra/lib/python/indra/base/cllsd_test.py @@ -1,3 +1,25 @@ +#!/usr/bin/python +## +## $LicenseInfo:firstyear=2011&license=viewerlgpl$ +## Second Life Viewer Source Code +## Copyright (C) 2011, Linden Research, Inc. +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; +## version 2.1 of the License only. +## +## This library 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 +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +## $/LicenseInfo$ from indra.base import llsd, lluuid from datetime import datetime import cllsd diff --git a/indra/lib/python/indra/base/lluuid.py b/indra/lib/python/indra/base/lluuid.py index 1cdd8e915b..369ae4e92f 100644 --- a/indra/lib/python/indra/base/lluuid.py +++ b/indra/lib/python/indra/base/lluuid.py @@ -163,7 +163,7 @@ class UUID(object): def setFromMemoryDump(self, gdb_string): """ We expect to get gdb_string as four hex units. eg: - 0x147d54db 0xc34b3f1b 0x714f989b 0x0a892fd2 + 0x147d54db 0xc34b3f1b 0x714f989b 0x0a892fd2 Which will be translated to: db547d14-1b3f4bc3-9b984f71-d22f890a Returns self. @@ -187,7 +187,7 @@ class UUID(object): def getAsString(self): """ Return a different string representation of the form - AAAAAAAA-AAAABBBB-BBBBBBBB-BBCCCCCC (a 128-bit number in hex) + AAAAAAAA-AAAABBBB-BBBBBBBB-BBCCCCCC (a 128-bit number in hex) where A=network address, B=timestamp, C=random. """ i1 = _binstr2int(self._bits[0:4]) @@ -233,7 +233,7 @@ NULL = UUID() def printTranslatedMemory(four_hex_uints): """ We expect to get the string as four hex units. eg: - 0x147d54db 0xc34b3f1b 0x714f989b 0x0a892fd2 + 0x147d54db 0xc34b3f1b 0x714f989b 0x0a892fd2 Which will be translated to: db547d14-1b3f4bc3-9b984f71-d22f890a """ diff --git a/indra/lib/python/indra/ipc/httputil.py b/indra/lib/python/indra/ipc/httputil.py index c4ac0a379d..d53f34a771 100644 --- a/indra/lib/python/indra/ipc/httputil.py +++ b/indra/lib/python/indra/ipc/httputil.py @@ -1,3 +1,24 @@ +#!/usr/bin/python +## $LicenseInfo:firstyear=2011&license=viewerlgpl$ +## Second Life Viewer Source Code +## Copyright (C) 2011, Linden Research, Inc. +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; +## version 2.1 of the License only. +## +## This library 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 +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +## $/LicenseInfo$ import warnings diff --git a/indra/lib/python/indra/ipc/russ.py b/indra/lib/python/indra/ipc/russ.py index 35d8afb158..ac780f128b 100644 --- a/indra/lib/python/indra/ipc/russ.py +++ b/indra/lib/python/indra/ipc/russ.py @@ -110,7 +110,7 @@ def format(format_str, context): def _find_sub_matches(format_str): """@brief Find all of the substitution matches. -@param format_str the RUSS conformant format string. +@param format_str the RUSS conformant format string. @return Returns an array of depths of arrays of positional matches in input. """ depth = 0 diff --git a/indra/lib/python/indra/ipc/siesta_test.py b/indra/lib/python/indra/ipc/siesta_test.py index 177ea710d1..a35eed2460 100644 --- a/indra/lib/python/indra/ipc/siesta_test.py +++ b/indra/lib/python/indra/ipc/siesta_test.py @@ -1,3 +1,24 @@ +#!/usr/bin/python +## $LicenseInfo:firstyear=2011&license=viewerlgpl$ +## Second Life Viewer Source Code +## Copyright (C) 2011, Linden Research, Inc. +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; +## version 2.1 of the License only. +## +## This library 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 +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +## $/LicenseInfo$ from indra.base import llsd, lluuid from indra.ipc import siesta import datetime, math, unittest diff --git a/indra/lib/python/uuid.py b/indra/lib/python/uuid.py index 0bc21a35f8..e956383cca 100644 --- a/indra/lib/python/uuid.py +++ b/indra/lib/python/uuid.py @@ -1,3 +1,24 @@ +#!/usr/bin/python +## $LicenseInfo:firstyear=2011&license=viewerlgpl$ +## Second Life Viewer Source Code +## Copyright (C) 2011, Linden Research, Inc. +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public +## License as published by the Free Software Foundation; +## version 2.1 of the License only. +## +## This library 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 +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +## +## Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA +## $/LicenseInfo$ r"""UUID objects (universally unique identifiers) according to RFC 4122. This module provides immutable UUID objects (class UUID) and the functions diff --git a/indra/linux_crash_logger/CMakeLists.txt b/indra/linux_crash_logger/CMakeLists.txt index ab62a0d0af..98ebdc7487 100644 --- a/indra/linux_crash_logger/CMakeLists.txt +++ b/indra/linux_crash_logger/CMakeLists.txt @@ -3,6 +3,7 @@ project(linux_crash_logger) include(00-Common) +include(GLH) include(LLCommon) include(LLCrashLogger) include(LLMath) diff --git a/indra/llcharacter/CMakeLists.txt b/indra/llcharacter/CMakeLists.txt index 6eb154458d..a1712699eb 100644 --- a/indra/llcharacter/CMakeLists.txt +++ b/indra/llcharacter/CMakeLists.txt @@ -79,11 +79,11 @@ add_library (llcharacter ${llcharacter_SOURCE_FILES}) # Add tests if (LL_TESTS) - include(LLAddBuildTest) - # UNIT TESTS - SET(llcharacter_TEST_SOURCE_FILES - lljoint.cpp - ) - LL_ADD_PROJECT_UNIT_TESTS(llcharacter "${llcharacter_TEST_SOURCE_FILES}") + include(LLAddBuildTest) + # UNIT TESTS + SET(llcharacter_TEST_SOURCE_FILES + lljoint.cpp + ) + LL_ADD_PROJECT_UNIT_TESTS(llcharacter "${llcharacter_TEST_SOURCE_FILES}") endif (LL_TESTS) diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt index 16e2a0e5c8..0a3eaec5c5 100644 --- a/indra/llcommon/CMakeLists.txt +++ b/indra/llcommon/CMakeLists.txt @@ -115,7 +115,7 @@ set(llcommon_HEADER_FILES indra_constants.h linden_common.h linked_lists.h - llaccountingquota.h + llaccountingcost.h llallocator.h llallocator_heap_profile.h llagentconstants.h diff --git a/indra/llcommon/llaccountingquota.h b/indra/llcommon/llaccountingcost.h similarity index 85% rename from indra/llcommon/llaccountingquota.h rename to indra/llcommon/llaccountingcost.h index 140333de07..0ef3b50c6d 100644 --- a/indra/llcommon/llaccountingquota.h +++ b/indra/llcommon/llaccountingcost.h @@ -1,5 +1,5 @@ /** - * @file llaccountingquota.h + * @file llaccountingcost.h * @ * * $LicenseInfo:firstyear=2001&license=viewerlgpl$ @@ -58,22 +58,28 @@ struct ParcelQuota F32 mParcelCapacity; }; -struct SelectionQuota +//SelectionQuota atm does not require a id +struct SelectionCost { - SelectionQuota( LLUUID localId, F32 renderCost, F32 physicsCost, F32 networkCost, F32 simulationCost ) - : mLocalId( localId) - , mRenderCost( renderCost ) - , mPhysicsCost( physicsCost ) + SelectionCost( /*LLTransactionID transactionId, */ F32 physicsCost, F32 networkCost, F32 simulationCost ) + //: mTransactionId( transactionId) + : mPhysicsCost( physicsCost ) , mNetworkCost( networkCost ) , mSimulationCost( simulationCost ) { } - SelectionQuota() {} + SelectionCost() + : mPhysicsCost( 0.0f ) + , mNetworkCost( 0.0f ) + , mSimulationCost( 0.0f ) + {} - F32 mRenderCost, mPhysicsCost, mNetworkCost, mSimulationCost; - LLUUID mLocalId; + F32 mPhysicsCost, mNetworkCost, mSimulationCost; + //LLTransactionID mTransactionId; }; +typedef enum { Roots = 0 , Prims } eSelectionType; + #endif diff --git a/indra/llcommon/lleventapi.cpp b/indra/llcommon/lleventapi.cpp index 4270c8b511..ff5459c1eb 100644 --- a/indra/llcommon/lleventapi.cpp +++ b/indra/llcommon/lleventapi.cpp @@ -34,6 +34,7 @@ // std headers // external library headers // other Linden headers +#include "llerror.h" LLEventAPI::LLEventAPI(const std::string& name, const std::string& desc, const std::string& field): lbase(name, field), @@ -45,3 +46,32 @@ LLEventAPI::LLEventAPI(const std::string& name, const std::string& desc, const s LLEventAPI::~LLEventAPI() { } + +LLEventAPI::Response::Response(const LLSD& seed, const LLSD& request, const LLSD::String& replyKey): + mResp(seed), + mReq(request), + mKey(replyKey) +{} + +LLEventAPI::Response::~Response() +{ + // When you instantiate a stack Response object, if the original + // request requested a reply, send it when we leave this block, no + // matter how. + sendReply(mResp, mReq, mKey); +} + +void LLEventAPI::Response::warn(const std::string& warning) +{ + LL_WARNS("LLEventAPI::Response") << warning << LL_ENDL; + mResp["warnings"].append(warning); +} + +void LLEventAPI::Response::error(const std::string& error) +{ + // Use LL_WARNS rather than LL_ERROR: we don't want the viewer to shut + // down altogether. + LL_WARNS("LLEventAPI::Response") << error << LL_ENDL; + + mResp["error"] = error; +} diff --git a/indra/llcommon/lleventapi.h b/indra/llcommon/lleventapi.h index d75d521e8e..1a37d780b6 100644 --- a/indra/llcommon/lleventapi.h +++ b/indra/llcommon/lleventapi.h @@ -76,6 +76,89 @@ public: LLEventDispatcher::add(name, desc, callable, required); } + /** + * Instantiate a Response object in any LLEventAPI subclass method that + * wants to guarantee a reply (if requested) will be sent on exit from the + * method. The reply will be sent if request.has(@a replyKey), default + * "reply". If specified, the value of request[replyKey] is the name of + * the LLEventPump on which to send the reply. Conventionally you might + * code something like: + * + * @code + * void MyEventAPI::someMethod(const LLSD& request) + * { + * // Send a reply event as long as request.has("reply") + * Response response(LLSD(), request); + * // ... + * // will be sent in reply event + * response["somekey"] = some_data; + * } + * @endcode + */ + class LL_COMMON_API Response + { + public: + /** + * Instantiating a Response object in an LLEventAPI subclass method + * ensures that, if desired, a reply event will be sent. + * + * @a seed is the initial reply LLSD that will be further decorated before + * being sent as the reply + * + * @a request is the incoming request LLSD; we particularly care about + * [replyKey] and ["reqid"] + * + * @a replyKey [default "reply"] is the string name of the LLEventPump + * on which the caller wants a reply. If (! + * request.has(replyKey)), no reply will be sent. + */ + Response(const LLSD& seed, const LLSD& request, const LLSD::String& replyKey="reply"); + ~Response(); + + /** + * @code + * if (some condition) + * { + * response.warn("warnings are logged and collected in [\"warnings\"]"); + * } + * @endcode + */ + void warn(const std::string& warning); + /** + * @code + * if (some condition isn't met) + * { + * // In a function returning void, you can validly 'return + * // expression' if the expression is itself of type void. But + * // returning is up to you; response.error() has no effect on + * // flow of control. + * return response.error("error message, logged and also sent as [\"error\"]"); + * } + * @endcode + */ + void error(const std::string& error); + + /** + * set other keys... + * + * @code + * // set any attributes you want to be sent in the reply + * response["info"] = some_value; + * // ... + * response["ok"] = went_well; + * @endcode + */ + LLSD& operator[](const LLSD::String& key) { return mResp[key]; } + + /** + * set the response to the given data + */ + void setResponse(LLSD const & response){ mResp = response; } + + LLSD mResp, mReq; + LLSD::String mKey; + }; + private: std::string mDesc; }; diff --git a/indra/llcommon/llevents.cpp b/indra/llcommon/llevents.cpp index ff03506e84..db1ea4792b 100644 --- a/indra/llcommon/llevents.cpp +++ b/indra/llcommon/llevents.cpp @@ -591,6 +591,17 @@ void LLReqID::stamp(LLSD& response) const bool sendReply(const LLSD& reply, const LLSD& request, const std::string& replyKey) { + // If the original request has no value for replyKey, it's pointless to + // construct or send a reply event: on which LLEventPump should we send + // it? Allow that to be optional: if the caller wants to require replyKey, + // it can so specify when registering the operation method. + if (! request.has(replyKey)) + { + return false; + } + + // Here the request definitely contains replyKey; reasonable to proceed. + // Copy 'reply' to modify it. LLSD newreply(reply); // Get the ["reqid"] element from request diff --git a/indra/llcommon/llfasttimer_class.cpp b/indra/llcommon/llfasttimer_class.cpp index c274a748f5..a6dd9ab363 100644 --- a/indra/llcommon/llfasttimer_class.cpp +++ b/indra/llcommon/llfasttimer_class.cpp @@ -309,14 +309,15 @@ LLFastTimer::NamedTimer::~NamedTimer() std::string LLFastTimer::NamedTimer::getToolTip(S32 history_idx) { + F64 ms_multiplier = 1000.0 / (F64)LLFastTimer::countsPerSecond(); if (history_idx < 0) { - // by default, show average number of calls - return llformat("%s (%d calls)", getName().c_str(), (S32)getCallAverage()); + // by default, show average number of call + return llformat("%s (%d ms, %d calls)", getName().c_str(), (S32)(getCountAverage() * ms_multiplier), (S32)getCallAverage()); } else { - return llformat("%s (%d calls)", getName().c_str(), (S32)getHistoricalCalls(history_idx)); + return llformat("%s (%d ms, %d calls)", getName().c_str(), (S32)(getHistoricalCount(history_idx) * ms_multiplier), (S32)getHistoricalCalls(history_idx)); } } @@ -699,17 +700,7 @@ void LLFastTimer::nextFrame() llinfos << "Slow frame, fast timers inaccurate" << llendl; } - if (sPauseHistory) - { - sResetHistory = true; - } - else if (sResetHistory) - { - sLastFrameIndex = 0; - sCurFrameIndex = 0; - sResetHistory = false; - } - else // not paused + if (!sPauseHistory) { NamedTimer::processTimes(); sLastFrameIndex = sCurFrameIndex++; diff --git a/indra/llcommon/llfasttimer_class.h b/indra/llcommon/llfasttimer_class.h index 827747f0c6..f481e968a6 100644 --- a/indra/llcommon/llfasttimer_class.h +++ b/indra/llcommon/llfasttimer_class.h @@ -66,7 +66,7 @@ public: public: ~NamedTimer(); - enum { HISTORY_NUM = 60 }; + enum { HISTORY_NUM = 300 }; const std::string& getName() const { return mName; } NamedTimer* getParent() const { return mParent; } diff --git a/indra/llcommon/llinstancetracker.cpp b/indra/llcommon/llinstancetracker.cpp index 36e8078694..5dc3ea5d7b 100644 --- a/indra/llcommon/llinstancetracker.cpp +++ b/indra/llcommon/llinstancetracker.cpp @@ -35,26 +35,15 @@ //static void * & LLInstanceTrackerBase::getInstances(std::type_info const & info) { -// This is called a HUGE amount of times. Just use the name() ptr in a map instead of making expensive string compares each time -// static std::map instances; -// -// std::string k = info.name(); -// if(instances.find(k) == instances.end()) -// { -// instances[k] = NULL; -// } -// -// return instances[k]; - - static std::map instances; - std::map< char const *, void* >::iterator itr = instances.find( info.name() ); - // std::string k = info.name(); - if(itr == instances.end()) - { - itr = instances.insert( std::make_pair( info.name(), (void*)0 ) ).first; - } - return itr->second; -// + typedef std::map InstancesMap; + static InstancesMap instances; + // std::map::insert() is just what we want here. You attempt to insert a + // (key, value) pair. If the specified key doesn't yet exist, it inserts + // the pair and returns a std::pair of (iterator, true). If the specified + // key DOES exist, insert() simply returns (iterator, false). One lookup + // handles both cases. + return instances.insert(InstancesMap::value_type(info.name(), + InstancesMap::mapped_type())) + .first->second; } - diff --git a/indra/llcommon/llinstancetracker.h b/indra/llcommon/llinstancetracker.h index b4891eba67..5a3990a8df 100644 --- a/indra/llcommon/llinstancetracker.h +++ b/indra/llcommon/llinstancetracker.h @@ -29,6 +29,7 @@ #define LL_LLINSTANCETRACKER_H #include +#include #include "string_table.h" #include @@ -37,10 +38,40 @@ #include #include +/** + * Base class manages "class-static" data that must actually have singleton + * semantics: one instance per process, rather than one instance per module as + * sometimes happens with data simply declared static. + */ class LL_COMMON_API LLInstanceTrackerBase : public boost::noncopyable { - protected: - static void * & getInstances(std::type_info const & info); +protected: + /// Get a process-unique void* pointer slot for the specified type_info + static void * & getInstances(std::type_info const & info); + + /// Find or create a STATICDATA instance for the specified TRACKED class. + /// STATICDATA must be default-constructible. + template + static STATICDATA& getStatic() + { + void *& instances = getInstances(typeid(TRACKED)); + if (! instances) + { + instances = new STATICDATA; + } + return *static_cast(instances); + } + + /// It's not essential to derive your STATICDATA (for use with + /// getStatic()) from StaticBase; it's just that both known + /// implementations do. + struct StaticBase + { + StaticBase(): + sIterationNestDepth(0) + {} + S32 sIterationNestDepth; + }; }; /// This mix-in class adds support for tracking all instances of the specified class parameter T @@ -50,8 +81,15 @@ class LL_COMMON_API LLInstanceTrackerBase : public boost::noncopyable template class LLInstanceTracker : public LLInstanceTrackerBase { - typedef typename std::map InstanceMap; typedef LLInstanceTracker MyT; + typedef typename std::map InstanceMap; + struct StaticData: public StaticBase + { + InstanceMap sMap; + }; + static StaticData& getStatic() { return LLInstanceTrackerBase::getStatic(); } + static InstanceMap& getMap_() { return getStatic().sMap; } + public: class instance_iter : public boost::iterator_facade { @@ -61,12 +99,12 @@ public: instance_iter(const typename InstanceMap::iterator& it) : mIterator(it) { - ++sIterationNestDepth; + ++getStatic().sIterationNestDepth; } ~instance_iter() { - --sIterationNestDepth; + --getStatic().sIterationNestDepth; } @@ -92,21 +130,21 @@ public: public: typedef boost::iterator_facade super_t; - key_iter(typename InstanceMap::iterator& it) + key_iter(typename InstanceMap::iterator it) : mIterator(it) { - ++sIterationNestDepth; + ++getStatic().sIterationNestDepth; } key_iter(const key_iter& other) : mIterator(other.mIterator) { - ++sIterationNestDepth; + ++getStatic().sIterationNestDepth; } ~key_iter() { - --sIterationNestDepth; + --getStatic().sIterationNestDepth; } @@ -159,8 +197,8 @@ protected: virtual ~LLInstanceTracker() { // it's unsafe to delete instances of this type while all instances are being iterated over. - llassert(sIterationNestDepth == 0); - remove_(); + llassert_always(getStatic().sIterationNestDepth == 0); + remove_(); } virtual void setKey(KEY key) { remove_(); add_(key); } virtual const KEY& getKey() const { return mInstanceKey; } @@ -176,31 +214,24 @@ private: getMap_().erase(mInstanceKey); } - static InstanceMap& getMap_() - { - void * & instances = getInstances(typeid(MyT)); - if (! instances) - { - instances = new InstanceMap; - } - return * static_cast(instances); - } - private: - KEY mInstanceKey; - static S32 sIterationNestDepth; }; -template S32 LLInstanceTracker::sIterationNestDepth = 0; - /// explicit specialization for default case where KEY is T* /// use a simple std::set template class LLInstanceTracker : public LLInstanceTrackerBase { - typedef typename std::set InstanceSet; typedef LLInstanceTracker MyT; + typedef typename std::set InstanceSet; + struct StaticData: public StaticBase + { + InstanceSet sSet; + }; + static StaticData& getStatic() { return LLInstanceTrackerBase::getStatic(); } + static InstanceSet& getSet_() { return getStatic().sSet; } + public: /// for completeness of analogy with the generic implementation @@ -213,18 +244,18 @@ public: instance_iter(const typename InstanceSet::iterator& it) : mIterator(it) { - ++sIterationNestDepth; + ++getStatic().sIterationNestDepth; } instance_iter(const instance_iter& other) : mIterator(other.mIterator) { - ++sIterationNestDepth; + ++getStatic().sIterationNestDepth; } ~instance_iter() { - --sIterationNestDepth; + --getStatic().sIterationNestDepth; } private: @@ -250,13 +281,13 @@ public: protected: LLInstanceTracker() { - // it's safe but unpredictable to create instances of this type while all instances are being iterated over. I hate unpredictable. This assert will probably be turned on early in the next development cycle. + // it's safe but unpredictable to create instances of this type while all instances are being iterated over. I hate unpredictable. This assert will probably be turned on early in the next development cycle. getSet_().insert(static_cast(this)); } virtual ~LLInstanceTracker() { // it's unsafe to delete instances of this type while all instances are being iterated over. - llassert(sIterationNestDepth == 0); + llassert_always(getStatic().sIterationNestDepth == 0); getSet_().erase(static_cast(this)); } @@ -264,20 +295,6 @@ protected: { getSet_().insert(static_cast(this)); } - - static InstanceSet& getSet_() - { - void * & instances = getInstances(typeid(MyT)); - if (! instances) - { - instances = new InstanceSet; - } - return * static_cast(instances); - } - - static S32 sIterationNestDepth; }; -template S32 LLInstanceTracker::sIterationNestDepth = 0; - #endif diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp index 21d1c84d69..4db1b8bd10 100644 --- a/indra/llcommon/llmemory.cpp +++ b/indra/llcommon/llmemory.cpp @@ -26,14 +26,13 @@ #include "linden_common.h" -#include "llmemory.h" -#if MEM_TRACK_MEM +//#if MEM_TRACK_MEM #include "llthread.h" -#endif +//#endif #if defined(LL_WINDOWS) -# include +//# include # include #elif defined(LL_DARWIN) # include @@ -43,10 +42,24 @@ # include #endif +#include "llmemory.h" + +#include "llsys.h" +#include "llframetimer.h" //---------------------------------------------------------------------------- //static char* LLMemory::reserveMem = 0; +U32 LLMemory::sAvailPhysicalMemInKB = U32_MAX ; +U32 LLMemory::sMaxPhysicalMemInKB = 0; +U32 LLMemory::sAllocatedMemInKB = 0; +U32 LLMemory::sAllocatedPageSizeInKB = 0 ; +U32 LLMemory::sMaxHeapSizeInKB = U32_MAX ; +BOOL LLMemory::sEnableMemoryFailurePrevention = FALSE; + +#if __DEBUG_PRIVATE_MEM__ +LLPrivateMemoryPoolManager::mem_allocation_info_t LLPrivateMemoryPoolManager::sMemAllocationTracker; +#endif //static void LLMemory::initClass() @@ -71,6 +84,175 @@ void LLMemory::freeReserve() reserveMem = NULL; } +//static +void LLMemory::initMaxHeapSizeGB(F32 max_heap_size_gb, BOOL prevent_heap_failure) +{ + sMaxHeapSizeInKB = (U32)(max_heap_size_gb * 1024 * 1024) ; + sEnableMemoryFailurePrevention = prevent_heap_failure ; +} + +//static +void LLMemory::updateMemoryInfo() +{ +#if LL_WINDOWS + HANDLE self = GetCurrentProcess(); + PROCESS_MEMORY_COUNTERS counters; + + if (!GetProcessMemoryInfo(self, &counters, sizeof(counters))) + { + llwarns << "GetProcessMemoryInfo failed" << llendl; + return ; + } + + sAllocatedMemInKB = (U32)(counters.WorkingSetSize / 1024) ; + sAllocatedPageSizeInKB = (U32)(counters.PagefileUsage / 1024) ; + + U32 avail_phys, avail_virtual; + LLMemoryInfo::getAvailableMemoryKB(avail_phys, avail_virtual) ; + sMaxPhysicalMemInKB = llmin(avail_phys + sAllocatedMemInKB, sMaxHeapSizeInKB); + + if(sMaxPhysicalMemInKB > sAllocatedMemInKB) + { + sAvailPhysicalMemInKB = sMaxPhysicalMemInKB - sAllocatedMemInKB ; + } + else + { + sAvailPhysicalMemInKB = 0 ; + } +#else + //not valid for other systems for now. + sAllocatedMemInKB = (U32)(LLMemory::getCurrentRSS() / 1024) ; + sMaxPhysicalMemInKB = U32_MAX ; + sAvailPhysicalMemInKB = U32_MAX ; +#endif + + return ; +} + +// +//this function is to test if there is enough space with the size in the virtual address space. +//it does not do any real allocation +//if success, it returns the address where the memory chunk can fit in; +//otherwise it returns NULL. +// +//static +void* LLMemory::tryToAlloc(void* address, U32 size) +{ +#if LL_WINDOWS + address = VirtualAlloc(address, size, MEM_RESERVE | MEM_TOP_DOWN, PAGE_NOACCESS) ; + if(address) + { + if(!VirtualFree(address, 0, MEM_RELEASE)) + { + llerrs << "error happens when free some memory reservation." << llendl ; + } + } + return address ; +#else + return (void*)0x01 ; //skip checking +#endif +} + +//static +void LLMemory::logMemoryInfo(BOOL update) +{ + if(update) + { + updateMemoryInfo() ; + } + + llinfos << "Current allocated physical memory(KB): " << sAllocatedMemInKB << llendl ; + llinfos << "Current allocated page size (KB): " << sAllocatedPageSizeInKB << llendl ; + llinfos << "Current availabe physical memory(KB): " << sAvailPhysicalMemInKB << llendl ; + llinfos << "Current max usable memory(KB): " << sMaxPhysicalMemInKB << llendl ; + + llinfos << "--- private pool information -- " << llendl ; + llinfos << "Total reserved (KB): " << LLPrivateMemoryPoolManager::getInstance()->mTotalReservedSize / 1024 << llendl ; + llinfos << "Total allocated (KB): " << LLPrivateMemoryPoolManager::getInstance()->mTotalAllocatedSize / 1024 << llendl ; +} + +//return 0: everything is normal; +//return 1: the memory pool is low, but not in danger; +//return -1: the memory pool is in danger, is about to crash. +//static +bool LLMemory::isMemoryPoolLow() +{ + static const U32 LOW_MEMEOY_POOL_THRESHOLD_KB = 64 * 1024 ; //64 MB for emergency use + const static U32 MAX_SIZE_CHECKED_MEMORY_BLOCK = 64 * 1024 * 1024 ; //64 MB + static void* last_reserved_address = NULL ; + + if(!sEnableMemoryFailurePrevention) + { + return false ; //no memory failure prevention. + } + + if(sAvailPhysicalMemInKB < (LOW_MEMEOY_POOL_THRESHOLD_KB >> 2)) //out of physical memory + { + return true ; + } + + if(sAllocatedPageSizeInKB + (LOW_MEMEOY_POOL_THRESHOLD_KB >> 2) > sMaxHeapSizeInKB) //out of virtual address space. + { + return true ; + } + + bool is_low = (S32)(sAvailPhysicalMemInKB < LOW_MEMEOY_POOL_THRESHOLD_KB || + sAllocatedPageSizeInKB + LOW_MEMEOY_POOL_THRESHOLD_KB > sMaxHeapSizeInKB) ; + + //check the virtual address space fragmentation + if(!is_low) + { + if(!last_reserved_address) + { + last_reserved_address = LLMemory::tryToAlloc(last_reserved_address, MAX_SIZE_CHECKED_MEMORY_BLOCK) ; + } + else + { + last_reserved_address = LLMemory::tryToAlloc(last_reserved_address, MAX_SIZE_CHECKED_MEMORY_BLOCK) ; + if(!last_reserved_address) //failed, try once more + { + last_reserved_address = LLMemory::tryToAlloc(last_reserved_address, MAX_SIZE_CHECKED_MEMORY_BLOCK) ; + } + } + + is_low = !last_reserved_address ; //allocation failed + } + + return is_low ; +} + +//static +U32 LLMemory::getAvailableMemKB() +{ + return sAvailPhysicalMemInKB ; +} + +//static +U32 LLMemory::getMaxMemKB() +{ + return sMaxPhysicalMemInKB ; +} + +//static +U32 LLMemory::getAllocatedMemKB() +{ + return sAllocatedMemInKB ; +} + +void* ll_allocate (size_t size) +{ + if (size == 0) + { + llwarns << "Null allocation" << llendl; + } + void *p = malloc(size); + if (p == NULL) + { + LLMemory::freeReserve(); + llerrs << "Out of memory Error" << llendl; + } + return p; +} //---------------------------------------------------------------------------- @@ -237,7 +419,7 @@ U64 LLMemory::getCurrentRSS() U32 LLMemory::getWorkingSetSize() { - return 0 ; + return 0; } #endif @@ -258,7 +440,7 @@ LLMemTracker::LLMemTracker() mDrawnIndex = 0 ; mPaused = FALSE ; - mMutexp = new LLMutex(NULL) ; + mMutexp = new LLMutex() ; mStringBuffer = new char*[128] ; mStringBuffer[0] = new char[mCapacity * 128] ; for(S32 i = 1 ; i < mCapacity ; i++) @@ -376,3 +558,1722 @@ const char* LLMemTracker::getNextLine() #endif //MEM_TRACK_MEM //-------------------------------------------------------------------------------------------------- + +//-------------------------------------------------------------------------------------------------- +//-------------------------------------------------------------------------------------------------- +//minimum slot size and minimal slot size interval +const U32 ATOMIC_MEM_SLOT = 16 ; //bytes + +//minimum block sizes (page size) for small allocation, medium allocation, large allocation +const U32 MIN_BLOCK_SIZES[LLPrivateMemoryPool::SUPER_ALLOCATION] = {2 << 10, 4 << 10, 16 << 10} ; // + +//maximum block sizes for small allocation, medium allocation, large allocation +const U32 MAX_BLOCK_SIZES[LLPrivateMemoryPool::SUPER_ALLOCATION] = {64 << 10, 1 << 20, 4 << 20} ; + +//minimum slot sizes for small allocation, medium allocation, large allocation +const U32 MIN_SLOT_SIZES[LLPrivateMemoryPool::SUPER_ALLOCATION] = {ATOMIC_MEM_SLOT, 2 << 10, 512 << 10}; + +//maximum slot sizes for small allocation, medium allocation, large allocation +const U32 MAX_SLOT_SIZES[LLPrivateMemoryPool::SUPER_ALLOCATION] = {(2 << 10) - ATOMIC_MEM_SLOT, (512 - 2) << 10, 4 << 20}; + +//size of a block with multiple slots can not exceed CUT_OFF_SIZE +const U32 CUT_OFF_SIZE = (64 << 10) ; //64 KB + +//max number of slots in a block +const U32 MAX_NUM_SLOTS_IN_A_BLOCK = llmin(MIN_BLOCK_SIZES[0] / ATOMIC_MEM_SLOT, ATOMIC_MEM_SLOT * 8) ; + +//------------------------------------------------------------- +//align val to be integer times of ATOMIC_MEM_SLOT +U32 align(U32 val) +{ + U32 aligned = (val / ATOMIC_MEM_SLOT) * ATOMIC_MEM_SLOT ; + if(aligned < val) + { + aligned += ATOMIC_MEM_SLOT ; + } + + return aligned ; +} + +//------------------------------------------------------------- +//class LLPrivateMemoryPool::LLMemoryBlock +//------------------------------------------------------------- +// +//each memory block could fit for two page sizes: 0.75 * mSlotSize, which starts from the beginning of the memory chunk and grow towards the end of the +//the block; another is mSlotSize, which starts from the end of the block and grows towards the beginning of the block. +// +LLPrivateMemoryPool::LLMemoryBlock::LLMemoryBlock() +{ + //empty +} + +LLPrivateMemoryPool::LLMemoryBlock::~LLMemoryBlock() +{ + //empty +} + +//create and initialize a memory block +void LLPrivateMemoryPool::LLMemoryBlock::init(char* buffer, U32 buffer_size, U32 slot_size) +{ + mBuffer = buffer ; + mBufferSize = buffer_size ; + mSlotSize = slot_size ; + mTotalSlots = buffer_size / mSlotSize ; + + llassert_always(buffer_size / mSlotSize <= MAX_NUM_SLOTS_IN_A_BLOCK) ; //max number is 128 + + mAllocatedSlots = 0 ; + mDummySize = 0 ; + + //init the bit map. + //mark free bits + if(mTotalSlots > 32) //reserve extra space from mBuffer to store bitmap if needed. + { + mDummySize = ATOMIC_MEM_SLOT ; + mTotalSlots -= (mDummySize + mSlotSize - 1) / mSlotSize ; + mUsageBits = 0 ; + + S32 usage_bit_len = (mTotalSlots + 31) / 32 ; + + for(S32 i = 0 ; i < usage_bit_len - 1 ; i++) + { + *((U32*)mBuffer + i) = 0 ; + } + for(S32 i = usage_bit_len - 1 ; i < mDummySize / sizeof(U32) ; i++) + { + *((U32*)mBuffer + i) = 0xffffffff ; + } + + if(mTotalSlots & 31) + { + *((U32*)mBuffer + usage_bit_len - 2) = (0xffffffff << (mTotalSlots & 31)) ; + } + } + else//no extra bitmap space reserved + { + mUsageBits = 0 ; + if(mTotalSlots & 31) + { + mUsageBits = (0xffffffff << (mTotalSlots & 31)) ; + } + } + + mSelf = this ; + mNext = NULL ; + mPrev = NULL ; + + llassert_always(mTotalSlots > 0) ; +} + +//mark this block to be free with the memory [mBuffer, mBuffer + mBufferSize). +void LLPrivateMemoryPool::LLMemoryBlock::setBuffer(char* buffer, U32 buffer_size) +{ + mBuffer = buffer ; + mBufferSize = buffer_size ; + mSelf = NULL ; + mTotalSlots = 0 ; //set the block is free. +} + +//reserve a slot +char* LLPrivateMemoryPool::LLMemoryBlock::allocate() +{ + llassert_always(mAllocatedSlots < mTotalSlots) ; + + //find a free slot + U32* bits = NULL ; + U32 k = 0 ; + if(mUsageBits != 0xffffffff) + { + bits = &mUsageBits ; + } + else if(mDummySize > 0)//go to extra space + { + for(S32 i = 0 ; i < mDummySize / sizeof(U32); i++) + { + if(*((U32*)mBuffer + i) != 0xffffffff) + { + bits = (U32*)mBuffer + i ; + k = i + 1 ; + break ; + } + } + } + S32 idx = 0 ; + U32 tmp = *bits ; + for(; tmp & 1 ; tmp >>= 1, idx++) ; + + //set the slot reserved + if(!idx) + { + *bits |= 1 ; + } + else + { + *bits |= (1 << idx) ; + } + + mAllocatedSlots++ ; + + return mBuffer + mDummySize + (k * 32 + idx) * mSlotSize ; +} + +//free a slot +void LLPrivateMemoryPool::LLMemoryBlock::freeMem(void* addr) +{ + //bit index + U32 idx = ((U32)addr - (U32)mBuffer - mDummySize) / mSlotSize ; + + U32* bits = &mUsageBits ; + if(idx >= 32) + { + bits = (U32*)mBuffer + (idx - 32) / 32 ; + } + + //reset the bit + if(idx & 31) + { + *bits &= ~(1 << (idx & 31)) ; + } + else + { + *bits &= ~1 ; + } + + mAllocatedSlots-- ; +} + +//for debug use: reset the entire bitmap. +void LLPrivateMemoryPool::LLMemoryBlock::resetBitMap() +{ + for(S32 i = 0 ; i < mDummySize / sizeof(U32) ; i++) + { + *((U32*)mBuffer + i) = 0 ; + } + mUsageBits = 0 ; +} +//------------------------------------------------------------------- +//class LLMemoryChunk +//-------------------------------------------------------------------- +LLPrivateMemoryPool::LLMemoryChunk::LLMemoryChunk() +{ + //empty +} + +LLPrivateMemoryPool::LLMemoryChunk::~LLMemoryChunk() +{ + //empty +} + +//create and init a memory chunk +void LLPrivateMemoryPool::LLMemoryChunk::init(char* buffer, U32 buffer_size, U32 min_slot_size, U32 max_slot_size, U32 min_block_size, U32 max_block_size) +{ + mBuffer = buffer ; + mBufferSize = buffer_size ; + mAlloatedSize = 0 ; + + mMetaBuffer = mBuffer + sizeof(LLMemoryChunk) ; + + mMinBlockSize = min_block_size; //page size + mMinSlotSize = min_slot_size; + mMaxSlotSize = max_slot_size ; + mBlockLevels = mMaxSlotSize / mMinSlotSize ; + mPartitionLevels = max_block_size / mMinBlockSize + 1 ; + + S32 max_num_blocks = (buffer_size - sizeof(LLMemoryChunk) - mBlockLevels * sizeof(LLMemoryBlock*) - mPartitionLevels * sizeof(LLMemoryBlock*)) / + (mMinBlockSize + sizeof(LLMemoryBlock)) ; + //meta data space + mBlocks = (LLMemoryBlock*)mMetaBuffer ; //space reserved for all memory blocks. + mAvailBlockList = (LLMemoryBlock**)((char*)mBlocks + sizeof(LLMemoryBlock) * max_num_blocks) ; + mFreeSpaceList = (LLMemoryBlock**)((char*)mAvailBlockList + sizeof(LLMemoryBlock*) * mBlockLevels) ; + + //data buffer, which can be used for allocation + mDataBuffer = (char*)mFreeSpaceList + sizeof(LLMemoryBlock*) * mPartitionLevels ; + + //alignmnet + mDataBuffer = mBuffer + align(mDataBuffer - mBuffer) ; + + //init + for(U32 i = 0 ; i < mBlockLevels; i++) + { + mAvailBlockList[i] = NULL ; + } + for(U32 i = 0 ; i < mPartitionLevels ; i++) + { + mFreeSpaceList[i] = NULL ; + } + + //assign the entire chunk to the first block + mBlocks[0].mPrev = NULL ; + mBlocks[0].mNext = NULL ; + mBlocks[0].setBuffer(mDataBuffer, buffer_size - (mDataBuffer - mBuffer)) ; + addToFreeSpace(&mBlocks[0]) ; + + mNext = NULL ; + mPrev = NULL ; +} + +//static +U32 LLPrivateMemoryPool::LLMemoryChunk::getMaxOverhead(U32 data_buffer_size, U32 min_slot_size, + U32 max_slot_size, U32 min_block_size, U32 max_block_size) +{ + //for large allocations, reserve some extra memory for meta data to avoid wasting much + if(data_buffer_size / min_slot_size < 64) //large allocations + { + U32 overhead = sizeof(LLMemoryChunk) + (data_buffer_size / min_block_size) * sizeof(LLMemoryBlock) + + sizeof(LLMemoryBlock*) * (max_slot_size / min_slot_size) + sizeof(LLMemoryBlock*) * (max_block_size / min_block_size + 1) ; + + //round to integer times of min_block_size + overhead = ((overhead + min_block_size - 1) / min_block_size) * min_block_size ; + return overhead ; + } + else + { + return 0 ; //do not reserve extra overhead if for small allocations + } +} + +char* LLPrivateMemoryPool::LLMemoryChunk::allocate(U32 size) +{ + if(mMinSlotSize > size) + { + size = mMinSlotSize ; + } + if(mAlloatedSize + size > mBufferSize - (mDataBuffer - mBuffer)) + { + return NULL ; //no enough space in this chunk. + } + + char* p = NULL ; + U32 blk_idx = getBlockLevel(size); + + LLMemoryBlock* blk = NULL ; + + //check if there is free block available + if(mAvailBlockList[blk_idx]) + { + blk = mAvailBlockList[blk_idx] ; + p = blk->allocate() ; + + if(blk->isFull()) + { + popAvailBlockList(blk_idx) ; + } + } + + //ask for a new block + if(!p) + { + blk = addBlock(blk_idx) ; + if(blk) + { + p = blk->allocate() ; + + if(blk->isFull()) + { + popAvailBlockList(blk_idx) ; + } + } + } + + //ask for space from larger blocks + if(!p) + { + for(S32 i = blk_idx + 1 ; i < mBlockLevels; i++) + { + if(mAvailBlockList[i]) + { + blk = mAvailBlockList[i] ; + p = blk->allocate() ; + + if(blk->isFull()) + { + popAvailBlockList(i) ; + } + break ; + } + } + } + + if(p && blk) + { + mAlloatedSize += blk->getSlotSize() ; + } + return p ; +} + +void LLPrivateMemoryPool::LLMemoryChunk::freeMem(void* addr) +{ + U32 blk_idx = getPageIndex((U32)addr) ; + LLMemoryBlock* blk = (LLMemoryBlock*)(mMetaBuffer + blk_idx * sizeof(LLMemoryBlock)) ; + blk = blk->mSelf ; + + bool was_full = blk->isFull() ; + blk->freeMem(addr) ; + mAlloatedSize -= blk->getSlotSize() ; + + if(blk->empty()) + { + removeBlock(blk) ; + } + else if(was_full) + { + addToAvailBlockList(blk) ; + } +} + +bool LLPrivateMemoryPool::LLMemoryChunk::empty() +{ + return !mAlloatedSize ; +} + +bool LLPrivateMemoryPool::LLMemoryChunk::containsAddress(const char* addr) const +{ + return (U32)mBuffer <= (U32)addr && (U32)mBuffer + mBufferSize > (U32)addr ; +} + +//debug use +void LLPrivateMemoryPool::LLMemoryChunk::dump() +{ +#if 0 + //sanity check + //for(S32 i = 0 ; i < mBlockLevels ; i++) + //{ + // LLMemoryBlock* blk = mAvailBlockList[i] ; + // while(blk) + // { + // blk_list.push_back(blk) ; + // blk = blk->mNext ; + // } + //} + for(S32 i = 0 ; i < mPartitionLevels ; i++) + { + LLMemoryBlock* blk = mFreeSpaceList[i] ; + while(blk) + { + blk_list.push_back(blk) ; + blk = blk->mNext ; + } + } + + std::sort(blk_list.begin(), blk_list.end(), LLMemoryBlock::CompareAddress()); + + U32 total_size = blk_list[0]->getBufferSize() ; + for(U32 i = 1 ; i < blk_list.size(); i++) + { + total_size += blk_list[i]->getBufferSize() ; + if((U32)blk_list[i]->getBuffer() < (U32)blk_list[i-1]->getBuffer() + blk_list[i-1]->getBufferSize()) + { + llerrs << "buffer corrupted." << llendl ; + } + } + + llassert_always(total_size + mMinBlockSize >= mBufferSize - ((U32)mDataBuffer - (U32)mBuffer)) ; + + U32 blk_num = (mBufferSize - (mDataBuffer - mBuffer)) / mMinBlockSize ; + for(U32 i = 0 ; i < blk_num ; ) + { + LLMemoryBlock* blk = &mBlocks[i] ; + if(blk->mSelf) + { + U32 end = blk->getBufferSize() / mMinBlockSize ; + for(U32 j = 0 ; j < end ; j++) + { + llassert_always(blk->mSelf == blk || !blk->mSelf) ; + } + i += end ; + } + else + { + llerrs << "gap happens" << llendl ; + } + } +#endif +#if 0 + llinfos << "---------------------------" << llendl ; + llinfos << "Chunk buffer: " << (U32)getBuffer() << " size: " << getBufferSize() << llendl ; + + llinfos << "available blocks ... " << llendl ; + for(S32 i = 0 ; i < mBlockLevels ; i++) + { + LLMemoryBlock* blk = mAvailBlockList[i] ; + while(blk) + { + llinfos << "blk buffer " << (U32)blk->getBuffer() << " size: " << blk->getBufferSize() << llendl ; + blk = blk->mNext ; + } + } + + llinfos << "free blocks ... " << llendl ; + for(S32 i = 0 ; i < mPartitionLevels ; i++) + { + LLMemoryBlock* blk = mFreeSpaceList[i] ; + while(blk) + { + llinfos << "blk buffer " << (U32)blk->getBuffer() << " size: " << blk->getBufferSize() << llendl ; + blk = blk->mNext ; + } + } +#endif +} + +//compute the size for a block, the size is round to integer times of mMinBlockSize. +U32 LLPrivateMemoryPool::LLMemoryChunk::calcBlockSize(U32 slot_size) +{ + // + //Note: we try to make a block to have 32 slots if the size is not over 32 pages + //32 is the number of bits of an integer in a 32-bit system + // + + U32 block_size; + U32 cut_off_size = llmin(CUT_OFF_SIZE, (U32)(mMinBlockSize << 5)) ; + + if((slot_size << 5) <= mMinBlockSize)//for small allocations, return one page + { + block_size = mMinBlockSize ; + } + else if(slot_size >= cut_off_size)//for large allocations, return one-slot block + { + block_size = (slot_size / mMinBlockSize) * mMinBlockSize ; + if(block_size < slot_size) + { + block_size += mMinBlockSize ; + } + } + else //medium allocations + { + if((slot_size << 5) >= cut_off_size) + { + block_size = cut_off_size ; + } + else + { + block_size = ((slot_size << 5) / mMinBlockSize) * mMinBlockSize ; + } + } + + llassert_always(block_size >= slot_size) ; + + return block_size ; +} + +//create a new block in the chunk +LLPrivateMemoryPool::LLMemoryBlock* LLPrivateMemoryPool::LLMemoryChunk::addBlock(U32 blk_idx) +{ + U32 slot_size = mMinSlotSize * (blk_idx + 1) ; + U32 preferred_block_size = calcBlockSize(slot_size) ; + U16 idx = getPageLevel(preferred_block_size); + LLMemoryBlock* blk = NULL ; + + if(mFreeSpaceList[idx])//if there is free slot for blk_idx + { + blk = createNewBlock(mFreeSpaceList[idx], preferred_block_size, slot_size, blk_idx) ; + } + else if(mFreeSpaceList[mPartitionLevels - 1]) //search free pool + { + blk = createNewBlock(mFreeSpaceList[mPartitionLevels - 1], preferred_block_size, slot_size, blk_idx) ; + } + else //search for other non-preferred but enough space slot. + { + S32 min_idx = 0 ; + if(slot_size > mMinBlockSize) + { + min_idx = getPageLevel(slot_size) ; + } + for(S32 i = (S32)idx - 1 ; i >= min_idx ; i--) //search the small slots first + { + if(mFreeSpaceList[i]) + { + U32 new_preferred_block_size = mFreeSpaceList[i]->getBufferSize(); + new_preferred_block_size = (new_preferred_block_size / mMinBlockSize) * mMinBlockSize ; //round to integer times of mMinBlockSize. + + //create a NEW BLOCK THERE. + if(new_preferred_block_size >= slot_size) //at least there is space for one slot. + { + + blk = createNewBlock(mFreeSpaceList[i], new_preferred_block_size, slot_size, blk_idx) ; + } + break ; + } + } + + if(!blk) + { + for(U16 i = idx + 1 ; i < mPartitionLevels - 1; i++) //search the large slots + { + if(mFreeSpaceList[i]) + { + //create a NEW BLOCK THERE. + blk = createNewBlock(mFreeSpaceList[i], preferred_block_size, slot_size, blk_idx) ; + break ; + } + } + } + } + + return blk ; +} + +//create a new block at the designed location +LLPrivateMemoryPool::LLMemoryBlock* LLPrivateMemoryPool::LLMemoryChunk::createNewBlock(LLMemoryBlock* blk, U32 buffer_size, U32 slot_size, U32 blk_idx) +{ + //unlink from the free space + removeFromFreeSpace(blk) ; + + //check the rest space + U32 new_free_blk_size = blk->getBufferSize() - buffer_size ; + if(new_free_blk_size < mMinBlockSize) //can not partition the memory into size smaller than mMinBlockSize + { + new_free_blk_size = 0 ; //discard the last small extra space. + } + + //add the rest space back to the free list + if(new_free_blk_size > 0) //blk still has free space + { + LLMemoryBlock* next_blk = blk + (buffer_size / mMinBlockSize) ; + next_blk->mPrev = NULL ; + next_blk->mNext = NULL ; + next_blk->setBuffer(blk->getBuffer() + buffer_size, new_free_blk_size) ; + addToFreeSpace(next_blk) ; + } + + blk->init(blk->getBuffer(), buffer_size, slot_size) ; + //insert to the available block list... + mAvailBlockList[blk_idx] = blk ; + + //mark the address map: all blocks covered by this block space pointing back to this block. + U32 end = (buffer_size / mMinBlockSize) ; + for(U32 i = 1 ; i < end ; i++) + { + (blk + i)->mSelf = blk ; + } + + return blk ; +} + +//delete a block, release the block to the free pool. +void LLPrivateMemoryPool::LLMemoryChunk::removeBlock(LLMemoryBlock* blk) +{ + //remove from the available block list + if(blk->mPrev) + { + blk->mPrev->mNext = blk->mNext ; + } + if(blk->mNext) + { + blk->mNext->mPrev = blk->mPrev ; + } + U32 blk_idx = getBlockLevel(blk->getSlotSize()); + if(mAvailBlockList[blk_idx] == blk) + { + mAvailBlockList[blk_idx] = blk->mNext ; + } + + blk->mNext = NULL ; + blk->mPrev = NULL ; + + //mark it free + blk->setBuffer(blk->getBuffer(), blk->getBufferSize()) ; + +#if 1 + //merge blk with neighbors if possible + if(blk->getBuffer() > mDataBuffer) //has the left neighbor + { + if((blk - 1)->mSelf->isFree()) + { + LLMemoryBlock* left_blk = (blk - 1)->mSelf ; + removeFromFreeSpace((blk - 1)->mSelf); + left_blk->setBuffer(left_blk->getBuffer(), left_blk->getBufferSize() + blk->getBufferSize()) ; + blk = left_blk ; + } + } + if(blk->getBuffer() + blk->getBufferSize() <= mBuffer + mBufferSize - mMinBlockSize) //has the right neighbor + { + U32 d = blk->getBufferSize() / mMinBlockSize ; + if((blk + d)->isFree()) + { + LLMemoryBlock* right_blk = blk + d ; + removeFromFreeSpace(blk + d) ; + blk->setBuffer(blk->getBuffer(), blk->getBufferSize() + right_blk->getBufferSize()) ; + } + } +#endif + + addToFreeSpace(blk) ; + + return ; +} + +//the top block in the list is full, pop it out of the list +void LLPrivateMemoryPool::LLMemoryChunk::popAvailBlockList(U32 blk_idx) +{ + if(mAvailBlockList[blk_idx]) + { + LLMemoryBlock* next = mAvailBlockList[blk_idx]->mNext ; + if(next) + { + next->mPrev = NULL ; + } + mAvailBlockList[blk_idx]->mPrev = NULL ; + mAvailBlockList[blk_idx]->mNext = NULL ; + mAvailBlockList[blk_idx] = next ; + } +} + +//add the block back to the free pool +void LLPrivateMemoryPool::LLMemoryChunk::addToFreeSpace(LLMemoryBlock* blk) +{ + llassert_always(!blk->mPrev) ; + llassert_always(!blk->mNext) ; + + U16 free_idx = blk->getBufferSize() / mMinBlockSize - 1; + + (blk + free_idx)->mSelf = blk ; //mark the end pointing back to the head. + free_idx = llmin(free_idx, (U16)(mPartitionLevels - 1)) ; + + blk->mNext = mFreeSpaceList[free_idx] ; + if(mFreeSpaceList[free_idx]) + { + mFreeSpaceList[free_idx]->mPrev = blk ; + } + mFreeSpaceList[free_idx] = blk ; + blk->mPrev = NULL ; + blk->mSelf = blk ; + + return ; +} + +//remove the space from the free pool +void LLPrivateMemoryPool::LLMemoryChunk::removeFromFreeSpace(LLMemoryBlock* blk) +{ + U16 free_idx = blk->getBufferSize() / mMinBlockSize - 1; + free_idx = llmin(free_idx, (U16)(mPartitionLevels - 1)) ; + + if(mFreeSpaceList[free_idx] == blk) + { + mFreeSpaceList[free_idx] = blk->mNext ; + } + if(blk->mPrev) + { + blk->mPrev->mNext = blk->mNext ; + } + if(blk->mNext) + { + blk->mNext->mPrev = blk->mPrev ; + } + blk->mNext = NULL ; + blk->mPrev = NULL ; + blk->mSelf = NULL ; + + return ; +} + +void LLPrivateMemoryPool::LLMemoryChunk::addToAvailBlockList(LLMemoryBlock* blk) +{ + llassert_always(!blk->mPrev) ; + llassert_always(!blk->mNext) ; + + U32 blk_idx = getBlockLevel(blk->getSlotSize()); + + blk->mNext = mAvailBlockList[blk_idx] ; + if(blk->mNext) + { + blk->mNext->mPrev = blk ; + } + blk->mPrev = NULL ; + mAvailBlockList[blk_idx] = blk ; + + return ; +} + +U32 LLPrivateMemoryPool::LLMemoryChunk::getPageIndex(U32 addr) +{ + return (addr - (U32)mDataBuffer) / mMinBlockSize ; +} + +//for mAvailBlockList +U32 LLPrivateMemoryPool::LLMemoryChunk::getBlockLevel(U32 size) +{ + llassert(size >= mMinSlotSize && size <= mMaxSlotSize) ; + + //start from 0 + return (size + mMinSlotSize - 1) / mMinSlotSize - 1 ; +} + +//for mFreeSpaceList +U16 LLPrivateMemoryPool::LLMemoryChunk::getPageLevel(U32 size) +{ + //start from 0 + U16 level = size / mMinBlockSize - 1 ; + if(level >= mPartitionLevels) + { + level = mPartitionLevels - 1 ; + } + return level ; +} + +//------------------------------------------------------------------- +//class LLPrivateMemoryPool +//-------------------------------------------------------------------- +const U32 CHUNK_SIZE = 4 << 20 ; //4 MB +const U32 LARGE_CHUNK_SIZE = 4 * CHUNK_SIZE ; //16 MB +LLPrivateMemoryPool::LLPrivateMemoryPool(S32 type, U32 max_pool_size) : + mMutexp(NULL), + mReservedPoolSize(0), + mHashFactor(1), + mType(type), + mMaxPoolSize(max_pool_size) +{ + if(type == STATIC_THREADED || type == VOLATILE_THREADED) + { + mMutexp = new LLMutex(NULL) ; + } + + for(S32 i = 0 ; i < SUPER_ALLOCATION ; i++) + { + mChunkList[i] = NULL ; + } + + mNumOfChunks = 0 ; +} + +LLPrivateMemoryPool::~LLPrivateMemoryPool() +{ + destroyPool(); + delete mMutexp ; +} + +char* LLPrivateMemoryPool::allocate(U32 size) +{ + if(!size) + { + return NULL ; + } + + //if the asked size larger than MAX_BLOCK_SIZE, fetch from heap directly, the pool does not manage it + if(size >= CHUNK_SIZE) + { + return (char*)malloc(size) ; + } + + char* p = NULL ; + + //find the appropriate chunk + S32 chunk_idx = getChunkIndex(size) ; + + lock() ; + + LLMemoryChunk* chunk = mChunkList[chunk_idx]; + while(chunk) + { + if((p = chunk->allocate(size))) + { + break ; + } + chunk = chunk->mNext ; + } + + //fetch new memory chunk + if(!p) + { + if(mReservedPoolSize + CHUNK_SIZE > mMaxPoolSize) + { + chunk = mChunkList[chunk_idx]; + while(chunk) + { + if((p = chunk->allocate(size))) + { + break ; + } + chunk = chunk->mNext ; + } + } + else + { + chunk = addChunk(chunk_idx) ; + if(chunk) + { + p = chunk->allocate(size) ; + } + } + } + + unlock() ; + + if(!p) //to get memory from the private pool failed, try the heap directly + { + static bool to_log = true ; + + if(to_log) + { + llwarns << "The memory pool overflows, now using heap directly!" << llendl ; + to_log = false ; + } + + return (char*)malloc(size) ; + } + + return p ; +} + +void LLPrivateMemoryPool::freeMem(void* addr) +{ + if(!addr) + { + return ; + } + + lock() ; + + LLMemoryChunk* chunk = findChunk((char*)addr) ; + + if(!chunk) + { + free(addr) ; //release from heap + } + else + { + chunk->freeMem(addr) ; + + if(chunk->empty()) + { + removeChunk(chunk) ; + } + } + + unlock() ; +} + +void LLPrivateMemoryPool::dump() +{ +} + +U32 LLPrivateMemoryPool::getTotalAllocatedSize() +{ + U32 total_allocated = 0 ; + + LLMemoryChunk* chunk ; + for(S32 i = 0 ; i < SUPER_ALLOCATION ; i++) + { + chunk = mChunkList[i]; + while(chunk) + { + total_allocated += chunk->getAllocatedSize() ; + chunk = chunk->mNext ; + } + } + + return total_allocated ; +} + +void LLPrivateMemoryPool::lock() +{ + if(mMutexp) + { + mMutexp->lock() ; + } +} + +void LLPrivateMemoryPool::unlock() +{ + if(mMutexp) + { + mMutexp->unlock() ; + } +} + +S32 LLPrivateMemoryPool::getChunkIndex(U32 size) +{ + S32 i ; + for(i = 0 ; size > MAX_SLOT_SIZES[i]; i++); + + llassert_always(i < SUPER_ALLOCATION); + + return i ; +} + +//destroy the entire pool +void LLPrivateMemoryPool::destroyPool() +{ + lock() ; + + if(mNumOfChunks > 0) + { + llwarns << "There is some memory not freed when destroy the memory pool!" << llendl ; + } + + mNumOfChunks = 0 ; + mChunkHashList.clear() ; + mHashFactor = 1 ; + for(S32 i = 0 ; i < SUPER_ALLOCATION ; i++) + { + mChunkList[i] = NULL ; + } + + unlock() ; +} + +bool LLPrivateMemoryPool::checkSize(U32 asked_size) +{ + if(mReservedPoolSize + asked_size > mMaxPoolSize) + { + llinfos << "Max pool size: " << mMaxPoolSize << llendl ; + llinfos << "Total reserved size: " << mReservedPoolSize + asked_size << llendl ; + llinfos << "Total_allocated Size: " << getTotalAllocatedSize() << llendl ; + + //llerrs << "The pool is overflowing..." << llendl ; + + return false ; + } + + return true ; +} + +LLPrivateMemoryPool::LLMemoryChunk* LLPrivateMemoryPool::addChunk(S32 chunk_index) +{ + U32 preferred_size ; + U32 overhead ; + if(chunk_index < LARGE_ALLOCATION) + { + preferred_size = CHUNK_SIZE ; //4MB + overhead = LLMemoryChunk::getMaxOverhead(preferred_size, MIN_SLOT_SIZES[chunk_index], + MAX_SLOT_SIZES[chunk_index], MIN_BLOCK_SIZES[chunk_index], MAX_BLOCK_SIZES[chunk_index]) ; + } + else + { + preferred_size = LARGE_CHUNK_SIZE ; //16MB + overhead = LLMemoryChunk::getMaxOverhead(preferred_size, MIN_SLOT_SIZES[chunk_index], + MAX_SLOT_SIZES[chunk_index], MIN_BLOCK_SIZES[chunk_index], MAX_BLOCK_SIZES[chunk_index]) ; + } + + if(!checkSize(preferred_size + overhead)) + { + return NULL ; + } + + mReservedPoolSize += preferred_size + overhead ; + + char* buffer = (char*)malloc(preferred_size + overhead) ; + if(!buffer) + { + return NULL ; + } + + LLMemoryChunk* chunk = new (buffer) LLMemoryChunk() ; + chunk->init(buffer, preferred_size + overhead, MIN_SLOT_SIZES[chunk_index], + MAX_SLOT_SIZES[chunk_index], MIN_BLOCK_SIZES[chunk_index], MAX_BLOCK_SIZES[chunk_index]) ; + + //add to the tail of the linked list + { + if(!mChunkList[chunk_index]) + { + mChunkList[chunk_index] = chunk ; + } + else + { + LLMemoryChunk* cur = mChunkList[chunk_index] ; + while(cur->mNext) + { + cur = cur->mNext ; + } + cur->mNext = chunk ; + chunk->mPrev = cur ; + } + } + + //insert into the hash table + addToHashTable(chunk) ; + + mNumOfChunks++; + + return chunk ; +} + +void LLPrivateMemoryPool::removeChunk(LLMemoryChunk* chunk) +{ + if(!chunk) + { + return ; + } + + //remove from the linked list + for(S32 i = 0 ; i < SUPER_ALLOCATION ; i++) + { + if(mChunkList[i] == chunk) + { + mChunkList[i] = chunk->mNext ; + } + } + + if(chunk->mPrev) + { + chunk->mPrev->mNext = chunk->mNext ; + } + if(chunk->mNext) + { + chunk->mNext->mPrev = chunk->mPrev ; + } + + //remove from the hash table + removeFromHashTable(chunk) ; + + mNumOfChunks--; + mReservedPoolSize -= chunk->getBufferSize() ; + + //release memory + free(chunk->getBuffer()) ; +} + +U16 LLPrivateMemoryPool::findHashKey(const char* addr) +{ + return (((U32)addr) / CHUNK_SIZE) % mHashFactor ; +} + +LLPrivateMemoryPool::LLMemoryChunk* LLPrivateMemoryPool::findChunk(const char* addr) +{ + U16 key = findHashKey(addr) ; + if(mChunkHashList.size() <= key) + { + return NULL ; + } + + return mChunkHashList[key].findChunk(addr) ; +} + +void LLPrivateMemoryPool::addToHashTable(LLMemoryChunk* chunk) +{ + static const U16 HASH_FACTORS[] = {41, 83, 193, 317, 419, 523, 719, 997, 1523, 0xFFFF}; + + U16 i ; + if(mChunkHashList.empty()) + { + mHashFactor = HASH_FACTORS[0] ; + rehash() ; + } + + U16 start_key = findHashKey(chunk->getBuffer()) ; + U16 end_key = findHashKey(chunk->getBuffer() + chunk->getBufferSize() - 1) ; + bool need_rehash = false ; + + if(mChunkHashList[start_key].hasElement(chunk)) + { + return; //already inserted. + } + need_rehash = mChunkHashList[start_key].add(chunk) ; + + if(start_key == end_key && !need_rehash) + { + return ; //done + } + + if(!need_rehash) + { + need_rehash = mChunkHashList[end_key].add(chunk) ; + } + + if(!need_rehash) + { + if(end_key < start_key) + { + need_rehash = fillHashTable(start_key + 1, mHashFactor, chunk) ; + if(!need_rehash) + { + need_rehash = fillHashTable(0, end_key, chunk) ; + } + } + else + { + need_rehash = fillHashTable(start_key + 1, end_key, chunk) ; + } + } + + if(need_rehash) + { + i = 0 ; + while(HASH_FACTORS[i] <= mHashFactor) i++; + + mHashFactor = HASH_FACTORS[i] ; + llassert_always(mHashFactor != 0xFFFF) ;//stop point to prevent endlessly recursive calls + + rehash() ; + } +} + +void LLPrivateMemoryPool::removeFromHashTable(LLMemoryChunk* chunk) +{ + U16 start_key = findHashKey(chunk->getBuffer()) ; + U16 end_key = findHashKey(chunk->getBuffer() + chunk->getBufferSize() - 1) ; + + mChunkHashList[start_key].remove(chunk) ; + if(start_key == end_key) + { + return ; //done + } + + mChunkHashList[end_key].remove(chunk) ; + + if(end_key < start_key) + { + for(U16 i = start_key + 1 ; i < mHashFactor; i++) + { + mChunkHashList[i].remove(chunk) ; + } + for(U16 i = 0 ; i < end_key; i++) + { + mChunkHashList[i].remove(chunk) ; + } + } + else + { + for(U16 i = start_key + 1 ; i < end_key; i++) + { + mChunkHashList[i].remove(chunk) ; + } + } +} + +void LLPrivateMemoryPool::rehash() +{ + llinfos << "new hash factor: " << mHashFactor << llendl ; + + mChunkHashList.clear() ; + mChunkHashList.resize(mHashFactor) ; + + LLMemoryChunk* chunk ; + for(U16 i = 0 ; i < SUPER_ALLOCATION ; i++) + { + chunk = mChunkList[i] ; + while(chunk) + { + addToHashTable(chunk) ; + chunk = chunk->mNext ; + } + } +} + +bool LLPrivateMemoryPool::fillHashTable(U16 start, U16 end, LLMemoryChunk* chunk) +{ + for(U16 i = start; i < end; i++) + { + if(mChunkHashList[i].add(chunk)) + { + return true ; + } + } + + return false ; +} + +//-------------------------------------------------------------------- +// class LLChunkHashElement +//-------------------------------------------------------------------- +LLPrivateMemoryPool::LLMemoryChunk* LLPrivateMemoryPool::LLChunkHashElement::findChunk(const char* addr) +{ + if(mFirst && mFirst->containsAddress(addr)) + { + return mFirst ; + } + else if(mSecond && mSecond->containsAddress(addr)) + { + return mSecond ; + } + + return NULL ; +} + +//return false if successfully inserted to the hash slot. +bool LLPrivateMemoryPool::LLChunkHashElement::add(LLPrivateMemoryPool::LLMemoryChunk* chunk) +{ + llassert_always(!hasElement(chunk)) ; + + if(!mFirst) + { + mFirst = chunk ; + } + else if(!mSecond) + { + mSecond = chunk ; + } + else + { + return true ; //failed + } + + return false ; +} + +void LLPrivateMemoryPool::LLChunkHashElement::remove(LLPrivateMemoryPool::LLMemoryChunk* chunk) +{ + if(mFirst == chunk) + { + mFirst = NULL ; + } + else if(mSecond ==chunk) + { + mSecond = NULL ; + } + else + { + llerrs << "This slot does not contain this chunk!" << llendl ; + } +} + +//-------------------------------------------------------------------- +//class LLPrivateMemoryPoolManager +//-------------------------------------------------------------------- +LLPrivateMemoryPoolManager* LLPrivateMemoryPoolManager::sInstance = NULL ; +std::vector LLPrivateMemoryPoolManager::sDanglingPoolList ; + +LLPrivateMemoryPoolManager::LLPrivateMemoryPoolManager(BOOL enabled, U32 max_pool_size) +{ + mPoolList.resize(LLPrivateMemoryPool::MAX_TYPES) ; + + for(S32 i = 0 ; i < LLPrivateMemoryPool::MAX_TYPES; i++) + { + mPoolList[i] = NULL ; + } + + mPrivatePoolEnabled = enabled ; + + const U32 MAX_POOL_SIZE = 256 * 1024 * 1024 ; //256 MB + mMaxPrivatePoolSize = llmax(max_pool_size, MAX_POOL_SIZE) ; +} + +LLPrivateMemoryPoolManager::~LLPrivateMemoryPoolManager() +{ + +#if __DEBUG_PRIVATE_MEM__ + if(!sMemAllocationTracker.empty()) + { + llwarns << "there is potential memory leaking here. The list of not freed memory blocks are from: " <first << " : " << iter->second << llendl ; + } + sMemAllocationTracker.clear() ; + } +#endif + +#if 0 + //all private pools should be released by their owners before reaching here. + for(S32 i = 0 ; i < LLPrivateMemoryPool::MAX_TYPES; i++) + { + llassert_always(!mPoolList[i]) ; + } + mPoolList.clear() ; + +#else + //forcefully release all memory + for(S32 i = 0 ; i < LLPrivateMemoryPool::MAX_TYPES; i++) + { + if(mPoolList[i]) + { + if(mPoolList[i]->isEmpty()) + { + delete mPoolList[i] ; + } + else + { + //can not delete this pool because it has alloacted memory to be freed. + //move it to the dangling list. + sDanglingPoolList.push_back(mPoolList[i]) ; + } + + mPoolList[i] = NULL ; + } + } + mPoolList.clear() ; +#endif +} + +//static +void LLPrivateMemoryPoolManager::initClass(BOOL enabled, U32 max_pool_size) +{ + llassert_always(!sInstance) ; + + sInstance = new LLPrivateMemoryPoolManager(enabled, max_pool_size) ; +} + +//static +LLPrivateMemoryPoolManager* LLPrivateMemoryPoolManager::getInstance() +{ + //if(!sInstance) + //{ + // sInstance = new LLPrivateMemoryPoolManager(FALSE) ; + //} + return sInstance ; +} + +//static +void LLPrivateMemoryPoolManager::destroyClass() +{ + if(sInstance) + { + delete sInstance ; + sInstance = NULL ; + } +} + +LLPrivateMemoryPool* LLPrivateMemoryPoolManager::newPool(S32 type) +{ + if(!mPrivatePoolEnabled) + { + return NULL ; + } + + if(!mPoolList[type]) + { + mPoolList[type] = new LLPrivateMemoryPool(type, mMaxPrivatePoolSize) ; + } + + return mPoolList[type] ; +} + +void LLPrivateMemoryPoolManager::deletePool(LLPrivateMemoryPool* pool) +{ + if(pool && pool->isEmpty()) + { + mPoolList[pool->getType()] = NULL ; + delete pool; + } +} + +//debug +void LLPrivateMemoryPoolManager::updateStatistics() +{ + mTotalReservedSize = 0 ; + mTotalAllocatedSize = 0 ; + + for(U32 i = 0; i < mPoolList.size(); i++) + { + if(mPoolList[i]) + { + mTotalReservedSize += mPoolList[i]->getTotalReservedSize() ; + mTotalAllocatedSize += mPoolList[i]->getTotalAllocatedSize() ; + } + } +} + +#if __DEBUG_PRIVATE_MEM__ +//static +char* LLPrivateMemoryPoolManager::allocate(LLPrivateMemoryPool* poolp, U32 size, const char* function, const int line) +{ + char* p ; + + if(!poolp) + { + p = (char*)malloc(size) ; + } + else + { + p = poolp->allocate(size) ; + } + + if(p) + { + char num[16] ; + sprintf(num, " line: %d ", line) ; + std::string str(function) ; + str += num; + + sMemAllocationTracker[p] = str ; + } + + return p ; +} +#else +//static +char* LLPrivateMemoryPoolManager::allocate(LLPrivateMemoryPool* poolp, U32 size) +{ + if(poolp) + { + return poolp->allocate(size) ; + } + else + { + return (char*)malloc(size) ; + } +} +#endif + +//static +void LLPrivateMemoryPoolManager::freeMem(LLPrivateMemoryPool* poolp, void* addr) +{ + if(!addr) + { + return ; + } + +#if __DEBUG_PRIVATE_MEM__ + sMemAllocationTracker.erase((char*)addr) ; +#endif + + if(poolp) + { + poolp->freeMem(addr) ; + } + else + { + if(!sInstance) //the private memory manager is destroyed, try the dangling list + { + for(S32 i = 0 ; i < sDanglingPoolList.size(); i++) + { + if(sDanglingPoolList[i]->findChunk((char*)addr)) + { + sDanglingPoolList[i]->freeMem(addr) ; + if(sDanglingPoolList[i]->isEmpty()) + { + delete sDanglingPoolList[i] ; + + if(i < sDanglingPoolList.size() - 1) + { + sDanglingPoolList[i] = sDanglingPoolList[sDanglingPoolList.size() - 1] ; + } + sDanglingPoolList.pop_back() ; + } + + addr = NULL ; + break ; + } + } + } + + llassert_always(!addr) ; //addr should be release before hitting here! + + free(addr) ; + } +} + +//-------------------------------------------------------------------- +//class LLPrivateMemoryPoolTester +//-------------------------------------------------------------------- +#if 0 +LLPrivateMemoryPoolTester* LLPrivateMemoryPoolTester::sInstance = NULL ; +LLPrivateMemoryPool* LLPrivateMemoryPoolTester::sPool = NULL ; +LLPrivateMemoryPoolTester::LLPrivateMemoryPoolTester() +{ +} + +LLPrivateMemoryPoolTester::~LLPrivateMemoryPoolTester() +{ +} + +//static +LLPrivateMemoryPoolTester* LLPrivateMemoryPoolTester::getInstance() +{ + if(!sInstance) + { + sInstance = ::new LLPrivateMemoryPoolTester() ; + } + return sInstance ; +} + +//static +void LLPrivateMemoryPoolTester::destroy() +{ + if(sInstance) + { + ::delete sInstance ; + sInstance = NULL ; + } + + if(sPool) + { + LLPrivateMemoryPoolManager::getInstance()->deletePool(sPool) ; + sPool = NULL ; + } +} + +void LLPrivateMemoryPoolTester::run(S32 type) +{ + if(sPool) + { + LLPrivateMemoryPoolManager::getInstance()->deletePool(sPool) ; + } + sPool = LLPrivateMemoryPoolManager::getInstance()->newPool(type) ; + + //run the test + correctnessTest() ; + performanceTest() ; + //fragmentationtest() ; + + //release pool. + LLPrivateMemoryPoolManager::getInstance()->deletePool(sPool) ; + sPool = NULL ; +} + +void LLPrivateMemoryPoolTester::test(U32 min_size, U32 max_size, U32 stride, U32 times, + bool random_deletion, bool output_statistics) +{ + U32 levels = (max_size - min_size) / stride + 1 ; + char*** p ; + U32 i, j ; + U32 total_allocated_size = 0 ; + + //allocate space for p ; + if(!(p = ::new char**[times]) || !(*p = ::new char*[times * levels])) + { + llerrs << "memory initialization for p failed" << llendl ; + } + + //init + for(i = 0 ; i < times; i++) + { + p[i] = *p + i * levels ; + for(j = 0 ; j < levels; j++) + { + p[i][j] = NULL ; + } + } + + //allocation + U32 size ; + for(i = 0 ; i < times ; i++) + { + for(j = 0 ; j < levels; j++) + { + size = min_size + j * stride ; + p[i][j] = ALLOCATE_MEM(sPool, size) ; + + total_allocated_size+= size ; + + *(U32*)p[i][j] = i ; + *((U32*)p[i][j] + 1) = j ; + //p[i][j][size - 1] = '\0' ; //access the last element to verify the success of the allocation. + + //randomly release memory + if(random_deletion) + { + S32 k = rand() % levels ; + + if(p[i][k]) + { + llassert_always(*(U32*)p[i][k] == i && *((U32*)p[i][k] + 1) == k) ; + FREE_MEM(sPool, p[i][k]) ; + total_allocated_size -= min_size + k * stride ; + p[i][k] = NULL ; + } + } + } + } + + //output pool allocation statistics + if(output_statistics) + { + } + + //release all memory allocations + for(i = 0 ; i < times; i++) + { + for(j = 0 ; j < levels; j++) + { + if(p[i][j]) + { + llassert_always(*(U32*)p[i][j] == i && *((U32*)p[i][j] + 1) == j) ; + FREE_MEM(sPool, p[i][j]) ; + total_allocated_size -= min_size + j * stride ; + p[i][j] = NULL ; + } + } + } + + ::delete[] *p ; + ::delete[] p ; +} + +void LLPrivateMemoryPoolTester::testAndTime(U32 size, U32 times) +{ + LLTimer timer ; + + llinfos << " -**********************- " << llendl ; + llinfos << "test size: " << size << " test times: " << times << llendl ; + + timer.reset() ; + char** p = new char*[times] ; + + //using the customized memory pool + //allocation + for(U32 i = 0 ; i < times; i++) + { + p[i] = ALLOCATE_MEM(sPool, size) ; + if(!p[i]) + { + llerrs << "allocation failed" << llendl ; + } + } + //de-allocation + for(U32 i = 0 ; i < times; i++) + { + FREE_MEM(sPool, p[i]) ; + p[i] = NULL ; + } + llinfos << "time spent using customized memory pool: " << timer.getElapsedTimeF32() << llendl ; + + timer.reset() ; + + //using the standard allocator/de-allocator: + //allocation + for(U32 i = 0 ; i < times; i++) + { + p[i] = ::new char[size] ; + if(!p[i]) + { + llerrs << "allocation failed" << llendl ; + } + } + //de-allocation + for(U32 i = 0 ; i < times; i++) + { + ::delete[] p[i] ; + p[i] = NULL ; + } + llinfos << "time spent using standard allocator/de-allocator: " << timer.getElapsedTimeF32() << llendl ; + + delete[] p; +} + +void LLPrivateMemoryPoolTester::correctnessTest() +{ + //try many different sized allocation, and all kinds of edge cases, access the allocated memory + //to see if allocation is right. + + //edge case + char* p = ALLOCATE_MEM(sPool, 0) ; + FREE_MEM(sPool, p) ; + + //small sized + // [8 bytes, 2KB), each asks for 256 allocations and deallocations + test(8, 2040, 8, 256, true, true) ; + + //medium sized + //[2KB, 512KB), each asks for 16 allocations and deallocations + test(2048, 512 * 1024 - 2048, 2048, 16, true, true) ; + + //large sized + //[512KB, 4MB], each asks for 8 allocations and deallocations + test(512 * 1024, 4 * 1024 * 1024, 64 * 1024, 6, true, true) ; +} + +void LLPrivateMemoryPoolTester::performanceTest() +{ + U32 test_size[3] = {768, 3* 1024, 3* 1024 * 1024}; + + //small sized + testAndTime(test_size[0], 8) ; + + //medium sized + testAndTime(test_size[1], 8) ; + + //large sized + testAndTime(test_size[2], 8) ; +} + +void LLPrivateMemoryPoolTester::fragmentationtest() +{ + //for internal fragmentation statistics: + //every time when asking for a new chunk during correctness test, and performance test, + //print out the chunk usage statistices. +} +#endif +//-------------------------------------------------------------------- diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h index 3bd1403576..74cf42c894 100644 --- a/indra/llcommon/llmemory.h +++ b/indra/llcommon/llmemory.h @@ -27,7 +27,6 @@ #define LLMEMORY_H #include "llmemtype.h" - #if LL_DEBUG inline void* ll_aligned_malloc( size_t size, int align ) { @@ -105,6 +104,10 @@ inline void ll_aligned_free_32(void *p) #define ll_aligned_free_32 free #endif // LL_DEBUG +#ifndef __DEBUG_PRIVATE_MEM__ +#define __DEBUG_PRIVATE_MEM__ 0 +#endif + class LL_COMMON_API LLMemory { public: @@ -115,8 +118,24 @@ public: // Return value is zero if not known. static U64 getCurrentRSS(); static U32 getWorkingSetSize(); + static void* tryToAlloc(void* address, U32 size); + static void initMaxHeapSizeGB(F32 max_heap_size_gb, BOOL prevent_heap_failure); + static void updateMemoryInfo() ; + static void logMemoryInfo(BOOL update = FALSE); + static bool isMemoryPoolLow(); + + static U32 getAvailableMemKB() ; + static U32 getMaxMemKB() ; + static U32 getAllocatedMemKB() ; private: static char* reserveMem; + static U32 sAvailPhysicalMemInKB ; + static U32 sMaxPhysicalMemInKB ; + static U32 sAllocatedMemInKB; + static U32 sAllocatedPageSizeInKB ; + + static U32 sMaxHeapSizeInKB; + static BOOL sEnableMemoryFailurePrevention; }; //---------------------------------------------------------------------------- @@ -163,6 +182,328 @@ private: //---------------------------------------------------------------------------- + +// +//class LLPrivateMemoryPool defines a private memory pool for an application to use, so the application does not +//need to access the heap directly fro each memory allocation. Throught this, the allocation speed is faster, +//and reduces virtaul address space gragmentation problem. +//Note: this class is thread-safe by passing true to the constructor function. However, you do not need to do this unless +//you are sure the memory allocation and de-allocation will happen in different threads. To make the pool thread safe +//increases allocation and deallocation cost. +// +class LL_COMMON_API LLPrivateMemoryPool +{ + friend class LLPrivateMemoryPoolManager ; + +public: + class LL_COMMON_API LLMemoryBlock //each block is devided into slots uniformly + { + public: + LLMemoryBlock() ; + ~LLMemoryBlock() ; + + void init(char* buffer, U32 buffer_size, U32 slot_size) ; + void setBuffer(char* buffer, U32 buffer_size) ; + + char* allocate() ; + void freeMem(void* addr) ; + + bool empty() {return !mAllocatedSlots;} + bool isFull() {return mAllocatedSlots == mTotalSlots;} + bool isFree() {return !mTotalSlots;} + + U32 getSlotSize()const {return mSlotSize;} + U32 getTotalSlots()const {return mTotalSlots;} + U32 getBufferSize()const {return mBufferSize;} + char* getBuffer() const {return mBuffer;} + + //debug use + void resetBitMap() ; + private: + char* mBuffer; + U32 mSlotSize ; //when the block is not initialized, it is the buffer size. + U32 mBufferSize ; + U32 mUsageBits ; + U8 mTotalSlots ; + U8 mAllocatedSlots ; + U8 mDummySize ; //size of extra bytes reserved for mUsageBits. + + public: + LLMemoryBlock* mPrev ; + LLMemoryBlock* mNext ; + LLMemoryBlock* mSelf ; + + struct CompareAddress + { + bool operator()(const LLMemoryBlock* const& lhs, const LLMemoryBlock* const& rhs) + { + return (U32)lhs->getBuffer() < (U32)rhs->getBuffer(); + } + }; + }; + + class LL_COMMON_API LLMemoryChunk //is divided into memory blocks. + { + public: + LLMemoryChunk() ; + ~LLMemoryChunk() ; + + void init(char* buffer, U32 buffer_size, U32 min_slot_size, U32 max_slot_size, U32 min_block_size, U32 max_block_size) ; + void setBuffer(char* buffer, U32 buffer_size) ; + + bool empty() ; + + char* allocate(U32 size) ; + void freeMem(void* addr) ; + + char* getBuffer() const {return mBuffer;} + U32 getBufferSize() const {return mBufferSize;} + U32 getAllocatedSize() const {return mAlloatedSize;} + + bool containsAddress(const char* addr) const; + + static U32 getMaxOverhead(U32 data_buffer_size, U32 min_slot_size, + U32 max_slot_size, U32 min_block_size, U32 max_block_size) ; + + void dump() ; + + private: + U32 getPageIndex(U32 addr) ; + U32 getBlockLevel(U32 size) ; + U16 getPageLevel(U32 size) ; + LLMemoryBlock* addBlock(U32 blk_idx) ; + void popAvailBlockList(U32 blk_idx) ; + void addToFreeSpace(LLMemoryBlock* blk) ; + void removeFromFreeSpace(LLMemoryBlock* blk) ; + void removeBlock(LLMemoryBlock* blk) ; + void addToAvailBlockList(LLMemoryBlock* blk) ; + U32 calcBlockSize(U32 slot_size); + LLMemoryBlock* createNewBlock(LLMemoryBlock* blk, U32 buffer_size, U32 slot_size, U32 blk_idx) ; + + private: + LLMemoryBlock** mAvailBlockList ;//256 by mMinSlotSize + LLMemoryBlock** mFreeSpaceList; + LLMemoryBlock* mBlocks ; //index of blocks by address. + + char* mBuffer ; + U32 mBufferSize ; + char* mDataBuffer ; + char* mMetaBuffer ; + U32 mMinBlockSize ; + U32 mMinSlotSize ; + U32 mMaxSlotSize ; + U32 mAlloatedSize ; + U16 mBlockLevels; + U16 mPartitionLevels; + + public: + //form a linked list + LLMemoryChunk* mNext ; + LLMemoryChunk* mPrev ; + } ; + +private: + LLPrivateMemoryPool(S32 type, U32 max_pool_size) ; + ~LLPrivateMemoryPool() ; + + char *allocate(U32 size) ; + void freeMem(void* addr) ; + + void dump() ; + U32 getTotalAllocatedSize() ; + U32 getTotalReservedSize() {return mReservedPoolSize;} + S32 getType() const {return mType; } + bool isEmpty() const {return !mNumOfChunks; } + +private: + void lock() ; + void unlock() ; + S32 getChunkIndex(U32 size) ; + LLMemoryChunk* addChunk(S32 chunk_index) ; + bool checkSize(U32 asked_size) ; + void removeChunk(LLMemoryChunk* chunk) ; + U16 findHashKey(const char* addr); + void addToHashTable(LLMemoryChunk* chunk) ; + void removeFromHashTable(LLMemoryChunk* chunk) ; + void rehash() ; + bool fillHashTable(U16 start, U16 end, LLMemoryChunk* chunk) ; + LLMemoryChunk* findChunk(const char* addr) ; + + void destroyPool() ; + +public: + enum + { + SMALL_ALLOCATION = 0, //from 8 bytes to 2KB(exclusive), page size 2KB, max chunk size is 4MB. + MEDIUM_ALLOCATION, //from 2KB to 512KB(exclusive), page size 32KB, max chunk size 4MB + LARGE_ALLOCATION, //from 512KB to 4MB(inclusive), page size 64KB, max chunk size 16MB + SUPER_ALLOCATION //allocation larger than 4MB. + }; + + enum + { + STATIC = 0 , //static pool(each alllocation stays for a long time) without threading support + VOLATILE, //Volatile pool(each allocation stays for a very short time) without threading support + STATIC_THREADED, //static pool with threading support + VOLATILE_THREADED, //volatile pool with threading support + MAX_TYPES + }; //pool types + +private: + LLMutex* mMutexp ; + U32 mMaxPoolSize; + U32 mReservedPoolSize ; + + LLMemoryChunk* mChunkList[SUPER_ALLOCATION] ; //all memory chunks reserved by this pool, sorted by address + U16 mNumOfChunks ; + U16 mHashFactor ; + + S32 mType ; + + class LLChunkHashElement + { + public: + LLChunkHashElement() {mFirst = NULL ; mSecond = NULL ;} + + bool add(LLMemoryChunk* chunk) ; + void remove(LLMemoryChunk* chunk) ; + LLMemoryChunk* findChunk(const char* addr) ; + + bool empty() {return !mFirst && !mSecond; } + bool full() {return mFirst && mSecond; } + bool hasElement(LLMemoryChunk* chunk) {return mFirst == chunk || mSecond == chunk;} + + private: + LLMemoryChunk* mFirst ; + LLMemoryChunk* mSecond ; + }; + std::vector mChunkHashList ; +}; + +class LL_COMMON_API LLPrivateMemoryPoolManager +{ +private: + LLPrivateMemoryPoolManager(BOOL enabled, U32 max_pool_size) ; + ~LLPrivateMemoryPoolManager() ; + +public: + static LLPrivateMemoryPoolManager* getInstance() ; + static void initClass(BOOL enabled, U32 pool_size) ; + static void destroyClass() ; + + LLPrivateMemoryPool* newPool(S32 type) ; + void deletePool(LLPrivateMemoryPool* pool) ; + +private: + static LLPrivateMemoryPoolManager* sInstance ; + std::vector mPoolList ; + BOOL mPrivatePoolEnabled; + U32 mMaxPrivatePoolSize; + + static std::vector sDanglingPoolList ; +public: + //debug and statistics info. + void updateStatistics() ; + + U32 mTotalReservedSize ; + U32 mTotalAllocatedSize ; + +public: +#if __DEBUG_PRIVATE_MEM__ + static char* allocate(LLPrivateMemoryPool* poolp, U32 size, const char* function, const int line) ; + + typedef std::map mem_allocation_info_t ; + static mem_allocation_info_t sMemAllocationTracker; +#else + static char* allocate(LLPrivateMemoryPool* poolp, U32 size) ; +#endif + static void freeMem(LLPrivateMemoryPool* poolp, void* addr) ; +}; + +//------------------------------------------------------------------------------------- +#if __DEBUG_PRIVATE_MEM__ +#define ALLOCATE_MEM(poolp, size) LLPrivateMemoryPoolManager::allocate((poolp), (size), __FUNCTION__, __LINE__) +#else +#define ALLOCATE_MEM(poolp, size) LLPrivateMemoryPoolManager::allocate((poolp), (size)) +#endif +#define FREE_MEM(poolp, addr) LLPrivateMemoryPoolManager::freeMem((poolp), (addr)) +//------------------------------------------------------------------------------------- + +// +//the below singleton is used to test the private memory pool. +// +#if 0 +class LL_COMMON_API LLPrivateMemoryPoolTester +{ +private: + LLPrivateMemoryPoolTester() ; + ~LLPrivateMemoryPoolTester() ; + +public: + static LLPrivateMemoryPoolTester* getInstance() ; + static void destroy() ; + + void run(S32 type) ; + +private: + void correctnessTest() ; + void performanceTest() ; + void fragmentationtest() ; + + void test(U32 min_size, U32 max_size, U32 stride, U32 times, bool random_deletion, bool output_statistics) ; + void testAndTime(U32 size, U32 times) ; + +#if 0 +public: + void* operator new(size_t size) + { + return (void*)sPool->allocate(size) ; + } + void operator delete(void* addr) + { + sPool->freeMem(addr) ; + } + void* operator new[](size_t size) + { + return (void*)sPool->allocate(size) ; + } + void operator delete[](void* addr) + { + sPool->freeMem(addr) ; + } +#endif + +private: + static LLPrivateMemoryPoolTester* sInstance; + static LLPrivateMemoryPool* sPool ; + static LLPrivateMemoryPool* sThreadedPool ; +}; +#if 0 +//static +void* LLPrivateMemoryPoolTester::operator new(size_t size) +{ + return (void*)sPool->allocate(size) ; +} + +//static +void LLPrivateMemoryPoolTester::operator delete(void* addr) +{ + sPool->free(addr) ; +} + +//static +void* LLPrivateMemoryPoolTester::operator new[](size_t size) +{ + return (void*)sPool->allocate(size) ; +} + +//static +void LLPrivateMemoryPoolTester::operator delete[](void* addr) +{ + sPool->free(addr) ; +} +#endif +#endif // LLRefCount moved to llrefcount.h // LLPointer moved to llpointer.h diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp index efd9c4b68f..5dee7a3541 100644 --- a/indra/llcommon/llqueuedthread.cpp +++ b/indra/llcommon/llqueuedthread.cpp @@ -32,7 +32,7 @@ //============================================================================ // MAIN THREAD -LLQueuedThread::LLQueuedThread(const std::string& name, bool threaded) : +LLQueuedThread::LLQueuedThread(const std::string& name, bool threaded, bool should_pause) : LLThread(name), mThreaded(threaded), mIdleThread(TRUE), @@ -41,6 +41,11 @@ LLQueuedThread::LLQueuedThread(const std::string& name, bool threaded) : { if (mThreaded) { + if(should_pause) + { + pause() ; //call this before start the thread. + } + start(); } } diff --git a/indra/llcommon/llqueuedthread.h b/indra/llcommon/llqueuedthread.h index a53b22f6fc..499d13a792 100644 --- a/indra/llcommon/llqueuedthread.h +++ b/indra/llcommon/llqueuedthread.h @@ -149,7 +149,7 @@ public: static handle_t nullHandle() { return handle_t(0); } public: - LLQueuedThread(const std::string& name, bool threaded = true); + LLQueuedThread(const std::string& name, bool threaded = true, bool should_pause = false); virtual ~LLQueuedThread(); virtual void shutdown(); diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp index ede09ef1e4..7e62077278 100644 --- a/indra/llcommon/llsdserialize_xml.cpp +++ b/indra/llcommon/llsdserialize_xml.cpp @@ -375,10 +375,13 @@ S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data) { break; } - count = get_till_eol(input, (char *)buffer, BUFFER_SIZE); - if (!count) { - break; + + count = get_till_eol(input, (char *)buffer, BUFFER_SIZE); + if (!count) + { + break; + } } status = XML_ParseBuffer(mParser, count, false); @@ -742,6 +745,7 @@ void LLSDXMLParser::Impl::endElementHandler(const XML_Char* name) case ELEMENT_INTEGER: { S32 i; + // sscanf okay here with different locales - ints don't change for different locale settings like floats do. if ( sscanf(mCurrentContent.c_str(), "%d", &i ) == 1 ) { // See if sscanf works - it's faster value = i; @@ -756,15 +760,20 @@ void LLSDXMLParser::Impl::endElementHandler(const XML_Char* name) case ELEMENT_REAL: { // SA: it seems sscanf does not always give expected result (for instance 0.009999999776482582092285156 is decoded as 0 under Linux) -/* F64 r; - if ( sscanf(mCurrentContent.c_str(), "%lf", &r ) == 1 ) - { // See if sscanf works - it's faster - value = r; - } - else*/ - { - value = LLSD(mCurrentContent).asReal(); - } + value = LLSD(mCurrentContent).asReal(); + + // removed since this breaks when locale has decimal separator that isn't '.' + // investigated changing local to something compatible each time but deemed higher + // risk that just using LLSD.asReal() each time. + //F64 r; + //if ( sscanf(mCurrentContent.c_str(), "%lf", &r ) == 1 ) + //{ // See if sscanf works - it's faster + // value = r; + //} + //else + //{ + // value = LLSD(mCurrentContent).asReal(); + //} } break; diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp index f3b48b0156..e7fe656808 100644 --- a/indra/llcommon/llstring.cpp +++ b/indra/llcommon/llstring.cpp @@ -936,13 +936,18 @@ LLStringUtil::size_type LLStringUtil::getSubstitution(const std::string& instr, { const std::string delims (","); - // Find the first ] - size_type pos2 = instr.find(']', start); + // Find the first [ + size_type pos1 = instr.find('[', start); + if (pos1 == std::string::npos) + return std::string::npos; + + //Find the first ] after the initial [ + size_type pos2 = instr.find(']', pos1); if (pos2 == std::string::npos) return std::string::npos; - // Find the last [ before ] - size_type pos1 = instr.find_last_of('[', pos2-1); + // Find the last [ before ] in case of nested [[]] + pos1 = instr.find_last_of('[', pos2-1); if (pos1 == std::string::npos || pos1 < start) return std::string::npos; diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp index a7a4b6477d..6fce042315 100644 --- a/indra/llcommon/llsys.cpp +++ b/indra/llcommon/llsys.cpp @@ -995,90 +995,89 @@ LLSD LLMemoryInfo::loadStatsMap() stats.add("PrivateUsage KB", pmem.PrivateUsage/1024); #elif LL_DARWIN - + const vm_size_t pagekb(vm_page_size / 1024); // // Collect the vm_stat's // + + { + vm_statistics_data_t vmstat; + mach_msg_type_number_t vmstatCount = HOST_VM_INFO_COUNT; - { - vm_statistics_data_t vmstat; - mach_msg_type_number_t vmstatCount = HOST_VM_INFO_COUNT; + if (host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t) &vmstat, &vmstatCount) != KERN_SUCCESS) + { + LL_WARNS("LLMemoryInfo") << "Unable to collect memory information" << LL_ENDL; + } + else + { + stats.add("Pages free KB", pagekb * vmstat.free_count); + stats.add("Pages active KB", pagekb * vmstat.active_count); + stats.add("Pages inactive KB", pagekb * vmstat.inactive_count); + stats.add("Pages wired KB", pagekb * vmstat.wire_count); - if (host_statistics(mach_host_self(), HOST_VM_INFO, (host_info_t) &vmstat, &vmstatCount) != KERN_SUCCESS) - { - LL_WARNS("LLMemoryInfo") << "Unable to collect memory information" << LL_ENDL; - } - else - { - stats.add("Pages free KB", pagekb * vmstat.free_count); - stats.add("Pages active KB", pagekb * vmstat.active_count); - stats.add("Pages inactive KB", pagekb * vmstat.inactive_count); - stats.add("Pages wired KB", pagekb * vmstat.wire_count); + stats.add("Pages zero fill", vmstat.zero_fill_count); + stats.add("Page reactivations", vmstat.reactivations); + stats.add("Page-ins", vmstat.pageins); + stats.add("Page-outs", vmstat.pageouts); + + stats.add("Faults", vmstat.faults); + stats.add("Faults copy-on-write", vmstat.cow_faults); + + stats.add("Cache lookups", vmstat.lookups); + stats.add("Cache hits", vmstat.hits); + + stats.add("Page purgeable count", vmstat.purgeable_count); + stats.add("Page purges", vmstat.purges); + + stats.add("Page speculative reads", vmstat.speculative_count); + } + } + // + // Collect the misc task info + // - stats.add("Pages zero fill", vmstat.zero_fill_count); - stats.add("Page reactivations", vmstat.reactivations); - stats.add("Page-ins", vmstat.pageins); - stats.add("Page-outs", vmstat.pageouts); + { + task_events_info_data_t taskinfo; + unsigned taskinfoSize = sizeof(taskinfo); + + if (task_info(mach_task_self(), TASK_EVENTS_INFO, (task_info_t) &taskinfo, &taskinfoSize) != KERN_SUCCESS) + { + LL_WARNS("LLMemoryInfo") << "Unable to collect task information" << LL_ENDL; + } + else + { + stats.add("Task page-ins", taskinfo.pageins); + stats.add("Task copy-on-write faults", taskinfo.cow_faults); + stats.add("Task messages sent", taskinfo.messages_sent); + stats.add("Task messages received", taskinfo.messages_received); + stats.add("Task mach system call count", taskinfo.syscalls_mach); + stats.add("Task unix system call count", taskinfo.syscalls_unix); + stats.add("Task context switch count", taskinfo.csw); + } + } + + // + // Collect the basic task info + // - stats.add("Faults", vmstat.faults); - stats.add("Faults copy-on-write", vmstat.cow_faults); - - stats.add("Cache lookups", vmstat.lookups); - stats.add("Cache hits", vmstat.hits); - - stats.add("Page purgeable count", vmstat.purgeable_count); - stats.add("Page purges", vmstat.purges); - - stats.add("Page speculative reads", vmstat.speculative_count); - } - } - - // - // Collect the misc task info - // - - { - task_events_info_data_t taskinfo; - unsigned taskinfoSize = sizeof(taskinfo); - - if (task_info(mach_task_self(), TASK_EVENTS_INFO, (task_info_t) &taskinfo, &taskinfoSize) != KERN_SUCCESS) - { - LL_WARNS("LLMemoryInfo") << "Unable to collect task information" << LL_ENDL; - } - else - { - stats.add("Task page-ins", taskinfo.pageins); - stats.add("Task copy-on-write faults", taskinfo.cow_faults); - stats.add("Task messages sent", taskinfo.messages_sent); - stats.add("Task messages received", taskinfo.messages_received); - stats.add("Task mach system call count", taskinfo.syscalls_mach); - stats.add("Task unix system call count", taskinfo.syscalls_unix); - stats.add("Task context switch count", taskinfo.csw); - } - } - - // - // Collect the basic task info - // - - { - task_basic_info_64_data_t taskinfo; - unsigned taskinfoSize = sizeof(taskinfo); - - if (task_info(mach_task_self(), TASK_BASIC_INFO_64, (task_info_t) &taskinfo, &taskinfoSize) != KERN_SUCCESS) - { - LL_WARNS("LLMemoryInfo") << "Unable to collect task information" << LL_ENDL; - } - else - { - stats.add("Basic suspend count", taskinfo.suspend_count); - stats.add("Basic virtual memory KB", taskinfo.virtual_size / 1024); - stats.add("Basic resident memory KB", taskinfo.resident_size / 1024); - stats.add("Basic new thread policy", taskinfo.policy); - } - } + { + task_basic_info_64_data_t taskinfo; + unsigned taskinfoSize = sizeof(taskinfo); + + if (task_info(mach_task_self(), TASK_BASIC_INFO_64, (task_info_t) &taskinfo, &taskinfoSize) != KERN_SUCCESS) + { + LL_WARNS("LLMemoryInfo") << "Unable to collect task information" << LL_ENDL; + } + else + { + stats.add("Basic suspend count", taskinfo.suspend_count); + stats.add("Basic virtual memory KB", taskinfo.virtual_size / 1024); + stats.add("Basic resident memory KB", taskinfo.resident_size / 1024); + stats.add("Basic new thread policy", taskinfo.policy); + } + } #elif LL_SOLARIS U64 phys = 0; diff --git a/indra/llcommon/llversionviewer.h.in b/indra/llcommon/llversionviewer.h.in index 651ccf6a32..9fb0c10d6f 100644 --- a/indra/llcommon/llversionviewer.h.in +++ b/indra/llcommon/llversionviewer.h.in @@ -28,7 +28,7 @@ #define LL_LLVERSIONVIEWER_H const S32 LL_VERSION_MAJOR = 3; -const S32 LL_VERSION_MINOR = 0; +const S32 LL_VERSION_MINOR = 2; const S32 LL_VERSION_PATCH = 1; const S32 LL_VERSION_BUILD = 0; diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp index 3ac50832fd..4988bdf570 100644 --- a/indra/llcommon/llworkerthread.cpp +++ b/indra/llcommon/llworkerthread.cpp @@ -34,8 +34,8 @@ //============================================================================ // Run on MAIN thread -LLWorkerThread::LLWorkerThread(const std::string& name, bool threaded) : - LLQueuedThread(name, threaded) +LLWorkerThread::LLWorkerThread(const std::string& name, bool threaded, bool should_pause) : + LLQueuedThread(name, threaded, should_pause) { mDeleteMutex = new LLMutex(NULL); diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h index 9bff18303e..78a4781d15 100644 --- a/indra/llcommon/llworkerthread.h +++ b/indra/llcommon/llworkerthread.h @@ -83,7 +83,7 @@ private: LLMutex* mDeleteMutex; public: - LLWorkerThread(const std::string& name, bool threaded = true); + LLWorkerThread(const std::string& name, bool threaded = true, bool should_pause = false); ~LLWorkerThread(); /*virtual*/ S32 update(U32 max_time_ms); diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp index 3caf49aa6e..b34d1c5fd3 100644 --- a/indra/llcommon/tests/llinstancetracker_test.cpp +++ b/indra/llcommon/tests/llinstancetracker_test.cpp @@ -40,6 +40,7 @@ #include // other Linden headers #include "../test/lltut.h" +#include "wrapllerrs.h" struct Keyed: public LLInstanceTracker { @@ -90,79 +91,142 @@ namespace tut ensure_equals(Keyed::instanceCount(), 0); } - // template<> template<> - // void object::test<2>() - // { - // ensure_equals(Unkeyed::instanceCount(), 0); - // { - // Unkeyed one; - // ensure_equals(Unkeyed::instanceCount(), 1); - // Unkeyed* found = Unkeyed::getInstance(&one); - // ensure_equals(found, &one); - // { - // boost::scoped_ptr two(new Unkeyed); - // ensure_equals(Unkeyed::instanceCount(), 2); - // Unkeyed* found = Unkeyed::getInstance(two.get()); - // ensure_equals(found, two.get()); - // } - // ensure_equals(Unkeyed::instanceCount(), 1); - // } - // ensure_equals(Unkeyed::instanceCount(), 0); - // } + template<> template<> + void object::test<2>() + { + ensure_equals(Unkeyed::instanceCount(), 0); + { + Unkeyed one; + ensure_equals(Unkeyed::instanceCount(), 1); + Unkeyed* found = Unkeyed::getInstance(&one); + ensure_equals(found, &one); + { + boost::scoped_ptr two(new Unkeyed); + ensure_equals(Unkeyed::instanceCount(), 2); + Unkeyed* found = Unkeyed::getInstance(two.get()); + ensure_equals(found, two.get()); + } + ensure_equals(Unkeyed::instanceCount(), 1); + } + ensure_equals(Unkeyed::instanceCount(), 0); + } - // template<> template<> - // void object::test<3>() - // { - // Keyed one("one"), two("two"), three("three"); - // // We don't want to rely on the underlying container delivering keys - // // in any particular order. That allows us the flexibility to - // // reimplement LLInstanceTracker using, say, a hash map instead of a - // // std::map. We DO insist that every key appear exactly once. - // typedef std::vector StringVector; - // StringVector keys(Keyed::beginKeys(), Keyed::endKeys()); - // std::sort(keys.begin(), keys.end()); - // StringVector::const_iterator ki(keys.begin()); - // ensure_equals(*ki++, "one"); - // ensure_equals(*ki++, "three"); - // ensure_equals(*ki++, "two"); - // // Use ensure() here because ensure_equals would want to display - // // mismatched values, and frankly that wouldn't help much. - // ensure("didn't reach end", ki == keys.end()); + template<> template<> + void object::test<3>() + { + Keyed one("one"), two("two"), three("three"); + // We don't want to rely on the underlying container delivering keys + // in any particular order. That allows us the flexibility to + // reimplement LLInstanceTracker using, say, a hash map instead of a + // std::map. We DO insist that every key appear exactly once. + typedef std::vector StringVector; + StringVector keys(Keyed::beginKeys(), Keyed::endKeys()); + std::sort(keys.begin(), keys.end()); + StringVector::const_iterator ki(keys.begin()); + ensure_equals(*ki++, "one"); + ensure_equals(*ki++, "three"); + ensure_equals(*ki++, "two"); + // Use ensure() here because ensure_equals would want to display + // mismatched values, and frankly that wouldn't help much. + ensure("didn't reach end", ki == keys.end()); - // // Use a somewhat different approach to order independence with - // // beginInstances(): explicitly capture the instances we know in a - // // set, and delete them as we iterate through. - // typedef std::set InstanceSet; - // InstanceSet instances; - // instances.insert(&one); - // instances.insert(&two); - // instances.insert(&three); - // for (Keyed::instance_iter ii(Keyed::beginInstances()), iend(Keyed::endInstances()); - // ii != iend; ++ii) - // { - // Keyed& ref = *ii; - // ensure_equals("spurious instance", instances.erase(&ref), 1); - // } - // ensure_equals("unreported instance", instances.size(), 0); - // } + // Use a somewhat different approach to order independence with + // beginInstances(): explicitly capture the instances we know in a + // set, and delete them as we iterate through. + typedef std::set InstanceSet; + InstanceSet instances; + instances.insert(&one); + instances.insert(&two); + instances.insert(&three); + for (Keyed::instance_iter ii(Keyed::beginInstances()), iend(Keyed::endInstances()); + ii != iend; ++ii) + { + Keyed& ref = *ii; + ensure_equals("spurious instance", instances.erase(&ref), 1); + } + ensure_equals("unreported instance", instances.size(), 0); + } - // template<> template<> - // void object::test<4>() - // { - // Unkeyed one, two, three; - // typedef std::set KeySet; - // - // KeySet instances; - // instances.insert(&one); - // instances.insert(&two); - // instances.insert(&three); - - //for (Unkeyed::instance_iter ii(Unkeyed::beginInstances()), iend(Unkeyed::endInstances()); ii != iend; ++ii) - //{ - // Unkeyed& ref = *ii; - // ensure_equals("spurious instance", instances.erase(&ref), 1); - //} - - // ensure_equals("unreported instance", instances.size(), 0); - // } + template<> template<> + void object::test<4>() + { + Unkeyed one, two, three; + typedef std::set KeySet; + + KeySet instances; + instances.insert(&one); + instances.insert(&two); + instances.insert(&three); + + for (Unkeyed::instance_iter ii(Unkeyed::beginInstances()), iend(Unkeyed::endInstances()); ii != iend; ++ii) + { + Unkeyed& ref = *ii; + ensure_equals("spurious instance", instances.erase(&ref), 1); + } + + ensure_equals("unreported instance", instances.size(), 0); + } + + template<> template<> + void object::test<5>() + { + set_test_name("delete Keyed with outstanding instance_iter"); + std::string what; + Keyed* keyed = new Keyed("one"); + { + WrapLL_ERRS wrapper; + Keyed::instance_iter i(Keyed::beginInstances()); + try + { + delete keyed; + } + catch (const WrapLL_ERRS::FatalException& e) + { + what = e.what(); + } + } + ensure(! what.empty()); + } + + template<> template<> + void object::test<6>() + { + set_test_name("delete Keyed with outstanding key_iter"); + std::string what; + Keyed* keyed = new Keyed("one"); + { + WrapLL_ERRS wrapper; + Keyed::key_iter i(Keyed::beginKeys()); + try + { + delete keyed; + } + catch (const WrapLL_ERRS::FatalException& e) + { + what = e.what(); + } + } + ensure(! what.empty()); + } + + template<> template<> + void object::test<7>() + { + set_test_name("delete Unkeyed with outstanding instance_iter"); + std::string what; + Unkeyed* unkeyed = new Unkeyed; + { + WrapLL_ERRS wrapper; + Unkeyed::instance_iter i(Unkeyed::beginInstances()); + try + { + delete unkeyed; + } + catch (const WrapLL_ERRS::FatalException& e) + { + what = e.what(); + } + } + ensure(! what.empty()); + } } // namespace tut diff --git a/indra/llcommon/tests/llsingleton_test.cpp b/indra/llcommon/tests/llsingleton_test.cpp index 2e8b83fa2c..385289aefe 100644 --- a/indra/llcommon/tests/llsingleton_test.cpp +++ b/indra/llcommon/tests/llsingleton_test.cpp @@ -1,10 +1,11 @@ /** - * @file llprocessor_test.cpp - * @date 2010-06-01 + * @file llsingleton_test.cpp + * @date 2011-08-11 + * @brief Unit test for the LLSingleton class * - * $LicenseInfo:firstyear=2010&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. + * Copyright (C) 2011, Linden Research, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public diff --git a/indra/llcommon/tests/llstring_test.cpp b/indra/llcommon/tests/llstring_test.cpp index 304e91ed92..6a1cbf652a 100644 --- a/indra/llcommon/tests/llstring_test.cpp +++ b/indra/llcommon/tests/llstring_test.cpp @@ -624,6 +624,14 @@ namespace tut subcount = LLStringUtil::format(s, fmt_map); ensure_equals("LLStringUtil::format: Assorted Test2 result", s, "?Am I not a long string?short[A]bbbaaaba[A]"); ensure_equals("LLStringUtil::format: Assorted Test2 result count", 9, subcount); + + // Test on nested brackets + std::string srcs6 = "[[TRICK1]][[A]][[B]][[AAA]][[BBB]][[TRICK2]][[KEYLONGER]][[KEYSHORTER]]?[[DELETE]]"; + s = srcs6; + subcount = LLStringUtil::format(s, fmt_map); + ensure_equals("LLStringUtil::format: Assorted Test2 result", s, "[[A]][a][b][aaa][bbb][[A]][short][Am I not a long string?]?[]"); + ensure_equals("LLStringUtil::format: Assorted Test2 result count", 9, subcount); + // Test an assorted substitution std::string srcs8 = "foo[DELETE]bar?"; diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index be0c1cfd3e..daef23b066 100644 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -39,6 +39,7 @@ #include "llimagepng.h" #include "llimagedxt.h" #include "llimageworker.h" +#include "llmemory.h" //--------------------------------------------------------------------------- // LLImage @@ -47,11 +48,14 @@ //static std::string LLImage::sLastErrorMessage; LLMutex* LLImage::sMutex = NULL; +LLPrivateMemoryPool* LLImageBase::sPrivatePoolp = NULL ; //static void LLImage::initClass() { sMutex = new LLMutex(NULL); + + LLImageBase::createPrivatePool() ; } //static @@ -59,6 +63,8 @@ void LLImage::cleanupClass() { delete sMutex; sMutex = NULL; + + LLImageBase::destroyPrivatePool() ; } //static @@ -97,6 +103,25 @@ LLImageBase::~LLImageBase() deleteData(); // virtual } +//static +void LLImageBase::createPrivatePool() +{ + if(!sPrivatePoolp) + { + sPrivatePoolp = LLPrivateMemoryPoolManager::getInstance()->newPool(LLPrivateMemoryPool::STATIC_THREADED) ; + } +} + +//static +void LLImageBase::destroyPrivatePool() +{ + if(sPrivatePoolp) + { + LLPrivateMemoryPoolManager::getInstance()->deletePool(sPrivatePoolp) ; + sPrivatePoolp = NULL ; + } +} + // virtual void LLImageBase::dump() { @@ -130,7 +155,7 @@ void LLImageBase::sanityCheck() // virtual void LLImageBase::deleteData() { - delete[] mData; + FREE_MEM(sPrivatePoolp, mData) ; mData = NULL; mDataSize = 0; } @@ -167,7 +192,7 @@ U8* LLImageBase::allocateData(S32 size) { deleteData(); // virtual mBadBufferAllocation = false ; - mData = new U8[size]; + mData = (U8*)ALLOCATE_MEM(sPrivatePoolp, size); if (!mData) { llwarns << "allocate image data: " << size << llendl; @@ -185,7 +210,7 @@ U8* LLImageBase::allocateData(S32 size) U8* LLImageBase::reallocateData(S32 size) { LLMemType mt1(mMemType); - U8 *new_datap = new U8[size]; + U8 *new_datap = (U8*)ALLOCATE_MEM(sPrivatePoolp, size); if (!new_datap) { llwarns << "Out of memory in LLImageBase::reallocateData" << llendl; @@ -195,7 +220,7 @@ U8* LLImageBase::reallocateData(S32 size) { S32 bytes = llmin(mDataSize, size); memcpy(new_datap, mData, bytes); /* Flawfinder: ignore */ - delete[] mData; + FREE_MEM(sPrivatePoolp, mData) ; } mData = new_datap; mDataSize = size; @@ -341,6 +366,7 @@ BOOL LLImageRaw::resize(U16 width, U16 height, S8 components) return TRUE; } +#if 0 U8 * LLImageRaw::getSubImage(U32 x_pos, U32 y_pos, U32 width, U32 height) const { LLMemType mt1(mMemType); @@ -361,6 +387,7 @@ U8 * LLImageRaw::getSubImage(U32 x_pos, U32 y_pos, U32 width, U32 height) const } return data; } +#endif BOOL LLImageRaw::setSubImage(U32 x_pos, U32 y_pos, U32 width, U32 height, const U8 *data, U32 stride, BOOL reverse_y) @@ -830,6 +857,7 @@ void LLImageRaw::copyScaled( LLImageRaw* src ) } } +#if 0 //scale down image by not blending a pixel with its neighbors. BOOL LLImageRaw::scaleDownWithoutBlending( S32 new_width, S32 new_height) { @@ -853,7 +881,7 @@ BOOL LLImageRaw::scaleDownWithoutBlending( S32 new_width, S32 new_height) ratio_x -= 1.0f ; ratio_y -= 1.0f ; - U8* new_data = new U8[new_data_size] ; + U8* new_data = allocateMemory(new_data_size) ; llassert_always(new_data != NULL) ; U8* old_data = getData() ; @@ -875,6 +903,7 @@ BOOL LLImageRaw::scaleDownWithoutBlending( S32 new_width, S32 new_height) return TRUE ; } +#endif BOOL LLImageRaw::scale( S32 new_width, S32 new_height, BOOL scale_image_data ) { @@ -1506,6 +1535,7 @@ void LLImageFormatted::setData(U8 *data, S32 size) { deleteData(); setDataAndSize(data, size); // Access private LLImageBase members + sGlobalFormattedMemory += getDataSize(); } } @@ -1524,7 +1554,7 @@ void LLImageFormatted::appendData(U8 *data, S32 size) S32 newsize = cursize + size; reallocateData(newsize); memcpy(getData() + cursize, data, size); - delete[] data; + FREE_MEM(LLImageBase::getPrivatePool(), data); } } } diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h index c464c3b2b6..4469c9e860 100644 --- a/indra/llimage/llimage.h +++ b/indra/llimage/llimage.h @@ -29,7 +29,6 @@ #include "lluuid.h" #include "llstring.h" -//#include "llmemory.h" #include "llthread.h" #include "llmemtype.h" @@ -69,6 +68,7 @@ const S32 MAX_IMG_PACKET_SIZE = 1000; class LLImageFormatted; class LLImageRaw; class LLColor4U; +class LLPrivateMemoryPool; typedef enum e_image_codec { @@ -140,7 +140,7 @@ public: protected: // special accessor to allow direct setting of mData and mDataSize by LLImageFormatted - void setDataAndSize(U8 *data, S32 size) { mData = data; mDataSize = size; } + void setDataAndSize(U8 *data, S32 size) { mData = data; mDataSize = size; } public: static void generateMip(const U8 *indata, U8* mipdata, int width, int height, S32 nchannels); @@ -151,6 +151,10 @@ public: static EImageCodec getCodecFromExtension(const std::string& exten); + static void createPrivatePool() ; + static void destroyPrivatePool() ; + static LLPrivateMemoryPool* getPrivatePool() {return sPrivatePoolp;} + private: U8 *mData; S32 mDataSize; @@ -162,6 +166,8 @@ private: bool mBadBufferAllocation ; bool mAllowOverSize ; + + static LLPrivateMemoryPool* sPrivatePoolp ; public: LLMemType::DeclareMemType& mMemType; // debug }; @@ -185,7 +191,7 @@ public: BOOL resize(U16 width, U16 height, S8 components); - U8 * getSubImage(U32 x_pos, U32 y_pos, U32 width, U32 height) const; + //U8 * getSubImage(U32 x_pos, U32 y_pos, U32 width, U32 height) const; BOOL setSubImage(U32 x_pos, U32 y_pos, U32 width, U32 height, const U8 *data, U32 stride = 0, BOOL reverse_y = FALSE); @@ -197,7 +203,7 @@ public: void contractToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE, BOOL scale_image = TRUE); void biasedScaleToPowerOfTwo(S32 max_dim = MAX_IMAGE_SIZE); BOOL scale( S32 new_width, S32 new_height, BOOL scale_image = TRUE ); - BOOL scaleDownWithoutBlending( S32 new_width, S32 new_height) ; + //BOOL scaleDownWithoutBlending( S32 new_width, S32 new_height) ; // Fill the buffer with a constant color void fill( const LLColor4U& color ); diff --git a/indra/llimage/llimagedxt.cpp b/indra/llimage/llimagedxt.cpp index 4bd3efddaa..34c6793522 100644 --- a/indra/llimage/llimagedxt.cpp +++ b/indra/llimage/llimagedxt.cpp @@ -26,6 +26,7 @@ #include "linden_common.h" #include "llimagedxt.h" +#include "llmemory.h" //static void LLImageDXT::checkMinWidthHeight(EFileFormat format, S32& width, S32& height) @@ -429,7 +430,7 @@ bool LLImageDXT::convertToDXR() S32 nmips = calcNumMips(width,height); S32 total_bytes = getDataSize(); U8* olddata = getData(); - U8* newdata = new U8[total_bytes]; + U8* newdata = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), total_bytes); if (!newdata) { llerrs << "Out of memory in LLImageDXT::convertToDXR()" << llendl; diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp index 20394eccae..53c9ec9a65 100644 --- a/indra/llimage/llimagej2c.cpp +++ b/indra/llimage/llimagej2c.cpp @@ -29,6 +29,7 @@ #include "llmemtype.h" #include "lltimer.h" #include "llmath.h" +#include "llmemory.h" typedef LLImageJ2CImpl* (*CreateLLImageJ2CFunction)(); typedef void (*DestroyLLImageJ2CFunction)(LLImageJ2CImpl*); @@ -394,14 +395,14 @@ BOOL LLImageJ2C::loadAndValidate(const std::string &filename) } else { - U8 *data = new U8[file_size]; + U8 *data = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), file_size); apr_size_t bytes_read = file_size; apr_status_t s = apr_file_read(apr_file, data, &bytes_read); // modifies bytes_read infile.close() ; if (s != APR_SUCCESS || (S32)bytes_read != file_size) { - delete[] data; + FREE_MEM(LLImageBase::getPrivatePool(), data); setLastError("Unable to read entire file"); res = FALSE; } diff --git a/indra/llinventory/CMakeLists.txt b/indra/llinventory/CMakeLists.txt index 35a764b111..e45c809e7e 100644 --- a/indra/llinventory/CMakeLists.txt +++ b/indra/llinventory/CMakeLists.txt @@ -62,14 +62,14 @@ add_library (llinventory ${llinventory_SOURCE_FILES}) #add unit tests if (LL_TESTS) - INCLUDE(LLAddBuildTest) - SET(llinventory_TEST_SOURCE_FILES - # no real unit tests yet! - ) - LL_ADD_PROJECT_UNIT_TESTS(llinventory "${llinventory_TEST_SOURCE_FILES}") + INCLUDE(LLAddBuildTest) + SET(llinventory_TEST_SOURCE_FILES + # no real unit tests yet! + ) + LL_ADD_PROJECT_UNIT_TESTS(llinventory "${llinventory_TEST_SOURCE_FILES}") - #set(TEST_DEBUG on) - set(test_libs llinventory ${LLMESSAGE_LIBRARIES} ${LLVFS_LIBRARIES} ${LLMATH_LIBRARIES} ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES}) - LL_ADD_INTEGRATION_TEST(inventorymisc "" "${test_libs}") - LL_ADD_INTEGRATION_TEST(llparcel "" "${test_libs}") + #set(TEST_DEBUG on) + set(test_libs llinventory ${LLMESSAGE_LIBRARIES} ${LLVFS_LIBRARIES} ${LLMATH_LIBRARIES} ${LLCOMMON_LIBRARIES} ${WINDOWS_LIBRARIES}) + LL_ADD_INTEGRATION_TEST(inventorymisc "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(llparcel "" "${test_libs}") endif (LL_TESTS) diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp index 8779b3b3ac..c88b930e27 100644 --- a/indra/llinventory/llinventory.cpp +++ b/indra/llinventory/llinventory.cpp @@ -1138,8 +1138,11 @@ void LLInventoryItem::asLLSD( LLSD& sd ) const sd[INV_CREATION_DATE_LABEL] = (S32) mCreationDate; } +LLFastTimer::DeclareTimer FTM_INVENTORY_SD_DESERIALIZE("Inventory SD Deserialize"); + bool LLInventoryItem::fromLLSD(const LLSD& sd) { + LLFastTimer _(FTM_INVENTORY_SD_DESERIALIZE); mInventoryType = LLInventoryType::IT_NONE; mAssetUUID.setNull(); std::string w; diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp index c95f922301..433076c7a9 100644 --- a/indra/llinventory/llparcel.cpp +++ b/indra/llinventory/llparcel.cpp @@ -1373,12 +1373,3 @@ LLParcel::ECategory category_ui_string_to_category(const std::string& s) // is a distinct option from "None" and "Other" return LLParcel::C_ANY; } - -void LLParcel::updateQuota( const LLUUID& objectId, const ParcelQuota& quota ) -{ - if ( mID == objectId ) - { - mQuota = quota; - } -} - diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h index ff35caab4c..e36d0b20d2 100644 --- a/indra/llinventory/llparcel.h +++ b/indra/llinventory/llparcel.h @@ -34,7 +34,6 @@ #include "llpermissions.h" #include "lltimer.h" #include "v3math.h" -#include "llaccountingquota.h" // Grid out of which parcels taken is stepped every 4 meters. const F32 PARCEL_GRID_STEP_METERS = 4.f; @@ -603,9 +602,6 @@ public: BOOL getSellWithObjects() const { return (mParcelFlags & PF_SELL_PARCEL_OBJECTS) ? TRUE : FALSE; } - void updateQuota( const LLUUID& objectId, const ParcelQuota& quota ); - const ParcelQuota& getQuota( void ) { return mQuota; } - protected: LLUUID mID; LLUUID mOwnerID; @@ -681,7 +677,6 @@ protected: BOOL mAllowGroupAVSounds; BOOL mAllowAnyAVSounds; - ParcelQuota mQuota; public: // HACK, make private diff --git a/indra/llkdu/CMakeLists.txt b/indra/llkdu/CMakeLists.txt index 046629b514..bdac2eded7 100644 --- a/indra/llkdu/CMakeLists.txt +++ b/indra/llkdu/CMakeLists.txt @@ -30,7 +30,7 @@ set(llkdu_SOURCE_FILES set(llkdu_HEADER_FILES CMakeLists.txt - + llimagej2ckdu.h llkdumem.h ) diff --git a/indra/llmath/llcalc.cpp b/indra/llmath/llcalc.cpp index ac50dfd2e9..10da8faf29 100644 --- a/indra/llmath/llcalc.cpp +++ b/indra/llmath/llcalc.cpp @@ -1,9 +1,26 @@ /* * LLCalc.cpp - * SecondLife - * - * Created by Aimee Walton on 28/09/2008. - * Copyright 2008 Aimee Walton. + * Copyright 2008 Aimee Walton. + * $LicenseInfo:firstyear=2008&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2008, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ * */ diff --git a/indra/llmath/llcalc.h b/indra/llmath/llcalc.h index 0172d8a91b..2b89e8e629 100644 --- a/indra/llmath/llcalc.h +++ b/indra/llmath/llcalc.h @@ -1,9 +1,26 @@ /* * LLCalc.h - * SecondLife - * - * Created by Aimee Walton on 28/09/2008. * Copyright 2008 Aimee Walton. + * $LicenseInfo:firstyear=2008&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2008, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ * */ diff --git a/indra/llmath/llcalcparser.cpp b/indra/llmath/llcalcparser.cpp index dac6a682ce..b5856d95e3 100644 --- a/indra/llmath/llcalcparser.cpp +++ b/indra/llmath/llcalcparser.cpp @@ -1,9 +1,26 @@ /* * LLCalcParser.cpp - * SecondLife - * - * Created by Aimee Walton on 28/09/2008. * Copyright 2008 Aimee Walton. + * $LicenseInfo:firstyear=2008&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2008, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ * */ diff --git a/indra/llmath/llcalcparser.h b/indra/llmath/llcalcparser.h index 9132be7f0d..4c6da30b4b 100644 --- a/indra/llmath/llcalcparser.h +++ b/indra/llmath/llcalcparser.h @@ -1,9 +1,26 @@ /* * LLCalcParser.h - * SecondLife - * - * Created by Aimee Walton on 28/09/2008. * Copyright 2008 Aimee Walton. + * $LicenseInfo:firstyear=2008&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2008, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ * */ diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h index eea7c977fb..9297bcbac2 100644 --- a/indra/llmath/llmath.h +++ b/indra/llmath/llmath.h @@ -510,6 +510,13 @@ inline void ll_remove_outliers(std::vector& data, F32 k) VEC_TYPE Q1 = data[data.size()/4]; VEC_TYPE Q3 = data[data.size()-data.size()/4-1]; + if ((F32)(Q3-Q1) < 1.f) + { + // not enough variation to detect outliers + return; + } + + VEC_TYPE min = (VEC_TYPE) ((F32) Q1-k * (F32) (Q3-Q1)); VEC_TYPE max = (VEC_TYPE) ((F32) Q3+k * (F32) (Q3-Q1)); diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp old mode 100755 new mode 100644 index 11db2cc46a..e62d26d8f5 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -2086,7 +2086,7 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge mFaceMask = 0x0; mDetail = detail; mSculptLevel = -2; - mIsTetrahedron = FALSE; + mIsMeshAssetLoaded = FALSE; mLODScaleBias.setVec(1,1,1); mHullPoints = NULL; mHullIndices = NULL; @@ -2108,7 +2108,7 @@ LLVolume::LLVolume(const LLVolumeParams ¶ms, const F32 detail, const BOOL ge generate(); - if (mParams.getSculptID().isNull() && mParams.getSculptType() == LL_SCULPT_TYPE_NONE) + if (mParams.getSculptID().isNull() && mParams.getSculptType() == LL_SCULPT_TYPE_NONE || mParams.getSculptType() == LL_SCULPT_TYPE_MESH) { createVolumeFaces(); } @@ -2416,7 +2416,7 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) LLSD mdl; if (!unzip_llsd(mdl, is, size)) { - llwarns << "not a valid mesh asset!" << llendl; + LL_DEBUGS("MeshStreaming") << "Failed to unzip LLSD blob for LoD, will probably fetch from sim again." << llendl; return false; } @@ -2714,173 +2714,21 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size) return true; } -void tetrahedron_set_normal(LLVolumeFace::VertexData* cv) + +BOOL LLVolume::isMeshAssetLoaded() { - LLVector4a v0; - v0.setSub(cv[1].getPosition(), cv[0].getNormal()); - LLVector4a v1; - v1.setSub(cv[2].getNormal(), cv[0].getPosition()); - - cv[0].getNormal().setCross3(v0,v1); - cv[0].getNormal().normalize3fast(); - cv[1].setNormal(cv[0].getNormal()); - cv[2].setNormal(cv[1].getNormal()); + return mIsMeshAssetLoaded; } -BOOL LLVolume::isTetrahedron() +void LLVolume::setMeshAssetLoaded(BOOL loaded) { - return mIsTetrahedron; -} - -void LLVolume::makeTetrahedron() -{ - mVolumeFaces.clear(); - - LLVolumeFace face; - - F32 x = 0.25f; - LLVector4a p[] = - { //unit tetrahedron corners - LLVector4a(x,x,x), - LLVector4a(-x,-x,x), - LLVector4a(-x,x,-x), - LLVector4a(x,-x,-x) - }; - - face.mExtents[0].splat(-x); - face.mExtents[1].splat(x); - - LLVolumeFace::VertexData cv[3]; - - //set texture coordinates - cv[0].mTexCoord = LLVector2(0,0); - cv[1].mTexCoord = LLVector2(1,0); - cv[2].mTexCoord = LLVector2(0.5f, 0.5f*F_SQRT3); - - - //side 1 - cv[0].setPosition(p[1]); - cv[1].setPosition(p[0]); - cv[2].setPosition(p[2]); - - tetrahedron_set_normal(cv); - - face.resizeVertices(12); - face.resizeIndices(12); - - LLVector4a* v = (LLVector4a*) face.mPositions; - LLVector4a* n = (LLVector4a*) face.mNormals; - LLVector2* tc = (LLVector2*) face.mTexCoords; - - v[0] = cv[0].getPosition(); - v[1] = cv[1].getPosition(); - v[2] = cv[2].getPosition(); - v += 3; - - n[0] = cv[0].getNormal(); - n[1] = cv[1].getNormal(); - n[2] = cv[2].getNormal(); - n += 3; - - if(tc) - { - tc[0] = cv[0].mTexCoord; - tc[1] = cv[1].mTexCoord; - tc[2] = cv[2].mTexCoord; - tc += 3; - } - - //side 2 - cv[0].setPosition(p[3]); - cv[1].setPosition(p[0]); - cv[2].setPosition(p[1]); - - tetrahedron_set_normal(cv); - - v[0] = cv[0].getPosition(); - v[1] = cv[1].getPosition(); - v[2] = cv[2].getPosition(); - v += 3; - - n[0] = cv[0].getNormal(); - n[1] = cv[1].getNormal(); - n[2] = cv[2].getNormal(); - n += 3; - - if(tc) - { - tc[0] = cv[0].mTexCoord; - tc[1] = cv[1].mTexCoord; - tc[2] = cv[2].mTexCoord; - tc += 3; - } - - //side 3 - cv[0].setPosition(p[3]); - cv[1].setPosition(p[1]); - cv[2].setPosition(p[2]); - - tetrahedron_set_normal(cv); - - v[0] = cv[0].getPosition(); - v[1] = cv[1].getPosition(); - v[2] = cv[2].getPosition(); - v += 3; - - n[0] = cv[0].getNormal(); - n[1] = cv[1].getNormal(); - n[2] = cv[2].getNormal(); - n += 3; - - if(tc) - { - tc[0] = cv[0].mTexCoord; - tc[1] = cv[1].mTexCoord; - tc[2] = cv[2].mTexCoord; - tc += 3; - } - - //side 4 - cv[0].setPosition(p[2]); - cv[1].setPosition(p[0]); - cv[2].setPosition(p[3]); - - tetrahedron_set_normal(cv); - - v[0] = cv[0].getPosition(); - v[1] = cv[1].getPosition(); - v[2] = cv[2].getPosition(); - v += 3; - - n[0] = cv[0].getNormal(); - n[1] = cv[1].getNormal(); - n[2] = cv[2].getNormal(); - n += 3; - - if(tc) - { - tc[0] = cv[0].mTexCoord; - tc[1] = cv[1].mTexCoord; - tc[2] = cv[2].mTexCoord; - tc += 3; - } - - //set index buffer - for (U16 i = 0; i < 12; i++) - { - face.mIndices[i] = i; - } - - mVolumeFaces.push_back(face); - mSculptLevel = 0; - mIsTetrahedron = TRUE; + mIsMeshAssetLoaded = loaded; } void LLVolume::copyVolumeFaces(const LLVolume* volume) { mVolumeFaces = volume->mVolumeFaces; mSculptLevel = 0; - mIsTetrahedron = FALSE; } void LLVolume::cacheOptimize() @@ -2894,14 +2742,7 @@ void LLVolume::cacheOptimize() S32 LLVolume::getNumFaces() const { - U8 sculpt_type = (mParams.getSculptType() & LL_SCULPT_TYPE_MASK); - - if (sculpt_type == LL_SCULPT_TYPE_MESH) - { - return LL_SCULPT_MESH_MAX_FACES; - } - - return (S32)mProfilep->mFaces.size(); + return mIsMeshAssetLoaded ? getNumVolumeFaces() : (S32)mProfilep->mFaces.size(); } @@ -7277,7 +7118,7 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build) resizeVertices(num_vertices); resizeIndices(num_indices); - if ((volume->getParams().getSculptType() & LL_SCULPT_TYPE_MASK) != LL_SCULPT_TYPE_MESH) + if (!volume->isMeshAssetLoaded()) { mEdge.resize(num_indices); } diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index f887623929..15b634a555 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -1063,14 +1063,14 @@ protected: public: virtual bool unpackVolumeFaces(std::istream& is, S32 size); - virtual void makeTetrahedron(); - virtual BOOL isTetrahedron(); + virtual void setMeshAssetLoaded(BOOL loaded); + virtual BOOL isMeshAssetLoaded(); protected: BOOL mUnique; F32 mDetail; S32 mSculptLevel; - BOOL mIsTetrahedron; + BOOL mIsMeshAssetLoaded; LLVolumeParams mParams; LLPath *mPathp; diff --git a/indra/llmath/tests/v3math_test.cpp b/indra/llmath/tests/v3math_test.cpp index df7a77002f..e4ae1c10ef 100644 --- a/indra/llmath/tests/v3math_test.cpp +++ b/indra/llmath/tests/v3math_test.cpp @@ -564,4 +564,22 @@ namespace tut z1 = U8_to_F32(F32_to_U8(z, lowerz, upperz), lowerz, upperz); ensure("2:quantize8: Fail ", is_approx_equal(x1, vec3a.mV[VX]) && is_approx_equal(y1, vec3a.mV[VY]) && is_approx_equal(z1, vec3a.mV[VZ])); } + + template<> template<> + void v3math_object::test<35>() + { + LLSD sd = LLSD::emptyArray(); + sd[0] = 1.f; + + LLVector3 parsed_1(sd); + ensure("1:LLSD parse: Fail ", is_approx_equal(parsed_1.mV[VX], 1.f) && is_approx_equal(parsed_1.mV[VY], 0.f) && is_approx_equal(parsed_1.mV[VZ], 0.f)); + + sd[1] = 2.f; + LLVector3 parsed_2(sd); + ensure("2:LLSD parse: Fail ", is_approx_equal(parsed_2.mV[VX], 1.f) && is_approx_equal(parsed_2.mV[VY], 2.f) && is_approx_equal(parsed_2.mV[VZ], 0.f)); + + sd[2] = 3.f; + LLVector3 parsed_3(sd); + ensure("3:LLSD parse: Fail ", is_approx_equal(parsed_3.mV[VX], 1.f) && is_approx_equal(parsed_3.mV[VY], 2.f) && is_approx_equal(parsed_3.mV[VZ], 3.f)); + } } diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 785d07acb8..330028c926 100644 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -222,7 +222,7 @@ namespace boost std::set LLCurl::Easy::sFreeHandles; std::set LLCurl::Easy::sActiveHandles; LLMutex* LLCurl::Easy::sHandleMutex = NULL; - +LLMutex* LLCurl::Easy::sMultiMutex = NULL; //static CURL* LLCurl::Easy::allocEasyHandle() @@ -553,6 +553,11 @@ LLCurl::Multi::~Multi() { llassert(isStopped()); + if (LLCurl::sMultiThreaded) + { + LLCurl::Easy::sMultiMutex->lock(); + } + delete mSignal; mSignal = NULL; @@ -573,6 +578,11 @@ LLCurl::Multi::~Multi() check_curl_multi_code(curl_multi_cleanup(mCurlMultiHandle)); --gCurlMultiCount; + + if (LLCurl::sMultiThreaded) + { + LLCurl::Easy::sMultiMutex->unlock(); + } } CURLMsg* LLCurl::Multi::info_read(S32* msgs_in_queue) @@ -606,6 +616,7 @@ void LLCurl::Multi::run() mPerformState = PERFORM_STATE_PERFORMING; if (!mQuitting) { + LLMutexLock lock(LLCurl::Easy::sMultiMutex); doPerform(); } } @@ -1179,6 +1190,7 @@ void LLCurl::initClass(bool multi_threaded) check_curl_code(code); Easy::sHandleMutex = new LLMutex(NULL); + Easy::sMultiMutex = new LLMutex(NULL); #if SAFE_SSL S32 mutex_count = CRYPTO_num_locks(); @@ -1200,6 +1212,8 @@ void LLCurl::cleanupClass() delete Easy::sHandleMutex; Easy::sHandleMutex = NULL; + delete Easy::sMultiMutex; + Easy::sMultiMutex = NULL; for (std::set::iterator iter = Easy::sFreeHandles.begin(); iter != Easy::sFreeHandles.end(); ++iter) { diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h old mode 100644 new mode 100755 index 213b281e72..87de202717 --- a/indra/llmessage/llcurl.h +++ b/indra/llmessage/llcurl.h @@ -232,6 +232,7 @@ public: private: friend class LLCurl; + friend class LLCurl::Multi; CURL* mCurlEasyHandle; struct curl_slist* mHeaders; @@ -251,6 +252,7 @@ private: static std::set sFreeHandles; static std::set sActiveHandles; static LLMutex* sHandleMutex; + static LLMutex* sMultiMutex; }; class LLCurl::Multi : public LLThread diff --git a/indra/llmessage/lliosocket.h b/indra/llmessage/lliosocket.h index ac81fc270a..be0f7dfcc6 100644 --- a/indra/llmessage/lliosocket.h +++ b/indra/llmessage/lliosocket.h @@ -157,7 +157,6 @@ public: */ void setNonBlocking(); - protected: /** * @brief Protected constructor since should only make sockets diff --git a/indra/llmessage/llproxy.cpp b/indra/llmessage/llproxy.cpp index b26ac42899..9988fcd9c0 100644 --- a/indra/llmessage/llproxy.cpp +++ b/indra/llmessage/llproxy.cpp @@ -44,12 +44,12 @@ bool LLProxy::sUDPProxyEnabled = false; // Some helpful TCP static functions. static apr_status_t tcp_blocking_handshake(LLSocket::ptr_t handle, char * dataout, apr_size_t outlen, char * datain, apr_size_t maxinlen); // Do a TCP data handshake -static LLSocket::ptr_t tcp_open_channel(apr_pool_t* pool, LLHost host); // Open a TCP channel to a given host +static LLSocket::ptr_t tcp_open_channel(LLHost host); // Open a TCP channel to a given host static void tcp_close_channel(LLSocket::ptr_t* handle_ptr); // Close an open TCP channel LLProxy::LLProxy(): mHTTPProxyEnabled(false), - mProxyMutex(0), + mProxyMutex(NULL), mUDPProxy(), mTCPProxy(), mHTTPProxy(), @@ -180,7 +180,6 @@ S32 LLProxy::proxyHandshake(LLHost proxy) mUDPProxy.setAddress(proxy.getAddress()); // The connection was successful. We now have the UDP port to send requests that need forwarding to. LL_INFOS("Proxy") << "SOCKS 5 UDP proxy connected on " << mUDPProxy << LL_ENDL; - sUDPProxyEnabled = true; return SOCKS_OK; } @@ -210,7 +209,7 @@ S32 LLProxy::startSOCKSProxy(LLHost host) // Close any running SOCKS connection. stopSOCKSProxy(); - mProxyControlChannel = tcp_open_channel(gAPRPoolp, mTCPProxy); + mProxyControlChannel = tcp_open_channel(mTCPProxy); if (!mProxyControlChannel) { return SOCKS_HOST_CONNECT_FAILED; @@ -223,6 +222,11 @@ S32 LLProxy::startSOCKSProxy(LLHost host) // Shut down the proxy if any of the above steps failed. stopSOCKSProxy(); } + else + { + // Connection was successful. + sUDPProxyEnabled = true; + } return status; } @@ -515,13 +519,12 @@ static apr_status_t tcp_blocking_handshake(LLSocket::ptr_t handle, char * dataou * * Checks for a successful connection, and makes sure the connection is closed if it fails. * - * @param pool APR pool to pass into the LLSocket. * @param host The host to open the connection to. * @return The created socket. Will evaluate as NULL if the connection is unsuccessful. */ -static LLSocket::ptr_t tcp_open_channel(apr_pool_t* pool, LLHost host) +static LLSocket::ptr_t tcp_open_channel(LLHost host) { - LLSocket::ptr_t socket = LLSocket::create(pool, LLSocket::STREAM_TCP); + LLSocket::ptr_t socket = LLSocket::create(NULL, LLSocket::STREAM_TCP); bool connected = socket->blockingConnect(host); if (!connected) { diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt index 2f28673c07..1353b7a458 100644 --- a/indra/llplugin/CMakeLists.txt +++ b/indra/llplugin/CMakeLists.txt @@ -68,18 +68,18 @@ add_subdirectory(slplugin) # Add tests if (LL_TESTS) - include(LLAddBuildTest) - # UNIT TESTS - SET(llplugin_TEST_SOURCE_FILES - llplugincookiestore.cpp - ) + include(LLAddBuildTest) + # UNIT TESTS + SET(llplugin_TEST_SOURCE_FILES + llplugincookiestore.cpp + ) - # llplugincookiestore has a dependency on curl, so we need to link the curl library into the test. - set_source_files_properties( - llplugincookiestore.cpp - PROPERTIES - LL_TEST_ADDITIONAL_LIBRARIES "${CURL_LIBRARIES}" - ) + # llplugincookiestore has a dependency on curl, so we need to link the curl library into the test. + set_source_files_properties( + llplugincookiestore.cpp + PROPERTIES + LL_TEST_ADDITIONAL_LIBRARIES "${CURL_LIBRARIES}" + ) - LL_ADD_PROJECT_UNIT_TESTS(llplugin "${llplugin_TEST_SOURCE_FILES}") + LL_ADD_PROJECT_UNIT_TESTS(llplugin "${llplugin_TEST_SOURCE_FILES}") endif (LL_TESTS) diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp index 9cd3216ab2..c53857fcee 100644 --- a/indra/llplugin/llpluginclassmedia.cpp +++ b/indra/llplugin/llpluginclassmedia.cpp @@ -1,1445 +1,1445 @@ -/** - * @file llpluginclassmedia.cpp - * @brief LLPluginClassMedia handles a plugin which knows about the "media" message class. - * - * @cond - * $LicenseInfo:firstyear=2008&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - * @endcond - */ - -#include "linden_common.h" -#include "indra_constants.h" - -#include "llpluginclassmedia.h" -#include "llpluginmessageclasses.h" - -#include "llqtwebkit.h" - -static int LOW_PRIORITY_TEXTURE_SIZE_DEFAULT = 256; - -static int nextPowerOf2( int value ) -{ - int next_power_of_2 = 1; - while ( next_power_of_2 < value ) - { - next_power_of_2 <<= 1; - } - - return next_power_of_2; -} - -LLPluginClassMedia::LLPluginClassMedia(LLPluginClassMediaOwner *owner) -{ - mOwner = owner; - mPlugin = NULL; - reset(); - - //debug use - mDeleteOK = true ; -} - - -LLPluginClassMedia::~LLPluginClassMedia() -{ - llassert_always(mDeleteOK) ; - reset(); -} - -bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::string &plugin_dir, const std::string &plugin_filename, bool debug) -{ - LL_DEBUGS("Plugin") << "launcher: " << launcher_filename << LL_ENDL; - LL_DEBUGS("Plugin") << "dir: " << plugin_dir << LL_ENDL; - LL_DEBUGS("Plugin") << "plugin: " << plugin_filename << LL_ENDL; - - mPlugin = new LLPluginProcessParent(this); - mPlugin->setSleepTime(mSleepTime); - - // Queue up the media init message -- it will be sent after all the currently queued messages. - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "init"); - message.setValue("target", mTarget); - sendMessage(message); - - mPlugin->init(launcher_filename, plugin_dir, plugin_filename, debug); - - return true; -} - - -void LLPluginClassMedia::reset() -{ - if(mPlugin != NULL) - { - delete mPlugin; - mPlugin = NULL; - } - - mTextureParamsReceived = false; - mRequestedTextureDepth = 0; - mRequestedTextureInternalFormat = 0; - mRequestedTextureFormat = 0; - mRequestedTextureType = 0; - mRequestedTextureSwapBytes = false; - mRequestedTextureCoordsOpenGL = false; - mTextureSharedMemorySize = 0; - mTextureSharedMemoryName.clear(); - mDefaultMediaWidth = 0; - mDefaultMediaHeight = 0; - mNaturalMediaWidth = 0; - mNaturalMediaHeight = 0; - mSetMediaWidth = -1; - mSetMediaHeight = -1; - mRequestedMediaWidth = 0; - mRequestedMediaHeight = 0; - mRequestedTextureWidth = 0; - mRequestedTextureHeight = 0; - mFullMediaWidth = 0; - mFullMediaHeight = 0; - mTextureWidth = 0; - mTextureHeight = 0; - mMediaWidth = 0; - mMediaHeight = 0; - mDirtyRect = LLRect::null; - mAutoScaleMedia = false; - mRequestedVolume = 1.0f; - mPriority = PRIORITY_NORMAL; - mLowPrioritySizeLimit = LOW_PRIORITY_TEXTURE_SIZE_DEFAULT; - mAllowDownsample = false; - mPadding = 0; - mLastMouseX = 0; - mLastMouseY = 0; - mStatus = LLPluginClassMediaOwner::MEDIA_NONE; - mSleepTime = 1.0f / 100.0f; - mCanCut = false; - mCanCopy = false; - mCanPaste = false; - mMediaName.clear(); - mMediaDescription.clear(); - mBackgroundColor = LLColor4(1.0f, 1.0f, 1.0f, 1.0f); - - // media_browser class - mNavigateURI.clear(); - mNavigateResultCode = -1; - mNavigateResultString.clear(); - mHistoryBackAvailable = false; - mHistoryForwardAvailable = false; - mStatusText.clear(); - mProgressPercent = 0; - mClickURL.clear(); - mClickNavType.clear(); - mClickTarget.clear(); - mClickUUID.clear(); - mStatusCode = 0; - - // media_time class - mCurrentTime = 0.0f; - mDuration = 0.0f; - mCurrentRate = 0.0f; - mLoadedDuration = 0.0f; -} - -void LLPluginClassMedia::idle(void) -{ - if(mPlugin) - { - mPlugin->idle(); - } - - if((mMediaWidth == -1) || (!mTextureParamsReceived) || (mPlugin == NULL) || (mPlugin->isBlocked()) || (mOwner == NULL)) - { - // Can't process a size change at this time - } - else if((mRequestedMediaWidth != mMediaWidth) || (mRequestedMediaHeight != mMediaHeight)) - { - // Calculate the correct size for the media texture - mRequestedTextureHeight = mRequestedMediaHeight; - if(mPadding < 0) - { - // negative values indicate the plugin wants a power of 2 - mRequestedTextureWidth = nextPowerOf2(mRequestedMediaWidth); - } - else - { - mRequestedTextureWidth = mRequestedMediaWidth; - - if(mPadding > 1) - { - // Pad up to a multiple of the specified number of bytes per row - int rowbytes = mRequestedTextureWidth * mRequestedTextureDepth; - int pad = rowbytes % mPadding; - if(pad != 0) - { - rowbytes += mPadding - pad; - } - - if(rowbytes % mRequestedTextureDepth == 0) - { - mRequestedTextureWidth = rowbytes / mRequestedTextureDepth; - } - else - { - LL_WARNS("Plugin") << "Unable to pad texture width, padding size " << mPadding << "is not a multiple of pixel size " << mRequestedTextureDepth << LL_ENDL; - } - } - } - - - // Size change has been requested but not initiated yet. - size_t newsize = mRequestedTextureWidth * mRequestedTextureHeight * mRequestedTextureDepth; - - // Add an extra line for padding, just in case. - newsize += mRequestedTextureWidth * mRequestedTextureDepth; - - if(newsize != mTextureSharedMemorySize) - { - if(!mTextureSharedMemoryName.empty()) - { - // Tell the plugin to remove the old memory segment - mPlugin->removeSharedMemory(mTextureSharedMemoryName); - mTextureSharedMemoryName.clear(); - } - - mTextureSharedMemorySize = newsize; - mTextureSharedMemoryName = mPlugin->addSharedMemory(mTextureSharedMemorySize); - if(!mTextureSharedMemoryName.empty()) - { - void *addr = mPlugin->getSharedMemoryAddress(mTextureSharedMemoryName); - - // clear texture memory to avoid random screen visual fuzz from uninitialized texture data - memset( addr, 0x00, newsize ); - - // We could do this to force an update, but textureValid() will still be returning false until the first roundtrip to the plugin, - // so it may not be worthwhile. - // mDirtyRect.setOriginAndSize(0, 0, mRequestedMediaWidth, mRequestedMediaHeight); - } - } - - // This is our local indicator that a change is in progress. - mTextureWidth = -1; - mTextureHeight = -1; - mMediaWidth = -1; - mMediaHeight = -1; - - // This invalidates any existing dirty rect. - resetDirty(); - - // Send a size change message to the plugin - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change"); - message.setValue("name", mTextureSharedMemoryName); - message.setValueS32("width", mRequestedMediaWidth); - message.setValueS32("height", mRequestedMediaHeight); - message.setValueS32("texture_width", mRequestedTextureWidth); - message.setValueS32("texture_height", mRequestedTextureHeight); - message.setValueReal("background_r", mBackgroundColor.mV[VX]); - message.setValueReal("background_g", mBackgroundColor.mV[VY]); - message.setValueReal("background_b", mBackgroundColor.mV[VZ]); - message.setValueReal("background_a", mBackgroundColor.mV[VW]); - mPlugin->sendMessage(message); // DO NOT just use sendMessage() here -- we want this to jump ahead of the queue. - - LL_DEBUGS("Plugin") << "Sending size_change" << LL_ENDL; - } - } - - if(mPlugin && mPlugin->isRunning()) - { - // Send queued messages - while(!mSendQueue.empty()) - { - LLPluginMessage message = mSendQueue.front(); - mSendQueue.pop(); - mPlugin->sendMessage(message); - } - } -} - -int LLPluginClassMedia::getTextureWidth() const -{ - return nextPowerOf2(mTextureWidth); -} - -int LLPluginClassMedia::getTextureHeight() const -{ - return nextPowerOf2(mTextureHeight); -} - -unsigned char* LLPluginClassMedia::getBitsData() -{ - unsigned char *result = NULL; - if((mPlugin != NULL) && !mTextureSharedMemoryName.empty()) - { - result = (unsigned char*)mPlugin->getSharedMemoryAddress(mTextureSharedMemoryName); - } - return result; -} - -void LLPluginClassMedia::setSize(int width, int height) -{ - if((width > 0) && (height > 0)) - { - mSetMediaWidth = width; - mSetMediaHeight = height; - } - else - { - mSetMediaWidth = -1; - mSetMediaHeight = -1; - } - - setSizeInternal(); -} - -void LLPluginClassMedia::setSizeInternal(void) -{ - if((mSetMediaWidth > 0) && (mSetMediaHeight > 0)) - { - mRequestedMediaWidth = mSetMediaWidth; - mRequestedMediaHeight = mSetMediaHeight; - } - else if((mNaturalMediaWidth > 0) && (mNaturalMediaHeight > 0)) - { - mRequestedMediaWidth = mNaturalMediaWidth; - mRequestedMediaHeight = mNaturalMediaHeight; - } - else - { - mRequestedMediaWidth = mDefaultMediaWidth; - mRequestedMediaHeight = mDefaultMediaHeight; - } - - // Save these for size/interest calculations - mFullMediaWidth = mRequestedMediaWidth; - mFullMediaHeight = mRequestedMediaHeight; - - if(mAllowDownsample) - { - switch(mPriority) - { - case PRIORITY_SLIDESHOW: - case PRIORITY_LOW: - // Reduce maximum texture dimension to (or below) mLowPrioritySizeLimit - while((mRequestedMediaWidth > mLowPrioritySizeLimit) || (mRequestedMediaHeight > mLowPrioritySizeLimit)) - { - mRequestedMediaWidth /= 2; - mRequestedMediaHeight /= 2; - } - break; - - default: - // Don't adjust texture size - break; - } - } - - if(mAutoScaleMedia) - { - mRequestedMediaWidth = nextPowerOf2(mRequestedMediaWidth); - mRequestedMediaHeight = nextPowerOf2(mRequestedMediaHeight); - } - - if(mRequestedMediaWidth > 2048) - mRequestedMediaWidth = 2048; - - if(mRequestedMediaHeight > 2048) - mRequestedMediaHeight = 2048; -} - -void LLPluginClassMedia::setAutoScale(bool auto_scale) -{ - if(auto_scale != mAutoScaleMedia) - { - mAutoScaleMedia = auto_scale; - setSizeInternal(); - } -} - -bool LLPluginClassMedia::textureValid(void) -{ - if( - !mTextureParamsReceived || - mTextureWidth <= 0 || - mTextureHeight <= 0 || - mMediaWidth <= 0 || - mMediaHeight <= 0 || - mRequestedMediaWidth != mMediaWidth || - mRequestedMediaHeight != mMediaHeight || - getBitsData() == NULL - ) - return false; - - return true; -} - -bool LLPluginClassMedia::getDirty(LLRect *dirty_rect) -{ - bool result = !mDirtyRect.isEmpty(); - - if(dirty_rect != NULL) - { - *dirty_rect = mDirtyRect; - } - - return result; -} - -void LLPluginClassMedia::resetDirty(void) -{ - mDirtyRect = LLRect::null; -} - -std::string LLPluginClassMedia::translateModifiers(MASK modifiers) -{ - std::string result; - - - if(modifiers & MASK_CONTROL) - { - result += "control|"; - } - - if(modifiers & MASK_ALT) - { - result += "alt|"; - } - - if(modifiers & MASK_SHIFT) - { - result += "shift|"; - } - - // TODO: should I deal with platform differences here or in callers? - // TODO: how do we deal with the Mac "command" key? -/* - if(modifiers & MASK_SOMETHING) - { - result += "meta|"; - } -*/ - return result; -} - -void LLPluginClassMedia::jsEnableObject( bool enable ) -{ - if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) - { - return; - } - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_enable_object"); - message.setValueBoolean( "enable", enable ); - sendMessage( message ); -} - -void LLPluginClassMedia::jsAgentLocationEvent( double x, double y, double z ) -{ - if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) - { - return; - } - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_location"); - message.setValueReal( "x", x ); - message.setValueReal( "y", y ); - message.setValueReal( "z", z ); - sendMessage( message ); -} - -void LLPluginClassMedia::jsAgentGlobalLocationEvent( double x, double y, double z ) -{ - if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) - { - return; - } - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_global_location"); - message.setValueReal( "x", x ); - message.setValueReal( "y", y ); - message.setValueReal( "z", z ); - sendMessage( message ); -} - -void LLPluginClassMedia::jsAgentOrientationEvent( double angle ) -{ - if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) - { - return; - } - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_orientation"); - message.setValueReal( "angle", angle ); - - sendMessage( message ); -} - -void LLPluginClassMedia::jsAgentLanguageEvent( const std::string& language ) -{ - if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) - { - return; - } - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_language"); - message.setValue( "language", language ); - sendMessage( message ); -} - -void LLPluginClassMedia::jsAgentRegionEvent( const std::string& region ) -{ - if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) - { - return; - } - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_region"); - message.setValue( "region", region ); - sendMessage( message ); -} - -void LLPluginClassMedia::jsAgentMaturityEvent( const std::string& maturity ) -{ - if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) - { - return; - } - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_maturity"); - message.setValue( "maturity", maturity ); - sendMessage( message ); -} - -void LLPluginClassMedia::mouseEvent(EMouseEventType type, int button, int x, int y, MASK modifiers) -{ - if(type == MOUSE_EVENT_MOVE) - { - if(!mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked()) - { - // Don't queue up mouse move events that can't be delivered. - return; - } - - if((x == mLastMouseX) && (y == mLastMouseY)) - { - // Don't spam unnecessary mouse move events. - return; - } - - mLastMouseX = x; - mLastMouseY = y; - } - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "mouse_event"); - std::string temp; - switch(type) - { - case MOUSE_EVENT_DOWN: temp = "down"; break; - case MOUSE_EVENT_UP: temp = "up"; break; - case MOUSE_EVENT_MOVE: temp = "move"; break; - case MOUSE_EVENT_DOUBLE_CLICK: temp = "double_click"; break; - } - message.setValue("event", temp); - - message.setValueS32("button", button); - - message.setValueS32("x", x); - - // Incoming coordinates are OpenGL-style ((0,0) = lower left), so flip them here if the plugin has requested it. - if(!mRequestedTextureCoordsOpenGL) - { - // TODO: Should I use mMediaHeight or mRequestedMediaHeight here? - y = mMediaHeight - y; - } - message.setValueS32("y", y); - - message.setValue("modifiers", translateModifiers(modifiers)); - - sendMessage(message); -} - -bool LLPluginClassMedia::keyEvent(EKeyEventType type, int key_code, MASK modifiers, LLSD native_key_data) -{ - bool result = true; - - // FIXME: - // HACK: we don't have an easy way to tell if the plugin is going to handle a particular keycode. - // For now, return false for the ones the webkit plugin won't handle properly. - - switch(key_code) - { - case KEY_BACKSPACE: - case KEY_TAB: - case KEY_RETURN: - case KEY_PAD_RETURN: - case KEY_SHIFT: - case KEY_CONTROL: - case KEY_ALT: - case KEY_CAPSLOCK: - case KEY_ESCAPE: - case KEY_PAGE_UP: - case KEY_PAGE_DOWN: - case KEY_END: - case KEY_HOME: - case KEY_LEFT: - case KEY_UP: - case KEY_RIGHT: - case KEY_DOWN: - case KEY_INSERT: - case KEY_DELETE: - // These will be handled - break; - - default: - // regular ASCII characters will also be handled - if(key_code >= KEY_SPECIAL) - { - // Other "special" codes will not work properly. - result = false; - } - break; - } - -#if LL_DARWIN - if(modifiers & MASK_ALT) - { - // Option-key modified characters should be handled by the unicode input path instead of this one. - result = false; - } -#endif - - if(result) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "key_event"); - std::string temp; - switch(type) - { - case KEY_EVENT_DOWN: temp = "down"; break; - case KEY_EVENT_UP: temp = "up"; break; - case KEY_EVENT_REPEAT: temp = "repeat"; break; - } - message.setValue("event", temp); - - message.setValueS32("key", key_code); - - message.setValue("modifiers", translateModifiers(modifiers)); - message.setValueLLSD("native_key_data", native_key_data); - - sendMessage(message); - } - - return result; -} - -void LLPluginClassMedia::scrollEvent(int x, int y, MASK modifiers) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "scroll_event"); - - message.setValueS32("x", x); - message.setValueS32("y", y); - message.setValue("modifiers", translateModifiers(modifiers)); - - sendMessage(message); -} - -bool LLPluginClassMedia::textInput(const std::string &text, MASK modifiers, LLSD native_key_data) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "text_event"); - - message.setValue("text", text); - message.setValue("modifiers", translateModifiers(modifiers)); - message.setValueLLSD("native_key_data", native_key_data); - - sendMessage(message); - - return true; -} - -void LLPluginClassMedia::loadURI(const std::string &uri) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "load_uri"); - - message.setValue("uri", uri); - - sendMessage(message); -} - -const char* LLPluginClassMedia::priorityToString(EPriority priority) -{ - const char* result = "UNKNOWN"; - switch(priority) - { - case PRIORITY_UNLOADED: result = "unloaded"; break; - case PRIORITY_STOPPED: result = "stopped"; break; - case PRIORITY_HIDDEN: result = "hidden"; break; - case PRIORITY_SLIDESHOW: result = "slideshow"; break; - case PRIORITY_LOW: result = "low"; break; - case PRIORITY_NORMAL: result = "normal"; break; - case PRIORITY_HIGH: result = "high"; break; - } - - return result; -} - -void LLPluginClassMedia::setPriority(EPriority priority) -{ - if(mPriority != priority) - { - mPriority = priority; - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_priority"); - - std::string priority_string = priorityToString(priority); - switch(priority) - { - case PRIORITY_UNLOADED: - mSleepTime = 1.0f; - break; - case PRIORITY_STOPPED: - mSleepTime = 1.0f; - break; - case PRIORITY_HIDDEN: - mSleepTime = 1.0f; - break; - case PRIORITY_SLIDESHOW: - mSleepTime = 1.0f; - break; - case PRIORITY_LOW: - mSleepTime = 1.0f / 25.0f; - break; - case PRIORITY_NORMAL: - mSleepTime = 1.0f / 50.0f; - break; - case PRIORITY_HIGH: - mSleepTime = 1.0f / 100.0f; - break; - } - - message.setValue("priority", priority_string); - - sendMessage(message); - - if(mPlugin) - { - mPlugin->setSleepTime(mSleepTime); - } - - LL_DEBUGS("PluginPriority") << this << ": setting priority to " << priority_string << LL_ENDL; - - // This may affect the calculated size, so recalculate it here. - setSizeInternal(); - } -} - -void LLPluginClassMedia::setLowPrioritySizeLimit(int size) -{ - int power = nextPowerOf2(size); - if(mLowPrioritySizeLimit != power) - { - mLowPrioritySizeLimit = power; - - // This may affect the calculated size, so recalculate it here. - setSizeInternal(); - } -} - -F64 LLPluginClassMedia::getCPUUsage() -{ - F64 result = 0.0f; - - if(mPlugin) - { - result = mPlugin->getCPUUsage(); - } - - return result; -} - -void LLPluginClassMedia::sendPickFileResponse(const std::string &file) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file_response"); - message.setValue("file", file); - if(mPlugin && mPlugin->isBlocked()) - { - // If the plugin sent a blocking pick-file request, the response should unblock it. - message.setValueBoolean("blocking_response", true); - } - sendMessage(message); -} - -void LLPluginClassMedia::sendAuthResponse(bool ok, const std::string &username, const std::string &password) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "auth_response"); - message.setValueBoolean("ok", ok); - message.setValue("username", username); - message.setValue("password", password); - if(mPlugin && mPlugin->isBlocked()) - { - // If the plugin sent a blocking pick-file request, the response should unblock it. - message.setValueBoolean("blocking_response", true); - } - sendMessage(message); -} - -void LLPluginClassMedia::cut() -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_cut"); - sendMessage(message); -} - -void LLPluginClassMedia::copy() -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_copy"); - sendMessage(message); -} - -void LLPluginClassMedia::paste() -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_paste"); - sendMessage(message); -} - -void LLPluginClassMedia::setUserDataPath(const std::string &user_data_path) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_user_data_path"); - message.setValue("path", user_data_path); - sendMessage(message); -} - -void LLPluginClassMedia::setLanguageCode(const std::string &language_code) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_language_code"); - message.setValue("language", language_code); - sendMessage(message); -} - -void LLPluginClassMedia::setPluginsEnabled(const bool enabled) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "plugins_enabled"); - message.setValueBoolean("enable", enabled); - sendMessage(message); -} - -void LLPluginClassMedia::setJavascriptEnabled(const bool enabled) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "javascript_enabled"); - message.setValueBoolean("enable", enabled); - sendMessage(message); -} - - -void LLPluginClassMedia::enableMediaPluginDebugging( bool enable ) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "enable_media_plugin_debugging"); - message.setValueBoolean( "enable", enable ); - sendMessage( message ); -} - -void LLPluginClassMedia::setTarget(const std::string &target) -{ - mTarget = target; -} - -/* virtual */ -void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message) -{ - std::string message_class = message.getClass(); - - if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA) - { - std::string message_name = message.getName(); - if(message_name == "texture_params") - { - mRequestedTextureDepth = message.getValueS32("depth"); - mRequestedTextureInternalFormat = message.getValueU32("internalformat"); - mRequestedTextureFormat = message.getValueU32("format"); - mRequestedTextureType = message.getValueU32("type"); - mRequestedTextureSwapBytes = message.getValueBoolean("swap_bytes"); - mRequestedTextureCoordsOpenGL = message.getValueBoolean("coords_opengl"); - - // These two are optional, and will default to 0 if they're not specified. - mDefaultMediaWidth = message.getValueS32("default_width"); - mDefaultMediaHeight = message.getValueS32("default_height"); - - mAllowDownsample = message.getValueBoolean("allow_downsample"); - mPadding = message.getValueS32("padding"); - - setSizeInternal(); - - mTextureParamsReceived = true; - } - else if(message_name == "updated") - { - if(message.hasValue("left")) - { - LLRect newDirtyRect; - newDirtyRect.mLeft = message.getValueS32("left"); - newDirtyRect.mTop = message.getValueS32("top"); - newDirtyRect.mRight = message.getValueS32("right"); - newDirtyRect.mBottom = message.getValueS32("bottom"); - - // The plugin is likely to have top and bottom switched, due to vertical flip and OpenGL coordinate confusion. - // If they're backwards, swap them. - if(newDirtyRect.mTop < newDirtyRect.mBottom) - { - S32 temp = newDirtyRect.mTop; - newDirtyRect.mTop = newDirtyRect.mBottom; - newDirtyRect.mBottom = temp; - } - - if(mDirtyRect.isEmpty()) - { - mDirtyRect = newDirtyRect; - } - else - { - mDirtyRect.unionWith(newDirtyRect); - } - - LL_DEBUGS("Plugin") << "adjusted incoming rect is: (" - << newDirtyRect.mLeft << ", " - << newDirtyRect.mTop << ", " - << newDirtyRect.mRight << ", " - << newDirtyRect.mBottom << "), new dirty rect is: (" - << mDirtyRect.mLeft << ", " - << mDirtyRect.mTop << ", " - << mDirtyRect.mRight << ", " - << mDirtyRect.mBottom << ")" - << LL_ENDL; - - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CONTENT_UPDATED); - } - - - bool time_duration_updated = false; - int previous_percent = mProgressPercent; - - if(message.hasValue("current_time")) - { - mCurrentTime = message.getValueReal("current_time"); - time_duration_updated = true; - } - if(message.hasValue("duration")) - { - mDuration = message.getValueReal("duration"); - time_duration_updated = true; - } - - if(message.hasValue("current_rate")) - { - mCurrentRate = message.getValueReal("current_rate"); - } - - if(message.hasValue("loaded_duration")) - { - mLoadedDuration = message.getValueReal("loaded_duration"); - time_duration_updated = true; - } - else - { - // If the message doesn't contain a loaded_duration param, assume it's equal to duration - mLoadedDuration = mDuration; - } - - // Calculate a percentage based on the loaded duration and total duration. - if(mDuration != 0.0f) // Don't divide by zero. - { - mProgressPercent = (int)((mLoadedDuration * 100.0f)/mDuration); - } - - if(time_duration_updated) - { - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_TIME_DURATION_UPDATED); - } - - if(previous_percent != mProgressPercent) - { - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PROGRESS_UPDATED); - } - } - else if(message_name == "media_status") - { - std::string status = message.getValue("status"); - - LL_DEBUGS("Plugin") << "Status changed to: " << status << LL_ENDL; - - if(status == "loading") - { - mStatus = LLPluginClassMediaOwner::MEDIA_LOADING; - } - else if(status == "loaded") - { - mStatus = LLPluginClassMediaOwner::MEDIA_LOADED; - } - else if(status == "error") - { - mStatus = LLPluginClassMediaOwner::MEDIA_ERROR; - } - else if(status == "playing") - { - mStatus = LLPluginClassMediaOwner::MEDIA_PLAYING; - } - else if(status == "paused") - { - mStatus = LLPluginClassMediaOwner::MEDIA_PAUSED; - } - else if(status == "done") - { - mStatus = LLPluginClassMediaOwner::MEDIA_DONE; - } - else - { - // empty string or any unknown string - mStatus = LLPluginClassMediaOwner::MEDIA_NONE; - } - } - else if(message_name == "size_change_request") - { - S32 width = message.getValueS32("width"); - S32 height = message.getValueS32("height"); - std::string name = message.getValue("name"); - - // TODO: check that name matches? - mNaturalMediaWidth = width; - mNaturalMediaHeight = height; - - setSizeInternal(); - } - else if(message_name == "size_change_response") - { - std::string name = message.getValue("name"); - - // TODO: check that name matches? - - mTextureWidth = message.getValueS32("texture_width"); - mTextureHeight = message.getValueS32("texture_height"); - mMediaWidth = message.getValueS32("width"); - mMediaHeight = message.getValueS32("height"); - - // This invalidates any existing dirty rect. - resetDirty(); - - // TODO: should we verify that the plugin sent back the right values? - // Two size changes in a row may cause them to not match, due to queueing, etc. - - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_SIZE_CHANGED); - } - else if(message_name == "cursor_changed") - { - mCursorName = message.getValue("name"); - - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CURSOR_CHANGED); - } - else if(message_name == "edit_state") - { - if(message.hasValue("cut")) - { - mCanCut = message.getValueBoolean("cut"); - } - if(message.hasValue("copy")) - { - mCanCopy = message.getValueBoolean("copy"); - } - if(message.hasValue("paste")) - { - mCanPaste = message.getValueBoolean("paste"); - } - } - else if(message_name == "name_text") - { - mMediaName = message.getValue("name"); - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAME_CHANGED); - } - else if(message_name == "pick_file") - { - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PICK_FILE_REQUEST); - } - else if(message_name == "auth_request") - { - mAuthURL = message.getValue("url"); - mAuthRealm = message.getValue("realm"); - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_AUTH_REQUEST); - } - else if(message_name == "debug_message") - { - mDebugMessageText = message.getValue("message_text"); - mDebugMessageLevel = message.getValue("message_level"); - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_DEBUG_MESSAGE); - } - else - { - LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL; - } - } - else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER) - { - std::string message_name = message.getName(); - if(message_name == "navigate_begin") - { - mNavigateURI = message.getValue("uri"); - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_BEGIN); - } - else if(message_name == "navigate_complete") - { - mNavigateURI = message.getValue("uri"); - mNavigateResultCode = message.getValueS32("result_code"); - mNavigateResultString = message.getValue("result_string"); - mHistoryBackAvailable = message.getValueBoolean("history_back_available"); - mHistoryForwardAvailable = message.getValueBoolean("history_forward_available"); - - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_COMPLETE); - } - else if(message_name == "progress") - { - mProgressPercent = message.getValueS32("percent"); - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PROGRESS_UPDATED); - } - else if(message_name == "status_text") - { - mStatusText = message.getValue("status"); - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_STATUS_TEXT_CHANGED); - } - else if(message_name == "location_changed") - { - mLocation = message.getValue("uri"); - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_LOCATION_CHANGED); - } - else if(message_name == "click_href") - { - mClickURL = message.getValue("uri"); - mClickTarget = message.getValue("target"); - mClickUUID = message.getValue("uuid"); - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_HREF); - } - else if(message_name == "click_nofollow") - { - mClickURL = message.getValue("uri"); - mClickNavType = message.getValue("nav_type"); - mClickTarget.clear(); - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_NOFOLLOW); - } - else if(message_name == "navigate_error_page") - { - mStatusCode = message.getValueS32("status_code"); - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_ERROR_PAGE); - } - else if(message_name == "cookie_set") - { - if(mOwner) - { - mOwner->handleCookieSet(this, message.getValue("cookie")); - } - } - else if(message_name == "close_request") - { - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLOSE_REQUEST); - } - else if(message_name == "geometry_change") - { - mClickUUID = message.getValue("uuid"); - mGeometryX = message.getValueS32("x"); - mGeometryY = message.getValueS32("y"); - mGeometryWidth = message.getValueS32("width"); - mGeometryHeight = message.getValueS32("height"); - - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_GEOMETRY_CHANGE); - } - else if(message_name == "link_hovered") - { - // text is not currently used -- the tooltip hover text is taken from the "title". - mHoverLink = message.getValue("link"); - mHoverText = message.getValue("title"); - // message.getValue("text"); - - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_LINK_HOVERED); - } - else - { - LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL; - } - } - else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME) - { - std::string message_name = message.getName(); - - // This class hasn't defined any incoming messages yet. -// if(message_name == "message_name") -// { -// } -// else - { - LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL; - } - } - -} - -/* virtual */ -void LLPluginClassMedia::pluginLaunchFailed() -{ - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED_LAUNCH); -} - -/* virtual */ -void LLPluginClassMedia::pluginDied() -{ - mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED); -} - -void LLPluginClassMedia::mediaEvent(LLPluginClassMediaOwner::EMediaEvent event) -{ - if(mOwner) - { - mOwner->handleMediaEvent(this, event); - } -} - -void LLPluginClassMedia::sendMessage(const LLPluginMessage &message) -{ - if(mPlugin && mPlugin->isRunning()) - { - mPlugin->sendMessage(message); - } - else - { - // The plugin isn't set up yet -- queue this message to be sent after initialization. - mSendQueue.push(message); - } -} - -//////////////////////////////////////////////////////////// -// MARK: media_browser class functions -bool LLPluginClassMedia::pluginSupportsMediaBrowser(void) -{ - std::string version = mPlugin->getMessageClassVersion(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER); - return !version.empty(); -} - -void LLPluginClassMedia::focus(bool focused) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "focus"); - - message.setValueBoolean("focused", focused); - - sendMessage(message); -} - -void LLPluginClassMedia::clear_cache() -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "clear_cache"); - sendMessage(message); -} - -void LLPluginClassMedia::clear_cookies() -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "clear_cookies"); - sendMessage(message); -} - -void LLPluginClassMedia::set_cookies(const std::string &cookies) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_cookies"); - message.setValue("cookies", cookies); - sendMessage(message); -} - -void LLPluginClassMedia::enable_cookies(bool enable) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "enable_cookies"); - message.setValueBoolean("enable", enable); - sendMessage(message); -} - -void LLPluginClassMedia::proxy_setup(bool enable, const std::string &host, int port) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_setup"); - - message.setValueBoolean("enable", enable); - message.setValue("host", host); - message.setValueS32("port", port); - - sendMessage(message); -} - -void LLPluginClassMedia::browse_stop() -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_stop"); - sendMessage(message); -} - -void LLPluginClassMedia::browse_reload(bool ignore_cache) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_reload"); - - message.setValueBoolean("ignore_cache", ignore_cache); - - sendMessage(message); -} - -void LLPluginClassMedia::browse_forward() -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_forward"); - sendMessage(message); -} - -void LLPluginClassMedia::browse_back() -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_back"); - sendMessage(message); -} - -void LLPluginClassMedia::setBrowserUserAgent(const std::string& user_agent) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_user_agent"); - - message.setValue("user_agent", user_agent); - - sendMessage(message); -} - -void LLPluginClassMedia::showWebInspector( bool show ) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "show_web_inspector"); - message.setValueBoolean("show", true); // only open for now - closed manually by user - sendMessage(message); -} - -void LLPluginClassMedia::proxyWindowOpened(const std::string &target, const std::string &uuid) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_window_opened"); - - message.setValue("target", target); - message.setValue("uuid", uuid); - - sendMessage(message); -} - -void LLPluginClassMedia::proxyWindowClosed(const std::string &uuid) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_window_closed"); - - message.setValue("uuid", uuid); - - sendMessage(message); -} - -void LLPluginClassMedia::ignore_ssl_cert_errors(bool ignore) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "ignore_ssl_cert_errors"); - message.setValueBoolean("ignore", ignore); - sendMessage(message); -} - -void LLPluginClassMedia::addCertificateFilePath(const std::string& path) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "add_certificate_file_path"); - message.setValue("path", path); - sendMessage(message); -} - -void LLPluginClassMedia::crashPlugin() -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "crash"); - - sendMessage(message); -} - -void LLPluginClassMedia::hangPlugin() -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "hang"); - - sendMessage(message); -} - - -//////////////////////////////////////////////////////////// -// MARK: media_time class functions -bool LLPluginClassMedia::pluginSupportsMediaTime(void) -{ - std::string version = mPlugin->getMessageClassVersion(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME); - return !version.empty(); -} - -void LLPluginClassMedia::stop() -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "stop"); - sendMessage(message); -} - -void LLPluginClassMedia::start(float rate) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "start"); - - message.setValueReal("rate", rate); - - sendMessage(message); -} - -void LLPluginClassMedia::pause() -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "pause"); - sendMessage(message); -} - -void LLPluginClassMedia::seek(float time) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "seek"); - - message.setValueReal("time", time); - - sendMessage(message); -} - -void LLPluginClassMedia::setLoop(bool loop) -{ - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "set_loop"); - - message.setValueBoolean("loop", loop); - - sendMessage(message); -} - -void LLPluginClassMedia::setVolume(float volume) -{ - if(volume != mRequestedVolume) - { - mRequestedVolume = volume; - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "set_volume"); - - message.setValueReal("volume", volume); - - sendMessage(message); - } -} - -float LLPluginClassMedia::getVolume() -{ - return mRequestedVolume; -} - -void LLPluginClassMedia::initializeUrlHistory(const LLSD& url_history) -{ - // Send URL history to plugin - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "init_history"); - message.setValueLLSD("history", url_history); - sendMessage(message); - - LL_DEBUGS("Plugin") << "Sending history" << LL_ENDL; -} - +/** + * @file llpluginclassmedia.cpp + * @brief LLPluginClassMedia handles a plugin which knows about the "media" message class. + * + * @cond + * $LicenseInfo:firstyear=2008&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + * @endcond + */ + +#include "linden_common.h" +#include "indra_constants.h" + +#include "llpluginclassmedia.h" +#include "llpluginmessageclasses.h" + +#include "llqtwebkit.h" + +static int LOW_PRIORITY_TEXTURE_SIZE_DEFAULT = 256; + +static int nextPowerOf2( int value ) +{ + int next_power_of_2 = 1; + while ( next_power_of_2 < value ) + { + next_power_of_2 <<= 1; + } + + return next_power_of_2; +} + +LLPluginClassMedia::LLPluginClassMedia(LLPluginClassMediaOwner *owner) +{ + mOwner = owner; + mPlugin = NULL; + reset(); + + //debug use + mDeleteOK = true ; +} + + +LLPluginClassMedia::~LLPluginClassMedia() +{ + llassert_always(mDeleteOK) ; + reset(); +} + +bool LLPluginClassMedia::init(const std::string &launcher_filename, const std::string &plugin_dir, const std::string &plugin_filename, bool debug) +{ + LL_DEBUGS("Plugin") << "launcher: " << launcher_filename << LL_ENDL; + LL_DEBUGS("Plugin") << "dir: " << plugin_dir << LL_ENDL; + LL_DEBUGS("Plugin") << "plugin: " << plugin_filename << LL_ENDL; + + mPlugin = new LLPluginProcessParent(this); + mPlugin->setSleepTime(mSleepTime); + + // Queue up the media init message -- it will be sent after all the currently queued messages. + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "init"); + message.setValue("target", mTarget); + sendMessage(message); + + mPlugin->init(launcher_filename, plugin_dir, plugin_filename, debug); + + return true; +} + + +void LLPluginClassMedia::reset() +{ + if(mPlugin != NULL) + { + delete mPlugin; + mPlugin = NULL; + } + + mTextureParamsReceived = false; + mRequestedTextureDepth = 0; + mRequestedTextureInternalFormat = 0; + mRequestedTextureFormat = 0; + mRequestedTextureType = 0; + mRequestedTextureSwapBytes = false; + mRequestedTextureCoordsOpenGL = false; + mTextureSharedMemorySize = 0; + mTextureSharedMemoryName.clear(); + mDefaultMediaWidth = 0; + mDefaultMediaHeight = 0; + mNaturalMediaWidth = 0; + mNaturalMediaHeight = 0; + mSetMediaWidth = -1; + mSetMediaHeight = -1; + mRequestedMediaWidth = 0; + mRequestedMediaHeight = 0; + mRequestedTextureWidth = 0; + mRequestedTextureHeight = 0; + mFullMediaWidth = 0; + mFullMediaHeight = 0; + mTextureWidth = 0; + mTextureHeight = 0; + mMediaWidth = 0; + mMediaHeight = 0; + mDirtyRect = LLRect::null; + mAutoScaleMedia = false; + mRequestedVolume = 1.0f; + mPriority = PRIORITY_NORMAL; + mLowPrioritySizeLimit = LOW_PRIORITY_TEXTURE_SIZE_DEFAULT; + mAllowDownsample = false; + mPadding = 0; + mLastMouseX = 0; + mLastMouseY = 0; + mStatus = LLPluginClassMediaOwner::MEDIA_NONE; + mSleepTime = 1.0f / 100.0f; + mCanCut = false; + mCanCopy = false; + mCanPaste = false; + mMediaName.clear(); + mMediaDescription.clear(); + mBackgroundColor = LLColor4(1.0f, 1.0f, 1.0f, 1.0f); + + // media_browser class + mNavigateURI.clear(); + mNavigateResultCode = -1; + mNavigateResultString.clear(); + mHistoryBackAvailable = false; + mHistoryForwardAvailable = false; + mStatusText.clear(); + mProgressPercent = 0; + mClickURL.clear(); + mClickNavType.clear(); + mClickTarget.clear(); + mClickUUID.clear(); + mStatusCode = 0; + + // media_time class + mCurrentTime = 0.0f; + mDuration = 0.0f; + mCurrentRate = 0.0f; + mLoadedDuration = 0.0f; +} + +void LLPluginClassMedia::idle(void) +{ + if(mPlugin) + { + mPlugin->idle(); + } + + if((mMediaWidth == -1) || (!mTextureParamsReceived) || (mPlugin == NULL) || (mPlugin->isBlocked()) || (mOwner == NULL)) + { + // Can't process a size change at this time + } + else if((mRequestedMediaWidth != mMediaWidth) || (mRequestedMediaHeight != mMediaHeight)) + { + // Calculate the correct size for the media texture + mRequestedTextureHeight = mRequestedMediaHeight; + if(mPadding < 0) + { + // negative values indicate the plugin wants a power of 2 + mRequestedTextureWidth = nextPowerOf2(mRequestedMediaWidth); + } + else + { + mRequestedTextureWidth = mRequestedMediaWidth; + + if(mPadding > 1) + { + // Pad up to a multiple of the specified number of bytes per row + int rowbytes = mRequestedTextureWidth * mRequestedTextureDepth; + int pad = rowbytes % mPadding; + if(pad != 0) + { + rowbytes += mPadding - pad; + } + + if(rowbytes % mRequestedTextureDepth == 0) + { + mRequestedTextureWidth = rowbytes / mRequestedTextureDepth; + } + else + { + LL_WARNS("Plugin") << "Unable to pad texture width, padding size " << mPadding << "is not a multiple of pixel size " << mRequestedTextureDepth << LL_ENDL; + } + } + } + + + // Size change has been requested but not initiated yet. + size_t newsize = mRequestedTextureWidth * mRequestedTextureHeight * mRequestedTextureDepth; + + // Add an extra line for padding, just in case. + newsize += mRequestedTextureWidth * mRequestedTextureDepth; + + if(newsize != mTextureSharedMemorySize) + { + if(!mTextureSharedMemoryName.empty()) + { + // Tell the plugin to remove the old memory segment + mPlugin->removeSharedMemory(mTextureSharedMemoryName); + mTextureSharedMemoryName.clear(); + } + + mTextureSharedMemorySize = newsize; + mTextureSharedMemoryName = mPlugin->addSharedMemory(mTextureSharedMemorySize); + if(!mTextureSharedMemoryName.empty()) + { + void *addr = mPlugin->getSharedMemoryAddress(mTextureSharedMemoryName); + + // clear texture memory to avoid random screen visual fuzz from uninitialized texture data + memset( addr, 0x00, newsize ); + + // We could do this to force an update, but textureValid() will still be returning false until the first roundtrip to the plugin, + // so it may not be worthwhile. + // mDirtyRect.setOriginAndSize(0, 0, mRequestedMediaWidth, mRequestedMediaHeight); + } + } + + // This is our local indicator that a change is in progress. + mTextureWidth = -1; + mTextureHeight = -1; + mMediaWidth = -1; + mMediaHeight = -1; + + // This invalidates any existing dirty rect. + resetDirty(); + + // Send a size change message to the plugin + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change"); + message.setValue("name", mTextureSharedMemoryName); + message.setValueS32("width", mRequestedMediaWidth); + message.setValueS32("height", mRequestedMediaHeight); + message.setValueS32("texture_width", mRequestedTextureWidth); + message.setValueS32("texture_height", mRequestedTextureHeight); + message.setValueReal("background_r", mBackgroundColor.mV[VX]); + message.setValueReal("background_g", mBackgroundColor.mV[VY]); + message.setValueReal("background_b", mBackgroundColor.mV[VZ]); + message.setValueReal("background_a", mBackgroundColor.mV[VW]); + mPlugin->sendMessage(message); // DO NOT just use sendMessage() here -- we want this to jump ahead of the queue. + + LL_DEBUGS("Plugin") << "Sending size_change" << LL_ENDL; + } + } + + if(mPlugin && mPlugin->isRunning()) + { + // Send queued messages + while(!mSendQueue.empty()) + { + LLPluginMessage message = mSendQueue.front(); + mSendQueue.pop(); + mPlugin->sendMessage(message); + } + } +} + +int LLPluginClassMedia::getTextureWidth() const +{ + return nextPowerOf2(mTextureWidth); +} + +int LLPluginClassMedia::getTextureHeight() const +{ + return nextPowerOf2(mTextureHeight); +} + +unsigned char* LLPluginClassMedia::getBitsData() +{ + unsigned char *result = NULL; + if((mPlugin != NULL) && !mTextureSharedMemoryName.empty()) + { + result = (unsigned char*)mPlugin->getSharedMemoryAddress(mTextureSharedMemoryName); + } + return result; +} + +void LLPluginClassMedia::setSize(int width, int height) +{ + if((width > 0) && (height > 0)) + { + mSetMediaWidth = width; + mSetMediaHeight = height; + } + else + { + mSetMediaWidth = -1; + mSetMediaHeight = -1; + } + + setSizeInternal(); +} + +void LLPluginClassMedia::setSizeInternal(void) +{ + if((mSetMediaWidth > 0) && (mSetMediaHeight > 0)) + { + mRequestedMediaWidth = mSetMediaWidth; + mRequestedMediaHeight = mSetMediaHeight; + } + else if((mNaturalMediaWidth > 0) && (mNaturalMediaHeight > 0)) + { + mRequestedMediaWidth = mNaturalMediaWidth; + mRequestedMediaHeight = mNaturalMediaHeight; + } + else + { + mRequestedMediaWidth = mDefaultMediaWidth; + mRequestedMediaHeight = mDefaultMediaHeight; + } + + // Save these for size/interest calculations + mFullMediaWidth = mRequestedMediaWidth; + mFullMediaHeight = mRequestedMediaHeight; + + if(mAllowDownsample) + { + switch(mPriority) + { + case PRIORITY_SLIDESHOW: + case PRIORITY_LOW: + // Reduce maximum texture dimension to (or below) mLowPrioritySizeLimit + while((mRequestedMediaWidth > mLowPrioritySizeLimit) || (mRequestedMediaHeight > mLowPrioritySizeLimit)) + { + mRequestedMediaWidth /= 2; + mRequestedMediaHeight /= 2; + } + break; + + default: + // Don't adjust texture size + break; + } + } + + if(mAutoScaleMedia) + { + mRequestedMediaWidth = nextPowerOf2(mRequestedMediaWidth); + mRequestedMediaHeight = nextPowerOf2(mRequestedMediaHeight); + } + + if(mRequestedMediaWidth > 2048) + mRequestedMediaWidth = 2048; + + if(mRequestedMediaHeight > 2048) + mRequestedMediaHeight = 2048; +} + +void LLPluginClassMedia::setAutoScale(bool auto_scale) +{ + if(auto_scale != mAutoScaleMedia) + { + mAutoScaleMedia = auto_scale; + setSizeInternal(); + } +} + +bool LLPluginClassMedia::textureValid(void) +{ + if( + !mTextureParamsReceived || + mTextureWidth <= 0 || + mTextureHeight <= 0 || + mMediaWidth <= 0 || + mMediaHeight <= 0 || + mRequestedMediaWidth != mMediaWidth || + mRequestedMediaHeight != mMediaHeight || + getBitsData() == NULL + ) + return false; + + return true; +} + +bool LLPluginClassMedia::getDirty(LLRect *dirty_rect) +{ + bool result = !mDirtyRect.isEmpty(); + + if(dirty_rect != NULL) + { + *dirty_rect = mDirtyRect; + } + + return result; +} + +void LLPluginClassMedia::resetDirty(void) +{ + mDirtyRect = LLRect::null; +} + +std::string LLPluginClassMedia::translateModifiers(MASK modifiers) +{ + std::string result; + + + if(modifiers & MASK_CONTROL) + { + result += "control|"; + } + + if(modifiers & MASK_ALT) + { + result += "alt|"; + } + + if(modifiers & MASK_SHIFT) + { + result += "shift|"; + } + + // TODO: should I deal with platform differences here or in callers? + // TODO: how do we deal with the Mac "command" key? +/* + if(modifiers & MASK_SOMETHING) + { + result += "meta|"; + } +*/ + return result; +} + +void LLPluginClassMedia::jsEnableObject( bool enable ) +{ + if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) + { + return; + } + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_enable_object"); + message.setValueBoolean( "enable", enable ); + sendMessage( message ); +} + +void LLPluginClassMedia::jsAgentLocationEvent( double x, double y, double z ) +{ + if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) + { + return; + } + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_location"); + message.setValueReal( "x", x ); + message.setValueReal( "y", y ); + message.setValueReal( "z", z ); + sendMessage( message ); +} + +void LLPluginClassMedia::jsAgentGlobalLocationEvent( double x, double y, double z ) +{ + if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) + { + return; + } + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_global_location"); + message.setValueReal( "x", x ); + message.setValueReal( "y", y ); + message.setValueReal( "z", z ); + sendMessage( message ); +} + +void LLPluginClassMedia::jsAgentOrientationEvent( double angle ) +{ + if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) + { + return; + } + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_orientation"); + message.setValueReal( "angle", angle ); + + sendMessage( message ); +} + +void LLPluginClassMedia::jsAgentLanguageEvent( const std::string& language ) +{ + if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) + { + return; + } + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_language"); + message.setValue( "language", language ); + sendMessage( message ); +} + +void LLPluginClassMedia::jsAgentRegionEvent( const std::string& region ) +{ + if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) + { + return; + } + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_region"); + message.setValue( "region", region ); + sendMessage( message ); +} + +void LLPluginClassMedia::jsAgentMaturityEvent( const std::string& maturity ) +{ + if( ! mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked() ) + { + return; + } + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "js_agent_maturity"); + message.setValue( "maturity", maturity ); + sendMessage( message ); +} + +void LLPluginClassMedia::mouseEvent(EMouseEventType type, int button, int x, int y, MASK modifiers) +{ + if(type == MOUSE_EVENT_MOVE) + { + if(!mPlugin || !mPlugin->isRunning() || mPlugin->isBlocked()) + { + // Don't queue up mouse move events that can't be delivered. + return; + } + + if((x == mLastMouseX) && (y == mLastMouseY)) + { + // Don't spam unnecessary mouse move events. + return; + } + + mLastMouseX = x; + mLastMouseY = y; + } + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "mouse_event"); + std::string temp; + switch(type) + { + case MOUSE_EVENT_DOWN: temp = "down"; break; + case MOUSE_EVENT_UP: temp = "up"; break; + case MOUSE_EVENT_MOVE: temp = "move"; break; + case MOUSE_EVENT_DOUBLE_CLICK: temp = "double_click"; break; + } + message.setValue("event", temp); + + message.setValueS32("button", button); + + message.setValueS32("x", x); + + // Incoming coordinates are OpenGL-style ((0,0) = lower left), so flip them here if the plugin has requested it. + if(!mRequestedTextureCoordsOpenGL) + { + // TODO: Should I use mMediaHeight or mRequestedMediaHeight here? + y = mMediaHeight - y; + } + message.setValueS32("y", y); + + message.setValue("modifiers", translateModifiers(modifiers)); + + sendMessage(message); +} + +bool LLPluginClassMedia::keyEvent(EKeyEventType type, int key_code, MASK modifiers, LLSD native_key_data) +{ + bool result = true; + + // FIXME: + // HACK: we don't have an easy way to tell if the plugin is going to handle a particular keycode. + // For now, return false for the ones the webkit plugin won't handle properly. + + switch(key_code) + { + case KEY_BACKSPACE: + case KEY_TAB: + case KEY_RETURN: + case KEY_PAD_RETURN: + case KEY_SHIFT: + case KEY_CONTROL: + case KEY_ALT: + case KEY_CAPSLOCK: + case KEY_ESCAPE: + case KEY_PAGE_UP: + case KEY_PAGE_DOWN: + case KEY_END: + case KEY_HOME: + case KEY_LEFT: + case KEY_UP: + case KEY_RIGHT: + case KEY_DOWN: + case KEY_INSERT: + case KEY_DELETE: + // These will be handled + break; + + default: + // regular ASCII characters will also be handled + if(key_code >= KEY_SPECIAL) + { + // Other "special" codes will not work properly. + result = false; + } + break; + } + +#if LL_DARWIN + if(modifiers & MASK_ALT) + { + // Option-key modified characters should be handled by the unicode input path instead of this one. + result = false; + } +#endif + + if(result) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "key_event"); + std::string temp; + switch(type) + { + case KEY_EVENT_DOWN: temp = "down"; break; + case KEY_EVENT_UP: temp = "up"; break; + case KEY_EVENT_REPEAT: temp = "repeat"; break; + } + message.setValue("event", temp); + + message.setValueS32("key", key_code); + + message.setValue("modifiers", translateModifiers(modifiers)); + message.setValueLLSD("native_key_data", native_key_data); + + sendMessage(message); + } + + return result; +} + +void LLPluginClassMedia::scrollEvent(int x, int y, MASK modifiers) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "scroll_event"); + + message.setValueS32("x", x); + message.setValueS32("y", y); + message.setValue("modifiers", translateModifiers(modifiers)); + + sendMessage(message); +} + +bool LLPluginClassMedia::textInput(const std::string &text, MASK modifiers, LLSD native_key_data) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "text_event"); + + message.setValue("text", text); + message.setValue("modifiers", translateModifiers(modifiers)); + message.setValueLLSD("native_key_data", native_key_data); + + sendMessage(message); + + return true; +} + +void LLPluginClassMedia::loadURI(const std::string &uri) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "load_uri"); + + message.setValue("uri", uri); + + sendMessage(message); +} + +const char* LLPluginClassMedia::priorityToString(EPriority priority) +{ + const char* result = "UNKNOWN"; + switch(priority) + { + case PRIORITY_UNLOADED: result = "unloaded"; break; + case PRIORITY_STOPPED: result = "stopped"; break; + case PRIORITY_HIDDEN: result = "hidden"; break; + case PRIORITY_SLIDESHOW: result = "slideshow"; break; + case PRIORITY_LOW: result = "low"; break; + case PRIORITY_NORMAL: result = "normal"; break; + case PRIORITY_HIGH: result = "high"; break; + } + + return result; +} + +void LLPluginClassMedia::setPriority(EPriority priority) +{ + if(mPriority != priority) + { + mPriority = priority; + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_priority"); + + std::string priority_string = priorityToString(priority); + switch(priority) + { + case PRIORITY_UNLOADED: + mSleepTime = 1.0f; + break; + case PRIORITY_STOPPED: + mSleepTime = 1.0f; + break; + case PRIORITY_HIDDEN: + mSleepTime = 1.0f; + break; + case PRIORITY_SLIDESHOW: + mSleepTime = 1.0f; + break; + case PRIORITY_LOW: + mSleepTime = 1.0f / 25.0f; + break; + case PRIORITY_NORMAL: + mSleepTime = 1.0f / 50.0f; + break; + case PRIORITY_HIGH: + mSleepTime = 1.0f / 100.0f; + break; + } + + message.setValue("priority", priority_string); + + sendMessage(message); + + if(mPlugin) + { + mPlugin->setSleepTime(mSleepTime); + } + + LL_DEBUGS("PluginPriority") << this << ": setting priority to " << priority_string << LL_ENDL; + + // This may affect the calculated size, so recalculate it here. + setSizeInternal(); + } +} + +void LLPluginClassMedia::setLowPrioritySizeLimit(int size) +{ + int power = nextPowerOf2(size); + if(mLowPrioritySizeLimit != power) + { + mLowPrioritySizeLimit = power; + + // This may affect the calculated size, so recalculate it here. + setSizeInternal(); + } +} + +F64 LLPluginClassMedia::getCPUUsage() +{ + F64 result = 0.0f; + + if(mPlugin) + { + result = mPlugin->getCPUUsage(); + } + + return result; +} + +void LLPluginClassMedia::sendPickFileResponse(const std::string &file) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file_response"); + message.setValue("file", file); + if(mPlugin && mPlugin->isBlocked()) + { + // If the plugin sent a blocking pick-file request, the response should unblock it. + message.setValueBoolean("blocking_response", true); + } + sendMessage(message); +} + +void LLPluginClassMedia::sendAuthResponse(bool ok, const std::string &username, const std::string &password) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "auth_response"); + message.setValueBoolean("ok", ok); + message.setValue("username", username); + message.setValue("password", password); + if(mPlugin && mPlugin->isBlocked()) + { + // If the plugin sent a blocking pick-file request, the response should unblock it. + message.setValueBoolean("blocking_response", true); + } + sendMessage(message); +} + +void LLPluginClassMedia::cut() +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_cut"); + sendMessage(message); +} + +void LLPluginClassMedia::copy() +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_copy"); + sendMessage(message); +} + +void LLPluginClassMedia::paste() +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_paste"); + sendMessage(message); +} + +void LLPluginClassMedia::setUserDataPath(const std::string &user_data_path) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_user_data_path"); + message.setValue("path", user_data_path); + sendMessage(message); +} + +void LLPluginClassMedia::setLanguageCode(const std::string &language_code) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "set_language_code"); + message.setValue("language", language_code); + sendMessage(message); +} + +void LLPluginClassMedia::setPluginsEnabled(const bool enabled) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "plugins_enabled"); + message.setValueBoolean("enable", enabled); + sendMessage(message); +} + +void LLPluginClassMedia::setJavascriptEnabled(const bool enabled) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "javascript_enabled"); + message.setValueBoolean("enable", enabled); + sendMessage(message); +} + + +void LLPluginClassMedia::enableMediaPluginDebugging( bool enable ) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "enable_media_plugin_debugging"); + message.setValueBoolean( "enable", enable ); + sendMessage( message ); +} + +void LLPluginClassMedia::setTarget(const std::string &target) +{ + mTarget = target; +} + +/* virtual */ +void LLPluginClassMedia::receivePluginMessage(const LLPluginMessage &message) +{ + std::string message_class = message.getClass(); + + if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA) + { + std::string message_name = message.getName(); + if(message_name == "texture_params") + { + mRequestedTextureDepth = message.getValueS32("depth"); + mRequestedTextureInternalFormat = message.getValueU32("internalformat"); + mRequestedTextureFormat = message.getValueU32("format"); + mRequestedTextureType = message.getValueU32("type"); + mRequestedTextureSwapBytes = message.getValueBoolean("swap_bytes"); + mRequestedTextureCoordsOpenGL = message.getValueBoolean("coords_opengl"); + + // These two are optional, and will default to 0 if they're not specified. + mDefaultMediaWidth = message.getValueS32("default_width"); + mDefaultMediaHeight = message.getValueS32("default_height"); + + mAllowDownsample = message.getValueBoolean("allow_downsample"); + mPadding = message.getValueS32("padding"); + + setSizeInternal(); + + mTextureParamsReceived = true; + } + else if(message_name == "updated") + { + if(message.hasValue("left")) + { + LLRect newDirtyRect; + newDirtyRect.mLeft = message.getValueS32("left"); + newDirtyRect.mTop = message.getValueS32("top"); + newDirtyRect.mRight = message.getValueS32("right"); + newDirtyRect.mBottom = message.getValueS32("bottom"); + + // The plugin is likely to have top and bottom switched, due to vertical flip and OpenGL coordinate confusion. + // If they're backwards, swap them. + if(newDirtyRect.mTop < newDirtyRect.mBottom) + { + S32 temp = newDirtyRect.mTop; + newDirtyRect.mTop = newDirtyRect.mBottom; + newDirtyRect.mBottom = temp; + } + + if(mDirtyRect.isEmpty()) + { + mDirtyRect = newDirtyRect; + } + else + { + mDirtyRect.unionWith(newDirtyRect); + } + + LL_DEBUGS("Plugin") << "adjusted incoming rect is: (" + << newDirtyRect.mLeft << ", " + << newDirtyRect.mTop << ", " + << newDirtyRect.mRight << ", " + << newDirtyRect.mBottom << "), new dirty rect is: (" + << mDirtyRect.mLeft << ", " + << mDirtyRect.mTop << ", " + << mDirtyRect.mRight << ", " + << mDirtyRect.mBottom << ")" + << LL_ENDL; + + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CONTENT_UPDATED); + } + + + bool time_duration_updated = false; + int previous_percent = mProgressPercent; + + if(message.hasValue("current_time")) + { + mCurrentTime = message.getValueReal("current_time"); + time_duration_updated = true; + } + if(message.hasValue("duration")) + { + mDuration = message.getValueReal("duration"); + time_duration_updated = true; + } + + if(message.hasValue("current_rate")) + { + mCurrentRate = message.getValueReal("current_rate"); + } + + if(message.hasValue("loaded_duration")) + { + mLoadedDuration = message.getValueReal("loaded_duration"); + time_duration_updated = true; + } + else + { + // If the message doesn't contain a loaded_duration param, assume it's equal to duration + mLoadedDuration = mDuration; + } + + // Calculate a percentage based on the loaded duration and total duration. + if(mDuration != 0.0f) // Don't divide by zero. + { + mProgressPercent = (int)((mLoadedDuration * 100.0f)/mDuration); + } + + if(time_duration_updated) + { + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_TIME_DURATION_UPDATED); + } + + if(previous_percent != mProgressPercent) + { + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PROGRESS_UPDATED); + } + } + else if(message_name == "media_status") + { + std::string status = message.getValue("status"); + + LL_DEBUGS("Plugin") << "Status changed to: " << status << LL_ENDL; + + if(status == "loading") + { + mStatus = LLPluginClassMediaOwner::MEDIA_LOADING; + } + else if(status == "loaded") + { + mStatus = LLPluginClassMediaOwner::MEDIA_LOADED; + } + else if(status == "error") + { + mStatus = LLPluginClassMediaOwner::MEDIA_ERROR; + } + else if(status == "playing") + { + mStatus = LLPluginClassMediaOwner::MEDIA_PLAYING; + } + else if(status == "paused") + { + mStatus = LLPluginClassMediaOwner::MEDIA_PAUSED; + } + else if(status == "done") + { + mStatus = LLPluginClassMediaOwner::MEDIA_DONE; + } + else + { + // empty string or any unknown string + mStatus = LLPluginClassMediaOwner::MEDIA_NONE; + } + } + else if(message_name == "size_change_request") + { + S32 width = message.getValueS32("width"); + S32 height = message.getValueS32("height"); + std::string name = message.getValue("name"); + + // TODO: check that name matches? + mNaturalMediaWidth = width; + mNaturalMediaHeight = height; + + setSizeInternal(); + } + else if(message_name == "size_change_response") + { + std::string name = message.getValue("name"); + + // TODO: check that name matches? + + mTextureWidth = message.getValueS32("texture_width"); + mTextureHeight = message.getValueS32("texture_height"); + mMediaWidth = message.getValueS32("width"); + mMediaHeight = message.getValueS32("height"); + + // This invalidates any existing dirty rect. + resetDirty(); + + // TODO: should we verify that the plugin sent back the right values? + // Two size changes in a row may cause them to not match, due to queueing, etc. + + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_SIZE_CHANGED); + } + else if(message_name == "cursor_changed") + { + mCursorName = message.getValue("name"); + + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CURSOR_CHANGED); + } + else if(message_name == "edit_state") + { + if(message.hasValue("cut")) + { + mCanCut = message.getValueBoolean("cut"); + } + if(message.hasValue("copy")) + { + mCanCopy = message.getValueBoolean("copy"); + } + if(message.hasValue("paste")) + { + mCanPaste = message.getValueBoolean("paste"); + } + } + else if(message_name == "name_text") + { + mMediaName = message.getValue("name"); + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAME_CHANGED); + } + else if(message_name == "pick_file") + { + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PICK_FILE_REQUEST); + } + else if(message_name == "auth_request") + { + mAuthURL = message.getValue("url"); + mAuthRealm = message.getValue("realm"); + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_AUTH_REQUEST); + } + else if(message_name == "debug_message") + { + mDebugMessageText = message.getValue("message_text"); + mDebugMessageLevel = message.getValue("message_level"); + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_DEBUG_MESSAGE); + } + else + { + LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL; + } + } + else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER) + { + std::string message_name = message.getName(); + if(message_name == "navigate_begin") + { + mNavigateURI = message.getValue("uri"); + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_BEGIN); + } + else if(message_name == "navigate_complete") + { + mNavigateURI = message.getValue("uri"); + mNavigateResultCode = message.getValueS32("result_code"); + mNavigateResultString = message.getValue("result_string"); + mHistoryBackAvailable = message.getValueBoolean("history_back_available"); + mHistoryForwardAvailable = message.getValueBoolean("history_forward_available"); + + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_COMPLETE); + } + else if(message_name == "progress") + { + mProgressPercent = message.getValueS32("percent"); + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PROGRESS_UPDATED); + } + else if(message_name == "status_text") + { + mStatusText = message.getValue("status"); + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_STATUS_TEXT_CHANGED); + } + else if(message_name == "location_changed") + { + mLocation = message.getValue("uri"); + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_LOCATION_CHANGED); + } + else if(message_name == "click_href") + { + mClickURL = message.getValue("uri"); + mClickTarget = message.getValue("target"); + mClickUUID = message.getValue("uuid"); + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_HREF); + } + else if(message_name == "click_nofollow") + { + mClickURL = message.getValue("uri"); + mClickNavType = message.getValue("nav_type"); + mClickTarget.clear(); + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLICK_LINK_NOFOLLOW); + } + else if(message_name == "navigate_error_page") + { + mStatusCode = message.getValueS32("status_code"); + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_NAVIGATE_ERROR_PAGE); + } + else if(message_name == "cookie_set") + { + if(mOwner) + { + mOwner->handleCookieSet(this, message.getValue("cookie")); + } + } + else if(message_name == "close_request") + { + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_CLOSE_REQUEST); + } + else if(message_name == "geometry_change") + { + mClickUUID = message.getValue("uuid"); + mGeometryX = message.getValueS32("x"); + mGeometryY = message.getValueS32("y"); + mGeometryWidth = message.getValueS32("width"); + mGeometryHeight = message.getValueS32("height"); + + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_GEOMETRY_CHANGE); + } + else if(message_name == "link_hovered") + { + // text is not currently used -- the tooltip hover text is taken from the "title". + mHoverLink = message.getValue("link"); + mHoverText = message.getValue("title"); + // message.getValue("text"); + + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_LINK_HOVERED); + } + else + { + LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL; + } + } + else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME) + { + std::string message_name = message.getName(); + + // This class hasn't defined any incoming messages yet. +// if(message_name == "message_name") +// { +// } +// else + { + LL_WARNS("Plugin") << "Unknown " << message_name << " class message: " << message_name << LL_ENDL; + } + } + +} + +/* virtual */ +void LLPluginClassMedia::pluginLaunchFailed() +{ + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED_LAUNCH); +} + +/* virtual */ +void LLPluginClassMedia::pluginDied() +{ + mediaEvent(LLPluginClassMediaOwner::MEDIA_EVENT_PLUGIN_FAILED); +} + +void LLPluginClassMedia::mediaEvent(LLPluginClassMediaOwner::EMediaEvent event) +{ + if(mOwner) + { + mOwner->handleMediaEvent(this, event); + } +} + +void LLPluginClassMedia::sendMessage(const LLPluginMessage &message) +{ + if(mPlugin && mPlugin->isRunning()) + { + mPlugin->sendMessage(message); + } + else + { + // The plugin isn't set up yet -- queue this message to be sent after initialization. + mSendQueue.push(message); + } +} + +//////////////////////////////////////////////////////////// +// MARK: media_browser class functions +bool LLPluginClassMedia::pluginSupportsMediaBrowser(void) +{ + std::string version = mPlugin->getMessageClassVersion(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER); + return !version.empty(); +} + +void LLPluginClassMedia::focus(bool focused) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "focus"); + + message.setValueBoolean("focused", focused); + + sendMessage(message); +} + +void LLPluginClassMedia::clear_cache() +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "clear_cache"); + sendMessage(message); +} + +void LLPluginClassMedia::clear_cookies() +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "clear_cookies"); + sendMessage(message); +} + +void LLPluginClassMedia::set_cookies(const std::string &cookies) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_cookies"); + message.setValue("cookies", cookies); + sendMessage(message); +} + +void LLPluginClassMedia::enable_cookies(bool enable) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "enable_cookies"); + message.setValueBoolean("enable", enable); + sendMessage(message); +} + +void LLPluginClassMedia::proxy_setup(bool enable, const std::string &host, int port) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_setup"); + + message.setValueBoolean("enable", enable); + message.setValue("host", host); + message.setValueS32("port", port); + + sendMessage(message); +} + +void LLPluginClassMedia::browse_stop() +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_stop"); + sendMessage(message); +} + +void LLPluginClassMedia::browse_reload(bool ignore_cache) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_reload"); + + message.setValueBoolean("ignore_cache", ignore_cache); + + sendMessage(message); +} + +void LLPluginClassMedia::browse_forward() +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_forward"); + sendMessage(message); +} + +void LLPluginClassMedia::browse_back() +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "browse_back"); + sendMessage(message); +} + +void LLPluginClassMedia::setBrowserUserAgent(const std::string& user_agent) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "set_user_agent"); + + message.setValue("user_agent", user_agent); + + sendMessage(message); +} + +void LLPluginClassMedia::showWebInspector( bool show ) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "show_web_inspector"); + message.setValueBoolean("show", true); // only open for now - closed manually by user + sendMessage(message); +} + +void LLPluginClassMedia::proxyWindowOpened(const std::string &target, const std::string &uuid) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_window_opened"); + + message.setValue("target", target); + message.setValue("uuid", uuid); + + sendMessage(message); +} + +void LLPluginClassMedia::proxyWindowClosed(const std::string &uuid) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "proxy_window_closed"); + + message.setValue("uuid", uuid); + + sendMessage(message); +} + +void LLPluginClassMedia::ignore_ssl_cert_errors(bool ignore) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "ignore_ssl_cert_errors"); + message.setValueBoolean("ignore", ignore); + sendMessage(message); +} + +void LLPluginClassMedia::addCertificateFilePath(const std::string& path) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "add_certificate_file_path"); + message.setValue("path", path); + sendMessage(message); +} + +void LLPluginClassMedia::crashPlugin() +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "crash"); + + sendMessage(message); +} + +void LLPluginClassMedia::hangPlugin() +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_INTERNAL, "hang"); + + sendMessage(message); +} + + +//////////////////////////////////////////////////////////// +// MARK: media_time class functions +bool LLPluginClassMedia::pluginSupportsMediaTime(void) +{ + std::string version = mPlugin->getMessageClassVersion(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME); + return !version.empty(); +} + +void LLPluginClassMedia::stop() +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "stop"); + sendMessage(message); +} + +void LLPluginClassMedia::start(float rate) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "start"); + + message.setValueReal("rate", rate); + + sendMessage(message); +} + +void LLPluginClassMedia::pause() +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "pause"); + sendMessage(message); +} + +void LLPluginClassMedia::seek(float time) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "seek"); + + message.setValueReal("time", time); + + sendMessage(message); +} + +void LLPluginClassMedia::setLoop(bool loop) +{ + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "set_loop"); + + message.setValueBoolean("loop", loop); + + sendMessage(message); +} + +void LLPluginClassMedia::setVolume(float volume) +{ + if(volume != mRequestedVolume) + { + mRequestedVolume = volume; + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME, "set_volume"); + + message.setValueReal("volume", volume); + + sendMessage(message); + } +} + +float LLPluginClassMedia::getVolume() +{ + return mRequestedVolume; +} + +void LLPluginClassMedia::initializeUrlHistory(const LLSD& url_history) +{ + // Send URL history to plugin + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "init_history"); + message.setValueLLSD("history", url_history); + sendMessage(message); + + LL_DEBUGS("Plugin") << "Sending history" << LL_ENDL; +} + diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h index 5f132566ed..1f548f8cc0 100644 --- a/indra/llplugin/llpluginclassmedia.h +++ b/indra/llplugin/llpluginclassmedia.h @@ -44,7 +44,7 @@ public: ~LLPluginClassMedia(); // local initialization, called by the media manager when creating a source - bool init(const std::string &launcher_filename, + bool init(const std::string &launcher_filename, const std::string &plugin_dir, const std::string &plugin_filename, bool debug); @@ -212,7 +212,7 @@ public: void browse_forward(); void browse_back(); void setBrowserUserAgent(const std::string& user_agent); - void showWebInspector( bool show ); + void showWebInspector( bool show ); void proxyWindowOpened(const std::string &target, const std::string &uuid); void proxyWindowClosed(const std::string &uuid); void ignore_ssl_cert_errors(bool ignore); @@ -247,9 +247,9 @@ public: // This is valid during MEDIA_EVENT_CLICK_LINK_HREF and MEDIA_EVENT_GEOMETRY_CHANGE std::string getClickUUID() const { return mClickUUID; }; - - // These are valid during MEDIA_EVENT_DEBUG_MESSAGE - std::string getDebugMessageText() const { return mDebugMessageText; }; + + // These are valid during MEDIA_EVENT_DEBUG_MESSAGE + std::string getDebugMessageText() const { return mDebugMessageText; }; std::string getDebugMessageLevel() const { return mDebugMessageLevel; }; // This is valid after MEDIA_EVENT_NAVIGATE_ERROR_PAGE @@ -403,7 +403,7 @@ protected: std::string mClickNavType; std::string mClickTarget; std::string mClickUUID; - std::string mDebugMessageText; + std::string mDebugMessageText; std::string mDebugMessageLevel; S32 mGeometryX; S32 mGeometryY; diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp index 0beb46d0e5..f8a282184e 100644 --- a/indra/llplugin/llpluginprocesschild.cpp +++ b/indra/llplugin/llpluginprocesschild.cpp @@ -410,7 +410,7 @@ void LLPluginProcessChild::receiveMessageRaw(const std::string &message) } else if(message_name == "sleep_time") { - mSleepTime = parsed.getValueReal("time"); + mSleepTime = llmax(parsed.getValueReal("time"), 1.0 / 100.0); // clamp to maximum of 100Hz } else if(message_name == "crash") { diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp index 315096d4fd..110fac0f23 100644 --- a/indra/llplugin/llpluginprocessparent.cpp +++ b/indra/llplugin/llpluginprocessparent.cpp @@ -927,6 +927,7 @@ void LLPluginProcessParent::receiveMessage(const LLPluginMessage &message) } // Send initial sleep time + llassert_always(mSleepTime != 0.f); setSleepTime(mSleepTime, true); setState(STATE_RUNNING); diff --git a/indra/llprimitive/CMakeLists.txt b/indra/llprimitive/CMakeLists.txt index 97e1ebde47..7d0e313ff3 100644 --- a/indra/llprimitive/CMakeLists.txt +++ b/indra/llprimitive/CMakeLists.txt @@ -59,9 +59,9 @@ add_library (llprimitive ${llprimitive_SOURCE_FILES}) #add unit tests if (LL_TESTS) - INCLUDE(LLAddBuildTest) - SET(llprimitive_TEST_SOURCE_FILES - llmediaentry.cpp - ) - LL_ADD_PROJECT_UNIT_TESTS(llprimitive "${llprimitive_TEST_SOURCE_FILES}") + INCLUDE(LLAddBuildTest) + SET(llprimitive_TEST_SOURCE_FILES + llmediaentry.cpp + ) + LL_ADD_PROJECT_UNIT_TESTS(llprimitive "${llprimitive_TEST_SOURCE_FILES}") endif (LL_TESTS) diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 434fb7650b..6e4bb7ec97 100644 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -1679,6 +1679,19 @@ LLSD LLModel::writeModelToStream(std::ostream& ostr, LLSD& mdl, BOOL nowrite, BO LLModel::weight_list& LLModel::getJointInfluences(const LLVector3& pos) { + //1. If a vertex has been weighted then we'll find it via pos and return it's weight list + weight_map::iterator iterPos = mSkinWeights.begin(); + weight_map::iterator iterEnd = mSkinWeights.end(); + + for ( ; iterPos!=iterEnd; ++iterPos ) + { + if ( jointPositionalLookup( iterPos->first, pos ) ) + { + return iterPos->second; + } + } + + //2. Otherwise we'll use the older implementation weight_map::iterator iter = mSkinWeights.find(pos); if (iter != mSkinWeights.end()) @@ -1692,13 +1705,13 @@ LLModel::weight_list& LLModel::getJointInfluences(const LLVector3& pos) } else { //no exact match found, get closest point - const F32 epsilon = 2.f/65536; + const F32 epsilon = 1e-5f; weight_map::iterator iter_up = mSkinWeights.lower_bound(pos); weight_map::iterator iter_down = ++iter_up; weight_map::iterator best = iter_up; - F32 min_dist = (iter->first - pos).magVecSquared(); + F32 min_dist = (iter->first - pos).magVec(); bool done = false; while (!done) @@ -1709,7 +1722,7 @@ LLModel::weight_list& LLModel::getJointInfluences(const LLVector3& pos) if (iter_up != mSkinWeights.end() && ++iter_up != mSkinWeights.end()) { done = false; - F32 dist = (iter_up->first - pos).magVecSquared(); + F32 dist = (iter_up->first - pos).magVec(); if (dist < epsilon) { @@ -1727,7 +1740,7 @@ LLModel::weight_list& LLModel::getJointInfluences(const LLVector3& pos) { done = false; - F32 dist = (iter_down->first - pos).magVecSquared(); + F32 dist = (iter_down->first - pos).magVec(); if (dist < epsilon) { @@ -1890,14 +1903,71 @@ bool LLModel::loadModel(std::istream& is) } -void LLModel::matchMaterialOrder(LLModel* ref) +bool LLModel::isMaterialListSubset( LLModel* ref ) { - llassert(ref->mMaterialList.size() == mMaterialList.size()); + int refCnt = ref->mMaterialList.size(); + int modelCnt = mMaterialList.size(); + + for (U32 src = 0; src < modelCnt; ++src) + { + bool foundRef = false; + + for (U32 dst = 0; dst < refCnt; ++dst) + { + //llinfos<mMaterialList[dst]<mMaterialList[dst]; + + if ( foundRef ) + { + break; + } + } + if (!foundRef) + { + return false; + } + } + + return true; +} +bool LLModel::needToAddFaces( LLModel* ref, int& refFaceCnt, int& modelFaceCnt ) +{ + bool changed = false; + if ( refFaceCnt< modelFaceCnt ) + { + refFaceCnt += modelFaceCnt - refFaceCnt; + changed = true; + } + else + if ( modelFaceCnt < refFaceCnt ) + { + modelFaceCnt += refFaceCnt - modelFaceCnt; + changed = true; + } + + return changed; +} + +bool LLModel::matchMaterialOrder(LLModel* ref, int& refFaceCnt, int& modelFaceCnt ) +{ + //Is this a subset? + //LODs cannot currently add new materials, e.g. + //1. ref = a,b,c lod1 = d,e => This is not permitted + //2. ref = a,b,c lod1 = c => This would be permitted + + bool isASubset = isMaterialListSubset( ref ); + if ( !isASubset ) + { + llinfos<<"Material of model is not a subset of reference."< index_map; //build a map of material slot names to face indexes bool reorder = false; + std::set base_mat; std::set cur_mat; @@ -1939,6 +2009,7 @@ void LLModel::matchMaterialOrder(LLModel* ref) //override material list with reference model ordering mMaterialList = ref->mMaterialList; + return true; } @@ -2329,8 +2400,6 @@ LLSD LLModel::Decomposition::asLLSD() const for (U32 k = 0; k < 3; k++) { - llassert(v[k] <= 0.51f && v[k] >= -0.51f); - //convert to 16-bit normalized across domain U16 val = (U16) (((v[k]-min.mV[k])/range.mV[k])*65535); diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h index 3f58eba07d..1cf528fd9f 100644 --- a/indra/llprimitive/llmodel.h +++ b/indra/llprimitive/llmodel.h @@ -148,6 +148,7 @@ public: static LLModel* loadModelFromDomMesh(domMesh* mesh); static std::string getElementLabel(daeElement* element); std::string getName() const; + std::string getMetric() const {return mMetric;} EModelStatus getStatus() const {return mStatus;} static std::string getStatusString(U32 status) ; @@ -175,8 +176,10 @@ public: //reorder face list based on mMaterialList in this and reference so //order matches that of reference (material ordering touchup) - void matchMaterialOrder(LLModel* reference); - + bool matchMaterialOrder(LLModel* ref, int& refFaceCnt, int& modelFaceCnt ); + bool isMaterialListSubset( LLModel* ref ); + bool needToAddFaces( LLModel* ref, int& refFaceCnt, int& modelFaceCnt ); + std::vector mMaterialList; //data used for skin weights @@ -217,6 +220,19 @@ public: } }; + + //Are the doubles the same w/in epsilon specified tolerance + bool areEqual( double a, double b ) + { + const float epsilon = 1e-5f; + return (fabs((a - b)) < epsilon) ? true : false ; + } + //Make sure that we return false for any values that are within the tolerance for equivalence + bool jointPositionalLookup( const LLVector3& a, const LLVector3& b ) + { + return ( areEqual( a[0],b[0]) && areEqual( a[1],b[1] ) && areEqual( a[2],b[2]) ) ? true : false; + } + //copy of position array for this model -- mPosition[idx].mV[X,Y,Z] std::vector mPosition; @@ -234,6 +250,8 @@ public: std::string mRequestedLabel; // name requested in UI, if any. std::string mLabel; // name computed from dae. + std::string mMetric; // user-supplied metric data for upload + LLVector3 mNormalizedScale; LLVector3 mNormalizedTranslation; diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h old mode 100755 new mode 100644 diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp index 42105e1bff..7c13388abe 100644 --- a/indra/llrender/llfontgl.cpp +++ b/indra/llrender/llfontgl.cpp @@ -190,6 +190,8 @@ S32 LLFontGL::render(const LLWString &wstr, S32 begin_offset, F32 x, F32 y, cons origin.mV[VY] -= llround((F32)sCurOrigin.mY) - (sCurOrigin.mY); // don't forget to do the depth translation, too. -Zi + // Depth translation, so that floating text appears 'inworld' + // and is correclty occluded. gGL.translatef(0.f,0.f,sCurOrigin.mZ); S32 chars_drawn = 0; diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp index 40482637f2..7931230731 100644 --- a/indra/llrender/llrender.cpp +++ b/indra/llrender/llrender.cpp @@ -927,13 +927,7 @@ LLRender::LLRender() mMode(LLRender::TRIANGLES), mCurrTextureUnitIndex(0), mMaxAnisotropy(0.f) -{ - mBuffer = new LLVertexBuffer(immediate_mask, 0); - mBuffer->allocateBuffer(4096, 0, TRUE); - mBuffer->getVertexStrider(mVerticesp); - mBuffer->getTexCoord0Strider(mTexcoordsp); - mBuffer->getColorStrider(mColorsp); - +{ mTexUnits.reserve(LL_NUM_TEXTURE_LAYERS); for (U32 i = 0; i < LL_NUM_TEXTURE_LAYERS; i++) { @@ -964,6 +958,17 @@ LLRender::~LLRender() shutdown(); } +void LLRender::init() +{ + llassert_always(mBuffer.isNull()) ; + + mBuffer = new LLVertexBuffer(immediate_mask, 0); + mBuffer->allocateBuffer(4096, 0, TRUE); + mBuffer->getVertexStrider(mVerticesp); + mBuffer->getTexCoord0Strider(mTexcoordsp); + mBuffer->getColorStrider(mColorsp); +} + void LLRender::shutdown() { for (U32 i = 0; i < mTexUnits.size(); i++) @@ -979,6 +984,7 @@ void LLRender::shutdown() delete mLightState[i]; } mLightState.clear(); + mBuffer = NULL ; } void LLRender::refreshState(void) diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h index 9eedebe2ce..8f7ee30d87 100644 --- a/indra/llrender/llrender.h +++ b/indra/llrender/llrender.h @@ -310,6 +310,7 @@ public: LLRender(); ~LLRender(); + void init() ; void shutdown(); // Refreshes renderer state to the cached values diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index b6a252e8fa..8fd1193780 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -25,7 +25,6 @@ */ #include "linden_common.h" -#include "llmemory.h" #include #include "llsys.h" @@ -36,6 +35,7 @@ #include "llrender.h" #include "llvector4a.h" #include "llglslshader.h" +#include "llmemory.h" //============================================================================ @@ -46,6 +46,7 @@ LLVBOPool LLVertexBuffer::sDynamicVBOPool; LLVBOPool LLVertexBuffer::sStreamIBOPool; LLVBOPool LLVertexBuffer::sDynamicIBOPool; +LLPrivateMemoryPool* LLVertexBuffer::sPrivatePoolp = NULL ; U32 LLVertexBuffer::sBindCount = 0; U32 LLVertexBuffer::sSetCount = 0; S32 LLVertexBuffer::sCount = 0; @@ -443,6 +444,11 @@ void LLVertexBuffer::initClass(bool use_vbo, bool no_vbo_mapping) } sDisableVBOMapping = sEnableVBOs && no_vbo_mapping ; + + if(!sPrivatePoolp) + { + sPrivatePoolp = LLPrivateMemoryPoolManager::getInstance()->newPool(LLPrivateMemoryPool::STATIC) ; + } } //static @@ -472,7 +478,11 @@ void LLVertexBuffer::cleanupClass() unbind(); clientCopy(); // deletes GL buffers - //llassert_always(!sCount) ; + if(sPrivatePoolp) + { + LLPrivateMemoryPoolManager::getInstance()->deletePool(sPrivatePoolp) ; + sPrivatePoolp = NULL ; + } } void LLVertexBuffer::clientCopy(F64 max_time) @@ -722,7 +732,7 @@ void LLVertexBuffer::createGLBuffer() { static int gl_buffer_idx = 0; mGLBuffer = ++gl_buffer_idx; - mMappedData = (U8*) ll_aligned_malloc_16(size); + mMappedData = (U8*)ALLOCATE_MEM(sPrivatePoolp, size); } } @@ -756,7 +766,7 @@ void LLVertexBuffer::createGLIndices() } else { - mMappedIndexData = (U8*) ll_aligned_malloc_16(size); + mMappedIndexData = (U8*)ALLOCATE_MEM(sPrivatePoolp, size); static int gl_buffer_idx = 0; mGLIndices = ++gl_buffer_idx; } @@ -779,7 +789,7 @@ void LLVertexBuffer::destroyGLBuffer() } else { - ll_aligned_free_16(mMappedData); + FREE_MEM(sPrivatePoolp, mMappedData) ; mMappedData = NULL; mEmpty = TRUE; } @@ -808,7 +818,7 @@ void LLVertexBuffer::destroyGLIndices() } else { - ll_aligned_free_16(mMappedIndexData); + FREE_MEM(sPrivatePoolp, mMappedIndexData) ; mMappedIndexData = NULL; mEmpty = TRUE; } @@ -941,8 +951,8 @@ void LLVertexBuffer::resizeBuffer(S32 newnverts, S32 newnindices) { if (!useVBOs()) { - ll_aligned_free_16(mMappedData); - mMappedData = (U8*) ll_aligned_malloc_16(newsize); + FREE_MEM(sPrivatePoolp, mMappedData); + mMappedData = (U8*)ALLOCATE_MEM(sPrivatePoolp, newsize); } mResized = TRUE; } @@ -962,8 +972,8 @@ void LLVertexBuffer::resizeBuffer(S32 newnverts, S32 newnindices) { if (!useVBOs()) { - ll_aligned_free_16(mMappedIndexData); - mMappedIndexData = (U8*) ll_aligned_malloc_16(new_index_size); + FREE_MEM(sPrivatePoolp, mMappedIndexData) ; + mMappedIndexData = (U8*)ALLOCATE_MEM(sPrivatePoolp, new_index_size); } mResized = TRUE; } @@ -998,8 +1008,8 @@ void LLVertexBuffer::freeClientBuffer() { if(useVBOs() && sDisableVBOMapping && (mMappedData || mMappedIndexData)) { - ll_aligned_free_16(mMappedData) ; - ll_aligned_free_16(mMappedIndexData) ; + FREE_MEM(sPrivatePoolp, mMappedData) ; + FREE_MEM(sPrivatePoolp, mMappedIndexData) ; mMappedData = NULL ; mMappedIndexData = NULL ; } @@ -1009,7 +1019,7 @@ void LLVertexBuffer::allocateClientVertexBuffer() { if(!mMappedData) { - mMappedData = (U8*)ll_aligned_malloc_16(getSize()); + mMappedData = (U8*)ALLOCATE_MEM(sPrivatePoolp, getSize()); } } @@ -1017,7 +1027,7 @@ void LLVertexBuffer::allocateClientIndexBuffer() { if(!mMappedIndexData) { - mMappedIndexData = (U8*)ll_aligned_malloc_16(getIndicesSize()); + mMappedIndexData = (U8*)ALLOCATE_MEM(sPrivatePoolp, getIndicesSize()); } } @@ -1159,12 +1169,9 @@ U8* LLVertexBuffer::mapVertexBuffer(S32 type, S32 index, S32 count, bool map_ran { log_glerror(); - //check the availability of memory - U32 avail_phy_mem, avail_vir_mem; - LLMemoryInfo::getAvailableMemoryKB(avail_phy_mem, avail_vir_mem) ; - llinfos << "Available physical mwmory(KB): " << avail_phy_mem << llendl ; - llinfos << "Available virtual memory(KB): " << avail_vir_mem << llendl; - + //check the availability of memory + LLMemory::logMemoryInfo(TRUE) ; + if(!sDisableVBOMapping) { //-------------------- @@ -1324,6 +1331,7 @@ U8* LLVertexBuffer::mapIndexBuffer(S32 index, S32 count, bool map_range) if (!mMappedIndexData) { log_glerror(); + LLMemory::logMemoryInfo(TRUE) ; if(!sDisableVBOMapping) { diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index cc5d11e1c2..578cec3885 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -79,7 +79,7 @@ public: //============================================================================ // base class - +class LLPrivateMemoryPool ; class LLVertexBuffer : public LLRefCount { public: @@ -282,6 +282,9 @@ protected: void waitFence() const; +private: + static LLPrivateMemoryPool* sPrivatePoolp ; + public: static S32 sCount; static S32 sGLCount; diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt index 3cbccc5b49..79cdc73183 100644 --- a/indra/llui/CMakeLists.txt +++ b/indra/llui/CMakeLists.txt @@ -29,7 +29,7 @@ set(llui_SOURCE_FILES llaccordionctrl.cpp llaccordionctrltab.cpp llbadge.cpp - llbadgeholder.cpp + llbadgeholder.cpp llbadgeowner.cpp llbutton.cpp llcheckboxctrl.cpp @@ -113,6 +113,7 @@ set(llui_SOURCE_FILES llurlmatch.cpp llurlregistry.cpp llviewborder.cpp + llviewinject.cpp llviewmodel.cpp llview.cpp llviewquery.cpp @@ -125,7 +126,7 @@ set(llui_HEADER_FILES llaccordionctrl.h llaccordionctrltab.h llbadge.h - llbadgeholder.h + llbadgeholder.h llbadgeowner.h llbutton.h llcallbackmap.h @@ -169,7 +170,7 @@ set(llui_HEADER_FILES llnotificationslistener.h llnotificationsutil.h llnotificationtemplate.h - llnotificationvisibilityrule.h + llnotificationvisibilityrule.h llpanel.h llprogressbar.h llradiogroup.h @@ -219,6 +220,7 @@ set(llui_HEADER_FILES llurlmatch.h llurlregistry.h llviewborder.h + llviewinject.h llviewmodel.h llview.h llviewquery.h diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp index 6afe276379..4b0b7c561d 100644 --- a/indra/llui/llaccordionctrltab.cpp +++ b/indra/llui/llaccordionctrltab.cpp @@ -339,7 +339,7 @@ LLAccordionCtrlTab::Params::Params() ,fit_panel("fit_panel",true) ,selection_enabled("selection_enabled", false) { - mouse_opaque(false); + changeDefault(mouse_opaque, false); } LLAccordionCtrlTab::LLAccordionCtrlTab(const LLAccordionCtrlTab::Params&p) diff --git a/indra/llui/llbadge.cpp b/indra/llui/llbadge.cpp index fde3c53a65..8ede4e3468 100644 --- a/indra/llui/llbadge.cpp +++ b/indra/llui/llbadge.cpp @@ -27,11 +27,14 @@ #define LLBADGE_CPP #include "llbadge.h" +#include "llscrollcontainer.h" #include "lluictrlfactory.h" static LLDefaultChildRegistry::Register r("badge"); +static const S32 BADGE_OFFSET_NOT_SPECIFIED = 0x7FFFFFFF; + // Compiler optimization, generate extern template template class LLBadge* LLView::getChild(const std::string& name, BOOL recurse) const; @@ -46,14 +49,13 @@ LLBadge::Params::Params() , label_offset_horiz("label_offset_horiz") , label_offset_vert("label_offset_vert") , location("location", LLRelPos::TOP_LEFT) + , location_offset_hcenter("location_offset_hcenter") + , location_offset_vcenter("location_offset_vcenter") , location_percent_hcenter("location_percent_hcenter") , location_percent_vcenter("location_percent_vcenter") , padding_horiz("padding_horiz") , padding_vert("padding_vert") -{ - // We set a name here so the name isn't necessary in any xml files that use badges - name = "badge"; -} +{} bool LLBadge::Params::equals(const Params& a) const { @@ -70,6 +72,8 @@ bool LLBadge::Params::equals(const Params& a) const comp &= (label_offset_horiz() == a.label_offset_horiz()); comp &= (label_offset_vert() == a.label_offset_vert()); comp &= (location() == a.location()); + comp &= (location_offset_hcenter() == a.location_offset_hcenter()); + comp &= (location_offset_vcenter() == a.location_offset_vcenter()); comp &= (location_percent_hcenter() == a.location_percent_hcenter()); comp &= (location_percent_vcenter() == a.location_percent_vcenter()); comp &= (padding_horiz() == a.padding_horiz()); @@ -91,16 +95,29 @@ LLBadge::LLBadge(const LLBadge::Params& p) , mLabelOffsetHoriz(p.label_offset_horiz) , mLabelOffsetVert(p.label_offset_vert) , mLocation(p.location) + , mLocationOffsetHCenter(BADGE_OFFSET_NOT_SPECIFIED) + , mLocationOffsetVCenter(BADGE_OFFSET_NOT_SPECIFIED) , mLocationPercentHCenter(0.5f) , mLocationPercentVCenter(0.5f) , mPaddingHoriz(p.padding_horiz) , mPaddingVert(p.padding_vert) + , mParentScroller(NULL) { if (mImage.isNull()) { llwarns << "Badge: " << getName() << " with no image!" << llendl; } + if (p.location_offset_hcenter.isProvided()) + { + mLocationOffsetHCenter = p.location_offset_hcenter(); + } + + if (p.location_offset_vcenter.isProvided()) + { + mLocationOffsetVCenter = p.location_offset_vcenter(); + } + // // The following logic is to set the mLocationPercentHCenter and mLocationPercentVCenter // based on the Location enum and our horizontal and vertical location percentages. The @@ -144,6 +161,15 @@ bool LLBadge::addToView(LLView * view) if (child_added) { setShape(view->getLocalRect()); + + // Find a parent scroll container, if there is one in case we need it for positioning + + LLView * parent = mOwner.get(); + + while ((parent != NULL) && ((mParentScroller = dynamic_cast(parent)) == NULL)) + { + parent = parent->getParent(); + } } return child_added; @@ -200,22 +226,12 @@ void LLBadge::draw() if (owner_view) { - // - // Calculate badge position based on owner - // - - LLRect owner_rect; - owner_view->localRectToOtherView(owner_view->getLocalRect(), & owner_rect, this); - - F32 badge_center_x = owner_rect.mLeft + owner_rect.getWidth() * mLocationPercentHCenter; - F32 badge_center_y = owner_rect.mBottom + owner_rect.getHeight() * mLocationPercentVCenter; - // // Calculate badge size based on label text // LLWString badge_label_wstring = mLabel; - + S32 badge_label_begin_offset = 0; S32 badge_char_length = S32_MAX; S32 badge_pixel_length = S32_MAX; @@ -227,6 +243,77 @@ void LLBadge::draw() F32 badge_height = (2.0f * mPaddingVert) + mGLFont->getLineHeight(); + // + // Calculate badge position based on owner + // + + LLRect owner_rect; + owner_view->localRectToOtherView(owner_view->getLocalRect(), & owner_rect, this); + + S32 location_offset_horiz = mLocationOffsetHCenter; + S32 location_offset_vert = mLocationOffsetVCenter; + + // If we're in a scroll container, do some math to keep us in the same place on screen if applicable + if (mParentScroller != NULL) + { + LLRect visibleRect = mParentScroller->getVisibleContentRect(); + + if (mLocationOffsetHCenter != BADGE_OFFSET_NOT_SPECIFIED) + { + if (LLRelPos::IsRight(mLocation)) + { + location_offset_horiz += visibleRect.mRight; + } + else if (LLRelPos::IsLeft(mLocation)) + { + location_offset_horiz += visibleRect.mLeft; + } + else // center + { + location_offset_horiz += (visibleRect.mLeft + visibleRect.mRight) / 2; + } + } + + if (mLocationOffsetVCenter != BADGE_OFFSET_NOT_SPECIFIED) + { + if (LLRelPos::IsTop(mLocation)) + { + location_offset_vert += visibleRect.mTop; + } + else if (LLRelPos::IsBottom(mLocation)) + { + location_offset_vert += visibleRect.mBottom; + } + else // center + { + location_offset_vert += (visibleRect.mBottom + visibleRect.mTop) / 2; + } + } + } + + F32 badge_center_x; + F32 badge_center_y; + + // Compute x position + if (mLocationOffsetHCenter == BADGE_OFFSET_NOT_SPECIFIED) + { + badge_center_x = owner_rect.mLeft + owner_rect.getWidth() * mLocationPercentHCenter; + } + else + { + badge_center_x = location_offset_horiz; + } + + // Compute y position + if (mLocationOffsetVCenter == BADGE_OFFSET_NOT_SPECIFIED) + { + badge_center_y = owner_rect.mBottom + owner_rect.getHeight() * mLocationPercentVCenter; + } + else + { + badge_center_y = location_offset_vert; + } + // // Draw button image, if available. // Otherwise draw basic rectangular button. diff --git a/indra/llui/llbadge.h b/indra/llui/llbadge.h index f81ccdf0cd..4b21a71aaa 100644 --- a/indra/llui/llbadge.h +++ b/indra/llui/llbadge.h @@ -39,8 +39,9 @@ // Declarations // -class LLUICtrlFactory; class LLFontGL; +class LLScrollContainer; +class LLUICtrlFactory; // // Relative Position Alignment @@ -108,6 +109,8 @@ public: Optional< S32 > label_offset_vert; Optional< LLRelPos::Location > location; + Optional< S32 > location_offset_hcenter; + Optional< S32 > location_offset_vcenter; Optional< U32 > location_percent_hcenter; Optional< U32 > location_percent_vcenter; @@ -150,6 +153,8 @@ private: S32 mLabelOffsetVert; LLRelPos::Location mLocation; + S32 mLocationOffsetHCenter; + S32 mLocationOffsetVCenter; F32 mLocationPercentHCenter; F32 mLocationPercentVCenter; @@ -157,6 +162,8 @@ private: F32 mPaddingHoriz; F32 mPaddingVert; + + LLScrollContainer* mParentScroller; }; // Build time optimization, generate once in .cpp file diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp index caa353c354..a330b4c08b 100644 --- a/indra/llui/llbutton.cpp +++ b/indra/llui/llbutton.cpp @@ -104,11 +104,11 @@ LLButton::Params::Params() commit_on_return("commit_on_return", true), use_draw_context_alpha("use_draw_context_alpha", true), badge("badge"), - handle_right_mouse("handle_right_mouse") + handle_right_mouse("handle_right_mouse"), + held_down_delay("held_down_delay") { addSynonym(is_toggle, "toggle"); - held_down_delay.seconds = 0.5f; - initial_value.set(LLSD(false), false); + changeDefault(initial_value, LLSD(false)); } diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp index cddda03faf..89d8842393 100644 --- a/indra/llui/llcombobox.cpp +++ b/indra/llui/llcombobox.cpp @@ -525,15 +525,12 @@ void LLComboBox::createLineEditor(const LLComboBox::Params& p) else { mButton->setRect(rect); - mButton->setTabStop(TRUE); - mButton->setHAlign(LLFontGL::LEFT); mButton->setLabel(mLabel.getString()); if (mTextEntry) { mTextEntry->setVisible(FALSE); } - mButton->setFollowsAll(); } } diff --git a/indra/llui/llconsole.h b/indra/llui/llconsole.h index 62fe0297da..555096732a 100644 --- a/indra/llui/llconsole.h +++ b/indra/llui/llconsole.h @@ -54,7 +54,7 @@ public: persist_time("persist_time", 0.f), // forever font_size_index("font_size_index") { - mouse_opaque(false); + changeDefault(mouse_opaque, false); } }; protected: diff --git a/indra/llui/llcontainerview.h b/indra/llui/llcontainerview.h index 7d3d5cf787..e81600fd6c 100644 --- a/indra/llui/llcontainerview.h +++ b/indra/llui/llcontainerview.h @@ -50,7 +50,7 @@ public: show_label("show_label", FALSE), display_children("display_children", TRUE) { - mouse_opaque(false); + changeDefault(mouse_opaque, false); } }; diff --git a/indra/llui/lldraghandle.h b/indra/llui/lldraghandle.h index 7c56475e75..e095e577b1 100644 --- a/indra/llui/lldraghandle.h +++ b/indra/llui/lldraghandle.h @@ -51,8 +51,8 @@ public: drag_highlight_color("drag_highlight_color", LLUIColorTable::instance().getColor("DefaultHighlightLight")), drag_shadow_color("drag_shadow_color", LLUIColorTable::instance().getColor("DefaultShadowDark")) { - mouse_opaque(true); - follows.flags(FOLLOWS_ALL); + changeDefault(mouse_opaque, true); + changeDefault(follows.flags, FOLLOWS_ALL); } }; void initFromParams(const Params&); diff --git a/indra/llui/llfiltereditor.h b/indra/llui/llfiltereditor.h index 710699fdc1..3a05bc05a1 100644 --- a/indra/llui/llfiltereditor.h +++ b/indra/llui/llfiltereditor.h @@ -42,12 +42,7 @@ class LLFilterEditor : public LLSearchEditor { public: struct Params : public LLInitParam::Block - { - Params() - { - name = "filter_editor"; - } - }; + {}; protected: LLFilterEditor(const Params&); diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 95dc0ad7bd..81bd467ed5 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -183,7 +183,7 @@ LLFloater::Params::Params() open_callback("open_callback"), close_callback("close_callback") { - visible = false; + changeDefault(visible, false); } diff --git a/indra/llui/llflyoutbutton.h b/indra/llui/llflyoutbutton.h index 8d59380a00..36998eba2e 100644 --- a/indra/llui/llflyoutbutton.h +++ b/indra/llui/llflyoutbutton.h @@ -46,7 +46,7 @@ public: : action_button("action_button"), allow_text_entry("allow_text_entry") { - LLComboBox::Params::allow_text_entry = false; + changeDefault(LLComboBox::Params::allow_text_entry, false); } }; diff --git a/indra/llui/lliconctrl.cpp b/indra/llui/lliconctrl.cpp index 47f2cfaf89..30b79b4d20 100644 --- a/indra/llui/lliconctrl.cpp +++ b/indra/llui/lliconctrl.cpp @@ -43,10 +43,7 @@ LLIconCtrl::Params::Params() color("color"), use_draw_context_alpha("use_draw_context_alpha", true), scale_image("scale_image") -{ - tab_stop = false; - mouse_opaque = false; -} +{} LLIconCtrl::LLIconCtrl(const LLIconCtrl::Params& p) : LLUICtrl(p), diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp index a59247ba09..a250404292 100644 --- a/indra/llui/lllayoutstack.cpp +++ b/indra/llui/lllayoutstack.cpp @@ -115,9 +115,7 @@ LLLayoutStack::Params::Params() open_time_constant("open_time_constant", 0.02f), close_time_constant("close_time_constant", 0.03f), border_size("border_size", LLCachedControl(*LLUI::sSettingGroups["config"], "UIResizeBarHeight", 0)) -{ - name="stack"; -} +{} LLLayoutStack::LLLayoutStack(const LLLayoutStack::Params& p) : LLView(p), diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp index 9a82bb2834..23b9a6ac8a 100644 --- a/indra/llui/lllineeditor.cpp +++ b/indra/llui/lllineeditor.cpp @@ -114,10 +114,11 @@ LLLineEditor::Params::Params() text_pad_right("text_pad_right"), default_text("default_text") { - mouse_opaque = true; + changeDefault(mouse_opaque, true); addSynonym(select_on_focus, "select_all_on_focus_received"); addSynonym(border, "border"); addSynonym(label, "watermark_text"); + addSynonym(max_length.chars, "max_length"); } LLLineEditor::LLLineEditor(const LLLineEditor::Params& p) @@ -257,6 +258,7 @@ void LLLineEditor::autoCorrectText() void LLLineEditor::onFocusReceived() { + gEditMenuHandler = this; LLUICtrl::onFocusReceived(); updateAllowingLanguageInput(); } diff --git a/indra/llui/llmenubutton.cpp b/indra/llui/llmenubutton.cpp index eed0085273..50d59f79f4 100644 --- a/indra/llui/llmenubutton.cpp +++ b/indra/llui/llmenubutton.cpp @@ -35,9 +35,16 @@ static LLDefaultChildRegistry::Register r("menu_button"); +void LLMenuButton::MenuPositions::declareValues() +{ + declare("topleft", MP_TOP_LEFT); + declare("topright", MP_TOP_RIGHT); + declare("bottomleft", MP_BOTTOM_LEFT); +} LLMenuButton::Params::Params() -: menu_filename("menu_filename") +: menu_filename("menu_filename"), + position("position", MP_BOTTOM_LEFT) { } @@ -45,7 +52,7 @@ LLMenuButton::Params::Params() LLMenuButton::LLMenuButton(const LLMenuButton::Params& p) : LLButton(p), mIsMenuShown(false), - mMenuPosition(MP_BOTTOM_LEFT) + mMenuPosition(p.position) { std::string menu_filename = p.menu_filename; diff --git a/indra/llui/llmenubutton.h b/indra/llui/llmenubutton.h index 7b657595da..e2396e7fb2 100644 --- a/indra/llui/llmenubutton.h +++ b/indra/llui/llmenubutton.h @@ -35,21 +35,30 @@ class LLMenuButton : public LLButton { public: - struct Params - : public LLInitParam::Block - { - // filename for it's toggleable menu - Optional menu_filename; - - Params(); - }; - typedef enum e_menu_position { MP_TOP_LEFT, MP_TOP_RIGHT, MP_BOTTOM_LEFT } EMenuPosition; + + struct MenuPositions + : public LLInitParam::TypeValuesHelper + { + static void declareValues(); + }; + + struct Params + : public LLInitParam::Block + { + // filename for it's toggleable menu + Optional menu_filename; + Optional position; + + Params(); + }; + + boost::signals2::connection setMouseDownCallback( const mouse_signal_t::slot_type& cb ); diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp index 9bd91b0c73..456eeaded9 100644 --- a/indra/llui/llmenugl.cpp +++ b/indra/llui/llmenugl.cpp @@ -90,7 +90,6 @@ const S32 TEAROFF_SEPARATOR_HEIGHT_PIXELS = 10; const S32 MENU_ITEM_PADDING = 4; const std::string SEPARATOR_NAME("separator"); -const std::string SEPARATOR_LABEL( "-----------" ); const std::string VERTICAL_SEPARATOR_LABEL( "|" ); const std::string LLMenuGL::BOOLEAN_TRUE_PREFIX( "\xE2\x9C\x94" ); // U+2714 HEAVY CHECK MARK @@ -143,7 +142,7 @@ LLMenuItemGL::Params::Params() highlight_bg_color("highlight_bg_color"), highlight_fg_color("highlight_fg_color") { - mouse_opaque = true; + changeDefault(mouse_opaque, true); } // Default constructor @@ -560,8 +559,6 @@ void LLMenuItemGL::handleVisibilityChange(BOOL new_visibility) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ LLMenuItemSeparatorGL::Params::Params() { - name = "separator"; - label = SEPARATOR_LABEL; } LLMenuItemSeparatorGL::LLMenuItemSeparatorGL(const LLMenuItemSeparatorGL::Params& p) : @@ -749,30 +746,6 @@ U32 LLMenuItemTearOffGL::getNominalHeight( void ) const return TEAROFF_SEPARATOR_HEIGHT_PIXELS; } - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Class LLMenuItemBlankGL -// -// This class represents a blank, non-functioning item. -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -class LLMenuItemBlankGL : public LLMenuItemGL -{ -public: - struct Params : public LLInitParam::Block - { - Params() - { - name=""; - enabled = false; - } - }; - LLMenuItemBlankGL( const Params& p ) : LLMenuItemGL( p ) - {} - virtual void draw( void ) {} -}; - - ///============================================================================ /// Class LLMenuItemCallGL ///============================================================================ diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h index a1a67a5799..e93827bd44 100644 --- a/indra/llui/llmenugl.h +++ b/indra/llui/llmenugl.h @@ -372,17 +372,16 @@ public: drop_shadow("drop_shadow", true), bg_visible("bg_visible", true), create_jump_keys("create_jump_keys", false), + keep_fixed_size("keep_fixed_size", false), bg_color("bg_color", LLUIColorTable::instance().getColor( "MenuDefaultBgColor" )), scrollable("scrollable", false), max_scrollable_items("max_scrollable_items", U32_MAX), preferred_width("preferred_width", U32_MAX), shortcut_pad("shortcut_pad") - { addSynonym(bg_visible, "opaque"); addSynonym(bg_color, "color"); - - name = "menu"; + addSynonym(can_tear_off, "can_tear_off"); } }; @@ -650,7 +649,7 @@ public: { Params() { - visible = false; + changeDefault(visible, false); } }; @@ -707,16 +706,7 @@ class LLMenuBarGL : public LLMenuGL { public: struct Params : public LLInitParam::Block - { - Params() - { - can_tear_off = false; - keep_fixed_size = true; - horizontal_layout = true; - visible = true; - drop_shadow = false; - } - }; + {}; LLMenuBarGL( const Params& p ); virtual ~LLMenuBarGL(); @@ -834,13 +824,7 @@ class LLMenuItemTearOffGL : public LLMenuItemGL { public: struct Params : public LLInitParam::Block - { - Params() - { - name = "tear off"; - label = "~~~~~~~~~~~"; - } - }; + {}; LLMenuItemTearOffGL( const Params& ); diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp index 9052bc7d1d..70bcfb5b4f 100644 --- a/indra/llui/llmultislider.cpp +++ b/indra/llui/llmultislider.cpp @@ -66,11 +66,7 @@ LLMultiSlider::Params::Params() mouse_up_callback("mouse_up_callback"), thumb_width("thumb_width"), sliders("slider") -{ - name = "multi_slider_bar"; - mouse_opaque(true); - follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP); -} +{} LLMultiSlider::LLMultiSlider(const LLMultiSlider::Params& p) : LLF32UICtrl(p), diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp index 71ddb59585..c0b3506a5f 100644 --- a/indra/llui/llnotifications.cpp +++ b/indra/llui/llnotifications.cpp @@ -245,7 +245,6 @@ LLNotificationForm::LLNotificationForm(const std::string& name, const LLNotifica LLParamSDParser parser; parser.writeSD(mFormData, p.form_elements); - mFormData = mFormData[""]; if (!mFormData.isArray()) { // change existing contents to a one element array diff --git a/indra/llui/llnotificationtemplate.h b/indra/llui/llnotificationtemplate.h index eff572b553..ab777d37a5 100644 --- a/indra/llui/llnotificationtemplate.h +++ b/indra/llui/llnotificationtemplate.h @@ -88,10 +88,10 @@ struct LLNotificationTemplate { private: // this idiom allows - // + // // as well as // ... - Optional dummy_val; + Flag dummy_val; public: Multiple contexts; diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp index e3193bc352..a45b617c2e 100644 --- a/indra/llui/llpanel.cpp +++ b/indra/llui/llpanel.cpp @@ -90,7 +90,6 @@ LLPanel::Params::Params() visible_callback("visible_callback"), accepts_badge("accepts_badge") { - name = "panel"; addSynonym(background_visible, "bg_visible"); addSynonym(has_border, "border_visible"); addSynonym(label, "title"); diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp index 3a12debf7e..95a7d09382 100644 --- a/indra/llui/llradiogroup.cpp +++ b/indra/llui/llradiogroup.cpp @@ -74,9 +74,6 @@ LLRadioGroup::Params::Params() { addSynonym(items, "radio_item"); - name = "radio_group"; - mouse_opaque = true; - follows.flags = FOLLOWS_LEFT | FOLLOWS_TOP; // radio items are not tabbable until they are selected tab_stop = false; } @@ -96,7 +93,10 @@ void LLRadioGroup::initFromParams(const Params& p) { LLRadioGroup::ItemParams item_params(*it); - item_params.font.setIfNotProvided(mFont); // apply radio group font by default + if (!item_params.font.isProvided()) + { + item_params.font = mFont; // apply radio group font by default + } item_params.commit_callback.function = boost::bind(&LLRadioGroup::onClickButton, this, _1); item_params.from_xui = p.from_xui; if (p.from_xui) diff --git a/indra/llui/llscrollbar.cpp b/indra/llui/llscrollbar.cpp index 3a867a10a7..5d3bf7a670 100644 --- a/indra/llui/llscrollbar.cpp +++ b/indra/llui/llscrollbar.cpp @@ -63,9 +63,7 @@ LLScrollbar::Params::Params() right_button("right_button"), bg_visible("bg_visible", false), bg_color("bg_color", LLColor4::black) -{ - tab_stop = false; -} +{} LLScrollbar::LLScrollbar(const Params & p) : LLUICtrl(p), diff --git a/indra/llui/llscrollcontainer.cpp b/indra/llui/llscrollcontainer.cpp index 380c477eb2..fe3f688fc5 100644 --- a/indra/llui/llscrollcontainer.cpp +++ b/indra/llui/llscrollcontainer.cpp @@ -74,11 +74,7 @@ LLScrollContainer::Params::Params() min_auto_scroll_rate("min_auto_scroll_rate", 100), max_auto_scroll_rate("max_auto_scroll_rate", 1000), reserve_scroll_corner("reserve_scroll_corner", false) -{ - name = "scroll_container"; - mouse_opaque(true); - tab_stop(false); -} +{} // Default constructor @@ -227,6 +223,15 @@ BOOL LLScrollContainer::handleKeyHere(KEY key, MASK mask) return FALSE; } +BOOL LLScrollContainer::handleUnicodeCharHere(llwchar uni_char) +{ + if (mScrolledView && mScrolledView->handleUnicodeCharHere(uni_char)) + { + return TRUE; + } + return FALSE; +} + BOOL LLScrollContainer::handleScrollWheel( S32 x, S32 y, S32 clicks ) { // Give event to my child views - they may have scroll bars diff --git a/indra/llui/llscrollcontainer.h b/indra/llui/llscrollcontainer.h index 46a71a7e30..3aa79cc255 100644 --- a/indra/llui/llscrollcontainer.h +++ b/indra/llui/llscrollcontainer.h @@ -103,6 +103,7 @@ public: // LLView functionality virtual void reshape(S32 width, S32 height, BOOL called_from_parent = TRUE); virtual BOOL handleKeyHere(KEY key, MASK mask); + virtual BOOL handleUnicodeCharHere(llwchar uni_char); virtual BOOL handleScrollWheel( S32 x, S32 y, S32 clicks ); virtual BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, diff --git a/indra/llui/llscrollingpanellist.h b/indra/llui/llscrollingpanellist.h index 8f569c2a58..e8df176ec3 100644 --- a/indra/llui/llscrollingpanellist.h +++ b/indra/llui/llscrollingpanellist.h @@ -51,12 +51,7 @@ class LLScrollingPanelList : public LLUICtrl { public: struct Params : public LLInitParam::Block - { - Params() - { - name = "scrolling_panel_list"; - } - }; + {}; LLScrollingPanelList(const Params& p) : LLUICtrl(p) {} diff --git a/indra/llui/llscrolllistcolumn.cpp b/indra/llui/llscrolllistcolumn.cpp index 696e4a2bb1..07a6dfaa10 100644 --- a/indra/llui/llscrolllistcolumn.cpp +++ b/indra/llui/llscrolllistcolumn.cpp @@ -46,10 +46,7 @@ static LLWidgetNameRegistry::StaticRegistrar sRegisterColumnHeaderParams(&typeid //--------------------------------------------------------------------------- LLScrollColumnHeader::Params::Params() : column("column") -{ - name = "column_header"; - tab_stop(false); -} +{} LLScrollColumnHeader::LLScrollColumnHeader(const LLScrollColumnHeader::Params& p) diff --git a/indra/llui/llscrolllistcolumn.h b/indra/llui/llscrolllistcolumn.h index e2711ac75a..12baea8e0c 100644 --- a/indra/llui/llscrolllistcolumn.h +++ b/indra/llui/llscrolllistcolumn.h @@ -135,7 +135,7 @@ public: halign("halign", LLFontGL::LEFT) { // default choice to "dynamic_width" - width.dynamic_width = true; + changeDefault(width.dynamic_width, true); addSynonym(sort_column, "sort"); } diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index f4203a6647..0cf8fd5607 100644 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -147,12 +147,9 @@ LLScrollListCtrl::Params::Params() highlighted_color("highlighted_color"), contents(""), scroll_bar_bg_visible("scroll_bar_bg_visible"), - scroll_bar_bg_color("scroll_bar_bg_color") - , border("border") -{ - name = "scroll_list"; - mouse_opaque = true; -} + scroll_bar_bg_color("scroll_bar_bg_color"), + border("border") +{} LLScrollListCtrl::LLScrollListCtrl(const LLScrollListCtrl::Params& p) : LLUICtrl(p), @@ -2813,7 +2810,10 @@ LLScrollListItem* LLScrollListCtrl::addRow(LLScrollListItem *new_item, const LLS } S32 index = columnp->mIndex; - cell_p.width.setIfNotProvided(columnp->getWidth()); + if (!cell_p.width.isProvided()) + { + cell_p.width = columnp->getWidth(); + } LLScrollListCell* cell = LLScrollListCell::create(cell_p); diff --git a/indra/llui/llsdparam.cpp b/indra/llui/llsdparam.cpp index 9ad13054cb..04919e6991 100644 --- a/indra/llui/llsdparam.cpp +++ b/indra/llui/llsdparam.cpp @@ -183,7 +183,7 @@ LLSD* LLParamSDParser::getSDWriteNode(const parser_t::name_stack_t& name_stack) } } - LLSD* child_sd = &(*sd_to_write)[it->first]; + LLSD* child_sd = it->first.empty() ? sd_to_write : &(*sd_to_write)[it->first]; if (child_sd->isArray()) { diff --git a/indra/llui/llsearcheditor.h b/indra/llui/llsearcheditor.h index f5c3b532c4..c2d7916938 100644 --- a/indra/llui/llsearcheditor.h +++ b/indra/llui/llsearcheditor.h @@ -55,9 +55,7 @@ public: search_button_visible("search_button_visible"), clear_button("clear_button"), clear_button_visible("clear_button_visible") - { - name = "search_editor"; - } + {} }; void setCommitOnFocusLost(BOOL b) { if (mSearchEditor) mSearchEditor->setCommitOnFocusLost(b); } diff --git a/indra/llui/llslider.cpp b/indra/llui/llslider.cpp index 013950a5ad..db72234f94 100644 --- a/indra/llui/llslider.cpp +++ b/indra/llui/llslider.cpp @@ -54,9 +54,7 @@ LLSlider::Params::Params() track_highlight_vertical_image("track_highlight_vertical_image"), mouse_down_callback("mouse_down_callback"), mouse_up_callback("mouse_up_callback") -{ - follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP); -} +{} LLSlider::LLSlider(const LLSlider::Params& p) : LLF32UICtrl(p), diff --git a/indra/llui/llsliderctrl.cpp b/indra/llui/llsliderctrl.cpp index d760178e35..583ed1ed2e 100644 --- a/indra/llui/llsliderctrl.cpp +++ b/indra/llui/llsliderctrl.cpp @@ -76,8 +76,14 @@ LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p) } LLRect label_rect( left, top, label_width, bottom ); LLTextBox::Params params(p.slider_label); - params.rect.setIfNotProvided(label_rect); - params.font.setIfNotProvided(p.font); + if (!params.rect.isProvided()) + { + params.rect = label_rect; + } + if (!params.font.isProvided()) + { + params.font = p.font; + } params.initial_value(p.label()); mLabelBox = LLUICtrlFactory::create (params); addChild(mLabelBox); @@ -113,15 +119,33 @@ LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p) S32 slider_left = label_width ? label_width + sliderctrl_spacing : 0; LLSlider::Params slider_p(p.slider_bar); slider_p.name("slider_bar"); - slider_p.rect.setIfNotProvided(LLRect(slider_left,top,slider_right,bottom)); - slider_p.initial_value.setIfNotProvided(p.initial_value().asReal()); - slider_p.min_value.setIfNotProvided(p.min_value); - slider_p.max_value.setIfNotProvided(p.max_value); - slider_p.increment.setIfNotProvided(p.increment); - slider_p.orientation.setIfNotProvided(p.orientation); + if (!slider_p.rect.isProvided()) + { + slider_p.rect = LLRect(slider_left,top,slider_right,bottom); + } + if (!slider_p.initial_value.isProvided()) + { + slider_p.initial_value = p.initial_value().asReal(); + } + if (!slider_p.min_value.isProvided()) + { + slider_p.min_value = p.min_value; + } + if (!slider_p.max_value.isProvided()) + { + slider_p.max_value = p.max_value; + } + if (!slider_p.increment.isProvided()) + { + slider_p.increment = p.increment; + } + if (!slider_p.orientation.isProvided()) + { + slider_p.orientation = p.orientation; + } - slider_p.commit_callback.function(&LLSliderCtrl::onSliderCommit); - slider_p.control_name(p.control_name); + slider_p.commit_callback.function = &LLSliderCtrl::onSliderCommit; + slider_p.control_name = p.control_name; slider_p.mouse_down_callback( p.mouse_down_callback ); slider_p.mouse_up_callback( p.mouse_up_callback ); mSlider = LLUICtrlFactory::create (slider_p); @@ -134,8 +158,15 @@ LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p) if( p.can_edit_text() ) { LLLineEditor::Params line_p(p.value_editor); - line_p.rect.setIfNotProvided(text_rect); - line_p.font.setIfNotProvided(p.font); + if (!line_p.rect.isProvided()) + { + line_p.rect = text_rect; + } + if (!line_p.font.isProvided()) + { + line_p.font = p.font; + } + line_p.commit_callback.function(&LLSliderCtrl::onEditorCommit); line_p.prevalidate_callback(&LLTextValidate::validateFloat); mEditor = LLUICtrlFactory::create(line_p); @@ -149,8 +180,14 @@ LLSliderCtrl::LLSliderCtrl(const LLSliderCtrl::Params& p) else { LLTextBox::Params text_p(p.value_text); - text_p.rect.setIfNotProvided(text_rect); - text_p.font.setIfNotProvided(p.font); + if (!text_p.rect.isProvided()) + { + text_p.rect = text_rect; + } + if (!text_p.font.isProvided()) + { + text_p.font = p.font; + } mTextBox = LLUICtrlFactory::create(text_p); addChild(mTextBox); } diff --git a/indra/llui/llstatbar.h b/indra/llui/llstatbar.h index 62a9db82fe..513fff3234 100644 --- a/indra/llui/llstatbar.h +++ b/indra/llui/llstatbar.h @@ -65,7 +65,7 @@ public: show_mean("show_mean", TRUE), stat("stat") { - follows.flags(FOLLOWS_TOP | FOLLOWS_LEFT); + changeDefault(follows.flags, FOLLOWS_TOP | FOLLOWS_LEFT); } }; LLStatBar(const Params&); diff --git a/indra/llui/llstatview.h b/indra/llui/llstatview.h index 22a9fcd672..5abdc42448 100644 --- a/indra/llui/llstatview.h +++ b/indra/llui/llstatview.h @@ -46,7 +46,7 @@ public: Params() : setting("setting") { - follows.flags(FOLLOWS_TOP | FOLLOWS_LEFT); + changeDefault(follows.flags, FOLLOWS_TOP | FOLLOWS_LEFT); } }; diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp index 379d45e2a2..a6841c65e1 100644 --- a/indra/llui/lltabcontainer.cpp +++ b/indra/llui/lltabcontainer.cpp @@ -223,10 +223,7 @@ LLTabContainer::Params::Params() tab_icon_ctrl_pad("tab_icon_ctrl_pad", 0), use_ellipses("use_ellipses"), font_halign("halign") -{ - name(std::string("tab_container")); - mouse_opaque = false; -} +{} LLTabContainer::LLTabContainer(const LLTabContainer::Params& p) : LLPanel(p), diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp index 6390039794..bc6461a0c2 100644 --- a/indra/llui/lltooltip.cpp +++ b/indra/llui/lltooltip.cpp @@ -55,7 +55,7 @@ static LLDefaultChildRegistry::Register register_tooltip_view("to LLToolTipView::Params::Params() { - mouse_opaque = false; + changeDefault(mouse_opaque, false); } LLToolTipView::LLToolTipView(const LLToolTipView::Params& p) @@ -156,7 +156,7 @@ LLToolTip::Params::Params() web_based_media("web_based_media", false), media_playing("media_playing", false) { - chrome = true; + changeDefault(chrome, true); } LLToolTip::LLToolTip(const LLToolTip::Params& p) @@ -402,12 +402,12 @@ void LLToolTipMgr::createToolTip(const LLToolTip::Params& params) LLToolTip::Params tooltip_params(params); // block mouse events if there is a click handler registered (specifically, hover) - if (params.click_callback.isProvided()) + if (params.click_callback.isProvided() && !params.mouse_opaque.isProvided()) { // set mouse_opaque to true if it wasn't already set to something else // this prevents mouse down from going "through" the tooltip and ultimately // causing the tooltip to disappear - tooltip_params.mouse_opaque.setIfNotProvided(true); + tooltip_params.mouse_opaque = true; } tooltip_params.rect = LLRect (0, 1, 1, 0); diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp index d58df5801b..9b9e2ddb55 100644 --- a/indra/llui/lluictrl.cpp +++ b/indra/llui/lluictrl.cpp @@ -1045,3 +1045,9 @@ boost::signals2::connection LLUICtrl::setDoubleClickCallback( const mouse_signal if (!mDoubleClickSignal) mDoubleClickSignal = new mouse_signal_t(); return mDoubleClickSignal->connect(cb); } + +void LLUICtrl::addInfo(LLSD & info) +{ + LLView::addInfo(info); + info["value"] = getValue(); +} diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h index e36e94c04f..e60c52e1f6 100644 --- a/indra/llui/lluictrl.h +++ b/indra/llui/lluictrl.h @@ -302,7 +302,9 @@ protected: static F32 sActiveControlTransparency; static F32 sInactiveControlTransparency; - + + virtual void addInfo(LLSD & info); + private: BOOL mIsChrome; diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h index 499b97f52d..d345ad4cd0 100644 --- a/indra/llui/lluictrlfactory.h +++ b/indra/llui/lluictrlfactory.h @@ -104,14 +104,17 @@ private: public: ParamDefaults() { - // recursively initialize from base class param block - ((typename PARAM_BLOCK::base_block_t&)mPrototype).fillFrom(ParamDefaults::instance().get()); - // after initializing base classes, look up template file for this param block + // look up template file for this param block... const std::string* param_block_tag = getWidgetTag(&typeid(PARAM_BLOCK)); if (param_block_tag) - { - LLUICtrlFactory::loadWidgetTemplate(*param_block_tag, mPrototype); + { // ...and if it exists, back fill values using the most specific template first + PARAM_BLOCK params; + LLUICtrlFactory::loadWidgetTemplate(*param_block_tag, params); + mPrototype.fillFrom(params); } + // recursively fill from base class param block + ((typename PARAM_BLOCK::base_block_t&)mPrototype).fillFrom(ParamDefaults::instance().get()); + } const PARAM_BLOCK& get() { return mPrototype; } @@ -122,12 +125,12 @@ private: // base case for recursion, there are NO base classes of LLInitParam::BaseBlock template - class ParamDefaults : public LLSingleton > + class ParamDefaults : public LLSingleton > { public: - const LLInitParam::BaseBlock& get() { return mBaseBlock; } + const LLInitParam::BaseBlockWithFlags& get() { return mBaseBlock; } private: - LLInitParam::BaseBlock mBaseBlock; + LLInitParam::BaseBlockWithFlags mBaseBlock; }; public: diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp index 17d3b7be73..22e0a7a267 100644 --- a/indra/llui/llurlentry.cpp +++ b/indra/llui/llurlentry.cpp @@ -1157,7 +1157,7 @@ std::string LLUrlEntryWorldMap::getLocation(const std::string &url) const // LLUrlEntryNoLink::LLUrlEntryNoLink() { - mPattern = boost::regex(".*", + mPattern = boost::regex(".*?", boost::regex::perl|boost::regex::icase); } diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp index 72cd9d05c0..8720181b6b 100644 --- a/indra/llui/llview.cpp +++ b/indra/llui/llview.cpp @@ -31,7 +31,10 @@ #include "llview.h" #include +#include #include +#include +#include #include "llrender.h" #include "llevent.h" @@ -44,6 +47,7 @@ #include "v3color.h" #include "lluictrlfactory.h" #include "lltooltip.h" +#include "llsdutil.h" // for ui edit hack #include "llbutton.h" @@ -66,6 +70,8 @@ S32 LLView::sLastLeftXML = S32_MIN; S32 LLView::sLastBottomXML = S32_MIN; std::vector LLViewDrawContext::sDrawContextStack; +LLView::DrilldownFunc LLView::sDrilldown = + boost::bind(&LLView::pointInView, _1, _2, _3, HIT_TEST_USE_BOUNDING_RECT); //#if LL_DEBUG BOOL LLView::sIsDrawing = FALSE; @@ -346,13 +352,11 @@ void LLView::removeChild(LLView* child) LLView::ctrl_list_t LLView::getCtrlList() const { ctrl_list_t controls; - for(child_list_const_iter_t iter = mChildList.begin(); - iter != mChildList.end(); - iter++) + BOOST_FOREACH(LLView* viewp, mChildList) { - if((*iter)->isCtrl()) + if(viewp->isCtrl()) { - controls.push_back(static_cast(*iter)); + controls.push_back(static_cast(viewp)); } } return controls; @@ -428,6 +432,36 @@ BOOL LLView::isInEnabledChain() const return enabled; } +static void buildPathname(std::ostream& out, const LLView* view) +{ + if (! (view && view->getParent())) + { + return; // Don't include root in the path. + } + + buildPathname(out, view->getParent()); + + // Build pathname into ostream on the way back from recursion. + out << '/' << view->getName(); +} + +std::string LLView::getPathname() const +{ + std::ostringstream out; + buildPathname(out, this); + return out.str(); +} + +//static +std::string LLView::getPathname(const LLView* view) +{ + if (! view) + { + return "NULL"; + } + return view->getPathname(); +} + // virtual BOOL LLView::canFocusChildren() const { @@ -574,9 +608,8 @@ void LLView::deleteAllChildren() void LLView::setAllChildrenEnabled(BOOL b) { - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) + BOOST_FOREACH(LLView* viewp, mChildList) { - LLView* viewp = *child_it; viewp->setEnabled(b); } } @@ -602,9 +635,8 @@ void LLView::setVisible(BOOL visible) // virtual void LLView::handleVisibilityChange ( BOOL new_visibility ) { - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) + BOOST_FOREACH(LLView* viewp, mChildList) { - LLView* viewp = *child_it; // only views that are themselves visible will have their overall visibility affected by their ancestors if (viewp->getVisible()) { @@ -646,56 +678,178 @@ void LLView::onMouseLeave(S32 x, S32 y, MASK mask) //llinfos << "Mouse left " << getName() << llendl; } +bool LLView::visibleAndContains(S32 local_x, S32 local_y) +{ + return sDrilldown(this, local_x, local_y) + && getVisible(); +} + +bool LLView::visibleEnabledAndContains(S32 local_x, S32 local_y) +{ + return visibleAndContains(local_x, local_y) + && getEnabled(); +} + +void LLView::logMouseEvent() +{ + if (sDebugMouseHandling) + { + sMouseHandlerMessage = std::string("/") + mName + sMouseHandlerMessage; + } +} + +template +LLView* LLView::childrenHandleCharEvent(const std::string& desc, const METHOD& method, + CHARTYPE c, MASK mask) +{ + if ( getVisible() && getEnabled() ) + { + BOOST_FOREACH(LLView* viewp, mChildList) + { + if ((viewp->*method)(c, mask, TRUE)) + { + if (LLView::sDebugKeys) + { + llinfos << desc << " handled by " << viewp->getName() << llendl; + } + return viewp; + } + } + } + return NULL; +} + +// XDATA might be MASK, or S32 clicks +template +LLView* LLView::childrenHandleMouseEvent(const METHOD& method, S32 x, S32 y, XDATA extra) +{ + BOOST_FOREACH(LLView* viewp, mChildList) + { + S32 local_x = x - viewp->getRect().mLeft; + S32 local_y = y - viewp->getRect().mBottom; + + if (!viewp->visibleEnabledAndContains(local_x, local_y)) + { + continue; + } + + if ((viewp->*method)( local_x, local_y, extra ) + || viewp->blockMouseEvent( local_x, local_y )) + { + viewp->logMouseEvent(); + return viewp; + } + } + return NULL; +} LLView* LLView::childrenHandleToolTip(S32 x, S32 y, MASK mask) { - LLView* handled_view = NULL; - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) + BOOST_FOREACH(LLView* viewp, mChildList) { - LLView* viewp = *child_it; S32 local_x = x - viewp->getRect().mLeft; S32 local_y = y - viewp->getRect().mBottom; - if(!viewp->pointInView(local_x, local_y) - || !viewp->getVisible()) + // Differs from childrenHandleMouseEvent() in that we want to offer + // tooltips even for disabled widgets. + if(!viewp->visibleAndContains(local_x, local_y)) { continue; } - if (viewp->handleToolTip(local_x, local_y, mask) ) + if (viewp->handleToolTip(local_x, local_y, mask) + || viewp->blockMouseEvent(local_x, local_y)) { - if (sDebugMouseHandling) - { - sMouseHandlerMessage = std::string("/") + viewp->mName + sMouseHandlerMessage; - } - - handled_view = viewp; - break; - } - - if (viewp->blockMouseEvent(local_x, local_y)) - { - handled_view = viewp; - break; + viewp->logMouseEvent(); + return viewp; } } - return handled_view; + return NULL; } - -LLView* LLView::childFromPoint(S32 x, S32 y) +LLView* LLView::childrenHandleDragAndDrop(S32 x, S32 y, MASK mask, + BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data, + EAcceptance* accept, + std::string& tooltip_msg) { - if (!getVisible() ) - return false; - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) + // default to not accepting drag and drop, will be overridden by handler + *accept = ACCEPT_NO; + + BOOST_FOREACH(LLView* viewp, mChildList) { - LLView* viewp = *child_it; S32 local_x = x - viewp->getRect().mLeft; S32 local_y = y - viewp->getRect().mBottom; - if (!viewp->pointInView(local_x, local_y) - || !viewp->getVisible() ) + if( !viewp->visibleEnabledAndContains(local_x, local_y)) { continue; } + + // Differs from childrenHandleMouseEvent() simply in that this virtual + // method call diverges pretty radically from the usual (x, y, int). + if (viewp->handleDragAndDrop(local_x, local_y, mask, drop, + cargo_type, + cargo_data, + accept, + tooltip_msg) + || viewp->blockMouseEvent(local_x, local_y)) + { + return viewp; + } + } + return NULL; +} + +LLView* LLView::childrenHandleHover(S32 x, S32 y, MASK mask) +{ + BOOST_FOREACH(LLView* viewp, mChildList) + { + S32 local_x = x - viewp->getRect().mLeft; + S32 local_y = y - viewp->getRect().mBottom; + if(!viewp->visibleEnabledAndContains(local_x, local_y)) + { + continue; + } + + // This call differentiates this method from childrenHandleMouseEvent(). + LLUI::sWindow->setCursor(viewp->getHoverCursor()); + + if (viewp->handleHover(local_x, local_y, mask) + || viewp->blockMouseEvent(local_x, local_y)) + { + viewp->logMouseEvent(); + return viewp; + } + } + return NULL; +} + +LLView* LLView::childFromPoint(S32 x, S32 y, bool recur) +{ + if (!getVisible()) + return false; + + BOOST_FOREACH(LLView* viewp, mChildList) + { + S32 local_x = x - viewp->getRect().mLeft; + S32 local_y = y - viewp->getRect().mBottom; + if (!viewp->visibleAndContains(local_x, local_y)) + { + continue; + } + // Here we've found the first (frontmost) visible child at this level + // containing the specified point. Is the caller asking us to drill + // down and return the innermost leaf child at this point, or just the + // top-level child? + if (recur) + { + LLView* leaf(viewp->childFromPoint(local_x, local_y, recur)); + // Maybe viewp is already a leaf LLView, or maybe it has children + // but this particular (x, y) point falls between them. If the + // recursive call returns non-NULL, great, use that; else just use + // viewp. + return leaf? leaf : viewp; + } return viewp; } @@ -821,45 +975,6 @@ BOOL LLView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, return childrenHandleDragAndDrop( x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg) != NULL; } -LLView* LLView::childrenHandleDragAndDrop(S32 x, S32 y, MASK mask, - BOOL drop, - EDragAndDropType cargo_type, - void* cargo_data, - EAcceptance* accept, - std::string& tooltip_msg) -{ - LLView* handled_view = NULL; - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) - { - LLView* viewp = *child_it; - S32 local_x = x - viewp->getRect().mLeft; - S32 local_y = y - viewp->getRect().mBottom; - if( !viewp->pointInView(local_x, local_y) || - !viewp->getVisible() || - !viewp->getEnabled()) - { - continue; - } - if (viewp->handleDragAndDrop(local_x, local_y, mask, drop, - cargo_type, - cargo_data, - accept, - tooltip_msg)) - { - handled_view = viewp; - break; - } - - if (viewp->blockMouseEvent(x, y)) - { - *accept = ACCEPT_NO; - handled_view = viewp; - break; - } - } - return handled_view; -} - void LLView::onMouseCaptureLost() { } @@ -909,391 +1024,57 @@ BOOL LLView::handleMiddleMouseUp(S32 x, S32 y, MASK mask) return childrenHandleMiddleMouseUp( x, y, mask ) != NULL; } - LLView* LLView::childrenHandleScrollWheel(S32 x, S32 y, S32 clicks) { - LLView* handled_view = NULL; - if (getVisible() && getEnabled() ) - { - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) - { - LLView* viewp = *child_it; - S32 local_x = x - viewp->getRect().mLeft; - S32 local_y = y - viewp->getRect().mBottom; - if (!viewp->pointInView(local_x, local_y) - || !viewp->getVisible() - || !viewp->getEnabled()) - { - continue; - } - - if (viewp->handleScrollWheel( local_x, local_y, clicks )) - { - if (sDebugMouseHandling) - { - sMouseHandlerMessage = std::string("/") + viewp->mName + sMouseHandlerMessage; - } - - handled_view = viewp; - break; - } - } - } - return handled_view; -} - -LLView* LLView::childrenHandleHover(S32 x, S32 y, MASK mask) -{ - LLView* handled_view = NULL; - if (getVisible() && getEnabled() ) - { - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) - { - LLView* viewp = *child_it; - S32 local_x = x - viewp->getRect().mLeft; - S32 local_y = y - viewp->getRect().mBottom; - if(!viewp->pointInView(local_x, local_y) - || !viewp->getVisible() - || !viewp->getEnabled()) - { - continue; - } - - if (viewp->handleHover(local_x, local_y, mask) ) - { - if (sDebugMouseHandling) - { - sMouseHandlerMessage = std::string("/") + viewp->mName + sMouseHandlerMessage; - } - - handled_view = viewp; - break; - } - - if (viewp->blockMouseEvent(local_x, local_y)) - { - LLUI::sWindow->setCursor(viewp->getHoverCursor()); - - handled_view = viewp; - break; - } - } - } - return handled_view; + return childrenHandleMouseEvent(&LLView::handleScrollWheel, x, y, clicks); } // Called during downward traversal LLView* LLView::childrenHandleKey(KEY key, MASK mask) { - LLView* handled_view = NULL; - - if ( getVisible() && getEnabled() ) - { - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) - { - LLView* viewp = *child_it; - if (viewp->handleKey(key, mask, TRUE)) - { - if (LLView::sDebugKeys) - { - llinfos << "Key handled by " << viewp->getName() << llendl; - } - handled_view = viewp; - break; - } - } - } - - return handled_view; + return childrenHandleCharEvent("Key", &LLView::handleKey, key, mask); } // Called during downward traversal LLView* LLView::childrenHandleUnicodeChar(llwchar uni_char) { - LLView* handled_view = NULL; - - if ( getVisible() && getEnabled() ) - { - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) - { - LLView* viewp = *child_it; - if (viewp->handleUnicodeChar(uni_char, TRUE)) - { - if (LLView::sDebugKeys) - { - llinfos << "Unicode character handled by " << viewp->getName() << llendl; - } - handled_view = viewp; - break; - } - } - } - - return handled_view; + return childrenHandleCharEvent("Unicode character", &LLView::handleUnicodeCharWithDummyMask, + uni_char, MASK_NONE); } LLView* LLView::childrenHandleMouseDown(S32 x, S32 y, MASK mask) { - LLView* handled_view = NULL; - - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) - { - LLView* viewp = *child_it; - S32 local_x = x - viewp->getRect().mLeft; - S32 local_y = y - viewp->getRect().mBottom; - - if (!viewp->pointInView(local_x, local_y) - || !viewp->getVisible() - || !viewp->getEnabled()) - { - continue; - } - - if(viewp->handleMouseDown( local_x, local_y, mask )) - { - if (sDebugMouseHandling) - { - sMouseHandlerMessage = std::string("/") + viewp->mName + sMouseHandlerMessage; - } - handled_view = viewp; - break; - } - - if(viewp->blockMouseEvent(local_x, local_y)) - { - handled_view = viewp; - break; - } - } - return handled_view; + return childrenHandleMouseEvent(&LLView::handleMouseDown, x, y, mask); } LLView* LLView::childrenHandleRightMouseDown(S32 x, S32 y, MASK mask) { - LLView* handled_view = NULL; - - if (getVisible() && getEnabled() ) - { - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) - { - LLView* viewp = *child_it; - S32 local_x = x - viewp->getRect().mLeft; - S32 local_y = y - viewp->getRect().mBottom; - - if (!viewp->pointInView(local_x, local_y) - || !viewp->getVisible() - || !viewp->getEnabled()) - { - continue; - } - - if (viewp->handleRightMouseDown( local_x, local_y, mask )) - { - if (sDebugMouseHandling) - { - sMouseHandlerMessage = std::string("/") + viewp->mName + sMouseHandlerMessage; - } - - handled_view = viewp; - break; - } - - if (viewp->blockMouseEvent(local_x, local_y)) - { - handled_view = viewp; - break; - } - } - } - return handled_view; + return childrenHandleMouseEvent(&LLView::handleRightMouseDown, x, y, mask); } LLView* LLView::childrenHandleMiddleMouseDown(S32 x, S32 y, MASK mask) { - LLView* handled_view = NULL; - - if (getVisible() && getEnabled() ) - { - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) - { - LLView* viewp = *child_it; - S32 local_x = x - viewp->getRect().mLeft; - S32 local_y = y - viewp->getRect().mBottom; - if (!viewp->pointInView(local_x, local_y) - || !viewp->getVisible() - || !viewp->getEnabled()) - { - continue; - } - - if(viewp->handleMiddleMouseDown( local_x, local_y, mask )) - { - if (sDebugMouseHandling) - { - sMouseHandlerMessage = std::string("/") + viewp->mName + sMouseHandlerMessage; - } - handled_view = viewp; - break; - } - - if (viewp->blockMouseEvent(local_x, local_y)) - { - handled_view = viewp; - break; - } - } - } - return handled_view; + return childrenHandleMouseEvent(&LLView::handleMiddleMouseDown, x, y, mask); } LLView* LLView::childrenHandleDoubleClick(S32 x, S32 y, MASK mask) { - LLView* handled_view = NULL; - - if (getVisible() && getEnabled() ) - { - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) - { - LLView* viewp = *child_it; - S32 local_x = x - viewp->getRect().mLeft; - S32 local_y = y - viewp->getRect().mBottom; - - if (!viewp->pointInView(local_x, local_y) - || !viewp->getVisible() - || !viewp->getEnabled()) - { - continue; - } - - if (viewp->handleDoubleClick( local_x, local_y, mask )) - { - if (sDebugMouseHandling) - { - sMouseHandlerMessage = std::string("/") + viewp->mName + sMouseHandlerMessage; - } - handled_view = viewp; - break; - } - - if (viewp->blockMouseEvent(local_x, local_y)) - { - handled_view = viewp; - break; - } - } - } - return handled_view; + return childrenHandleMouseEvent(&LLView::handleDoubleClick, x, y, mask); } LLView* LLView::childrenHandleMouseUp(S32 x, S32 y, MASK mask) { - LLView* handled_view = NULL; - if( getVisible() && getEnabled() ) - { - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) - { - LLView* viewp = *child_it; - S32 local_x = x - viewp->getRect().mLeft; - S32 local_y = y - viewp->getRect().mBottom; - if (!viewp->pointInView(local_x, local_y) - || !viewp->getVisible() - || !viewp->getEnabled()) - { - continue; - } - - if (viewp->handleMouseUp( local_x, local_y, mask )) - { - if (sDebugMouseHandling) - { - sMouseHandlerMessage = std::string("/") + viewp->mName + sMouseHandlerMessage; - } - handled_view = viewp; - break; - } - - if (viewp->blockMouseEvent(local_x, local_y)) - { - handled_view = viewp; - break; - } - } - } - return handled_view; + return childrenHandleMouseEvent(&LLView::handleMouseUp, x, y, mask); } LLView* LLView::childrenHandleRightMouseUp(S32 x, S32 y, MASK mask) { - LLView* handled_view = NULL; - if( getVisible() && getEnabled() ) - { - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) - { - LLView* viewp = *child_it; - S32 local_x = x - viewp->getRect().mLeft; - S32 local_y = y - viewp->getRect().mBottom; - if (!viewp->pointInView(local_x, local_y) - || !viewp->getVisible() - || !viewp->getEnabled() ) - { - continue; - } - - if(viewp->handleRightMouseUp( local_x, local_y, mask )) - { - if (sDebugMouseHandling) - { - sMouseHandlerMessage = std::string("/") + viewp->mName + sMouseHandlerMessage; - } - handled_view = viewp; - break; - } - - if(viewp->blockMouseEvent(local_x, local_y)) - { - handled_view = viewp; - break; - } - } - } - return handled_view; + return childrenHandleMouseEvent(&LLView::handleRightMouseUp, x, y, mask); } LLView* LLView::childrenHandleMiddleMouseUp(S32 x, S32 y, MASK mask) { - LLView* handled_view = NULL; - if( getVisible() && getEnabled() ) - { - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) - { - LLView* viewp = *child_it; - S32 local_x = x - viewp->getRect().mLeft; - S32 local_y = y - viewp->getRect().mBottom; - if (!viewp->pointInView(local_x, local_y) - || !viewp->getVisible() - || !viewp->getEnabled()) - { - continue; - } - - if(viewp->handleMiddleMouseUp( local_x, local_y, mask )) - { - if (sDebugMouseHandling) - { - sMouseHandlerMessage = std::string("/") + viewp->mName + sMouseHandlerMessage; - } - handled_view = viewp; - break; - } - - if (viewp->blockMouseEvent(local_x, local_y)) - { - handled_view = viewp; - break; - } - } - } - return handled_view; + return childrenHandleMouseEvent(&LLView::handleMiddleMouseUp, x, y, mask); } void LLView::draw() @@ -1466,9 +1247,8 @@ void LLView::reshape(S32 width, S32 height, BOOL called_from_parent) mRect.mTop = getRect().mBottom + height; // move child views according to reshape flags - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) + BOOST_FOREACH(LLView* viewp, mChildList) { - LLView* viewp = *child_it; LLRect child_rect( viewp->mRect ); if (viewp->followsRight() && viewp->followsLeft()) @@ -1531,10 +1311,8 @@ LLRect LLView::calcBoundingRect() { LLRect local_bounding_rect = LLRect::null; - child_list_const_iter_t child_it; - for ( child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) + BOOST_FOREACH(LLView* childp, mChildList) { - LLView* childp = *child_it; // ignore invisible and "top" children when calculating bounding rect // such as combobox popups if (!childp->getVisible() || childp == gFocusMgr.getTopCtrl()) @@ -1699,11 +1477,9 @@ LLView* LLView::findChildView(const std::string& name, BOOL recurse) const //richard: should we allow empty names? //if(name.empty()) // return NULL; - child_list_const_iter_t child_it; // Look for direct children *first* - for ( child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) + BOOST_FOREACH(LLView* childp, mChildList) { - LLView* childp = *child_it; llassert(childp); if (childp->getName() == name) { @@ -1713,9 +1489,8 @@ LLView* LLView::findChildView(const std::string& name, BOOL recurse) const if (recurse) { // Look inside each child as well. - for ( child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) + BOOST_FOREACH(LLView* childp, mChildList) { - LLView* childp = *child_it; llassert(childp); LLView* viewp = childp->findChildView(name, recurse); if ( viewp ) @@ -2491,7 +2266,7 @@ void LLView::applyXUILayout(LLView::Params& p, LLView* parent) { LLRect parent_rect = parent->getLocalRect(); // overwrite uninitialized rect params, using context - LLRect last_rect = parent->getLocalRect(); + LLRect default_rect = parent->getLocalRect(); bool layout_topleft = (p.layout() == "topleft"); @@ -2515,15 +2290,13 @@ void LLView::applyXUILayout(LLView::Params& p, LLView* parent) p.rect.height = MIN_WIDGET_HEIGHT; } - last_rect.translate(0, last_rect.getHeight()); + default_rect.translate(0, default_rect.getHeight()); // If there was a recently constructed child, use its rectangle - get_last_child_rect(parent, &last_rect); + get_last_child_rect(parent, &default_rect); if (layout_topleft) { - p.bottom_delta.setIfNotProvided(0, false); - // Invert the sense of bottom_delta for topleft layout if (p.bottom_delta.isProvided()) { @@ -2536,33 +2309,44 @@ void LLView::applyXUILayout(LLView::Params& p, LLView* parent) else if (p.top_delta.isProvided()) { p.bottom_delta = - -(p.top_delta + p.rect.height - last_rect.getHeight()); + -(p.top_delta + p.rect.height - default_rect.getHeight()); } - else if (!p.bottom_delta.isProvided() - && !p.left_delta.isProvided() - && !p.top_pad.isProvided() + else if (!p.left_delta.isProvided() && !p.left_pad.isProvided()) { // set default position is just below last rect p.bottom_delta.set(-(p.rect.height + VPAD), false); } + else + { + p.bottom_delta.set(0, false); + } // default to same left edge - p.left_delta.setIfNotProvided(0, false); + if (!p.left_delta.isProvided()) + { + p.left_delta.set(0, false); + } if (p.left_pad.isProvided()) { // left_pad is based on prior widget's right edge - p.left_delta.set(p.left_pad + last_rect.getWidth(), false); + p.left_delta.set(p.left_pad + default_rect.getWidth(), false); } - last_rect.translate(p.left_delta, p.bottom_delta); + default_rect.translate(p.left_delta, p.bottom_delta); } else { // set default position is just below last rect - p.bottom_delta.setIfNotProvided(-(p.rect.height + VPAD), false); - p.left_delta.setIfNotProvided(0, false); - last_rect.translate(p.left_delta, p.bottom_delta); + if (!p.bottom_delta.isProvided()) + { + p.bottom_delta.set(-(p.rect.height + VPAD), false); + } + if (!p.left_delta.isProvided()) + { + p.left_delta.set(0, false); + } + default_rect.translate(p.left_delta, p.bottom_delta); } // this handles case where *both* x and x_delta are provided @@ -2573,12 +2357,38 @@ void LLView::applyXUILayout(LLView::Params& p, LLView* parent) // selectively apply rectangle defaults, making sure that // params are not flagged as having been "provided" // as rect params are overconstrained and rely on provided flags - p.rect.left.setIfNotProvided(last_rect.mLeft, false); - p.rect.bottom.setIfNotProvided(last_rect.mBottom, false); - p.rect.top.setIfNotProvided(last_rect.mTop, false); - p.rect.right.setIfNotProvided(last_rect.mRight, false); - p.rect.width.setIfNotProvided(last_rect.getWidth(), false); - p.rect.height.setIfNotProvided(last_rect.getHeight(), false); + if (!p.rect.left.isProvided()) + { + p.rect.left.set(default_rect.mLeft, false); + //HACK: get around the fact that setting a rect param component value won't invalidate the existing rect object value + p.rect.paramChanged(p.rect.left, true); + } + if (!p.rect.bottom.isProvided()) + { + p.rect.bottom.set(default_rect.mBottom, false); + p.rect.paramChanged(p.rect.bottom, true); + } + if (!p.rect.top.isProvided()) + { + p.rect.top.set(default_rect.mTop, false); + p.rect.paramChanged(p.rect.top, true); + } + if (!p.rect.right.isProvided()) + { + p.rect.right.set(default_rect.mRight, false); + p.rect.paramChanged(p.rect.right, true); + + } + if (!p.rect.width.isProvided()) + { + p.rect.width.set(default_rect.getWidth(), false); + p.rect.paramChanged(p.rect.width, true); + } + if (!p.rect.height.isProvided()) + { + p.rect.height.set(default_rect.getHeight(), false); + p.rect.paramChanged(p.rect.height, true); + } } } @@ -2821,9 +2631,9 @@ S32 LLView::notifyParent(const LLSD& info) bool LLView::notifyChildren(const LLSD& info) { bool ret = false; - for ( child_list_iter_t child_it = mChildList.begin(); child_it != mChildList.end(); ++child_it) + BOOST_FOREACH(LLView* childp, mChildList) { - ret |= (*child_it)->notifyChildren(info); + ret = ret || childp->notifyChildren(info); } return ret; } @@ -2843,3 +2653,24 @@ const LLViewDrawContext& LLViewDrawContext::getCurrentContext() return *sDrawContextStack.back(); } + +LLSD LLView::getInfo(void) +{ + LLSD info; + addInfo(info); + return info; +} + +void LLView::addInfo(LLSD & info) +{ + info["path"] = getPathname(); + info["class"] = typeid(*this).name(); + info["visible"] = getVisible(); + info["visible_chain"] = isInVisibleChain(); + info["enabled"] = getEnabled(); + info["enabled_chain"] = isInEnabledChain(); + info["available"] = isAvailable(); + LLRect rect(calcScreenRect()); + info["rect"] = LLSDMap("left", rect.mLeft)("top", rect.mTop) + ("right", rect.mRight)("bottom", rect.mBottom); +} diff --git a/indra/llui/llview.h b/indra/llui/llview.h index 594a5eec6b..fe15307a5d 100644 --- a/indra/llui/llview.h +++ b/indra/llui/llview.h @@ -50,6 +50,8 @@ #include "llfocusmgr.h" #include +#include +#include class LLSD; @@ -437,12 +439,15 @@ public: /*virtual*/ void screenPointToLocal(S32 screen_x, S32 screen_y, S32* local_x, S32* local_y) const; /*virtual*/ void localPointToScreen(S32 local_x, S32 local_y, S32* screen_x, S32* screen_y) const; - virtual LLView* childFromPoint(S32 x, S32 y); + virtual LLView* childFromPoint(S32 x, S32 y, bool recur=false); // view-specific handlers virtual void onMouseEnter(S32 x, S32 y, MASK mask); virtual void onMouseLeave(S32 x, S32 y, MASK mask); + std::string getPathname() const; + // static method handles NULL pointer too + static std::string getPathname(const LLView*); template T* findChild(const std::string& name, BOOL recurse = TRUE) const { @@ -511,11 +516,17 @@ public: virtual S32 notify(const LLSD& info) { return 0;}; static const LLViewDrawContext& getDrawContext(); + + // Returns useful information about this ui widget. + LLSD getInfo(void); protected: void drawDebugRect(); void drawChild(LLView* childp, S32 x_offset = 0, S32 y_offset = 0, BOOL force_draw = FALSE); void drawChildren(); + bool visibleAndContains(S32 local_x, S32 local_Y); + bool visibleEnabledAndContains(S32 local_x, S32 local_y); + void logMouseEvent(); LLView* childrenHandleKey(KEY key, MASK mask); LLView* childrenHandleUnicodeChar(llwchar uni_char); @@ -538,9 +549,24 @@ protected: LLView* childrenHandleToolTip(S32 x, S32 y, MASK mask); ECursorType mHoverCursor; - + + virtual void addInfo(LLSD & info); private: + template + LLView* childrenHandleMouseEvent(const METHOD& method, S32 x, S32 y, XDATA extra); + + template + LLView* childrenHandleCharEvent(const std::string& desc, const METHOD& method, + CHARTYPE c, MASK mask); + + // adapter to blur distinction between handleKey() and handleUnicodeChar() + // for childrenHandleCharEvent() + BOOL handleUnicodeCharWithDummyMask(llwchar uni_char, MASK /* dummy */, BOOL from_parent) + { + return handleUnicodeChar(uni_char, from_parent); + } + LLView* mParentView; child_list_t mChildList; @@ -582,7 +608,35 @@ private: LLView& getDefaultWidgetContainer() const; + // This allows special mouse-event targeting logic for testing. + typedef boost::function DrilldownFunc; + static DrilldownFunc sDrilldown; + public: + // This is the only public accessor to alter sDrilldown. This is not + // an accident. The intended usage pattern is like: + // { + // LLView::TemporaryDrilldownFunc scoped_func(myfunctor); + // // ... test with myfunctor ... + // } // exiting block restores original LLView::sDrilldown + class TemporaryDrilldownFunc: public boost::noncopyable + { + public: + TemporaryDrilldownFunc(const DrilldownFunc& func): + mOldDrilldown(sDrilldown) + { + sDrilldown = func; + } + + ~TemporaryDrilldownFunc() + { + sDrilldown = mOldDrilldown; + } + + private: + DrilldownFunc mOldDrilldown; + }; + // Depth in view hierarchy during rendering static S32 sDepth; diff --git a/indra/llui/llviewborder.cpp b/indra/llui/llviewborder.cpp index 32d7ea7c25..919267dcc6 100644 --- a/indra/llui/llviewborder.cpp +++ b/indra/llui/llviewborder.cpp @@ -57,9 +57,6 @@ LLViewBorder::Params::Params() { addSynonym(border_thickness, "thickness"); addSynonym(render_style, "style"); - name = "view_border"; - mouse_opaque = false; - follows.flags = FOLLOWS_ALL; } diff --git a/indra/llui/llviewinject.cpp b/indra/llui/llviewinject.cpp new file mode 100644 index 0000000000..46c5839f8e --- /dev/null +++ b/indra/llui/llviewinject.cpp @@ -0,0 +1,49 @@ +/** + * @file llviewinject.cpp + * @author Nat Goodspeed + * @date 2011-08-16 + * @brief Implementation for llviewinject. + * + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Copyright (c) 2011, Linden Research, Inc. + * $/LicenseInfo$ + */ + +// Precompiled header +#include "linden_common.h" +// associated header +#include "llviewinject.h" +// STL headers +// std headers +// external library headers +// other Linden headers + +llview::TargetEvent::TargetEvent(LLView* view) +{ + // Walk up the view tree from target LLView to the root (NULL). If + // passed NULL, iterate 0 times. + for (; view; view = view->getParent()) + { + // At each level, operator() is going to ask: for a particular parent + // LLView*, which of its children should I select? So for this view's + // parent, select this view. + mChildMap[view->getParent()] = view; + } +} + +bool llview::TargetEvent::operator()(const LLView* view, S32 /*x*/, S32 /*y*/) const +{ + // We are being called to decide whether to direct an incoming mouse event + // to this child view. (Normal LLView processing is to check whether the + // incoming (x, y) is within the view.) Look up the parent to decide + // whether, for that parent, this is the previously-selected child. + ChildMap::const_iterator found(mChildMap.find(view->getParent())); + // If we're looking at a child whose parent isn't even in the map, never + // mind. + if (found == mChildMap.end()) + { + return false; + } + // So, is this the predestined child for this parent? + return (view == found->second); +} diff --git a/indra/llui/llviewinject.h b/indra/llui/llviewinject.h new file mode 100644 index 0000000000..0de3d155c4 --- /dev/null +++ b/indra/llui/llviewinject.h @@ -0,0 +1,56 @@ +/** + * @file llviewinject.h + * @author Nat Goodspeed + * @date 2011-08-16 + * @brief Supplemental LLView functionality used for simulating UI events. + * + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Copyright (c) 2011, Linden Research, Inc. + * $/LicenseInfo$ + */ + +#if ! defined(LL_LLVIEWINJECT_H) +#define LL_LLVIEWINJECT_H + +#include "llview.h" +#include + +namespace llview +{ + + /** + * TargetEvent is a callable with state, specifically intended for use as + * an LLView::TemporaryDrilldownFunc. Instantiate it with the desired + * target LLView*; pass it to a TemporaryDrilldownFunc instance; + * TargetEvent::operator() will then attempt to direct subsequent mouse + * events to the desired target LLView*. (This is an "attempt" because + * LLView will still balk unless the target LLView and every parent are + * visible and enabled.) + */ + class TargetEvent + { + public: + /** + * Construct TargetEvent with the desired target LLView*. (See + * LLUI::resolvePath() to obtain an LLView* given a string pathname.) + * This sets up for operator(). + */ + TargetEvent(LLView* view); + + /** + * This signature must match LLView::DrilldownFunc. When you install + * this TargetEvent instance using LLView::TemporaryDrilldownFunc, + * LLView will call this method to decide whether to propagate an + * incoming mouse event to the passed child LLView*. + */ + bool operator()(const LLView*, S32 x, S32 y) const; + + private: + // For a given parent LLView, identify which child to select. + typedef std::map ChildMap; + ChildMap mChildMap; + }; + +} // llview namespace + +#endif /* ! defined(LL_LLVIEWINJECT_H) */ diff --git a/indra/llui/llwindowshade.cpp b/indra/llui/llwindowshade.cpp index 77e94385d4..cf76202215 100644 --- a/indra/llui/llwindowshade.cpp +++ b/indra/llui/llwindowshade.cpp @@ -43,7 +43,7 @@ LLWindowShade::Params::Params() text_color("text_color"), can_close("can_close", true) { - mouse_opaque = false; + changeDefault(mouse_opaque, false); } LLWindowShade::LLWindowShade(const LLWindowShade::Params& params) diff --git a/indra/llvfs/CMakeLists.txt b/indra/llvfs/CMakeLists.txt index 2c581cf8d6..a819d12861 100644 --- a/indra/llvfs/CMakeLists.txt +++ b/indra/llvfs/CMakeLists.txt @@ -83,13 +83,13 @@ if (LL_TESTS) include(LLAddBuildTest) # UNIT TESTS SET(llvfs_TEST_SOURCE_FILES - lldiriterator.cpp - ) + lldiriterator.cpp + ) set_source_files_properties(lldiriterator.cpp - PROPERTIES - LL_TEST_ADDITIONAL_LIBRARIES "${vfs_BOOST_LIBRARIES}" - ) + PROPERTIES + LL_TEST_ADDITIONAL_LIBRARIES "${vfs_BOOST_LIBRARIES}" + ) LL_ADD_PROJECT_UNIT_TESTS(llvfs "${llvfs_TEST_SOURCE_FILES}") # INTEGRATION TESTS diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt index 3d89867bc1..341bddfffd 100644 --- a/indra/llwindow/CMakeLists.txt +++ b/indra/llwindow/CMakeLists.txt @@ -38,7 +38,6 @@ set(llwindow_SOURCE_FILES llkeyboardheadless.cpp llwindowheadless.cpp llwindowcallbacks.cpp - llwindowlistener.cpp ) set(llwindow_HEADER_FILES @@ -48,7 +47,6 @@ set(llwindow_HEADER_FILES llkeyboardheadless.h llwindowheadless.h llwindowcallbacks.h - llwindowlistener.h ) set(viewer_SOURCE_FILES diff --git a/indra/llwindow/GL/glh_extensions.h b/indra/llwindow/GL/glh_extensions.h index b936b5d307..d89d85930b 100644 --- a/indra/llwindow/GL/glh_extensions.h +++ b/indra/llwindow/GL/glh_extensions.h @@ -1,5 +1,7 @@ /* * glh_extensions.h + * $LicenseInfo:firstyear=2006&license=mit$ (mit used here to satisfy validity checker) + * Copyright (C) 2006, NVIDIA * From nVidia Corporation, downloaded 2006-12-18 from: * http://developer.nvidia.com/attach/8196 * ("NVParse Library with Source (.zip) (2390 KB)") @@ -8,6 +10,8 @@ * "The files bison.exe, bison.simple, and flex.exe are covered by * the GPL. All other files in this distribution can be used however * you want." + * $/LicenseInfo$ + */ #ifndef GLH_EXTENSIONS diff --git a/indra/llwindow/GL/glh_genext.h b/indra/llwindow/GL/glh_genext.h index 8d42025198..cd5d1604a8 100644 --- a/indra/llwindow/GL/glh_genext.h +++ b/indra/llwindow/GL/glh_genext.h @@ -1,5 +1,7 @@ /* * glh_genext.h + * $LicenseInfo:firstyear=2008&license=mit$ (mit used here to satisfy validity checker) + * Copyright (C) 2008, NVIDIA * From nVidia Corporation, downloaded 2006-12-18 from: * http://developer.nvidia.com/attach/8196 * ("NVParse Library with Source (.zip) (2390 KB)") @@ -8,6 +10,7 @@ * "The files bison.exe, bison.simple, and flex.exe are covered by * the GPL. All other files in this distribution can be used however * you want." + * $/LicenseInfo$ */ /* File generated by extgen.cpp -- do not modify */ diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp index 71a5df910d..dc3a1099b1 100644 --- a/indra/llwindow/llwindow.cpp +++ b/indra/llwindow/llwindow.cpp @@ -41,8 +41,6 @@ #include "llkeyboard.h" #include "linked_lists.h" #include "llwindowcallbacks.h" -#include "llwindowlistener.h" -#include // @@ -118,17 +116,10 @@ LLWindow::LLWindow(LLWindowCallbacks* callbacks, BOOL fullscreen, U32 flags) mFlags(flags), mHighSurrogate(0) { - // gKeyboard is still NULL, so it doesn't do LLWindowListener any good to - // pass its value right now. Instead, pass it a nullary function that - // will, when we later need it, return the value of gKeyboard. - // boost::lambda::var() constructs such a functor on the fly. - mListener = new LLWindowListener(callbacks, boost::lambda::var(gKeyboard)); } LLWindow::~LLWindow() { - delete mListener; - mListener = NULL; } //virtual diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h index afbafbd583..f6234e4301 100644 --- a/indra/llwindow/llwindow.h +++ b/indra/llwindow/llwindow.h @@ -36,7 +36,6 @@ class LLSplashScreen; class LLPreeditor; class LLWindowCallbacks; -class LLWindowListener; // Refer to llwindow_test in test/common/llwindow for usage example @@ -194,7 +193,6 @@ protected: BOOL mHideCursorPermanent; U32 mFlags; U16 mHighSurrogate; - LLWindowListener* mListener; // Handle a UTF-16 encoding unit received from keyboard. // Converting the series of UTF-16 encoding units to UTF-32 data, diff --git a/indra/llwindow/llwindowlistener.cpp b/indra/llwindow/llwindowlistener.cpp deleted file mode 100644 index 91b99d83c6..0000000000 --- a/indra/llwindow/llwindowlistener.cpp +++ /dev/null @@ -1,307 +0,0 @@ -/** - * @file llwindowlistener.cpp - * @brief EventAPI interface for injecting input into LLWindow - * - * $LicenseInfo:firstyear=2001&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include "linden_common.h" - -#include "llwindowlistener.h" - -#include "llcoord.h" -#include "llkeyboard.h" -#include "llwindowcallbacks.h" -#include - -LLWindowListener::LLWindowListener(LLWindowCallbacks *window, const KeyboardGetter& kbgetter) - : LLEventAPI("LLWindow", "Inject input events into the LLWindow instance"), - mWindow(window), - mKbGetter(kbgetter) -{ - std::string keySomething = - "Given [\"keysym\"], [\"keycode\"] or [\"char\"], inject the specified "; - std::string keyExplain = - "(integer keycode values, or keysym \"XXXX\" from any KEY_XXXX, in\n" - "http://hg.secondlife.com/viewer-development/src/tip/indra/llcommon/indra_constants.h )"; - std::string mask = - "Specify optional [\"mask\"] as an array containing any of \"CONTROL\", \"ALT\",\n" - "\"SHIFT\" or \"MAC_CONTROL\"; the corresponding modifier bits will be combined\n" - "to form the mask used with the event."; - - std::string mouseSomething = - "Given [\"button\"], [\"x\"] and [\"y\"], inject the given mouse "; - std::string mouseExplain = - "(button values \"LEFT\", \"MIDDLE\", \"RIGHT\")"; - - add("keyDown", - keySomething + "keypress event.\n" + keyExplain + '\n' + mask, - &LLWindowListener::keyDown); - add("keyUp", - keySomething + "key release event.\n" + keyExplain + '\n' + mask, - &LLWindowListener::keyUp); - add("mouseDown", - mouseSomething + "click event.\n" + mouseExplain + '\n' + mask, - &LLWindowListener::mouseDown); - add("mouseUp", - mouseSomething + "release event.\n" + mouseExplain + '\n' + mask, - &LLWindowListener::mouseUp); - add("mouseMove", - std::string("Given [\"x\"] and [\"y\"], inject the given mouse movement event.\n") + - mask, - &LLWindowListener::mouseMove); - add("mouseScroll", - "Given an integer number of [\"clicks\"], inject the given mouse scroll event.\n" - "(positive clicks moves downward through typical content)", - &LLWindowListener::mouseScroll); -} - -template -class StringLookup -{ -private: - std::string mDesc; - typedef std::map Map; - Map mMap; - -public: - StringLookup(const std::string& desc): mDesc(desc) {} - - MAPPED lookup(const typename Map::key_type& key) const - { - typename Map::const_iterator found = mMap.find(key); - if (found == mMap.end()) - { - LL_WARNS("LLWindowListener") << "Unknown " << mDesc << " '" << key << "'" << LL_ENDL; - return MAPPED(); - } - return found->second; - } - -protected: - void add(const typename Map::key_type& key, const typename Map::mapped_type& value) - { - mMap.insert(typename Map::value_type(key, value)); - } -}; - -// for WhichKeysym. KeyProxy is like the typedef KEY, except that KeyProxy() -// (default-constructed) is guaranteed to have the value KEY_NONE. -class KeyProxy -{ -public: - KeyProxy(KEY k): mKey(k) {} - KeyProxy(): mKey(KEY_NONE) {} - operator KEY() const { return mKey; } - -private: - KEY mKey; -}; - -struct WhichKeysym: public StringLookup -{ - WhichKeysym(): StringLookup("keysym") - { - add("RETURN", KEY_RETURN); - add("LEFT", KEY_LEFT); - add("RIGHT", KEY_RIGHT); - add("UP", KEY_UP); - add("DOWN", KEY_DOWN); - add("ESCAPE", KEY_ESCAPE); - add("BACKSPACE", KEY_BACKSPACE); - add("DELETE", KEY_DELETE); - add("SHIFT", KEY_SHIFT); - add("CONTROL", KEY_CONTROL); - add("ALT", KEY_ALT); - add("HOME", KEY_HOME); - add("END", KEY_END); - add("PAGE_UP", KEY_PAGE_UP); - add("PAGE_DOWN", KEY_PAGE_DOWN); - add("HYPHEN", KEY_HYPHEN); - add("EQUALS", KEY_EQUALS); - add("INSERT", KEY_INSERT); - add("CAPSLOCK", KEY_CAPSLOCK); - add("TAB", KEY_TAB); - add("ADD", KEY_ADD); - add("SUBTRACT", KEY_SUBTRACT); - add("MULTIPLY", KEY_MULTIPLY); - add("DIVIDE", KEY_DIVIDE); - add("F1", KEY_F1); - add("F2", KEY_F2); - add("F3", KEY_F3); - add("F4", KEY_F4); - add("F5", KEY_F5); - add("F6", KEY_F6); - add("F7", KEY_F7); - add("F8", KEY_F8); - add("F9", KEY_F9); - add("F10", KEY_F10); - add("F11", KEY_F11); - add("F12", KEY_F12); - - add("PAD_UP", KEY_PAD_UP); - add("PAD_DOWN", KEY_PAD_DOWN); - add("PAD_LEFT", KEY_PAD_LEFT); - add("PAD_RIGHT", KEY_PAD_RIGHT); - add("PAD_HOME", KEY_PAD_HOME); - add("PAD_END", KEY_PAD_END); - add("PAD_PGUP", KEY_PAD_PGUP); - add("PAD_PGDN", KEY_PAD_PGDN); - add("PAD_CENTER", KEY_PAD_CENTER); // the 5 in the middle - add("PAD_INS", KEY_PAD_INS); - add("PAD_DEL", KEY_PAD_DEL); - add("PAD_RETURN", KEY_PAD_RETURN); - add("PAD_ADD", KEY_PAD_ADD); // not used - add("PAD_SUBTRACT", KEY_PAD_SUBTRACT); // not used - add("PAD_MULTIPLY", KEY_PAD_MULTIPLY); // not used - add("PAD_DIVIDE", KEY_PAD_DIVIDE); // not used - - add("BUTTON0", KEY_BUTTON0); - add("BUTTON1", KEY_BUTTON1); - add("BUTTON2", KEY_BUTTON2); - add("BUTTON3", KEY_BUTTON3); - add("BUTTON4", KEY_BUTTON4); - add("BUTTON5", KEY_BUTTON5); - add("BUTTON6", KEY_BUTTON6); - add("BUTTON7", KEY_BUTTON7); - add("BUTTON8", KEY_BUTTON8); - add("BUTTON9", KEY_BUTTON9); - add("BUTTON10", KEY_BUTTON10); - add("BUTTON11", KEY_BUTTON11); - add("BUTTON12", KEY_BUTTON12); - add("BUTTON13", KEY_BUTTON13); - add("BUTTON14", KEY_BUTTON14); - add("BUTTON15", KEY_BUTTON15); - } -}; -static WhichKeysym keysyms; - -struct WhichMask: public StringLookup -{ - WhichMask(): StringLookup("shift mask") - { - add("NONE", MASK_NONE); - add("CONTROL", MASK_CONTROL); // Mapped to cmd on Macs - add("ALT", MASK_ALT); - add("SHIFT", MASK_SHIFT); - add("MAC_CONTROL", MASK_MAC_CONTROL); // Un-mapped Ctrl key on Macs, not used on Windows - } -}; -static WhichMask masks; - -static MASK getMask(const LLSD& event) -{ - MASK mask(MASK_NONE); - LLSD masknames(event["mask"]); - for (LLSD::array_const_iterator ai(masknames.beginArray()), aend(masknames.endArray()); - ai != aend; ++ai) - { - mask |= masks.lookup(*ai); - } - return mask; -} - -static KEY getKEY(const LLSD& event) -{ - if (event.has("keysym")) - { - return keysyms.lookup(event["keysym"]); - } - else if (event.has("keycode")) - { - return KEY(event["keycode"].asInteger()); - } - else - { - return KEY(event["char"].asString()[0]); - } -} - -void LLWindowListener::keyDown(LLSD const & evt) -{ - mKbGetter()->handleTranslatedKeyDown(getKEY(evt), getMask(evt)); -} - -void LLWindowListener::keyUp(LLSD const & evt) -{ - mKbGetter()->handleTranslatedKeyUp(getKEY(evt), getMask(evt)); -} - -// for WhichButton -typedef BOOL (LLWindowCallbacks::*MouseFunc)(LLWindow *, LLCoordGL, MASK); -struct Actions -{ - Actions(const MouseFunc& d, const MouseFunc& u): down(d), up(u), valid(true) {} - Actions(): valid(false) {} - MouseFunc down, up; - bool valid; -}; - -struct WhichButton: public StringLookup -{ - WhichButton(): StringLookup("mouse button") - { - add("LEFT", Actions(&LLWindowCallbacks::handleMouseDown, - &LLWindowCallbacks::handleMouseUp)); - add("RIGHT", Actions(&LLWindowCallbacks::handleRightMouseDown, - &LLWindowCallbacks::handleRightMouseUp)); - add("MIDDLE", Actions(&LLWindowCallbacks::handleMiddleMouseDown, - &LLWindowCallbacks::handleMiddleMouseUp)); - } -}; -static WhichButton buttons; - -static LLCoordGL getPos(const LLSD& event) -{ - return LLCoordGL(event["x"].asInteger(), event["y"].asInteger()); -} - -void LLWindowListener::mouseDown(LLSD const & evt) -{ - Actions actions(buttons.lookup(evt["button"])); - if (actions.valid) - { - (mWindow->*(actions.down))(NULL, getPos(evt), getMask(evt)); - } -} - -void LLWindowListener::mouseUp(LLSD const & evt) -{ - Actions actions(buttons.lookup(evt["button"])); - if (actions.valid) - { - (mWindow->*(actions.up))(NULL, getPos(evt), getMask(evt)); - } -} - -void LLWindowListener::mouseMove(LLSD const & evt) -{ - mWindow->handleMouseMove(NULL, getPos(evt), getMask(evt)); -} - -void LLWindowListener::mouseScroll(LLSD const & evt) -{ - S32 clicks = evt["clicks"].asInteger(); - - mWindow->handleScrollWheel(NULL, clicks); -} - diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp index e9d29c63d5..57b1552642 100644 --- a/indra/llwindow/llwindowmacosx.cpp +++ b/indra/llwindow/llwindowmacosx.cpp @@ -1268,6 +1268,7 @@ BOOL LLWindowMacOSX::setSize(const LLCoordScreen size) void LLWindowMacOSX::swapBuffers() { + glFinish(); aglSwapBuffers(mContext); } diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp index 58903b0b90..812b88e91e 100644 --- a/indra/llwindow/llwindowsdl.cpp +++ b/indra/llwindow/llwindowsdl.cpp @@ -990,7 +990,10 @@ BOOL LLWindowSDL::setSize(const LLCoordScreen size) void LLWindowSDL::swapBuffers() { if (mWindow) + { + glFinish(); SDL_GL_SwapBuffers(); + } } U32 LLWindowSDL::getFSAASamples() diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp index d4efb9b97e..7e6c93147a 100644 --- a/indra/llwindow/llwindowwin32.cpp +++ b/indra/llwindow/llwindowwin32.cpp @@ -2908,6 +2908,7 @@ BOOL LLWindowWin32::resetDisplayResolution() void LLWindowWin32::swapBuffers() { + glFinish(); SwapBuffers(mhDC); } diff --git a/indra/llxml/CMakeLists.txt b/indra/llxml/CMakeLists.txt index 21cdf5f926..beefcda361 100644 --- a/indra/llxml/CMakeLists.txt +++ b/indra/llxml/CMakeLists.txt @@ -48,22 +48,22 @@ target_link_libraries( llxml # tests if (LL_TESTS) - # unit tests + # unit tests - SET(llxml_TEST_SOURCE_FILES - # none yet! - ) - LL_ADD_PROJECT_UNIT_TESTS(llxml "${llxml_TEST_SOURCE_FILES}") + SET(llxml_TEST_SOURCE_FILES + # none yet! + ) + LL_ADD_PROJECT_UNIT_TESTS(llxml "${llxml_TEST_SOURCE_FILES}") - # integration tests + # integration tests - # set(TEST_DEBUG on) - set(test_libs - ${LLXML_LIBRARIES} - ${WINDOWS_LIBRARIES} - ${LLMATH_LIBRARIES} - ${LLCOMMON_LIBRARIES} - ) + # set(TEST_DEBUG on) + set(test_libs + ${LLXML_LIBRARIES} + ${WINDOWS_LIBRARIES} + ${LLMATH_LIBRARIES} + ${LLCOMMON_LIBRARIES} + ) - LL_ADD_INTEGRATION_TEST(llcontrol "" "${test_libs}") + LL_ADD_INTEGRATION_TEST(llcontrol "" "${test_libs}") endif (LL_TESTS) diff --git a/indra/llxml/llcontrol.h b/indra/llxml/llcontrol.h index beda833124..81f144fc26 100644 --- a/indra/llxml/llcontrol.h +++ b/indra/llxml/llcontrol.h @@ -185,9 +185,10 @@ protected: ctrl_name_table_t mNameTable; std::string mTypeString[TYPE_COUNT]; +public: eControlType typeStringToEnum(const std::string& typestr); std::string typeEnumToString(eControlType typeenum); -public: + LLControlGroup(const std::string& name); ~LLControlGroup(); void cleanup(); @@ -385,7 +386,8 @@ class LLCachedControl { public: LLCachedControl(LLControlGroup& group, - const std::string& name, + const std::string& name, + const T& default_value, const std::string& comment = "Declared In Code") { diff --git a/indra/llxuixml/llinitparam.h b/indra/llxuixml/llinitparam.h index 194ef8af6a..69dcd474f7 100644 --- a/indra/llxuixml/llinitparam.h +++ b/indra/llxuixml/llinitparam.h @@ -289,15 +289,15 @@ namespace LLInitParam protected: bool anyProvided() const { return mIsProvided; } - Param(class BaseBlock* enclosing_block); + Param(BaseBlock* enclosing_block); // store pointer to enclosing block as offset to reduce space and allow for quick copying - class BaseBlock& enclosingBlock() const + BaseBlock& enclosingBlock() const { const U8* my_addr = reinterpret_cast(this); // get address of enclosing BLOCK class using stored offset to enclosing BaseBlock class - return *const_cast - (reinterpret_cast + return *const_cast + (reinterpret_cast (my_addr - (ptrdiff_t)(S32)mEnclosingBlockOffset)); } @@ -367,18 +367,16 @@ namespace LLInitParam typedef boost::unordered_map param_map_t; typedef std::vector param_list_t; - typedef std::list all_params_list_t; + typedef std::list all_params_list_t; typedef std::vector > param_validation_list_t; param_map_t mNamedParams; // parameters with associated names param_list_t mUnnamedParams; // parameters with_out_ associated names param_validation_list_t mValidationList; // parameters that must be validated all_params_list_t mAllParams; // all parameters, owns descriptors - - size_t mMaxParamOffset; - - EInitializationState mInitializationState; // whether or not static block data has been initialized - class BaseBlock* mCurrentBlockPtr; // pointer to block currently being constructed + size_t mMaxParamOffset; + EInitializationState mInitializationState; // whether or not static block data has been initialized + BaseBlock* mCurrentBlockPtr; // pointer to block currently being constructed }; class BaseBlock @@ -499,6 +497,92 @@ namespace LLInitParam const std::string& getParamName(const BlockDescriptor& block_data, const Param* paramp) const; }; + class BaseBlockWithFlags : public BaseBlock + { + public: + class FlagBase : public Param + { + public: + typedef FlagBase self_t; + + FlagBase(const char* name, BaseBlock* enclosing_block) : Param(enclosing_block) + { + if (LL_UNLIKELY(enclosing_block->mostDerivedBlockDescriptor().mInitializationState == BlockDescriptor::INITIALIZING)) + { + ParamDescriptorPtr param_descriptor = ParamDescriptorPtr(new ParamDescriptor( + enclosing_block->getHandleFromParam(this), + &mergeWith, + &deserializeParam, + &serializeParam, + NULL, + &inspectParam, + 0, 1)); + BaseBlock::addParam(enclosing_block->mostDerivedBlockDescriptor(), param_descriptor, name); + } + } + + bool isProvided() const { return anyProvided(); } + + private: + static bool mergeWith(Param& dst, const Param& src, bool overwrite) + { + const self_t& src_typed_param = static_cast(src); + self_t& dst_typed_param = static_cast(dst); + + if (src_typed_param.isProvided() + && (overwrite || !dst_typed_param.isProvided())) + { + dst.setProvided(true); + return true; + } + return false; + } + + static bool deserializeParam(Param& param, Parser& parser, const Parser::name_stack_range_t& name_stack, S32 generation) + { + self_t& typed_param = static_cast(param); + + // no further names in stack, parse value now + if (name_stack.first == name_stack.second) + { + typed_param.setProvided(true); + typed_param.enclosingBlock().paramChanged(param, true); + return true; + } + + return false; + } + + static void serializeParam(const Param& param, Parser& parser, Parser::name_stack_t& name_stack, const Param* diff_param) + { + const self_t& typed_param = static_cast(param); + const self_t* typed_diff_param = static_cast(diff_param); + + if (!typed_param.isProvided()) return; + + if (!name_stack.empty()) + { + name_stack.back().second = parser.newParseGeneration(); + } + + // then try to serialize value directly + if (!typed_diff_param || !typed_diff_param->isProvided()) + { + if (!parser.writeValue(NoParamValue(), name_stack)) + { + return; + } + } + } + + static void inspectParam(const Param& param, Parser& parser, Parser::name_stack_t& name_stack, S32 min_count, S32 max_count) + { + // tell parser about our actual type + parser.inspectValue(name_stack, min_count, max_count, NULL); + } + }; + }; + // these templates allow us to distinguish between template parameters // that derive from BaseBlock and those that don't template @@ -717,14 +801,6 @@ namespace LLInitParam Param::enclosingBlock().paramChanged(*this, flag_as_provided); } - void setIfNotProvided(value_assignment_t val, bool flag_as_provided = true) - { - if (!isProvided()) - { - set(val, flag_as_provided); - } - } - // implicit conversion operator value_assignment_t() const { return param_value_t::getValue(); } // explicit conversion @@ -869,18 +945,10 @@ namespace LLInitParam Param::enclosingBlock().paramChanged(*this, flag_as_provided); } - void setIfNotProvided(value_assignment_t val, bool flag_as_provided = true) - { - if (!isProvided()) - { - set(val, flag_as_provided); - } - } - // propagate changed status up to enclosing block /*virtual*/ void paramChanged(const Param& changed_param, bool user_provided) { - ParamValue::paramChanged(changed_param, user_provided); + param_value_t::paramChanged(changed_param, user_provided); Param::enclosingBlock().paramChanged(*this, user_provided); if (user_provided) { @@ -1033,15 +1101,6 @@ namespace LLInitParam Param::enclosingBlock().paramChanged(*this, flag_as_provided); } - - void setIfNotProvided(value_assignment_t val, bool flag_as_provided = true) - { - if (!isProvided()) - { - set(val, flag_as_provided); - } - } - value_t& add() { mValues.push_back(param_value_t(value_t())); @@ -1232,14 +1291,6 @@ namespace LLInitParam Param::enclosingBlock().paramChanged(*this, flag_as_provided); } - void setIfNotProvided(value_assignment_t val, bool flag_as_provided = true) - { - if (!isProvided()) - { - set(val, flag_as_provided); - } - } - value_t& add() { mValues.push_back(value_t()); @@ -1457,7 +1508,7 @@ namespace LLInitParam } }; - template + template class Block : public BASE_BLOCK { @@ -1553,6 +1604,13 @@ namespace LLInitParam }; + class Flag : public BaseBlockWithFlags::FlagBase + { + public: + Flag(const char* name) : FlagBase(name, DERIVED_BLOCK::selfBlockDescriptor().mCurrentBlockPtr) + {} + }; + template > class Multiple : public TypedParam { @@ -1719,6 +1777,17 @@ namespace LLInitParam static BlockDescriptor sBlockDescriptor; return sBlockDescriptor; } + + template + void changeDefault(TypedParam& param, + typename TypedParam::value_assignment_t value) + { + if (!param.isProvided()) + { + param.set(value, false); + } + } + }; template diff --git a/indra/llxuixml/llxuiparser.cpp b/indra/llxuixml/llxuiparser.cpp index 72a7bb7af5..4af077b22c 100644 --- a/indra/llxuixml/llxuiparser.cpp +++ b/indra/llxuixml/llxuiparser.cpp @@ -440,12 +440,11 @@ bool LLXUIParser::readXUIImpl(LLXMLNodePtr nodep, LLInitParam::BaseBlock& block) && nodep->mAttributes.empty() && nodep->getSanitizedValue().empty()) { - // empty node, just parse as NoValue + // empty node, just parse as flag mCurReadNode = DUMMY_NODE; return block.submitValue(mNameStack, *this, silent); } - // submit attributes for current node values_parsed |= readAttributes(nodep, block); diff --git a/indra/lscript/lscript_compile/bison.bat b/indra/lscript/lscript_compile/bison.bat index 54cf0231d9..0baff4e5ef 100644 --- a/indra/lscript/lscript_compile/bison.bat +++ b/indra/lscript/lscript_compile/bison.bat @@ -1,11 +1,11 @@ -@REM Run bison under Windows. This script is needed so that bison can -@REM find m4, even if neither program is present in PATH. - -@set bison=%1 -set M4PATH=%2 -set M4= -@set output=%3 -@set input=%4 - -set PATH=%M4PATH%;%PATH% -%bison% -d -o %output% %input% +@REM Run bison under Windows. This script is needed so that bison can +@REM find m4, even if neither program is present in PATH. + +@set bison=%1 +set M4PATH=%2 +set M4= +@set output=%3 +@set input=%4 + +set PATH=%M4PATH%;%PATH% +%bison% -d -o %output% %input% diff --git a/indra/lscript/lscript_compile/windows/unistd.h b/indra/lscript/lscript_compile/windows/unistd.h index 49e9152d63..0b7e2581e3 100644 --- a/indra/lscript/lscript_compile/windows/unistd.h +++ b/indra/lscript/lscript_compile/windows/unistd.h @@ -1,24 +1,24 @@ -/** - * $LicenseInfo:firstyear=2002&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -/* After all that, this file is empty. */ +/** + * $LicenseInfo:firstyear=2002&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +/* After all that, this file is empty. */ diff --git a/indra/media_plugins/example/CMakeLists.txt b/indra/media_plugins/example/CMakeLists.txt index 56cefde4bd..54dc5de1ea 100644 --- a/indra/media_plugins/example/CMakeLists.txt +++ b/indra/media_plugins/example/CMakeLists.txt @@ -79,4 +79,4 @@ if (DARWIN) LINK_FLAGS "-exported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/../base/media_plugin_base.exp" ) -endif (DARWIN) \ No newline at end of file +endif (DARWIN) diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp index 430ae9d4dc..0f74772e42 100644 --- a/indra/media_plugins/webkit/media_plugin_webkit.cpp +++ b/indra/media_plugins/webkit/media_plugin_webkit.cpp @@ -1,1447 +1,1447 @@ -/** - * @file media_plugin_webkit.cpp - * @brief Webkit plugin for LLMedia API plugin system - * - * @cond - * $LicenseInfo:firstyear=2008&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - * @endcond - */ - -#include "llqtwebkit.h" - -#include "linden_common.h" -#include "indra_constants.h" // for indra keyboard codes - -#include "llgl.h" - -#include "llplugininstance.h" -#include "llpluginmessage.h" -#include "llpluginmessageclasses.h" -#include "media_plugin_base.h" - -// set to 1 if you're using the version of llqtwebkit that's QPixmap-ified -#if LL_LINUX -# define LL_QTWEBKIT_USES_PIXMAPS 0 -extern "C" { -# include -# include -} -#else -# define LL_QTWEBKIT_USES_PIXMAPS 0 -#endif // LL_LINUX - -# include "volume_catcher.h" - -#if LL_WINDOWS -# include -#else -# include -# include -#endif - -#if LL_WINDOWS - // *NOTE:Mani - This captures the module handle for the dll. This is used below - // to get the path to this dll for webkit initialization. - // I don't know how/if this can be done with apr... - namespace { HMODULE gModuleHandle;}; - BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) - { - gModuleHandle = (HMODULE) hinstDLL; - return TRUE; - } -#endif - -//////////////////////////////////////////////////////////////////////////////// -// -class MediaPluginWebKit : - public MediaPluginBase, - public LLEmbeddedBrowserWindowObserver -{ -public: - MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data); - ~MediaPluginWebKit(); - - /*virtual*/ void receiveMessage(const char *message_string); - -private: - - std::string mProfileDir; - std::string mHostLanguage; - std::string mUserAgent; - bool mCookiesEnabled; - bool mJavascriptEnabled; - bool mPluginsEnabled; - bool mEnableMediaPluginDebugging; - - enum - { - INIT_STATE_UNINITIALIZED, // LLQtWebkit hasn't been set up yet - INIT_STATE_INITIALIZED, // LLQtWebkit has been set up, but no browser window has been created yet. - INIT_STATE_NAVIGATING, // Browser instance has been set up and initial navigate to about:blank has been issued - INIT_STATE_NAVIGATE_COMPLETE, // initial navigate to about:blank has completed - INIT_STATE_WAIT_REDRAW, // First real navigate begin has been received, waiting for page changed event to start handling redraws - INIT_STATE_WAIT_COMPLETE, // Waiting for first real navigate complete event - INIT_STATE_RUNNING // All initialization gymnastics are complete. - }; - int mBrowserWindowId; - int mInitState; - std::string mInitialNavigateURL; - bool mNeedsUpdate; - - bool mCanCut; - bool mCanCopy; - bool mCanPaste; - int mLastMouseX; - int mLastMouseY; - bool mFirstFocus; - F32 mBackgroundR; - F32 mBackgroundG; - F32 mBackgroundB; - std::string mTarget; - - VolumeCatcher mVolumeCatcher; - - void postDebugMessage( const std::string& msg ) - { - if ( mEnableMediaPluginDebugging ) - { - LLPluginMessage debug_message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "debug_message"); - debug_message.setValue("message_text", "Media> " + msg); - debug_message.setValue("message_level", "info"); - sendMessage(debug_message); - } - } - - void setInitState(int state) - { -// std::cerr << "changing init state to " << state << std::endl; - mInitState = state; - } - - //////////////////////////////////////////////////////////////////////////////// - // - void update(int milliseconds) - { -#if LL_QTLINUX_DOESNT_HAVE_GLIB - // pump glib generously, as Linux browser plugins are on the - // glib main loop, even if the browser itself isn't - ugh - // This is NOT NEEDED if Qt itself was built with glib - // mainloop integration. - GMainContext *mainc = g_main_context_default(); - while(g_main_context_iteration(mainc, FALSE)); -#endif // LL_QTLINUX_DOESNT_HAVE_GLIB - - // pump qt - LLQtWebKit::getInstance()->pump( milliseconds ); - - mVolumeCatcher.pump(); - - checkEditState(); - - if(mInitState == INIT_STATE_NAVIGATE_COMPLETE) - { - if(!mInitialNavigateURL.empty()) - { - // We already have the initial navigate URL -- kick off the navigate. - LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, mInitialNavigateURL ); - mInitialNavigateURL.clear(); - } - } - - if ( (mInitState > INIT_STATE_WAIT_REDRAW) && mNeedsUpdate ) - { - const unsigned char* browser_pixels = LLQtWebKit::getInstance()->grabBrowserWindow( mBrowserWindowId ); - - unsigned int rowspan = LLQtWebKit::getInstance()->getBrowserRowSpan( mBrowserWindowId ); - unsigned int height = LLQtWebKit::getInstance()->getBrowserHeight( mBrowserWindowId ); -#if !LL_QTWEBKIT_USES_PIXMAPS - unsigned int buffer_size = rowspan * height; -#endif // !LL_QTWEBKIT_USES_PIXMAPS - -// std::cerr << "webkit plugin: updating" << std::endl; - - // TODO: should get rid of this memcpy if possible - if ( mPixels && browser_pixels ) - { -// std::cerr << " memcopy of " << buffer_size << " bytes" << std::endl; - -#if LL_QTWEBKIT_USES_PIXMAPS - // copy the pixel data upside-down because of the co-ord system - for (int y=0; y 0 && mHeight > 0 ) - { -// std::cerr << "Setting dirty, " << mWidth << " x " << mHeight << std::endl; - setDirty( 0, 0, mWidth, mHeight ); - } - - mNeedsUpdate = false; - }; - }; - - //////////////////////////////////////////////////////////////////////////////// - // - bool initBrowser() - { - // already initialized - if ( mInitState > INIT_STATE_UNINITIALIZED ) - return true; - - // set up directories - char cwd[ FILENAME_MAX ]; // I *think* this is defined on all platforms we use - if (NULL == getcwd( cwd, FILENAME_MAX - 1 )) - { - llwarns << "Couldn't get cwd - probably too long - failing to init." << llendl; - return false; - } - std::string application_dir = std::string( cwd ); - -#if LL_LINUX - // take care to initialize glib properly, because some - // versions of Qt don't, and we indirectly need it for (some - // versions of) Flash to not crash the browser. - if (!g_thread_supported ()) g_thread_init (NULL); - g_type_init(); -#endif - -#if LL_DARWIN - // When running under the Xcode debugger, there's a setting called "Break on Debugger()/DebugStr()" which defaults to being turned on. - // This causes the environment variable USERBREAK to be set to 1, which causes these legacy calls to break into the debugger. - // This wouldn't cause any problems except for the fact that the current release version of the Flash plugin has a call to Debugger() in it - // which gets hit when the plugin is probed by webkit. - // Unsetting the environment variable here works around this issue. - unsetenv("USERBREAK"); -#endif - -#if LL_WINDOWS - //*NOTE:Mani - On windows, at least, the component path is the - // location of this dll's image file. - std::string component_dir; - char dll_path[_MAX_PATH]; - DWORD len = GetModuleFileNameA(gModuleHandle, (LPCH)&dll_path, _MAX_PATH); - while(len && dll_path[ len ] != ('\\') ) - { - len--; - } - if(len >= 0) - { - dll_path[len] = 0; - component_dir = dll_path; - } - else - { - // *NOTE:Mani - This case should be an rare exception. - // GetModuleFileNameA should always give you a full path, no? - component_dir = application_dir; - } -#else - std::string component_dir = application_dir; -#endif - - // debug spam sent to viewer and displayed in the log as usual - postDebugMessage( "Component dir set to: " + component_dir ); - - // window handle - needed on Windows and must be app window. -#if LL_WINDOWS - char window_title[ MAX_PATH ]; - GetConsoleTitleA( window_title, MAX_PATH ); - void* native_window_handle = (void*)FindWindowA( NULL, window_title ); -#else - void* native_window_handle = 0; -#endif - - // main browser initialization - bool result = LLQtWebKit::getInstance()->init( application_dir, component_dir, mProfileDir, native_window_handle ); - if ( result ) - { - mInitState = INIT_STATE_INITIALIZED; - - // debug spam sent to viewer and displayed in the log as usual - postDebugMessage( "browser initialized okay" ); - - return true; - }; - - // debug spam sent to viewer and displayed in the log as usual - postDebugMessage( "browser nOT initialized." ); - - return false; - }; - - //////////////////////////////////////////////////////////////////////////////// - // - bool initBrowserWindow() - { - // already initialized - if ( mInitState > INIT_STATE_INITIALIZED ) - return true; - - // not enough information to initialize the browser yet. - if ( mWidth < 0 || mHeight < 0 || mDepth < 0 || - mTextureWidth < 0 || mTextureHeight < 0 ) - { - return false; - }; - - // Set up host language before creating browser window - if(!mHostLanguage.empty()) - { - LLQtWebKit::getInstance()->setHostLanguage(mHostLanguage); - postDebugMessage( "Setting language to " + mHostLanguage ); - } - - // turn on/off cookies based on what host app tells us - LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled ); - - // turn on/off plugins based on what host app tells us - LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled ); - - // turn on/off Javascript based on what host app tells us - LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled ); - - std::stringstream str; - str << "Cookies enabled = " << mCookiesEnabled << ", plugins enabled = " << mPluginsEnabled << ", Javascript enabled = " << mJavascriptEnabled; - postDebugMessage( str.str() ); - - // create single browser window - mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight, mTarget); - - str.str(""); - str.clear(); - str << "Setting browser window size to " << mWidth << " x " << mHeight; - postDebugMessage( str.str() ); - - // tell LLQtWebKit about the size of the browser window - LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight ); - - // observer events that LLQtWebKit emits - LLQtWebKit::getInstance()->addObserver( mBrowserWindowId, this ); - - // append details to agent string - LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent ); - postDebugMessage( "Updating user agent with " + mUserAgent ); - -#if !LL_QTWEBKIT_USES_PIXMAPS - // don't flip bitmap - LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true ); -#endif // !LL_QTWEBKIT_USES_PIXMAPS - - // set background color - // convert background color channels from [0.0, 1.0] to [0, 255]; - LLQtWebKit::getInstance()->setBackgroundColor( mBrowserWindowId, int(mBackgroundR * 255.0f), int(mBackgroundG * 255.0f), int(mBackgroundB * 255.0f) ); - - // Set state _before_ starting the navigate, since onNavigateBegin might get called before this call returns. - setInitState(INIT_STATE_NAVIGATING); - - // Don't do this here -- it causes the dreaded "white flash" when loading a browser instance. - // FIXME: Re-added this because navigating to a "page" initializes things correctly - especially - // for the HTTP AUTH dialog issues (DEV-41731). Will fix at a later date. - // Build a data URL like this: "data:text/html,%3Chtml%3E%3Cbody bgcolor=%22#RRGGBB%22%3E%3C/body%3E%3C/html%3E" - // where RRGGBB is the background color in HTML style - std::stringstream url; - - url << "data:text/html,%3Chtml%3E%3Cbody%20bgcolor=%22#"; - // convert background color channels from [0.0, 1.0] to [0, 255]; - url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundR * 255.0f); - url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundG * 255.0f); - url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundB * 255.0f); - url << "%22%3E%3C/body%3E%3C/html%3E"; - - //lldebugs << "data url is: " << url.str() << llendl; - - LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, url.str() ); -// LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" ); - - return true; - } - - void setVolume(F32 vol); - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onCursorChanged(const EventType& event) - { - LLQtWebKit::ECursor llqt_cursor = (LLQtWebKit::ECursor)event.getIntValue(); - std::string name; - - switch(llqt_cursor) - { - case LLQtWebKit::C_ARROW: - name = "arrow"; - break; - case LLQtWebKit::C_IBEAM: - name = "ibeam"; - break; - case LLQtWebKit::C_SPLITV: - name = "splitv"; - break; - case LLQtWebKit::C_SPLITH: - name = "splith"; - break; - case LLQtWebKit::C_POINTINGHAND: - name = "hand"; - break; - - default: - llwarns << "Unknown cursor ID: " << (int)llqt_cursor << llendl; - break; - } - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "cursor_changed"); - message.setValue("name", name); - sendMessage(message); - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onPageChanged( const EventType& event ) - { - if(mInitState == INIT_STATE_WAIT_REDRAW) - { - setInitState(INIT_STATE_WAIT_COMPLETE); - } - - // flag that an update is required - mNeedsUpdate = true; - }; - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onNavigateBegin(const EventType& event) - { - if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_begin"); - message.setValue("uri", event.getEventUri()); - message.setValueBoolean("history_back_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK)); - message.setValueBoolean("history_forward_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD)); - sendMessage(message); - - // debug spam sent to viewer and displayed in the log as usual - postDebugMessage( "Navigate begin event at: " + event.getEventUri() ); - - setStatus(STATUS_LOADING); - } - - if(mInitState == INIT_STATE_NAVIGATE_COMPLETE) - { - // Skip the WAIT_REDRAW state now -- with the right background color set, it should no longer be necessary. -// setInitState(INIT_STATE_WAIT_REDRAW); - setInitState(INIT_STATE_WAIT_COMPLETE); - } - - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onNavigateComplete(const EventType& event) - { - if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) - { - if(mInitState < INIT_STATE_RUNNING) - { - setInitState(INIT_STATE_RUNNING); - - // Clear the history, so the "back" button doesn't take you back to "about:blank". - LLQtWebKit::getInstance()->clearHistory(mBrowserWindowId); - } - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_complete"); - message.setValue("uri", event.getEventUri()); - message.setValueS32("result_code", event.getIntValue()); - message.setValue("result_string", event.getStringValue()); - message.setValueBoolean("history_back_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK)); - message.setValueBoolean("history_forward_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD)); - sendMessage(message); - - setStatus(STATUS_LOADED); - } - else if(mInitState == INIT_STATE_NAVIGATING) - { - setInitState(INIT_STATE_NAVIGATE_COMPLETE); - } - - // debug spam sent to viewer and displayed in the log as usual - postDebugMessage( "Navigate complete event at: " + event.getEventUri() ); - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onUpdateProgress(const EventType& event) - { - if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "progress"); - message.setValueS32("percent", event.getIntValue()); - sendMessage(message); - } - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onStatusTextChange(const EventType& event) - { - if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "status_text"); - message.setValue("status", event.getStringValue()); - sendMessage(message); - } - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onTitleChange(const EventType& event) - { - if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "name_text"); - message.setValue("name", event.getStringValue()); - sendMessage(message); - } - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onNavigateErrorPage(const EventType& event) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_error_page"); - message.setValueS32("status_code", event.getIntValue()); - sendMessage(message); - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onLocationChange(const EventType& event) - { - if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "location_changed"); - message.setValue("uri", event.getEventUri()); - sendMessage(message); - } - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onClickLinkHref(const EventType& event) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_href"); - message.setValue("uri", event.getEventUri()); - message.setValue("target", event.getStringValue()); - message.setValue("uuid", event.getStringValue2()); - sendMessage(message); - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onClickLinkNoFollow(const EventType& event) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow"); - message.setValue("uri", event.getEventUri()); -#if LLQTWEBKIT_API_VERSION >= 7 - message.setValue("nav_type", event.getNavigationType()); -#else - message.setValue("nav_type", "clicked"); -#endif - sendMessage(message); - } - - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onCookieChanged(const EventType& event) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "cookie_set"); - message.setValue("cookie", event.getStringValue()); - // These could be passed through as well, but aren't really needed. -// message.setValue("uri", event.getEventUri()); -// message.setValueBoolean("dead", (event.getIntValue() != 0)) - sendMessage(message); - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onWindowCloseRequested(const EventType& event) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "close_request"); - message.setValue("uuid", event.getStringValue()); - sendMessage(message); - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onWindowGeometryChangeRequested(const EventType& event) - { - int x, y, width, height; - event.getRectValue(x, y, width, height); - - // This sometimes gets called with a zero-size request. Don't pass these along. - if(width > 0 && height > 0) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "geometry_change"); - message.setValue("uuid", event.getStringValue()); - message.setValueS32("x", x); - message.setValueS32("y", y); - message.setValueS32("width", width); - message.setValueS32("height", height); - sendMessage(message); - } - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - std::string onRequestFilePicker( const EventType& eventIn ) - { - return blockingPickFile(); - } - - std::string mAuthUsername; - std::string mAuthPassword; - bool mAuthOK; - - //////////////////////////////////////////////////////////////////////////////// - // virtual - bool onAuthRequest(const std::string &in_url, const std::string &in_realm, std::string &out_username, std::string &out_password) - { - mAuthOK = false; - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "auth_request"); - message.setValue("url", in_url); - message.setValue("realm", in_realm); - message.setValueBoolean("blocking_request", true); - - // The "blocking_request" key in the message means this sendMessage call will block until a response is received. - sendMessage(message); - - if(mAuthOK) - { - out_username = mAuthUsername; - out_password = mAuthPassword; - } - - return mAuthOK; - } - - void authResponse(LLPluginMessage &message) - { - mAuthOK = message.getValueBoolean("ok"); - if(mAuthOK) - { - mAuthUsername = message.getValue("username"); - mAuthPassword = message.getValue("password"); - } - } - - //////////////////////////////////////////////////////////////////////////////// - // virtual - void onLinkHovered(const EventType& event) - { - if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "link_hovered"); - message.setValue("link", event.getEventUri()); - message.setValue("title", event.getStringValue()); - message.setValue("text", event.getStringValue2()); - sendMessage(message); - } - } - - LLQtWebKit::EKeyboardModifier decodeModifiers(std::string &modifiers) - { - int result = 0; - - if(modifiers.find("shift") != std::string::npos) - result |= LLQtWebKit::KM_MODIFIER_SHIFT; - - if(modifiers.find("alt") != std::string::npos) - result |= LLQtWebKit::KM_MODIFIER_ALT; - - if(modifiers.find("control") != std::string::npos) - result |= LLQtWebKit::KM_MODIFIER_CONTROL; - - if(modifiers.find("meta") != std::string::npos) - result |= LLQtWebKit::KM_MODIFIER_META; - - return (LLQtWebKit::EKeyboardModifier)result; - } - - //////////////////////////////////////////////////////////////////////////////// - // - void deserializeKeyboardData( LLSD native_key_data, uint32_t& native_scan_code, uint32_t& native_virtual_key, uint32_t& native_modifiers ) - { - native_scan_code = 0; - native_virtual_key = 0; - native_modifiers = 0; - - if( native_key_data.isMap() ) - { -#if LL_DARWIN - native_scan_code = (uint32_t)(native_key_data["char_code"].asInteger()); - native_virtual_key = (uint32_t)(native_key_data["key_code"].asInteger()); - native_modifiers = (uint32_t)(native_key_data["modifiers"].asInteger()); -#elif LL_WINDOWS - native_scan_code = (uint32_t)(native_key_data["scan_code"].asInteger()); - native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger()); - // TODO: I don't think we need to do anything with native modifiers here -- please verify -#elif LL_LINUX - native_scan_code = (uint32_t)(native_key_data["scan_code"].asInteger()); - native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger()); - native_modifiers = (uint32_t)(native_key_data["modifiers"].asInteger()); -#else - // Add other platforms here as needed -#endif - }; - }; - - //////////////////////////////////////////////////////////////////////////////// - // - void keyEvent(LLQtWebKit::EKeyEvent key_event, int key, LLQtWebKit::EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap()) - { - // The incoming values for 'key' will be the ones from indra_constants.h - std::string utf8_text; - - if(key < KEY_SPECIAL) - { - // Low-ascii characters need to get passed through. - utf8_text = (char)key; - } - - // Any special-case handling we want to do for particular keys... - switch((KEY)key) - { - // ASCII codes for some standard keys - case LLQtWebKit::KEY_BACKSPACE: utf8_text = (char)8; break; - case LLQtWebKit::KEY_TAB: utf8_text = (char)9; break; - case LLQtWebKit::KEY_RETURN: utf8_text = (char)13; break; - case LLQtWebKit::KEY_PAD_RETURN: utf8_text = (char)13; break; - case LLQtWebKit::KEY_ESCAPE: utf8_text = (char)27; break; - - default: - break; - } - -// std::cerr << "key event " << (int)key_event << ", native_key_data = " << native_key_data << std::endl; - - uint32_t native_scan_code = 0; - uint32_t native_virtual_key = 0; - uint32_t native_modifiers = 0; - deserializeKeyboardData( native_key_data, native_scan_code, native_virtual_key, native_modifiers ); - - LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, key_event, (uint32_t)key, utf8_text.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers); - - checkEditState(); - }; - - //////////////////////////////////////////////////////////////////////////////// - // - void unicodeInput( const std::string &utf8str, LLQtWebKit::EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap()) - { - uint32_t key = LLQtWebKit::KEY_NONE; - -// std::cerr << "unicode input, native_key_data = " << native_key_data << std::endl; - - if(utf8str.size() == 1) - { - // The only way a utf8 string can be one byte long is if it's actually a single 7-bit ascii character. - // In this case, use it as the key value. - key = utf8str[0]; - } - - uint32_t native_scan_code = 0; - uint32_t native_virtual_key = 0; - uint32_t native_modifiers = 0; - deserializeKeyboardData( native_key_data, native_scan_code, native_virtual_key, native_modifiers ); - - LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, LLQtWebKit::KE_KEY_DOWN, (uint32_t)key, utf8str.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers); - LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, LLQtWebKit::KE_KEY_UP, (uint32_t)key, utf8str.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers); - - checkEditState(); - }; - - void checkEditState(void) - { - bool can_cut = LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_EDIT_CUT); - bool can_copy = LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_EDIT_COPY); - bool can_paste = LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_EDIT_PASTE); - - if((can_cut != mCanCut) || (can_copy != mCanCopy) || (can_paste != mCanPaste)) - { - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_state"); - - if(can_cut != mCanCut) - { - mCanCut = can_cut; - message.setValueBoolean("cut", can_cut); - } - - if(can_copy != mCanCopy) - { - mCanCopy = can_copy; - message.setValueBoolean("copy", can_copy); - } - - if(can_paste != mCanPaste) - { - mCanPaste = can_paste; - message.setValueBoolean("paste", can_paste); - } - - sendMessage(message); - - } - } - - std::string mPickedFile; - - std::string blockingPickFile(void) - { - mPickedFile.clear(); - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file"); - message.setValueBoolean("blocking_request", true); - - // The "blocking_request" key in the message means this sendMessage call will block until a response is received. - sendMessage(message); - - return mPickedFile; - } - - void onPickFileResponse(const std::string &file) - { - mPickedFile = file; - } - -}; - -MediaPluginWebKit::MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data) : - MediaPluginBase(host_send_func, host_user_data) -{ -// std::cerr << "MediaPluginWebKit constructor" << std::endl; - - mBrowserWindowId = 0; - mInitState = INIT_STATE_UNINITIALIZED; - mNeedsUpdate = true; - mCanCut = false; - mCanCopy = false; - mCanPaste = false; - mLastMouseX = 0; - mLastMouseY = 0; - mFirstFocus = true; - mBackgroundR = 0.0f; - mBackgroundG = 0.0f; - mBackgroundB = 0.0f; - - mHostLanguage = "en"; // default to english - mJavascriptEnabled = true; // default to on - mPluginsEnabled = true; // default to on - mEnableMediaPluginDebugging = false; - mUserAgent = "LLPluginMedia Web Browser"; -} - -MediaPluginWebKit::~MediaPluginWebKit() -{ - // unhook observer - LLQtWebKit::getInstance()->remObserver( mBrowserWindowId, this ); - - // clean up - LLQtWebKit::getInstance()->reset(); - -// std::cerr << "MediaPluginWebKit destructor" << std::endl; -} - -void MediaPluginWebKit::receiveMessage(const char *message_string) -{ -// std::cerr << "MediaPluginWebKit::receiveMessage: received message: \"" << message_string << "\"" << std::endl; - LLPluginMessage message_in; - - if(message_in.parse(message_string) >= 0) - { - std::string message_class = message_in.getClass(); - std::string message_name = message_in.getName(); - if(message_class == LLPLUGIN_MESSAGE_CLASS_BASE) - { - if(message_name == "init") - { - LLPluginMessage message("base", "init_response"); - LLSD versions = LLSD::emptyMap(); - versions[LLPLUGIN_MESSAGE_CLASS_BASE] = LLPLUGIN_MESSAGE_CLASS_BASE_VERSION; - versions[LLPLUGIN_MESSAGE_CLASS_MEDIA] = LLPLUGIN_MESSAGE_CLASS_MEDIA_VERSION; - versions[LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER] = LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER_VERSION; - message.setValueLLSD("versions", versions); - - std::string plugin_version = "Webkit media plugin, Webkit version "; - plugin_version += LLQtWebKit::getInstance()->getVersion(); - message.setValue("plugin_version", plugin_version); - sendMessage(message); - } - else if(message_name == "idle") - { - // no response is necessary here. - F64 time = message_in.getValueReal("time"); - - // Convert time to milliseconds for update() - update((int)(time * 1000.0f)); - } - else if(message_name == "cleanup") - { - // DTOR most likely won't be called but the recent change to the way this process - // is (not) killed means we see this message and can do what we need to here. - // Note: this cleanup is ultimately what writes cookies to the disk - LLQtWebKit::getInstance()->remObserver( mBrowserWindowId, this ); - LLQtWebKit::getInstance()->reset(); - } - else if(message_name == "shm_added") - { - SharedSegmentInfo info; - info.mAddress = message_in.getValuePointer("address"); - info.mSize = (size_t)message_in.getValueS32("size"); - std::string name = message_in.getValue("name"); - -// std::cerr << "MediaPluginWebKit::receiveMessage: shared memory added, name: " << name -// << ", size: " << info.mSize -// << ", address: " << info.mAddress -// << std::endl; - - mSharedSegments.insert(SharedSegmentMap::value_type(name, info)); - - } - else if(message_name == "shm_remove") - { - std::string name = message_in.getValue("name"); - -// std::cerr << "MediaPluginWebKit::receiveMessage: shared memory remove, name = " << name << std::endl; - - SharedSegmentMap::iterator iter = mSharedSegments.find(name); - if(iter != mSharedSegments.end()) - { - if(mPixels == iter->second.mAddress) - { - // This is the currently active pixel buffer. Make sure we stop drawing to it. - mPixels = NULL; - mTextureSegmentName.clear(); - } - mSharedSegments.erase(iter); - } - else - { -// std::cerr << "MediaPluginWebKit::receiveMessage: unknown shared memory region!" << std::endl; - } - - // Send the response so it can be cleaned up. - LLPluginMessage message("base", "shm_remove_response"); - message.setValue("name", name); - sendMessage(message); - } - else - { -// std::cerr << "MediaPluginWebKit::receiveMessage: unknown base message: " << message_name << std::endl; - } - } - else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME) - { - if(message_name == "set_volume") - { - F32 volume = message_in.getValueReal("volume"); - setVolume(volume); - } - } - else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA) - { - if(message_name == "init") - { - mTarget = message_in.getValue("target"); - - // This is the media init message -- all necessary data for initialization should have been received. - if(initBrowser()) - { - - // Plugin gets to decide the texture parameters to use. - mDepth = 4; - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params"); - message.setValueS32("default_width", 1024); - message.setValueS32("default_height", 1024); - message.setValueS32("depth", mDepth); - message.setValueU32("internalformat", GL_RGBA); - #if LL_QTWEBKIT_USES_PIXMAPS - message.setValueU32("format", GL_BGRA_EXT); // I hope this isn't system-dependant... is it? If so, we'll have to check the root window's pixel layout or something... yuck. - #else - message.setValueU32("format", GL_RGBA); - #endif // LL_QTWEBKIT_USES_PIXMAPS - message.setValueU32("type", GL_UNSIGNED_BYTE); - message.setValueBoolean("coords_opengl", true); - sendMessage(message); - } - else - { - // if initialization failed, we're done. - mDeleteMe = true; - } - - } - else if(message_name == "set_user_data_path") - { - std::string user_data_path = message_in.getValue("path"); // n.b. always has trailing platform-specific dir-delimiter - mProfileDir = user_data_path + "browser_profile"; - - // FIXME: Should we do anything with this if it comes in after the browser has been initialized? - } - else if(message_name == "set_language_code") - { - mHostLanguage = message_in.getValue("language"); - - // FIXME: Should we do anything with this if it comes in after the browser has been initialized? - } - else if(message_name == "plugins_enabled") - { - mPluginsEnabled = message_in.getValueBoolean("enable"); - } - else if(message_name == "javascript_enabled") - { - mJavascriptEnabled = message_in.getValueBoolean("enable"); - } - else if(message_name == "size_change") - { - std::string name = message_in.getValue("name"); - S32 width = message_in.getValueS32("width"); - S32 height = message_in.getValueS32("height"); - S32 texture_width = message_in.getValueS32("texture_width"); - S32 texture_height = message_in.getValueS32("texture_height"); - mBackgroundR = message_in.getValueReal("background_r"); - mBackgroundG = message_in.getValueReal("background_g"); - mBackgroundB = message_in.getValueReal("background_b"); -// mBackgroundA = message_in.setValueReal("background_a"); // Ignore any alpha - - if(!name.empty()) - { - // Find the shared memory region with this name - SharedSegmentMap::iterator iter = mSharedSegments.find(name); - if(iter != mSharedSegments.end()) - { - mPixels = (unsigned char*)iter->second.mAddress; - mWidth = width; - mHeight = height; - - if(initBrowserWindow()) - { - - // size changed so tell the browser - LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight ); - - // std::cerr << "webkit plugin: set size to " << mWidth << " x " << mHeight - // << ", rowspan is " << LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) << std::endl; - - S32 real_width = LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) / LLQtWebKit::getInstance()->getBrowserDepth(mBrowserWindowId); - - // The actual width the browser will be drawing to is probably smaller... let the host know by modifying texture_width in the response. - if(real_width <= texture_width) - { - texture_width = real_width; - } - else - { - // This won't work -- it'll be bigger than the allocated memory. This is a fatal error. - // std::cerr << "Fatal error: browser rowbytes greater than texture width" << std::endl; - mDeleteMe = true; - return; - } - } - else - { - // Setting up the browser window failed. This is a fatal error. - mDeleteMe = true; - } - - - mTextureWidth = texture_width; - mTextureHeight = texture_height; - - }; - }; - - LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change_response"); - message.setValue("name", name); - message.setValueS32("width", width); - message.setValueS32("height", height); - message.setValueS32("texture_width", texture_width); - message.setValueS32("texture_height", texture_height); - sendMessage(message); - - } - else if(message_name == "load_uri") - { - std::string uri = message_in.getValue("uri"); - -// std::cout << "loading URI: " << uri << std::endl; - - if(!uri.empty()) - { - if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) - { - LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, uri ); - } - else - { - mInitialNavigateURL = uri; - } - } - } - else if(message_name == "mouse_event") - { - std::string event = message_in.getValue("event"); - S32 button = message_in.getValueS32("button"); - mLastMouseX = message_in.getValueS32("x"); - mLastMouseY = message_in.getValueS32("y"); - std::string modifiers = message_in.getValue("modifiers"); - - // Treat unknown mouse events as mouse-moves. - LLQtWebKit::EMouseEvent mouse_event = LLQtWebKit::ME_MOUSE_MOVE; - if(event == "down") - { - mouse_event = LLQtWebKit::ME_MOUSE_DOWN; - } - else if(event == "up") - { - mouse_event = LLQtWebKit::ME_MOUSE_UP; - } - else if(event == "double_click") - { - mouse_event = LLQtWebKit::ME_MOUSE_DOUBLE_CLICK; - } - - LLQtWebKit::getInstance()->mouseEvent( mBrowserWindowId, mouse_event, button, mLastMouseX, mLastMouseY, decodeModifiers(modifiers)); - checkEditState(); - } - else if(message_name == "scroll_event") - { - S32 x = message_in.getValueS32("x"); - S32 y = message_in.getValueS32("y"); - std::string modifiers = message_in.getValue("modifiers"); - - // Incoming scroll events are adjusted so that 1 detent is approximately 1 unit. - // Qt expects 1 detent to be 120 units. - // It also seems that our y scroll direction is inverted vs. what Qt expects. - - x *= 120; - y *= -120; - - LLQtWebKit::getInstance()->scrollWheelEvent(mBrowserWindowId, mLastMouseX, mLastMouseY, x, y, decodeModifiers(modifiers)); - } - else if(message_name == "key_event") - { - std::string event = message_in.getValue("event"); - S32 key = message_in.getValueS32("key"); - std::string modifiers = message_in.getValue("modifiers"); - LLSD native_key_data = message_in.getValueLLSD("native_key_data"); - - // Treat unknown events as key-up for safety. - LLQtWebKit::EKeyEvent key_event = LLQtWebKit::KE_KEY_UP; - if(event == "down") - { - key_event = LLQtWebKit::KE_KEY_DOWN; - } - else if(event == "repeat") - { - key_event = LLQtWebKit::KE_KEY_REPEAT; - } - - keyEvent(key_event, key, decodeModifiers(modifiers), native_key_data); - } - else if(message_name == "text_event") - { - std::string text = message_in.getValue("text"); - std::string modifiers = message_in.getValue("modifiers"); - LLSD native_key_data = message_in.getValueLLSD("native_key_data"); - - unicodeInput(text, decodeModifiers(modifiers), native_key_data); - } - if(message_name == "edit_cut") - { - LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_CUT ); - checkEditState(); - } - if(message_name == "edit_copy") - { - LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_COPY ); - checkEditState(); - } - if(message_name == "edit_paste") - { - LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_PASTE ); - checkEditState(); - } - if(message_name == "pick_file_response") - { - onPickFileResponse(message_in.getValue("file")); - } - if(message_name == "auth_response") - { - authResponse(message_in); - } - else - if(message_name == "enable_media_plugin_debugging") - { - mEnableMediaPluginDebugging = message_in.getValueBoolean( "enable" ); - } - - else - if(message_name == "js_enable_object") - { -#if LLQTWEBKIT_API_VERSION >= 9 - bool enable = message_in.getValueBoolean( "enable" ); - LLQtWebKit::getInstance()->setSLObjectEnabled( enable ); -#endif - } - else - if(message_name == "js_agent_location") - { -#if LLQTWEBKIT_API_VERSION >= 9 - F32 x = message_in.getValueReal("x"); - F32 y = message_in.getValueReal("y"); - F32 z = message_in.getValueReal("z"); - LLQtWebKit::getInstance()->setAgentLocation( x, y, z ); - LLQtWebKit::getInstance()->emitLocation(); -#endif - } - else - if(message_name == "js_agent_global_location") - { -#if LLQTWEBKIT_API_VERSION >= 9 - F32 x = message_in.getValueReal("x"); - F32 y = message_in.getValueReal("y"); - F32 z = message_in.getValueReal("z"); - LLQtWebKit::getInstance()->setAgentGlobalLocation( x, y, z ); - LLQtWebKit::getInstance()->emitLocation(); -#endif - } - else - if(message_name == "js_agent_orientation") - { -#if LLQTWEBKIT_API_VERSION >= 9 - F32 angle = message_in.getValueReal("angle"); - LLQtWebKit::getInstance()->setAgentOrientation( angle ); - LLQtWebKit::getInstance()->emitLocation(); -#endif - } - else - if(message_name == "js_agent_region") - { -#if LLQTWEBKIT_API_VERSION >= 9 - const std::string& region = message_in.getValue("region"); - LLQtWebKit::getInstance()->setAgentRegion( region ); - LLQtWebKit::getInstance()->emitLocation(); -#endif - } - else - if(message_name == "js_agent_maturity") - { -#if LLQTWEBKIT_API_VERSION >= 9 - const std::string& maturity = message_in.getValue("maturity"); - LLQtWebKit::getInstance()->setAgentMaturity( maturity ); - LLQtWebKit::getInstance()->emitMaturity(); -#endif - } - else - if(message_name == "js_agent_language") - { -#if LLQTWEBKIT_API_VERSION >= 9 - const std::string& language = message_in.getValue("language"); - LLQtWebKit::getInstance()->setAgentLanguage( language ); - LLQtWebKit::getInstance()->emitLanguage(); -#endif - } - else - { -// std::cerr << "MediaPluginWebKit::receiveMessage: unknown media message: " << message_string << std::endl; - } - } - else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER) - { - if(message_name == "focus") - { - bool val = message_in.getValueBoolean("focused"); - LLQtWebKit::getInstance()->focusBrowser( mBrowserWindowId, val ); - - if(mFirstFocus && val) - { - // On the first focus, post a tab key event. This fixes a problem with initial focus. - std::string empty; - keyEvent(LLQtWebKit::KE_KEY_DOWN, KEY_TAB, decodeModifiers(empty)); - keyEvent(LLQtWebKit::KE_KEY_UP, KEY_TAB, decodeModifiers(empty)); - mFirstFocus = false; - } - } - else if(message_name == "clear_cache") - { - LLQtWebKit::getInstance()->clearCache(); - } - else if(message_name == "clear_cookies") - { - LLQtWebKit::getInstance()->clearAllCookies(); - } - else if(message_name == "enable_cookies") - { - mCookiesEnabled = message_in.getValueBoolean("enable"); - LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled ); - } - else if(message_name == "enable_plugins") - { - mPluginsEnabled = message_in.getValueBoolean("enable"); - LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled ); - } - else if(message_name == "enable_javascript") - { - mJavascriptEnabled = message_in.getValueBoolean("enable"); - //LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled ); - } - else if(message_name == "set_cookies") - { - LLQtWebKit::getInstance()->setCookies(message_in.getValue("cookies")); - } - else if(message_name == "proxy_setup") - { - bool val = message_in.getValueBoolean("enable"); - std::string host = message_in.getValue("host"); - int port = message_in.getValueS32("port"); - LLQtWebKit::getInstance()->enableProxy( val, host, port ); - } - else if(message_name == "browse_stop") - { - LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_STOP ); - } - else if(message_name == "browse_reload") - { - // foo = message_in.getValueBoolean("ignore_cache"); - LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_RELOAD ); - } - else if(message_name == "browse_forward") - { - LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD ); - } - else if(message_name == "browse_back") - { - LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK ); - } - else if(message_name == "set_status_redirect") - { - int code = message_in.getValueS32("code"); - std::string url = message_in.getValue("url"); - if ( 404 == code ) // browser lib only supports 404 right now - { -#if LLQTWEBKIT_API_VERSION < 8 - LLQtWebKit::getInstance()->set404RedirectUrl( mBrowserWindowId, url ); -#endif - }; - } - else if(message_name == "set_user_agent") - { - mUserAgent = message_in.getValue("user_agent"); - LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent ); - } - else if(message_name == "show_web_inspector") - { -#if LLQTWEBKIT_API_VERSION >= 10 - bool val = message_in.getValueBoolean("show"); - LLQtWebKit::getInstance()->showWebInspector( val ); -#else - llwarns << "Ignoring showWebInspector message (llqtwebkit version is too old)." << llendl; -#endif - } - else if(message_name == "ignore_ssl_cert_errors") - { -#if LLQTWEBKIT_API_VERSION >= 3 - LLQtWebKit::getInstance()->setIgnoreSSLCertErrors( message_in.getValueBoolean("ignore") ); -#else - llwarns << "Ignoring ignore_ssl_cert_errors message (llqtwebkit version is too old)." << llendl; -#endif - } - else if(message_name == "add_certificate_file_path") - { -#if LLQTWEBKIT_API_VERSION >= 6 - LLQtWebKit::getInstance()->setCAFile( message_in.getValue("path") ); -#else - llwarns << "Ignoring add_certificate_file_path message (llqtwebkit version is too old)." << llendl; -#endif - } - else if(message_name == "init_history") - { - // Initialize browser history - LLSD history = message_in.getValueLLSD("history"); - // First, clear the URL history - LLQtWebKit::getInstance()->clearHistory(mBrowserWindowId); - // Then, add the history items in order - LLSD::array_iterator iter_history = history.beginArray(); - LLSD::array_iterator end_history = history.endArray(); - for(; iter_history != end_history; ++iter_history) - { - std::string url = (*iter_history).asString(); - if(! url.empty()) { - LLQtWebKit::getInstance()->prependHistoryUrl(mBrowserWindowId, url); - } - } - } - else if(message_name == "proxy_window_opened") - { - std::string target = message_in.getValue("target"); - std::string uuid = message_in.getValue("uuid"); - LLQtWebKit::getInstance()->proxyWindowOpened(mBrowserWindowId, target, uuid); - } - else if(message_name == "proxy_window_closed") - { - std::string uuid = message_in.getValue("uuid"); - LLQtWebKit::getInstance()->proxyWindowClosed(mBrowserWindowId, uuid); - } - else - { -// std::cerr << "MediaPluginWebKit::receiveMessage: unknown media_browser message: " << message_string << std::endl; - }; - } - else - { -// std::cerr << "MediaPluginWebKit::receiveMessage: unknown message class: " << message_class << std::endl; - }; - } -} - -void MediaPluginWebKit::setVolume(F32 volume) -{ - mVolumeCatcher.setVolume(volume); -} - -int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data, LLPluginInstance::sendMessageFunction *plugin_send_func, void **plugin_user_data) -{ - MediaPluginWebKit *self = new MediaPluginWebKit(host_send_func, host_user_data); - *plugin_send_func = MediaPluginWebKit::staticReceiveMessage; - *plugin_user_data = (void*)self; - - return 0; -} - - +/** + * @file media_plugin_webkit.cpp + * @brief Webkit plugin for LLMedia API plugin system + * + * @cond + * $LicenseInfo:firstyear=2008&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + * @endcond + */ + +#include "llqtwebkit.h" + +#include "linden_common.h" +#include "indra_constants.h" // for indra keyboard codes + +#include "llgl.h" + +#include "llplugininstance.h" +#include "llpluginmessage.h" +#include "llpluginmessageclasses.h" +#include "media_plugin_base.h" + +// set to 1 if you're using the version of llqtwebkit that's QPixmap-ified +#if LL_LINUX +# define LL_QTWEBKIT_USES_PIXMAPS 0 +extern "C" { +# include +# include +} +#else +# define LL_QTWEBKIT_USES_PIXMAPS 0 +#endif // LL_LINUX + +# include "volume_catcher.h" + +#if LL_WINDOWS +# include +#else +# include +# include +#endif + +#if LL_WINDOWS + // *NOTE:Mani - This captures the module handle for the dll. This is used below + // to get the path to this dll for webkit initialization. + // I don't know how/if this can be done with apr... + namespace { HMODULE gModuleHandle;}; + BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) + { + gModuleHandle = (HMODULE) hinstDLL; + return TRUE; + } +#endif + +//////////////////////////////////////////////////////////////////////////////// +// +class MediaPluginWebKit : + public MediaPluginBase, + public LLEmbeddedBrowserWindowObserver +{ +public: + MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data); + ~MediaPluginWebKit(); + + /*virtual*/ void receiveMessage(const char *message_string); + +private: + + std::string mProfileDir; + std::string mHostLanguage; + std::string mUserAgent; + bool mCookiesEnabled; + bool mJavascriptEnabled; + bool mPluginsEnabled; + bool mEnableMediaPluginDebugging; + + enum + { + INIT_STATE_UNINITIALIZED, // LLQtWebkit hasn't been set up yet + INIT_STATE_INITIALIZED, // LLQtWebkit has been set up, but no browser window has been created yet. + INIT_STATE_NAVIGATING, // Browser instance has been set up and initial navigate to about:blank has been issued + INIT_STATE_NAVIGATE_COMPLETE, // initial navigate to about:blank has completed + INIT_STATE_WAIT_REDRAW, // First real navigate begin has been received, waiting for page changed event to start handling redraws + INIT_STATE_WAIT_COMPLETE, // Waiting for first real navigate complete event + INIT_STATE_RUNNING // All initialization gymnastics are complete. + }; + int mBrowserWindowId; + int mInitState; + std::string mInitialNavigateURL; + bool mNeedsUpdate; + + bool mCanCut; + bool mCanCopy; + bool mCanPaste; + int mLastMouseX; + int mLastMouseY; + bool mFirstFocus; + F32 mBackgroundR; + F32 mBackgroundG; + F32 mBackgroundB; + std::string mTarget; + + VolumeCatcher mVolumeCatcher; + + void postDebugMessage( const std::string& msg ) + { + if ( mEnableMediaPluginDebugging ) + { + LLPluginMessage debug_message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "debug_message"); + debug_message.setValue("message_text", "Media> " + msg); + debug_message.setValue("message_level", "info"); + sendMessage(debug_message); + } + } + + void setInitState(int state) + { +// std::cerr << "changing init state to " << state << std::endl; + mInitState = state; + } + + //////////////////////////////////////////////////////////////////////////////// + // + void update(int milliseconds) + { +#if LL_QTLINUX_DOESNT_HAVE_GLIB + // pump glib generously, as Linux browser plugins are on the + // glib main loop, even if the browser itself isn't - ugh + // This is NOT NEEDED if Qt itself was built with glib + // mainloop integration. + GMainContext *mainc = g_main_context_default(); + while(g_main_context_iteration(mainc, FALSE)); +#endif // LL_QTLINUX_DOESNT_HAVE_GLIB + + // pump qt + LLQtWebKit::getInstance()->pump( milliseconds ); + + mVolumeCatcher.pump(); + + checkEditState(); + + if(mInitState == INIT_STATE_NAVIGATE_COMPLETE) + { + if(!mInitialNavigateURL.empty()) + { + // We already have the initial navigate URL -- kick off the navigate. + LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, mInitialNavigateURL ); + mInitialNavigateURL.clear(); + } + } + + if ( (mInitState > INIT_STATE_WAIT_REDRAW) && mNeedsUpdate ) + { + const unsigned char* browser_pixels = LLQtWebKit::getInstance()->grabBrowserWindow( mBrowserWindowId ); + + unsigned int rowspan = LLQtWebKit::getInstance()->getBrowserRowSpan( mBrowserWindowId ); + unsigned int height = LLQtWebKit::getInstance()->getBrowserHeight( mBrowserWindowId ); +#if !LL_QTWEBKIT_USES_PIXMAPS + unsigned int buffer_size = rowspan * height; +#endif // !LL_QTWEBKIT_USES_PIXMAPS + +// std::cerr << "webkit plugin: updating" << std::endl; + + // TODO: should get rid of this memcpy if possible + if ( mPixels && browser_pixels ) + { +// std::cerr << " memcopy of " << buffer_size << " bytes" << std::endl; + +#if LL_QTWEBKIT_USES_PIXMAPS + // copy the pixel data upside-down because of the co-ord system + for (int y=0; y 0 && mHeight > 0 ) + { +// std::cerr << "Setting dirty, " << mWidth << " x " << mHeight << std::endl; + setDirty( 0, 0, mWidth, mHeight ); + } + + mNeedsUpdate = false; + }; + }; + + //////////////////////////////////////////////////////////////////////////////// + // + bool initBrowser() + { + // already initialized + if ( mInitState > INIT_STATE_UNINITIALIZED ) + return true; + + // set up directories + char cwd[ FILENAME_MAX ]; // I *think* this is defined on all platforms we use + if (NULL == getcwd( cwd, FILENAME_MAX - 1 )) + { + llwarns << "Couldn't get cwd - probably too long - failing to init." << llendl; + return false; + } + std::string application_dir = std::string( cwd ); + +#if LL_LINUX + // take care to initialize glib properly, because some + // versions of Qt don't, and we indirectly need it for (some + // versions of) Flash to not crash the browser. + if (!g_thread_supported ()) g_thread_init (NULL); + g_type_init(); +#endif + +#if LL_DARWIN + // When running under the Xcode debugger, there's a setting called "Break on Debugger()/DebugStr()" which defaults to being turned on. + // This causes the environment variable USERBREAK to be set to 1, which causes these legacy calls to break into the debugger. + // This wouldn't cause any problems except for the fact that the current release version of the Flash plugin has a call to Debugger() in it + // which gets hit when the plugin is probed by webkit. + // Unsetting the environment variable here works around this issue. + unsetenv("USERBREAK"); +#endif + +#if LL_WINDOWS + //*NOTE:Mani - On windows, at least, the component path is the + // location of this dll's image file. + std::string component_dir; + char dll_path[_MAX_PATH]; + DWORD len = GetModuleFileNameA(gModuleHandle, (LPCH)&dll_path, _MAX_PATH); + while(len && dll_path[ len ] != ('\\') ) + { + len--; + } + if(len >= 0) + { + dll_path[len] = 0; + component_dir = dll_path; + } + else + { + // *NOTE:Mani - This case should be an rare exception. + // GetModuleFileNameA should always give you a full path, no? + component_dir = application_dir; + } +#else + std::string component_dir = application_dir; +#endif + + // debug spam sent to viewer and displayed in the log as usual + postDebugMessage( "Component dir set to: " + component_dir ); + + // window handle - needed on Windows and must be app window. +#if LL_WINDOWS + char window_title[ MAX_PATH ]; + GetConsoleTitleA( window_title, MAX_PATH ); + void* native_window_handle = (void*)FindWindowA( NULL, window_title ); +#else + void* native_window_handle = 0; +#endif + + // main browser initialization + bool result = LLQtWebKit::getInstance()->init( application_dir, component_dir, mProfileDir, native_window_handle ); + if ( result ) + { + mInitState = INIT_STATE_INITIALIZED; + + // debug spam sent to viewer and displayed in the log as usual + postDebugMessage( "browser initialized okay" ); + + return true; + }; + + // debug spam sent to viewer and displayed in the log as usual + postDebugMessage( "browser nOT initialized." ); + + return false; + }; + + //////////////////////////////////////////////////////////////////////////////// + // + bool initBrowserWindow() + { + // already initialized + if ( mInitState > INIT_STATE_INITIALIZED ) + return true; + + // not enough information to initialize the browser yet. + if ( mWidth < 0 || mHeight < 0 || mDepth < 0 || + mTextureWidth < 0 || mTextureHeight < 0 ) + { + return false; + }; + + // Set up host language before creating browser window + if(!mHostLanguage.empty()) + { + LLQtWebKit::getInstance()->setHostLanguage(mHostLanguage); + postDebugMessage( "Setting language to " + mHostLanguage ); + } + + // turn on/off cookies based on what host app tells us + LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled ); + + // turn on/off plugins based on what host app tells us + LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled ); + + // turn on/off Javascript based on what host app tells us + LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled ); + + std::stringstream str; + str << "Cookies enabled = " << mCookiesEnabled << ", plugins enabled = " << mPluginsEnabled << ", Javascript enabled = " << mJavascriptEnabled; + postDebugMessage( str.str() ); + + // create single browser window + mBrowserWindowId = LLQtWebKit::getInstance()->createBrowserWindow( mWidth, mHeight, mTarget); + + str.str(""); + str.clear(); + str << "Setting browser window size to " << mWidth << " x " << mHeight; + postDebugMessage( str.str() ); + + // tell LLQtWebKit about the size of the browser window + LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight ); + + // observer events that LLQtWebKit emits + LLQtWebKit::getInstance()->addObserver( mBrowserWindowId, this ); + + // append details to agent string + LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent ); + postDebugMessage( "Updating user agent with " + mUserAgent ); + +#if !LL_QTWEBKIT_USES_PIXMAPS + // don't flip bitmap + LLQtWebKit::getInstance()->flipWindow( mBrowserWindowId, true ); +#endif // !LL_QTWEBKIT_USES_PIXMAPS + + // set background color + // convert background color channels from [0.0, 1.0] to [0, 255]; + LLQtWebKit::getInstance()->setBackgroundColor( mBrowserWindowId, int(mBackgroundR * 255.0f), int(mBackgroundG * 255.0f), int(mBackgroundB * 255.0f) ); + + // Set state _before_ starting the navigate, since onNavigateBegin might get called before this call returns. + setInitState(INIT_STATE_NAVIGATING); + + // Don't do this here -- it causes the dreaded "white flash" when loading a browser instance. + // FIXME: Re-added this because navigating to a "page" initializes things correctly - especially + // for the HTTP AUTH dialog issues (DEV-41731). Will fix at a later date. + // Build a data URL like this: "data:text/html,%3Chtml%3E%3Cbody bgcolor=%22#RRGGBB%22%3E%3C/body%3E%3C/html%3E" + // where RRGGBB is the background color in HTML style + std::stringstream url; + + url << "data:text/html,%3Chtml%3E%3Cbody%20bgcolor=%22#"; + // convert background color channels from [0.0, 1.0] to [0, 255]; + url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundR * 255.0f); + url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundG * 255.0f); + url << std::setfill('0') << std::setw(2) << std::hex << int(mBackgroundB * 255.0f); + url << "%22%3E%3C/body%3E%3C/html%3E"; + + //lldebugs << "data url is: " << url.str() << llendl; + + LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, url.str() ); +// LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, "about:blank" ); + + return true; + } + + void setVolume(F32 vol); + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onCursorChanged(const EventType& event) + { + LLQtWebKit::ECursor llqt_cursor = (LLQtWebKit::ECursor)event.getIntValue(); + std::string name; + + switch(llqt_cursor) + { + case LLQtWebKit::C_ARROW: + name = "arrow"; + break; + case LLQtWebKit::C_IBEAM: + name = "ibeam"; + break; + case LLQtWebKit::C_SPLITV: + name = "splitv"; + break; + case LLQtWebKit::C_SPLITH: + name = "splith"; + break; + case LLQtWebKit::C_POINTINGHAND: + name = "hand"; + break; + + default: + llwarns << "Unknown cursor ID: " << (int)llqt_cursor << llendl; + break; + } + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "cursor_changed"); + message.setValue("name", name); + sendMessage(message); + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onPageChanged( const EventType& event ) + { + if(mInitState == INIT_STATE_WAIT_REDRAW) + { + setInitState(INIT_STATE_WAIT_COMPLETE); + } + + // flag that an update is required + mNeedsUpdate = true; + }; + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onNavigateBegin(const EventType& event) + { + if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_begin"); + message.setValue("uri", event.getEventUri()); + message.setValueBoolean("history_back_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK)); + message.setValueBoolean("history_forward_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD)); + sendMessage(message); + + // debug spam sent to viewer and displayed in the log as usual + postDebugMessage( "Navigate begin event at: " + event.getEventUri() ); + + setStatus(STATUS_LOADING); + } + + if(mInitState == INIT_STATE_NAVIGATE_COMPLETE) + { + // Skip the WAIT_REDRAW state now -- with the right background color set, it should no longer be necessary. +// setInitState(INIT_STATE_WAIT_REDRAW); + setInitState(INIT_STATE_WAIT_COMPLETE); + } + + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onNavigateComplete(const EventType& event) + { + if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) + { + if(mInitState < INIT_STATE_RUNNING) + { + setInitState(INIT_STATE_RUNNING); + + // Clear the history, so the "back" button doesn't take you back to "about:blank". + LLQtWebKit::getInstance()->clearHistory(mBrowserWindowId); + } + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_complete"); + message.setValue("uri", event.getEventUri()); + message.setValueS32("result_code", event.getIntValue()); + message.setValue("result_string", event.getStringValue()); + message.setValueBoolean("history_back_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK)); + message.setValueBoolean("history_forward_available", LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD)); + sendMessage(message); + + setStatus(STATUS_LOADED); + } + else if(mInitState == INIT_STATE_NAVIGATING) + { + setInitState(INIT_STATE_NAVIGATE_COMPLETE); + } + + // debug spam sent to viewer and displayed in the log as usual + postDebugMessage( "Navigate complete event at: " + event.getEventUri() ); + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onUpdateProgress(const EventType& event) + { + if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "progress"); + message.setValueS32("percent", event.getIntValue()); + sendMessage(message); + } + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onStatusTextChange(const EventType& event) + { + if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "status_text"); + message.setValue("status", event.getStringValue()); + sendMessage(message); + } + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onTitleChange(const EventType& event) + { + if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "name_text"); + message.setValue("name", event.getStringValue()); + sendMessage(message); + } + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onNavigateErrorPage(const EventType& event) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "navigate_error_page"); + message.setValueS32("status_code", event.getIntValue()); + sendMessage(message); + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onLocationChange(const EventType& event) + { + if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "location_changed"); + message.setValue("uri", event.getEventUri()); + sendMessage(message); + } + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onClickLinkHref(const EventType& event) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_href"); + message.setValue("uri", event.getEventUri()); + message.setValue("target", event.getStringValue()); + message.setValue("uuid", event.getStringValue2()); + sendMessage(message); + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onClickLinkNoFollow(const EventType& event) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "click_nofollow"); + message.setValue("uri", event.getEventUri()); +#if LLQTWEBKIT_API_VERSION >= 7 + message.setValue("nav_type", event.getNavigationType()); +#else + message.setValue("nav_type", "clicked"); +#endif + sendMessage(message); + } + + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onCookieChanged(const EventType& event) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "cookie_set"); + message.setValue("cookie", event.getStringValue()); + // These could be passed through as well, but aren't really needed. +// message.setValue("uri", event.getEventUri()); +// message.setValueBoolean("dead", (event.getIntValue() != 0)) + sendMessage(message); + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onWindowCloseRequested(const EventType& event) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "close_request"); + message.setValue("uuid", event.getStringValue()); + sendMessage(message); + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onWindowGeometryChangeRequested(const EventType& event) + { + int x, y, width, height; + event.getRectValue(x, y, width, height); + + // This sometimes gets called with a zero-size request. Don't pass these along. + if(width > 0 && height > 0) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "geometry_change"); + message.setValue("uuid", event.getStringValue()); + message.setValueS32("x", x); + message.setValueS32("y", y); + message.setValueS32("width", width); + message.setValueS32("height", height); + sendMessage(message); + } + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + std::string onRequestFilePicker( const EventType& eventIn ) + { + return blockingPickFile(); + } + + std::string mAuthUsername; + std::string mAuthPassword; + bool mAuthOK; + + //////////////////////////////////////////////////////////////////////////////// + // virtual + bool onAuthRequest(const std::string &in_url, const std::string &in_realm, std::string &out_username, std::string &out_password) + { + mAuthOK = false; + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "auth_request"); + message.setValue("url", in_url); + message.setValue("realm", in_realm); + message.setValueBoolean("blocking_request", true); + + // The "blocking_request" key in the message means this sendMessage call will block until a response is received. + sendMessage(message); + + if(mAuthOK) + { + out_username = mAuthUsername; + out_password = mAuthPassword; + } + + return mAuthOK; + } + + void authResponse(LLPluginMessage &message) + { + mAuthOK = message.getValueBoolean("ok"); + if(mAuthOK) + { + mAuthUsername = message.getValue("username"); + mAuthPassword = message.getValue("password"); + } + } + + //////////////////////////////////////////////////////////////////////////////// + // virtual + void onLinkHovered(const EventType& event) + { + if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER, "link_hovered"); + message.setValue("link", event.getEventUri()); + message.setValue("title", event.getStringValue()); + message.setValue("text", event.getStringValue2()); + sendMessage(message); + } + } + + LLQtWebKit::EKeyboardModifier decodeModifiers(std::string &modifiers) + { + int result = 0; + + if(modifiers.find("shift") != std::string::npos) + result |= LLQtWebKit::KM_MODIFIER_SHIFT; + + if(modifiers.find("alt") != std::string::npos) + result |= LLQtWebKit::KM_MODIFIER_ALT; + + if(modifiers.find("control") != std::string::npos) + result |= LLQtWebKit::KM_MODIFIER_CONTROL; + + if(modifiers.find("meta") != std::string::npos) + result |= LLQtWebKit::KM_MODIFIER_META; + + return (LLQtWebKit::EKeyboardModifier)result; + } + + //////////////////////////////////////////////////////////////////////////////// + // + void deserializeKeyboardData( LLSD native_key_data, uint32_t& native_scan_code, uint32_t& native_virtual_key, uint32_t& native_modifiers ) + { + native_scan_code = 0; + native_virtual_key = 0; + native_modifiers = 0; + + if( native_key_data.isMap() ) + { +#if LL_DARWIN + native_scan_code = (uint32_t)(native_key_data["char_code"].asInteger()); + native_virtual_key = (uint32_t)(native_key_data["key_code"].asInteger()); + native_modifiers = (uint32_t)(native_key_data["modifiers"].asInteger()); +#elif LL_WINDOWS + native_scan_code = (uint32_t)(native_key_data["scan_code"].asInteger()); + native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger()); + // TODO: I don't think we need to do anything with native modifiers here -- please verify +#elif LL_LINUX + native_scan_code = (uint32_t)(native_key_data["scan_code"].asInteger()); + native_virtual_key = (uint32_t)(native_key_data["virtual_key"].asInteger()); + native_modifiers = (uint32_t)(native_key_data["modifiers"].asInteger()); +#else + // Add other platforms here as needed +#endif + }; + }; + + //////////////////////////////////////////////////////////////////////////////// + // + void keyEvent(LLQtWebKit::EKeyEvent key_event, int key, LLQtWebKit::EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap()) + { + // The incoming values for 'key' will be the ones from indra_constants.h + std::string utf8_text; + + if(key < KEY_SPECIAL) + { + // Low-ascii characters need to get passed through. + utf8_text = (char)key; + } + + // Any special-case handling we want to do for particular keys... + switch((KEY)key) + { + // ASCII codes for some standard keys + case LLQtWebKit::KEY_BACKSPACE: utf8_text = (char)8; break; + case LLQtWebKit::KEY_TAB: utf8_text = (char)9; break; + case LLQtWebKit::KEY_RETURN: utf8_text = (char)13; break; + case LLQtWebKit::KEY_PAD_RETURN: utf8_text = (char)13; break; + case LLQtWebKit::KEY_ESCAPE: utf8_text = (char)27; break; + + default: + break; + } + +// std::cerr << "key event " << (int)key_event << ", native_key_data = " << native_key_data << std::endl; + + uint32_t native_scan_code = 0; + uint32_t native_virtual_key = 0; + uint32_t native_modifiers = 0; + deserializeKeyboardData( native_key_data, native_scan_code, native_virtual_key, native_modifiers ); + + LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, key_event, (uint32_t)key, utf8_text.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers); + + checkEditState(); + }; + + //////////////////////////////////////////////////////////////////////////////// + // + void unicodeInput( const std::string &utf8str, LLQtWebKit::EKeyboardModifier modifiers, LLSD native_key_data = LLSD::emptyMap()) + { + uint32_t key = LLQtWebKit::KEY_NONE; + +// std::cerr << "unicode input, native_key_data = " << native_key_data << std::endl; + + if(utf8str.size() == 1) + { + // The only way a utf8 string can be one byte long is if it's actually a single 7-bit ascii character. + // In this case, use it as the key value. + key = utf8str[0]; + } + + uint32_t native_scan_code = 0; + uint32_t native_virtual_key = 0; + uint32_t native_modifiers = 0; + deserializeKeyboardData( native_key_data, native_scan_code, native_virtual_key, native_modifiers ); + + LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, LLQtWebKit::KE_KEY_DOWN, (uint32_t)key, utf8str.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers); + LLQtWebKit::getInstance()->keyboardEvent( mBrowserWindowId, LLQtWebKit::KE_KEY_UP, (uint32_t)key, utf8str.c_str(), modifiers, native_scan_code, native_virtual_key, native_modifiers); + + checkEditState(); + }; + + void checkEditState(void) + { + bool can_cut = LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_EDIT_CUT); + bool can_copy = LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_EDIT_COPY); + bool can_paste = LLQtWebKit::getInstance()->userActionIsEnabled( mBrowserWindowId, LLQtWebKit::UA_EDIT_PASTE); + + if((can_cut != mCanCut) || (can_copy != mCanCopy) || (can_paste != mCanPaste)) + { + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "edit_state"); + + if(can_cut != mCanCut) + { + mCanCut = can_cut; + message.setValueBoolean("cut", can_cut); + } + + if(can_copy != mCanCopy) + { + mCanCopy = can_copy; + message.setValueBoolean("copy", can_copy); + } + + if(can_paste != mCanPaste) + { + mCanPaste = can_paste; + message.setValueBoolean("paste", can_paste); + } + + sendMessage(message); + + } + } + + std::string mPickedFile; + + std::string blockingPickFile(void) + { + mPickedFile.clear(); + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "pick_file"); + message.setValueBoolean("blocking_request", true); + + // The "blocking_request" key in the message means this sendMessage call will block until a response is received. + sendMessage(message); + + return mPickedFile; + } + + void onPickFileResponse(const std::string &file) + { + mPickedFile = file; + } + +}; + +MediaPluginWebKit::MediaPluginWebKit(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data) : + MediaPluginBase(host_send_func, host_user_data) +{ +// std::cerr << "MediaPluginWebKit constructor" << std::endl; + + mBrowserWindowId = 0; + mInitState = INIT_STATE_UNINITIALIZED; + mNeedsUpdate = true; + mCanCut = false; + mCanCopy = false; + mCanPaste = false; + mLastMouseX = 0; + mLastMouseY = 0; + mFirstFocus = true; + mBackgroundR = 0.0f; + mBackgroundG = 0.0f; + mBackgroundB = 0.0f; + + mHostLanguage = "en"; // default to english + mJavascriptEnabled = true; // default to on + mPluginsEnabled = true; // default to on + mEnableMediaPluginDebugging = false; + mUserAgent = "LLPluginMedia Web Browser"; +} + +MediaPluginWebKit::~MediaPluginWebKit() +{ + // unhook observer + LLQtWebKit::getInstance()->remObserver( mBrowserWindowId, this ); + + // clean up + LLQtWebKit::getInstance()->reset(); + +// std::cerr << "MediaPluginWebKit destructor" << std::endl; +} + +void MediaPluginWebKit::receiveMessage(const char *message_string) +{ +// std::cerr << "MediaPluginWebKit::receiveMessage: received message: \"" << message_string << "\"" << std::endl; + LLPluginMessage message_in; + + if(message_in.parse(message_string) >= 0) + { + std::string message_class = message_in.getClass(); + std::string message_name = message_in.getName(); + if(message_class == LLPLUGIN_MESSAGE_CLASS_BASE) + { + if(message_name == "init") + { + LLPluginMessage message("base", "init_response"); + LLSD versions = LLSD::emptyMap(); + versions[LLPLUGIN_MESSAGE_CLASS_BASE] = LLPLUGIN_MESSAGE_CLASS_BASE_VERSION; + versions[LLPLUGIN_MESSAGE_CLASS_MEDIA] = LLPLUGIN_MESSAGE_CLASS_MEDIA_VERSION; + versions[LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER] = LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER_VERSION; + message.setValueLLSD("versions", versions); + + std::string plugin_version = "Webkit media plugin, Webkit version "; + plugin_version += LLQtWebKit::getInstance()->getVersion(); + message.setValue("plugin_version", plugin_version); + sendMessage(message); + } + else if(message_name == "idle") + { + // no response is necessary here. + F64 time = message_in.getValueReal("time"); + + // Convert time to milliseconds for update() + update((int)(time * 1000.0f)); + } + else if(message_name == "cleanup") + { + // DTOR most likely won't be called but the recent change to the way this process + // is (not) killed means we see this message and can do what we need to here. + // Note: this cleanup is ultimately what writes cookies to the disk + LLQtWebKit::getInstance()->remObserver( mBrowserWindowId, this ); + LLQtWebKit::getInstance()->reset(); + } + else if(message_name == "shm_added") + { + SharedSegmentInfo info; + info.mAddress = message_in.getValuePointer("address"); + info.mSize = (size_t)message_in.getValueS32("size"); + std::string name = message_in.getValue("name"); + +// std::cerr << "MediaPluginWebKit::receiveMessage: shared memory added, name: " << name +// << ", size: " << info.mSize +// << ", address: " << info.mAddress +// << std::endl; + + mSharedSegments.insert(SharedSegmentMap::value_type(name, info)); + + } + else if(message_name == "shm_remove") + { + std::string name = message_in.getValue("name"); + +// std::cerr << "MediaPluginWebKit::receiveMessage: shared memory remove, name = " << name << std::endl; + + SharedSegmentMap::iterator iter = mSharedSegments.find(name); + if(iter != mSharedSegments.end()) + { + if(mPixels == iter->second.mAddress) + { + // This is the currently active pixel buffer. Make sure we stop drawing to it. + mPixels = NULL; + mTextureSegmentName.clear(); + } + mSharedSegments.erase(iter); + } + else + { +// std::cerr << "MediaPluginWebKit::receiveMessage: unknown shared memory region!" << std::endl; + } + + // Send the response so it can be cleaned up. + LLPluginMessage message("base", "shm_remove_response"); + message.setValue("name", name); + sendMessage(message); + } + else + { +// std::cerr << "MediaPluginWebKit::receiveMessage: unknown base message: " << message_name << std::endl; + } + } + else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_TIME) + { + if(message_name == "set_volume") + { + F32 volume = message_in.getValueReal("volume"); + setVolume(volume); + } + } + else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA) + { + if(message_name == "init") + { + mTarget = message_in.getValue("target"); + + // This is the media init message -- all necessary data for initialization should have been received. + if(initBrowser()) + { + + // Plugin gets to decide the texture parameters to use. + mDepth = 4; + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "texture_params"); + message.setValueS32("default_width", 1024); + message.setValueS32("default_height", 1024); + message.setValueS32("depth", mDepth); + message.setValueU32("internalformat", GL_RGBA); + #if LL_QTWEBKIT_USES_PIXMAPS + message.setValueU32("format", GL_BGRA_EXT); // I hope this isn't system-dependant... is it? If so, we'll have to check the root window's pixel layout or something... yuck. + #else + message.setValueU32("format", GL_RGBA); + #endif // LL_QTWEBKIT_USES_PIXMAPS + message.setValueU32("type", GL_UNSIGNED_BYTE); + message.setValueBoolean("coords_opengl", true); + sendMessage(message); + } + else + { + // if initialization failed, we're done. + mDeleteMe = true; + } + + } + else if(message_name == "set_user_data_path") + { + std::string user_data_path = message_in.getValue("path"); // n.b. always has trailing platform-specific dir-delimiter + mProfileDir = user_data_path + "browser_profile"; + + // FIXME: Should we do anything with this if it comes in after the browser has been initialized? + } + else if(message_name == "set_language_code") + { + mHostLanguage = message_in.getValue("language"); + + // FIXME: Should we do anything with this if it comes in after the browser has been initialized? + } + else if(message_name == "plugins_enabled") + { + mPluginsEnabled = message_in.getValueBoolean("enable"); + } + else if(message_name == "javascript_enabled") + { + mJavascriptEnabled = message_in.getValueBoolean("enable"); + } + else if(message_name == "size_change") + { + std::string name = message_in.getValue("name"); + S32 width = message_in.getValueS32("width"); + S32 height = message_in.getValueS32("height"); + S32 texture_width = message_in.getValueS32("texture_width"); + S32 texture_height = message_in.getValueS32("texture_height"); + mBackgroundR = message_in.getValueReal("background_r"); + mBackgroundG = message_in.getValueReal("background_g"); + mBackgroundB = message_in.getValueReal("background_b"); +// mBackgroundA = message_in.setValueReal("background_a"); // Ignore any alpha + + if(!name.empty()) + { + // Find the shared memory region with this name + SharedSegmentMap::iterator iter = mSharedSegments.find(name); + if(iter != mSharedSegments.end()) + { + mPixels = (unsigned char*)iter->second.mAddress; + mWidth = width; + mHeight = height; + + if(initBrowserWindow()) + { + + // size changed so tell the browser + LLQtWebKit::getInstance()->setSize( mBrowserWindowId, mWidth, mHeight ); + + // std::cerr << "webkit plugin: set size to " << mWidth << " x " << mHeight + // << ", rowspan is " << LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) << std::endl; + + S32 real_width = LLQtWebKit::getInstance()->getBrowserRowSpan(mBrowserWindowId) / LLQtWebKit::getInstance()->getBrowserDepth(mBrowserWindowId); + + // The actual width the browser will be drawing to is probably smaller... let the host know by modifying texture_width in the response. + if(real_width <= texture_width) + { + texture_width = real_width; + } + else + { + // This won't work -- it'll be bigger than the allocated memory. This is a fatal error. + // std::cerr << "Fatal error: browser rowbytes greater than texture width" << std::endl; + mDeleteMe = true; + return; + } + } + else + { + // Setting up the browser window failed. This is a fatal error. + mDeleteMe = true; + } + + + mTextureWidth = texture_width; + mTextureHeight = texture_height; + + }; + }; + + LLPluginMessage message(LLPLUGIN_MESSAGE_CLASS_MEDIA, "size_change_response"); + message.setValue("name", name); + message.setValueS32("width", width); + message.setValueS32("height", height); + message.setValueS32("texture_width", texture_width); + message.setValueS32("texture_height", texture_height); + sendMessage(message); + + } + else if(message_name == "load_uri") + { + std::string uri = message_in.getValue("uri"); + +// std::cout << "loading URI: " << uri << std::endl; + + if(!uri.empty()) + { + if(mInitState >= INIT_STATE_NAVIGATE_COMPLETE) + { + LLQtWebKit::getInstance()->navigateTo( mBrowserWindowId, uri ); + } + else + { + mInitialNavigateURL = uri; + } + } + } + else if(message_name == "mouse_event") + { + std::string event = message_in.getValue("event"); + S32 button = message_in.getValueS32("button"); + mLastMouseX = message_in.getValueS32("x"); + mLastMouseY = message_in.getValueS32("y"); + std::string modifiers = message_in.getValue("modifiers"); + + // Treat unknown mouse events as mouse-moves. + LLQtWebKit::EMouseEvent mouse_event = LLQtWebKit::ME_MOUSE_MOVE; + if(event == "down") + { + mouse_event = LLQtWebKit::ME_MOUSE_DOWN; + } + else if(event == "up") + { + mouse_event = LLQtWebKit::ME_MOUSE_UP; + } + else if(event == "double_click") + { + mouse_event = LLQtWebKit::ME_MOUSE_DOUBLE_CLICK; + } + + LLQtWebKit::getInstance()->mouseEvent( mBrowserWindowId, mouse_event, button, mLastMouseX, mLastMouseY, decodeModifiers(modifiers)); + checkEditState(); + } + else if(message_name == "scroll_event") + { + S32 x = message_in.getValueS32("x"); + S32 y = message_in.getValueS32("y"); + std::string modifiers = message_in.getValue("modifiers"); + + // Incoming scroll events are adjusted so that 1 detent is approximately 1 unit. + // Qt expects 1 detent to be 120 units. + // It also seems that our y scroll direction is inverted vs. what Qt expects. + + x *= 120; + y *= -120; + + LLQtWebKit::getInstance()->scrollWheelEvent(mBrowserWindowId, mLastMouseX, mLastMouseY, x, y, decodeModifiers(modifiers)); + } + else if(message_name == "key_event") + { + std::string event = message_in.getValue("event"); + S32 key = message_in.getValueS32("key"); + std::string modifiers = message_in.getValue("modifiers"); + LLSD native_key_data = message_in.getValueLLSD("native_key_data"); + + // Treat unknown events as key-up for safety. + LLQtWebKit::EKeyEvent key_event = LLQtWebKit::KE_KEY_UP; + if(event == "down") + { + key_event = LLQtWebKit::KE_KEY_DOWN; + } + else if(event == "repeat") + { + key_event = LLQtWebKit::KE_KEY_REPEAT; + } + + keyEvent(key_event, key, decodeModifiers(modifiers), native_key_data); + } + else if(message_name == "text_event") + { + std::string text = message_in.getValue("text"); + std::string modifiers = message_in.getValue("modifiers"); + LLSD native_key_data = message_in.getValueLLSD("native_key_data"); + + unicodeInput(text, decodeModifiers(modifiers), native_key_data); + } + if(message_name == "edit_cut") + { + LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_CUT ); + checkEditState(); + } + if(message_name == "edit_copy") + { + LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_COPY ); + checkEditState(); + } + if(message_name == "edit_paste") + { + LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_EDIT_PASTE ); + checkEditState(); + } + if(message_name == "pick_file_response") + { + onPickFileResponse(message_in.getValue("file")); + } + if(message_name == "auth_response") + { + authResponse(message_in); + } + else + if(message_name == "enable_media_plugin_debugging") + { + mEnableMediaPluginDebugging = message_in.getValueBoolean( "enable" ); + } + + else + if(message_name == "js_enable_object") + { +#if LLQTWEBKIT_API_VERSION >= 9 + bool enable = message_in.getValueBoolean( "enable" ); + LLQtWebKit::getInstance()->setSLObjectEnabled( enable ); +#endif + } + else + if(message_name == "js_agent_location") + { +#if LLQTWEBKIT_API_VERSION >= 9 + F32 x = message_in.getValueReal("x"); + F32 y = message_in.getValueReal("y"); + F32 z = message_in.getValueReal("z"); + LLQtWebKit::getInstance()->setAgentLocation( x, y, z ); + LLQtWebKit::getInstance()->emitLocation(); +#endif + } + else + if(message_name == "js_agent_global_location") + { +#if LLQTWEBKIT_API_VERSION >= 9 + F32 x = message_in.getValueReal("x"); + F32 y = message_in.getValueReal("y"); + F32 z = message_in.getValueReal("z"); + LLQtWebKit::getInstance()->setAgentGlobalLocation( x, y, z ); + LLQtWebKit::getInstance()->emitLocation(); +#endif + } + else + if(message_name == "js_agent_orientation") + { +#if LLQTWEBKIT_API_VERSION >= 9 + F32 angle = message_in.getValueReal("angle"); + LLQtWebKit::getInstance()->setAgentOrientation( angle ); + LLQtWebKit::getInstance()->emitLocation(); +#endif + } + else + if(message_name == "js_agent_region") + { +#if LLQTWEBKIT_API_VERSION >= 9 + const std::string& region = message_in.getValue("region"); + LLQtWebKit::getInstance()->setAgentRegion( region ); + LLQtWebKit::getInstance()->emitLocation(); +#endif + } + else + if(message_name == "js_agent_maturity") + { +#if LLQTWEBKIT_API_VERSION >= 9 + const std::string& maturity = message_in.getValue("maturity"); + LLQtWebKit::getInstance()->setAgentMaturity( maturity ); + LLQtWebKit::getInstance()->emitMaturity(); +#endif + } + else + if(message_name == "js_agent_language") + { +#if LLQTWEBKIT_API_VERSION >= 9 + const std::string& language = message_in.getValue("language"); + LLQtWebKit::getInstance()->setAgentLanguage( language ); + LLQtWebKit::getInstance()->emitLanguage(); +#endif + } + else + { +// std::cerr << "MediaPluginWebKit::receiveMessage: unknown media message: " << message_string << std::endl; + } + } + else if(message_class == LLPLUGIN_MESSAGE_CLASS_MEDIA_BROWSER) + { + if(message_name == "focus") + { + bool val = message_in.getValueBoolean("focused"); + LLQtWebKit::getInstance()->focusBrowser( mBrowserWindowId, val ); + + if(mFirstFocus && val) + { + // On the first focus, post a tab key event. This fixes a problem with initial focus. + std::string empty; + keyEvent(LLQtWebKit::KE_KEY_DOWN, KEY_TAB, decodeModifiers(empty)); + keyEvent(LLQtWebKit::KE_KEY_UP, KEY_TAB, decodeModifiers(empty)); + mFirstFocus = false; + } + } + else if(message_name == "clear_cache") + { + LLQtWebKit::getInstance()->clearCache(); + } + else if(message_name == "clear_cookies") + { + LLQtWebKit::getInstance()->clearAllCookies(); + } + else if(message_name == "enable_cookies") + { + mCookiesEnabled = message_in.getValueBoolean("enable"); + LLQtWebKit::getInstance()->enableCookies( mCookiesEnabled ); + } + else if(message_name == "enable_plugins") + { + mPluginsEnabled = message_in.getValueBoolean("enable"); + LLQtWebKit::getInstance()->enablePlugins( mPluginsEnabled ); + } + else if(message_name == "enable_javascript") + { + mJavascriptEnabled = message_in.getValueBoolean("enable"); + //LLQtWebKit::getInstance()->enableJavascript( mJavascriptEnabled ); + } + else if(message_name == "set_cookies") + { + LLQtWebKit::getInstance()->setCookies(message_in.getValue("cookies")); + } + else if(message_name == "proxy_setup") + { + bool val = message_in.getValueBoolean("enable"); + std::string host = message_in.getValue("host"); + int port = message_in.getValueS32("port"); + LLQtWebKit::getInstance()->enableProxy( val, host, port ); + } + else if(message_name == "browse_stop") + { + LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_STOP ); + } + else if(message_name == "browse_reload") + { + // foo = message_in.getValueBoolean("ignore_cache"); + LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_RELOAD ); + } + else if(message_name == "browse_forward") + { + LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_FORWARD ); + } + else if(message_name == "browse_back") + { + LLQtWebKit::getInstance()->userAction( mBrowserWindowId, LLQtWebKit::UA_NAVIGATE_BACK ); + } + else if(message_name == "set_status_redirect") + { + int code = message_in.getValueS32("code"); + std::string url = message_in.getValue("url"); + if ( 404 == code ) // browser lib only supports 404 right now + { +#if LLQTWEBKIT_API_VERSION < 8 + LLQtWebKit::getInstance()->set404RedirectUrl( mBrowserWindowId, url ); +#endif + }; + } + else if(message_name == "set_user_agent") + { + mUserAgent = message_in.getValue("user_agent"); + LLQtWebKit::getInstance()->setBrowserAgentId( mUserAgent ); + } + else if(message_name == "show_web_inspector") + { +#if LLQTWEBKIT_API_VERSION >= 10 + bool val = message_in.getValueBoolean("show"); + LLQtWebKit::getInstance()->showWebInspector( val ); +#else + llwarns << "Ignoring showWebInspector message (llqtwebkit version is too old)." << llendl; +#endif + } + else if(message_name == "ignore_ssl_cert_errors") + { +#if LLQTWEBKIT_API_VERSION >= 3 + LLQtWebKit::getInstance()->setIgnoreSSLCertErrors( message_in.getValueBoolean("ignore") ); +#else + llwarns << "Ignoring ignore_ssl_cert_errors message (llqtwebkit version is too old)." << llendl; +#endif + } + else if(message_name == "add_certificate_file_path") + { +#if LLQTWEBKIT_API_VERSION >= 6 + LLQtWebKit::getInstance()->setCAFile( message_in.getValue("path") ); +#else + llwarns << "Ignoring add_certificate_file_path message (llqtwebkit version is too old)." << llendl; +#endif + } + else if(message_name == "init_history") + { + // Initialize browser history + LLSD history = message_in.getValueLLSD("history"); + // First, clear the URL history + LLQtWebKit::getInstance()->clearHistory(mBrowserWindowId); + // Then, add the history items in order + LLSD::array_iterator iter_history = history.beginArray(); + LLSD::array_iterator end_history = history.endArray(); + for(; iter_history != end_history; ++iter_history) + { + std::string url = (*iter_history).asString(); + if(! url.empty()) { + LLQtWebKit::getInstance()->prependHistoryUrl(mBrowserWindowId, url); + } + } + } + else if(message_name == "proxy_window_opened") + { + std::string target = message_in.getValue("target"); + std::string uuid = message_in.getValue("uuid"); + LLQtWebKit::getInstance()->proxyWindowOpened(mBrowserWindowId, target, uuid); + } + else if(message_name == "proxy_window_closed") + { + std::string uuid = message_in.getValue("uuid"); + LLQtWebKit::getInstance()->proxyWindowClosed(mBrowserWindowId, uuid); + } + else + { +// std::cerr << "MediaPluginWebKit::receiveMessage: unknown media_browser message: " << message_string << std::endl; + }; + } + else + { +// std::cerr << "MediaPluginWebKit::receiveMessage: unknown message class: " << message_class << std::endl; + }; + } +} + +void MediaPluginWebKit::setVolume(F32 volume) +{ + mVolumeCatcher.setVolume(volume); +} + +int init_media_plugin(LLPluginInstance::sendMessageFunction host_send_func, void *host_user_data, LLPluginInstance::sendMessageFunction *plugin_send_func, void **plugin_user_data) +{ + MediaPluginWebKit *self = new MediaPluginWebKit(host_send_func, host_user_data); + *plugin_send_func = MediaPluginWebKit::staticReceiveMessage; + *plugin_user_data = (void*)self; + + return 0; +} + + diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 795a1af581..aa31aa7ca4 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -80,7 +80,6 @@ include_directories( set(viewer_SOURCE_FILES groupchatlistener.cpp - llaccountingquotamanager.cpp ao.cpp aoengine.cpp aoset.cpp @@ -102,6 +101,7 @@ set(viewer_SOURCE_FILES lggbeamcolormapfloater.cpp lggcontactsets.cpp lggcontactsetsfloater.cpp + llaccountingcostmanager.cpp llagent.cpp llagentaccess.cpp llagentcamera.cpp @@ -238,6 +238,7 @@ set(viewer_SOURCE_FILES llfloatermodelwizard.cpp llfloaternamedesc.cpp llfloaternotificationsconsole.cpp + llfloaterobjectweights.cpp llfloateropenobject.cpp llfloaterpay.cpp llfloaterperms.cpp @@ -394,6 +395,7 @@ set(viewer_SOURCE_FILES llpanelmarketplaceinbox.cpp llpanelmarketplaceinboxinventory.cpp llpanelmarketplaceoutbox.cpp + llpanelmarketplaceoutboxinventory.cpp llpanelmediasettingsgeneral.cpp llpanelmediasettingspermissions.cpp llpanelmediasettingssecurity.cpp @@ -627,6 +629,7 @@ set(viewer_SOURCE_FILES llweb.cpp llwebsharing.cpp llwind.cpp + llwindowlistener.cpp llwlanimator.cpp llwldaycycle.cpp llwlhandlers.cpp @@ -683,7 +686,6 @@ set(viewer_HEADER_FILES CMakeLists.txt ViewerInstall.cmake groupchatlistener.h - llaccountingquotamanager.h ao.h aoengine.h aoset.h @@ -705,6 +707,7 @@ set(viewer_HEADER_FILES lggbeamcolormapfloater.h lggcontactsets.h lggcontactsetsfloater.h + llaccountingcostmanager.h llagent.h llagentaccess.h llagentcamera.h @@ -842,6 +845,7 @@ set(viewer_HEADER_FILES llfloatermodelwizard.h llfloaternamedesc.h llfloaternotificationsconsole.h + llfloaterobjectweights.h llfloateropenobject.h llfloaterpay.h llfloaterperms.h @@ -992,6 +996,7 @@ set(viewer_HEADER_FILES llpanelmarketplaceinbox.h llpanelmarketplaceinboxinventory.h llpanelmarketplaceoutbox.h + llpanelmarketplaceoutboxinventory.h llpanelmediasettingsgeneral.h llpanelmediasettingspermissions.h llpanelmediasettingssecurity.h @@ -1225,6 +1230,7 @@ set(viewer_HEADER_FILES llweb.h llwebsharing.h llwind.h + llwindowlistener.h llwlanimator.h llwldaycycle.h llwlhandlers.h @@ -1351,6 +1357,39 @@ if (WINDOWS) set(viewer_SOURCE_FILES "${viewer_SOURCE_FILES}" llviewerprecompiledheaders.cpp) endif(USE_PRECOMPILED_HEADERS) + + # Replace the icons with the appropriate ones for the channel + # ('test' is the default) + set(ICON_PATH "private") + string(TOLOWER ${VIEWER_CHANNEL} channel_lower) + if(channel_lower MATCHES "release") + set(ICON_PATH "release") + elseif(channel_lower MATCHES "beta") + set(ICON_PATH "beta") + elseif(channel_lower MATCHES "development") + set(ICON_PATH "development") + elseif(channel_lower MATCHES "test") + set(ICON_PATH "test") + elseif(channel_lower MATCHES "project") + set(ICON_PATH "project") + endif() + message("Copying icons for ${ICON_PATH}") + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${CMAKE_CURRENT_SOURCE_DIR}/icons/${ICON_PATH}/firestorm_icon.ico" + "${CMAKE_CURRENT_SOURCE_DIR}/res/firestorm_icon.ico" + ) + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${CMAKE_CURRENT_SOURCE_DIR}/icons/${ICON_PATH}/firestorm_256.BMP" + "${CMAKE_CURRENT_SOURCE_DIR}/res/firestorm_icon.BMP" + ) + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${CMAKE_CURRENT_SOURCE_DIR}/icons/${ICON_PATH}/firestorm_256.BMP" + "${CMAKE_CURRENT_SOURCE_DIR}/res-sdl/firestorm_icon.BMP" + ) + # Add resource files to the project. # viewerRes.rc is the only buildable file, but # the rest are all dependencies of it. @@ -1381,6 +1420,7 @@ if (WINDOWS) res/lltoolzoomout.cur res/firestorm_icon.BMP res/firestorm_icon.ico + res-sdl/firestorm_icon.BMP res/resource.h res/toolpickobject.cur res/toolpickobject2.cur @@ -1876,14 +1916,14 @@ if (LINUX) # These are the generated targets that are copied to package/ set(COPY_INPUT_DEPENDENCIES - ${VIEWER_BINARY_NAME} - linux-crash-logger - linux-updater - SLPlugin - media_plugin_webkit - media_plugin_gstreamer010 - llcommon - ) + ${VIEWER_BINARY_NAME} + linux-crash-logger + linux-updater + SLPlugin + media_plugin_webkit + media_plugin_gstreamer010 + llcommon + ) add_custom_command( OUTPUT ${product}.tar.bz2 @@ -2147,12 +2187,12 @@ if (LL_TESTS) ) LL_ADD_INTEGRATION_TEST(llsimplestat - "" + "" "${test_libs}" ) LL_ADD_INTEGRATION_TEST(llviewerassetstats - llviewerassetstats.cpp + llviewerassetstats.cpp "${test_libs}" ) diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 1dfd8eae7e..f1e2c8dfb4 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1374,7 +1374,7 @@ Comment Time before automatically setting AFK (away from keyboard) mode (seconds, 0=never). - Valid values are: 0, 120, 300, 600, 1800, 3600 + Valid values are: 0, 120, 300, 600, 1800, 3600, 5400, 7200 Persist 1 Type @@ -3096,17 +3096,6 @@ - CompressSnapshotsToDisk - - Comment - Compress snapshots saved to disk (Using JPEG 2000) - Persist - 1 - Type - Boolean - Value - 0 - ConnectAsGod Comment @@ -3415,6 +3404,17 @@ Value 0 + DebugShowPrivateMem + + Comment + Show Private Mem Info + Persist + 1 + Type + Boolean + Value + 0 + DebugShowRenderInfo Comment @@ -5528,6 +5528,9 @@ String Value http://search.secondlife.com/viewer/[CATEGORY]/?q=[QUERY]&p=[AUTH_TOKEN]&r=[MATURITY]&lang=[LANGUAGE]&sid=[SESSION_ID] + WebProfileURL @@ -5738,6 +5741,17 @@ Value 1 + InventoryMarketplaceUserStatus + + Comment + Marketplace user status. + Persist + 1 + Type + String + Value + + InventorySortOrder Comment @@ -6977,6 +6991,17 @@ Value 48.0 + MaxHeapSize + + Comment + Maximum heap size (GB) + Persist + 1 + Type + F32 + Value + 1.6 + MaxSelectDistance Comment @@ -6986,7 +7011,7 @@ Type F32 Value - 64.0 + 128.0 MaxWearableWaitTime @@ -7136,6 +7161,17 @@ Value 1 + MemoryFailurePreventionEnabled + + Comment + If set, the viewer will quit to avoid crash when memory failure happens + Persist + 1 + Type + Boolean + Value + 0 + MemoryLogFrequency Comment @@ -7147,6 +7183,28 @@ Value 600.0 + MemoryPrivatePoolEnabled + + Comment + Enable the private memory pool management + Persist + 1 + Type + Boolean + Value + 1 + + MemoryPrivatePoolSize + + Comment + Size of the private memory pool in MB (min. value is 256) + Persist + 1 + Type + U32 + Value + 512 + MemProfiling Comment @@ -7266,7 +7324,7 @@ Type Boolean Value - 1 + 0 MiniMapPrimMaxRadius @@ -8647,7 +8705,7 @@ Change of this parameter will affect the layout of buttons in notification toast Type F32 Value - -1.0 + 0.0 QuitAfterSecondsOfAFK @@ -8973,7 +9031,89 @@ Change of this parameter will affect the layout of buttons in notification toast Value 1 - RenderAvatarLODFactor + RenderAvatarComplexityLimit + + Comment + Max visual complexity of avatars in a scene + Persist + 1 + Type + S32 + Value + -1 + + RenderComplexityColorMin + + Comment + Max visual complexity of avatars in a scene + Persist + 1 + Type + Color4 + Value + + 0.0 + 0.0 + 1.0 + 0.5 + + + RenderComplexityColorMid + + Comment + Max visual complexity of avatars in a scene + Persist + 1 + Type + Color4 + Value + + 0.0 + 1.0 + 0.0 + 0.5 + + + RenderComplexityColorMax + + Comment + Max visual complexity of avatars in a scene + Persist + 1 + Type + Color4 + Value + + 1.0 + 0.0 + 0.0 + 0.5 + + + RenderComplexityThreshold + + Comment + Only color objects higher than render threshold + Persist + 1 + Type + S32 + Value + -1 + + RenderComplexityStaticMax + + Comment + Sets a static max value for scaling of RenderComplexity + display (-1 for dynamic scaling) + Persist + 1 + Type + S32 + Value + -1 + + RenderAvatarLODFactor Comment Controls level of detail of avatars (multiplier for current screen area when calculated level of detail) @@ -11170,17 +11310,6 @@ Change of this parameter will affect the layout of buttons in notification toast Value 0 - ShowAdvancedBuilderOptions - - Comment - Shows physics and display weight - Persist - 1 - Type - Boolean - Value - 0 - ShowAdvancedGraphicsSettings Comment @@ -16228,7 +16357,7 @@ Change of this parameter will affect the layout of buttons in notification toast Type Boolean Value - 0 + 1 ShowOfferedInventory diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml index 3c5b3969da..0110e71964 100644 --- a/indra/newview/app_settings/settings_per_account.xml +++ b/indra/newview/app_settings/settings_per_account.xml @@ -55,16 +55,16 @@ Value - LastInventoryInboxExpand - - Comment - The last time the received items inbox was expanded. - Persist + LastInventoryInboxActivity + + Comment + The last time the received items inbox was poked by the user. + Persist 1 - Type - String - Value - + Type + U32 + Value + 0 LastLogoff diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl index b0fa0ddd3e..b631ecb7d2 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl @@ -2,6 +2,24 @@ * @file avatarF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl index d9f29ced4f..c72da8d758 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl @@ -2,6 +2,24 @@ * @file avatarSkinV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl index 2796222c68..c2fe60ddaf 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl @@ -2,6 +2,24 @@ * @file avatarV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl b/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl index d86ef19a04..4296e551db 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl @@ -2,6 +2,24 @@ * @file eyeballF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl index 2eb814bd91..1a0866be0a 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl @@ -2,6 +2,24 @@ * @file eyeballV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl index 7613e50dca..09688b2be2 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl @@ -1,8 +1,25 @@ /** * @file objectSkinV.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl index 2638351e96..374808c091 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl @@ -2,6 +2,24 @@ * @file pickAvatarF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl index 86b189b282..e25d84a594 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl @@ -2,6 +2,24 @@ * @file pickAvatarV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 4a0815a163..19de0c0b39 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -2,6 +2,24 @@ * @file alphaF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl index b0d029dbf4..d4f56896cf 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl @@ -2,6 +2,24 @@ * @file alphaF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl index ac3f7189c2..d57b8f8525 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl @@ -1,8 +1,25 @@ /** * @file alphaSkinnedV.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl index 44cb78e914..f6a280462e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl @@ -2,6 +2,24 @@ * @file alphaV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl index 870d593311..0c930848e5 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl @@ -1,8 +1,25 @@ /** * @file avatarShadowF.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl index c7a4f86727..bf4e79d815 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl @@ -1,8 +1,25 @@ /** * @file attachmentShadowV.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl index 68e4055cf2..f70ea4da52 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl @@ -2,6 +2,24 @@ * @file avatarAlphaV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl index 7bc78fe407..d0f3397932 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl @@ -2,6 +2,24 @@ * @file avatarEyesV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl index 3268618093..3f30402583 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl @@ -2,6 +2,24 @@ * @file avatarF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl index 78986ab12e..c9a349f026 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl @@ -2,6 +2,24 @@ * @file avatarShadowF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl index f177fcd8f1..3d2ad397df 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl @@ -2,6 +2,24 @@ * @file avatarShadowV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl index 7eac11287a..37fcef81f3 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl @@ -2,6 +2,24 @@ * @file avatarV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl index 8c75c8045a..3609cc054b 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl @@ -2,6 +2,24 @@ * @file blurLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl index 6ca51377c1..c858eb7a3a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightMSF.glsl @@ -2,6 +2,24 @@ * @file blurLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl index 862f809de5..e904b7ded0 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl @@ -2,6 +2,24 @@ * @file blurLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl index 75b4dc624a..429a891f07 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl @@ -2,6 +2,24 @@ * @file bumpF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl index dc69519a85..7d934e7ff8 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl @@ -1,8 +1,25 @@ /** * @file bumpV.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl index 5b6726488b..92fd41554d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl @@ -2,6 +2,24 @@ * @file bumpV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl index ef300d5631..f4310dae95 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl @@ -2,6 +2,24 @@ * @file WLCloudsF.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl index 3eac63076c..c175a834c2 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl @@ -2,6 +2,24 @@ * @file WLCloudsV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl index 338d0ebb2b..933e50fed1 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl @@ -1,7 +1,25 @@ /** * @file diffuseF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl index 0671cb94bd..f3ad6f92de 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl @@ -1,7 +1,25 @@ /** * @file diffuseAlphaMaskIndexedF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl index 43af480c50..9c9a8b56c5 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl @@ -2,6 +2,24 @@ * @file diffuseF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl index e7b5dcce7f..4d996a099d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl @@ -2,6 +2,24 @@ * @file diffuseIndexedF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl index 2c4caea109..1470d7c9ca 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl @@ -1,8 +1,25 @@ /** * @file diffuseSkinnedV.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl index b56d1493c3..7c5a4d35b3 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl @@ -2,6 +2,24 @@ * @file diffuseV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl index d781e08548..6c506676af 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl @@ -2,6 +2,24 @@ * @file fullbrightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl index 2eed044b7c..a4ff0b80e2 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl @@ -2,6 +2,24 @@ * @file fullbrightV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl index 41c149e774..bfb7760af8 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl @@ -2,6 +2,24 @@ * @file giF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/giV.glsl b/indra/newview/app_settings/shaders/class1/deferred/giV.glsl index e86f2896da..190e32b6a3 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/giV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/giV.glsl @@ -2,6 +2,24 @@ * @file giV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl index 75f594ed8f..7152e13946 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl @@ -1,12 +1,30 @@ /** * @file impostorF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ -uniform float minimum_alpha; -uniform float maximum_alpha; +uniform float minimum_alpha; +uniform float maximum_alpha; uniform sampler2D diffuseMap; @@ -17,10 +35,10 @@ void main() { vec4 col = texture2D(diffuseMap, gl_TexCoord[0].xy); - if (col.a < minimum_alpha || col.a > maximum_alpha) - { - discard; - } + if (col.a < minimum_alpha || col.a > maximum_alpha) + { + discard; + } gl_FragData[0] = vec4(col.rgb, col.a * 0.005); gl_FragData[1] = texture2D(specularMap, gl_TexCoord[0].xy); diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl index 723777bd3a..0cf8c68173 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl @@ -2,6 +2,24 @@ * @file impostorV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl index 25e93ae266..4ba26fb0c6 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl @@ -2,6 +2,24 @@ * @file luminanceF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl index 4baf1fc65a..9f22175f84 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl @@ -2,6 +2,24 @@ * @file giV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl index 3c5c780d94..42212a978e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl @@ -2,6 +2,24 @@ * @file multiPointLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl index 6c43679acf..863bac19cf 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightMSF.glsl @@ -2,6 +2,24 @@ * @file multiPointLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl index 434fb6f534..1362a48daf 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl @@ -2,6 +2,24 @@ * @file multiPointLightV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl index 0d25d7792d..85b0ce5beb 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -2,6 +2,24 @@ * @file multiSpotLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl index c80a54346e..10285817c2 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightMSF.glsl @@ -2,6 +2,24 @@ * @file multiSpotLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl index 5efa3200d4..0771f9b91a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl @@ -2,6 +2,24 @@ * @file pointLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl index feaf38115d..cdce58c84e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightMSF.glsl @@ -2,6 +2,24 @@ * @file pointLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl index c510d8ad77..db1b9d3feb 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl @@ -2,6 +2,24 @@ * @file pointLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl index f6b0402bb9..29f5f899ba 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl @@ -2,6 +2,24 @@ * @file postDeferredF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl index 62ae5f917a..792102a64d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredMSF.glsl @@ -2,6 +2,24 @@ * @file postDeferredF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl index bf829bfc56..34e30a3070 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl @@ -2,6 +2,24 @@ * @file postDeferredF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl index bf35dfe11c..41849858e7 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFMSF.glsl @@ -2,6 +2,24 @@ * @file postDeferredF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl index 876f65ee3a..cb83dda795 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl @@ -2,6 +2,24 @@ * @file postDeferredV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl index fa3f04bcc8..99257daca4 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl @@ -2,6 +2,24 @@ * @file postgiF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl index eebe930666..6231ee68b7 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/postgiV.glsl @@ -2,6 +2,24 @@ * @file postgiV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl index e24d0b666e..615317febf 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl @@ -1,7 +1,25 @@ /** * @file shadowAlphaMaskF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl index 58e9bcec58..4be18a9c5e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl @@ -1,7 +1,25 @@ /** * @file shadowAlphaMaskV.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl index 0bfe74ce42..541f08d5fe 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl @@ -1,7 +1,25 @@ /** * @file shadowF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl index d40c2d9f78..fc3ff45614 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl @@ -1,7 +1,25 @@ /** * @file shadowV.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl index 820c82ffd7..59c0a994cd 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl @@ -2,6 +2,24 @@ * @file WLSkyF.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl index 1ea00f723a..3a44bb6d26 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl @@ -2,6 +2,24 @@ * @file WLSkyV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index d327216a0c..855d89ebe6 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -2,6 +2,24 @@ * @file softenLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl index 2cce43e2bf..f118b0da2a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl @@ -2,6 +2,24 @@ * @file softenLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl index 745cc01992..fed238510a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl @@ -2,6 +2,24 @@ * @file softenLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl index 9aaffc15bf..7363bd6715 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl @@ -2,6 +2,24 @@ * @file spotLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl index 4bb9bad275..0c0171881f 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightMSF.glsl @@ -2,6 +2,24 @@ * @file multiSpotLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl index 2cf7d194cc..4ab59d4d66 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl @@ -2,6 +2,24 @@ * @file starsF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl index c43125dad9..84adf6bc41 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl @@ -2,6 +2,24 @@ * @file starsV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl index f20886565a..78ea15e87a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl @@ -2,6 +2,24 @@ * @file sunLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl index f20886565a..78ea15e87a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightMSF.glsl @@ -2,6 +2,24 @@ * @file sunLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl index 665d8126a0..2f880d65dd 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl @@ -1,8 +1,25 @@ /** * @file sunLightSSAOF.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl index 32d1b2149a..abb64334ed 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOMSF.glsl @@ -1,8 +1,25 @@ /** * @file sunLightSSAOF.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl index 814deb3677..e7ab11c6ed 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl @@ -2,6 +2,24 @@ * @file sunLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl index d005f67bf6..c6578ea177 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl @@ -2,6 +2,24 @@ * @file terrainF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl index 3038fd2966..fc19a73709 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl @@ -2,6 +2,24 @@ * @file terrainV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl index de7e038402..56a149523e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl @@ -2,6 +2,24 @@ * @file treeF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl index a9bef4292d..01401028d6 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl @@ -2,6 +2,24 @@ * @file treeV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl index 2710422d32..c3e7371c8e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl @@ -2,6 +2,24 @@ * @file waterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl index 5397290b11..9d415ade85 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl @@ -2,6 +2,24 @@ * @file waterV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl index 32f5f5f236..e827863436 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl @@ -2,6 +2,24 @@ * @file glowExtractF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl index 9267a8585d..c2cc8ed567 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractMSF.glsl @@ -2,6 +2,24 @@ * @file glowExtractF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl index 76736fed53..8db6d1bf24 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl @@ -2,6 +2,24 @@ * @file glowExtractV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl index d3225546b3..75cff75ea9 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl @@ -2,6 +2,24 @@ * @file glowF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/effects/glowV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowV.glsl index 9bb41626ae..a5aacc0196 100644 --- a/indra/newview/app_settings/shaders/class1/effects/glowV.glsl +++ b/indra/newview/app_settings/shaders/class1/effects/glowV.glsl @@ -2,6 +2,24 @@ * @file glowV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl index cdc2ca3da2..c61d5a2a08 100644 --- a/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl @@ -2,6 +2,24 @@ * @file terrainF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl index 8af981915b..917891c063 100644 --- a/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl @@ -2,6 +2,24 @@ * @file terrainV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl index d94d986581..711b42b95e 100644 --- a/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl @@ -2,6 +2,24 @@ * @file terrainWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl index 06854fcc0a..72e8e739b3 100644 --- a/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl @@ -2,6 +2,24 @@ * @file underWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl index 0f24e3c35a..4d555b566a 100644 --- a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl @@ -2,6 +2,24 @@ * @file waterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl index 630459b324..d44690d1fb 100644 --- a/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl @@ -2,6 +2,24 @@ * @file waterFogF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl index 831d6a761c..610c06fbbc 100644 --- a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl @@ -2,6 +2,24 @@ * @file waterV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl b/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl index 3827c72f4c..27c63fdc8b 100644 --- a/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl @@ -2,6 +2,24 @@ * @file customalphaF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl b/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl index 04bfff22c1..c4c896c35c 100644 --- a/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl @@ -2,6 +2,24 @@ * @file customalphaV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl index a60fb1eaa7..b8963e1dec 100644 --- a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl @@ -2,6 +2,24 @@ * @file glowcombineF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl index ce183ec154..4c6360f71d 100644 --- a/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl @@ -2,6 +2,24 @@ * @file glowcombineV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl index f6c6d945de..a3cb5225ba 100644 --- a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl @@ -2,6 +2,24 @@ * @file highlightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl index f114f766bf..da3bea6d06 100644 --- a/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl @@ -2,6 +2,24 @@ * @file highlightV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl index b140712f18..57248699cb 100644 --- a/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl @@ -2,6 +2,24 @@ * @file occlusionF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl index 5a5d0ec506..915e452e0f 100644 --- a/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl @@ -2,6 +2,24 @@ * @file uiV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl index 5b7cc57574..b1d2b949ac 100644 --- a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl @@ -2,6 +2,24 @@ * @file twotextureaddF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl index 8401208e28..fedf6ae546 100644 --- a/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl @@ -2,6 +2,24 @@ * @file solidcolorV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl b/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl index d81b56fdb9..3408cc44f8 100644 --- a/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl @@ -2,6 +2,24 @@ * @file twotextureaddF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl b/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl index f685b112b4..94aa964be6 100644 --- a/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl @@ -2,6 +2,24 @@ * @file twotextureaddV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/uiF.glsl b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl index 9dec7a56ba..7694056b08 100644 --- a/indra/newview/app_settings/shaders/class1/interface/uiF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl @@ -2,6 +2,24 @@ * @file uiF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/interface/uiV.glsl b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl index 9ca6cae5c5..b1b90d0b5e 100644 --- a/indra/newview/app_settings/shaders/class1/interface/uiV.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl @@ -2,6 +2,24 @@ * @file uiV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl index 1796730c92..5cb3eb05a7 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl @@ -2,6 +2,24 @@ * @file lightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl index bfe0be9fdf..f3ba8b73a8 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl @@ -2,6 +2,24 @@ * @file lightFullbrightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl index 6f1fe91007..b4c8a9abce 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl @@ -2,6 +2,24 @@ * @file lightFullbrightShinyF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl index 19072cd052..925d6fbcfd 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl @@ -1,8 +1,25 @@ /** * @file lightFullbrightShinyWaterF.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl index 0ae6dc89e2..71238f7d31 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl @@ -2,6 +2,24 @@ * @file lightFullbrightWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl index 5d4bf2c33e..85cddc647d 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl @@ -2,6 +2,24 @@ * @file lightFuncSpecularV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl index 574252af12..a9288b3df6 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl @@ -2,6 +2,24 @@ * @file lightFuncV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl index 29f575b7e5..7c9b7c218f 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl @@ -2,6 +2,24 @@ * @file lightShinyF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl index 65da5a6825..ca1af8fc79 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl @@ -2,6 +2,24 @@ * @file lightShinyWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl index d491f1102e..4a59b8245d 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl @@ -2,6 +2,24 @@ * @file lightV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl index ef38ee9699..742cb38d80 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl @@ -2,6 +2,24 @@ * @file lightV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl index 286c92326b..da76a977b6 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl @@ -2,6 +2,24 @@ * @file lightWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl index 772a420e33..3e0815226c 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl @@ -2,6 +2,24 @@ * @file sumLightsSpecularV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl index da60a3ddf5..c271dbcd18 100644 --- a/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl +++ b/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl @@ -2,6 +2,24 @@ * @file sumLightsV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl index 587ab93a80..11031a8829 100644 --- a/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl @@ -2,6 +2,24 @@ * @file bumpF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl index 056d1a9582..c50ed86315 100644 --- a/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl @@ -2,6 +2,24 @@ * @file bumpV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl index c0b72115dd..0fab5e5001 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl @@ -2,6 +2,24 @@ * @file fullbrightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl index 391c06edc8..b312665032 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl @@ -2,6 +2,24 @@ * @file fullbrightShinyF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl index 5283e80407..e1a7f263f7 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl @@ -1,8 +1,25 @@ /** * @file shinySimpleSkinnedV.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl index 31e0f0a429..36b00dfbc1 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl @@ -2,6 +2,24 @@ * @file fullbrightShinyV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl index 8ffb252f57..e1f3919907 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl @@ -1,8 +1,25 @@ /** * @file fullbrightShinyWaterF.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl index 1db79791de..b540054c56 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl @@ -1,8 +1,25 @@ /** * @file fullbrightSkinnedV.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl index 3382384c99..22f731ffde 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl @@ -2,6 +2,24 @@ * @file fullbrightV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl index 220f26614f..5d0ea0a8dd 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl @@ -2,6 +2,24 @@ * @file fullbrightWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl b/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl index 13597ee439..92c09ce937 100644 --- a/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl @@ -1,7 +1,25 @@ /** * @file impostorF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl b/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl index 724b86a1b7..eea51eba45 100644 --- a/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl @@ -1,7 +1,25 @@ /** * @file impostorV.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl index d079de5377..f8f88e2577 100644 --- a/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl @@ -2,6 +2,24 @@ * @file shinyF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl index eea41bb4f0..f5fd4ededd 100644 --- a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl @@ -1,8 +1,25 @@ /** * @file shinySimpleSkinnedV.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl index 68a086dbc1..13a58f0d4a 100644 --- a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl @@ -2,6 +2,24 @@ * @file shinyV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl index 4649d1c47c..1e72e23eef 100644 --- a/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl @@ -2,6 +2,24 @@ * @file shinyWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl index b4e4dcfbbf..29a2ce617b 100644 --- a/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl @@ -2,6 +2,24 @@ * @file simpleF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl index af92e5e002..ad171f7b43 100644 --- a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl @@ -1,8 +1,25 @@ /** * @file simpleSkinnedV.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl index b493f76fcc..dc1794e132 100644 --- a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl @@ -2,6 +2,24 @@ * @file simpleV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl index 4ec5ee43b4..2e87ac5bbc 100644 --- a/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl @@ -2,6 +2,24 @@ * @file simpleWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl index 3d05850ab3..aacc503e13 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl @@ -2,6 +2,24 @@ * @file atmosphericsF.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl index f1a0af21af..15738e37e8 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl @@ -2,6 +2,24 @@ * @file atmosphericsHelpersV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl index 73bbd57315..76d7d5059d 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl @@ -2,6 +2,24 @@ * @file atmosphericsV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl index e0eb7b3767..dbacf28637 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl @@ -2,6 +2,24 @@ * @file atmosphericVarsF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl index a251213ff5..e051ac9851 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl @@ -2,6 +2,24 @@ * @file atmosphericVarsV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl index 4958cb2f72..62f4e51449 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl @@ -2,6 +2,24 @@ * @file gammaF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl index 75929bc609..7c95ecdb14 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl @@ -2,6 +2,24 @@ * @file transportF.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl index 3e8b719f93..f9f376c2b7 100644 --- a/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl +++ b/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl @@ -2,6 +2,24 @@ * @file eyeballV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl index 681e52de2a..839606cdcb 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl @@ -2,6 +2,24 @@ * @file alphaF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl index 5350359f75..84e49a5f8f 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl @@ -2,6 +2,24 @@ * @file alphaF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl index 948a52da5b..20121da52d 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl @@ -1,8 +1,25 @@ /** * @file alphaSkinnedV.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl index f616ecc872..307ae30098 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl @@ -2,6 +2,24 @@ * @file alphaV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl index 01e40afc4f..80f386ecb0 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl @@ -2,6 +2,24 @@ * @file avatarAlphaV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl index 729e4b5543..d9eafb6eba 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/edgeF.glsl @@ -2,6 +2,24 @@ * @file edgeF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl index b22bc5b288..a84fdd5dc1 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/edgeMSF.glsl @@ -2,6 +2,24 @@ * @file edgeF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl b/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl index 393084a3db..9deff7bb2a 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/edgeV.glsl @@ -2,6 +2,24 @@ * @file edgeV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl index f54186ffca..0b31cbefd1 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl @@ -2,6 +2,24 @@ * @file multiSpotLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl index fee32be3e3..1afa9a9fb4 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightMSF.glsl @@ -2,6 +2,24 @@ * @file multiSpotLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index f0c9b01671..d7407332e5 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -2,6 +2,24 @@ * @file softenLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl index 3b572320c3..1244294451 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl @@ -2,6 +2,24 @@ * @file softenLightMSF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl index 745cc01992..fed238510a 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl @@ -2,6 +2,24 @@ * @file softenLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl index cd3828fbd4..25270f4939 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl @@ -2,6 +2,24 @@ * @file spotLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl index ec9b547a47..4962e73e39 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightMSF.glsl @@ -2,6 +2,24 @@ * @file multiSpotLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl index 315139b415..1809cff1e5 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl @@ -2,6 +2,24 @@ * @file sunLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl index 63d13c996d..ac4fe52655 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightMSF.glsl @@ -2,6 +2,24 @@ * @file sunLightMSF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl index d53850b489..681186d6b2 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl @@ -1,8 +1,25 @@ /** * @file sunLightSSAOF.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl index a2a76eed9f..0fd7b7525d 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOMSF.glsl @@ -1,8 +1,25 @@ /** * @file sunLightSSAOF.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl index 814deb3677..e7ab11c6ed 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl @@ -2,6 +2,24 @@ * @file sunLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/effects/blurF.glsl b/indra/newview/app_settings/shaders/class2/effects/blurF.glsl index dff4d4a68f..35411db04b 100644 --- a/indra/newview/app_settings/shaders/class2/effects/blurF.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/blurF.glsl @@ -2,6 +2,24 @@ * @file blurf.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/effects/blurV.glsl b/indra/newview/app_settings/shaders/class2/effects/blurV.glsl index de469542f9..3e47ed15fe 100644 --- a/indra/newview/app_settings/shaders/class2/effects/blurV.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/blurV.glsl @@ -2,6 +2,24 @@ * @file blurV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl b/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl index 8871bb3fc7..42ab8d40e8 100644 --- a/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/colorFilterF.glsl @@ -2,6 +2,24 @@ * @file colorFilterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl b/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl index 9c52b8dd5d..25806cd914 100644 --- a/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/drawQuadV.glsl @@ -2,6 +2,24 @@ * @file drawQuadV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/effects/extractF.glsl b/indra/newview/app_settings/shaders/class2/effects/extractF.glsl index 713f8021de..9187c8ec31 100644 --- a/indra/newview/app_settings/shaders/class2/effects/extractF.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/extractF.glsl @@ -2,6 +2,24 @@ * @file extractF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl b/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl index fd94b2e95f..76b675a9bd 100644 --- a/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/nightVisionF.glsl @@ -2,6 +2,24 @@ * @file nightVisionF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl b/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl index a1a9c9716c..abf1be6645 100644 --- a/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl +++ b/indra/newview/app_settings/shaders/class2/effects/simpleF.glsl @@ -2,6 +2,24 @@ * @file simpleF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl index 9527dc469b..df08fce0da 100644 --- a/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/terrainF.glsl @@ -2,6 +2,24 @@ * @file terrainF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl index 2658bee88d..36d0c99b63 100644 --- a/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/terrainV.glsl @@ -2,6 +2,24 @@ * @file terrainV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl b/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl index 974e227b77..90468b45a2 100644 --- a/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/terrainWaterF.glsl @@ -2,6 +2,24 @@ * @file terrainWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl index 702e0881ac..f947aa4be1 100644 --- a/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/underWaterF.glsl @@ -2,6 +2,24 @@ * @file underWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/environment/waterF.glsl b/indra/newview/app_settings/shaders/class2/environment/waterF.glsl index c4e4bc08c5..dc543b2231 100644 --- a/indra/newview/app_settings/shaders/class2/environment/waterF.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/waterF.glsl @@ -2,6 +2,24 @@ * @file waterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl b/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl index b66b72b401..4bdfce9260 100644 --- a/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl +++ b/indra/newview/app_settings/shaders/class2/environment/waterFogF.glsl @@ -2,6 +2,24 @@ * @file waterFogF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskF.glsl index 1211ad7a89..4c05329065 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskF.glsl @@ -1,7 +1,25 @@ /** * @file lightAlphaMaskF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskNonIndexedF.glsl index 1a7d67b943..0de909353e 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightAlphaMaskNonIndexedF.glsl @@ -1,7 +1,25 @@ /** * @file lightAlphaMaskNonIndexedF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl index 4c31602736..d12d88f1c5 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightF.glsl @@ -2,6 +2,24 @@ * @file lightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightAlphaMaskF.glsl index 73e885a7e9..8c7713c08d 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightAlphaMaskF.glsl @@ -1,7 +1,25 @@ /** * @file lightFullbrightAlphaMaskF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl index 95bd052b5d..f03b1fdc74 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightF.glsl @@ -2,6 +2,24 @@ * @file lightFullbrightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl index 55dfe9b166..89468b9665 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl @@ -1,7 +1,25 @@ /** * @file lightFullbrightNonIndexedAlphaMaskF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl index b1e61e1a33..a909ff608a 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightNonIndexedF.glsl @@ -2,6 +2,24 @@ * @file lightFullbrightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl index 26f0ea84e0..d2bc912edb 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyF.glsl @@ -2,6 +2,24 @@ * @file lightFullbrightShinyF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl index 953298da0d..af73168c13 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyNonIndexedF.glsl @@ -2,6 +2,24 @@ * @file lightFullbrightShinyF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl index a6e10a249d..e9dab85095 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterF.glsl @@ -1,8 +1,25 @@ /** * @file lightFullbrightShinyWaterF.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl index b4bb665a2b..e0a7986705 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightShinyWaterNonIndexedF.glsl @@ -1,8 +1,25 @@ /** * @file lightFullbrightShinyWaterF.glsl - * - * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc. - * $License$ + * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterAlphaMaskF.glsl index e4cea077f9..e5998b77a9 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterAlphaMaskF.glsl @@ -1,7 +1,25 @@ /** * @file lightFullbrightWaterAlphaMaskF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl index 887d4130e7..20ff3712af 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterF.glsl @@ -2,6 +2,24 @@ * @file lightFullbrightWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl index e8533f94a7..3fdd110f7d 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl @@ -1,7 +1,25 @@ /** * @file lightFullbrightWaterNonIndexedAlphaMaskF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl index 1234682ae9..01b89019b1 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightFullbrightWaterNonIndexedF.glsl @@ -2,6 +2,24 @@ * @file lightFullbrightWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl index 149cf791f5..d419c2d116 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightNonIndexedF.glsl @@ -2,6 +2,24 @@ * @file lightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl index 300fcac092..ba4cd949d6 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightShinyF.glsl @@ -2,6 +2,24 @@ * @file lightShinyF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl index e877c0abb1..3b30ebf6f1 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightShinyNonIndexedF.glsl @@ -2,6 +2,24 @@ * @file lightShinyF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl index 07572fa915..c451e68763 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterF.glsl @@ -2,6 +2,24 @@ * @file lightShinyWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl index 3904179427..eeb997fb5f 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightShinyWaterNonIndexedF.glsl @@ -2,6 +2,24 @@ * @file lightShinyWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl index 3384f64d07..24bf9b3cee 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightSpecularV.glsl @@ -2,6 +2,24 @@ * @file lightSpecularV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl index 10c770fcc2..8045809b82 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightV.glsl @@ -2,6 +2,24 @@ * @file lightV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskF.glsl index 7b3c20f092..072dcaa6b6 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskF.glsl @@ -1,7 +1,25 @@ /** * @file lightWaterAlphaMaskF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskNonIndexedF.glsl index 907140effd..2df34da4b4 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightWaterAlphaMaskNonIndexedF.glsl @@ -1,7 +1,25 @@ /** * @file lightWaterAlphaMaskNonIndexedF.glsl * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl index 61341a9f1f..ae7be4d231 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightWaterF.glsl @@ -2,6 +2,24 @@ * @file lightWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl index ba850b61d0..5a86dad827 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/lightWaterNonIndexedF.glsl @@ -2,6 +2,24 @@ * @file lightWaterF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl index 8df2e6f222..d0a12479db 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl @@ -2,6 +2,24 @@ * @file sumLightsV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl index 3d43a1813a..ad045a3058 100644 --- a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl +++ b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl @@ -2,6 +2,24 @@ * @file sumLightsV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl index f49e74406f..819b28e4fd 100644 --- a/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl +++ b/indra/newview/app_settings/shaders/class2/objects/fullbrightShinyV.glsl @@ -2,6 +2,24 @@ * @file fullbrightShinyV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl b/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl index 3076fa3260..abf6e37b7c 100644 --- a/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl +++ b/indra/newview/app_settings/shaders/class2/objects/fullbrightV.glsl @@ -2,6 +2,24 @@ * @file fullbrightV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl index 49992d3535..44c711701b 100644 --- a/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl +++ b/indra/newview/app_settings/shaders/class2/objects/shinyV.glsl @@ -2,6 +2,24 @@ * @file shinyV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl index 5e02391767..b0114763c1 100644 --- a/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl +++ b/indra/newview/app_settings/shaders/class2/objects/simpleV.glsl @@ -2,6 +2,24 @@ * @file simpleV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl index 21a0812c1b..fea3cbf69b 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl @@ -2,6 +2,24 @@ * @file atmosphericsF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl index ab4cf4806d..62a034ce05 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl @@ -2,6 +2,24 @@ * @file atmosphericsHelpersV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl index b61b0bb396..be990c1757 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl @@ -2,6 +2,24 @@ * @file atmosphericsV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl index 3a6585bb33..a98c04b259 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl @@ -2,6 +2,24 @@ * @file atmosphericVars.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl index 0f6e231ca6..7c3cb88b3c 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl @@ -2,6 +2,24 @@ * @file atmosphericVars.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl index 20f907a006..b90cec119b 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl @@ -2,6 +2,24 @@ * @file WLCloudsF.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl index 3eac63076c..c175a834c2 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl @@ -2,6 +2,24 @@ * @file WLCloudsV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl index 6570dcb608..478373d729 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl @@ -2,6 +2,24 @@ * @file gammaF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl index d14c638130..ac569e8257 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl @@ -2,6 +2,24 @@ * @file WLSkyF.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl index 1ea00f723a..3a44bb6d26 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl @@ -2,6 +2,24 @@ * @file WLSkyV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl index 28381482c1..8a8e4cb0f6 100644 --- a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl +++ b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl @@ -2,6 +2,24 @@ * @file transportF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl index 3d970d252c..151602dbc0 100644 --- a/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl +++ b/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl @@ -2,6 +2,24 @@ * @file avatarV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl index 498fee7c66..616ea5fe9e 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleF.glsl @@ -2,6 +2,24 @@ * @file giDownsampleF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl index eebe930666..6231ee68b7 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giDownsampleV.glsl @@ -2,6 +2,24 @@ * @file postgiV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/giF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giF.glsl index 9896f8dafe..95913a502c 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giF.glsl @@ -2,6 +2,24 @@ * @file giF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl b/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl index df4c6b3e0a..7c55fcc286 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giFinalF.glsl @@ -2,6 +2,24 @@ * @file giFinalF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ @@ -24,4 +42,4 @@ void main() gl_FragColor = bloom + diff; //gl_FragColor.rgb = vec3(texture2DRect(edgeMap, vary_fragcoord.xy).a); -} \ No newline at end of file +} diff --git a/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl index 7e20d71529..a6a206502c 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giFinalV.glsl @@ -2,6 +2,24 @@ * @file giFinalV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/giV.glsl b/indra/newview/app_settings/shaders/class3/deferred/giV.glsl index e86f2896da..190e32b6a3 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/giV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/giV.glsl @@ -2,6 +2,24 @@ * @file giV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl index 980def6443..13517a26ba 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/luminanceF.glsl @@ -2,6 +2,24 @@ * @file luminanceF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl index 9afeac6ddf..2d99ef5481 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/luminanceV.glsl @@ -2,6 +2,24 @@ * @file giV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl index 6d4c20f68c..0364da6258 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/postDeferredF.glsl @@ -2,6 +2,24 @@ * @file postDeferredF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl index 876f65ee3a..cb83dda795 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/postDeferredV.glsl @@ -2,6 +2,24 @@ * @file postDeferredV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl index fc65881680..009b5cc743 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/postgiF.glsl @@ -2,6 +2,24 @@ * @file postgiF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl b/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl index eebe930666..6231ee68b7 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/postgiV.glsl @@ -2,6 +2,24 @@ * @file postgiV.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index 1ae10a5faa..1c02adea89 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -2,6 +2,24 @@ * @file softenLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl index 745cc01992..fed238510a 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightV.glsl @@ -2,6 +2,24 @@ * @file softenLightF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl index de7e038402..56a149523e 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/treeF.glsl @@ -2,6 +2,24 @@ * @file treeF.glsl * * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl index 92347a5b4a..79bd017efc 100644 --- a/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl +++ b/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl @@ -2,6 +2,24 @@ * @file sumLightsV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl index 24bbc0a1a1..dcdc72ac02 100644 --- a/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl +++ b/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl @@ -2,6 +2,24 @@ * @file sumLightsV.glsl * * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA * $/LicenseInfo$ */ diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt old mode 100644 new mode 100755 diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index fd12277238..038cad1de6 100644 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -540,3 +540,4 @@ VIA VIA.* 0 0 Apple Generic Apple.*Generic.* 0 0 Apple Software Renderer Apple.*Software Renderer.* 0 0 Oracle VirtualBox Graphics Humper.* 0 1 +Humper Humper.* 0 1 diff --git a/indra/newview/icons/beta/firestorm_128.png b/indra/newview/icons/beta/firestorm_128.png new file mode 100644 index 0000000000..9b9c34821e Binary files /dev/null and b/indra/newview/icons/beta/firestorm_128.png differ diff --git a/indra/newview/icons/beta/firestorm_16.png b/indra/newview/icons/beta/firestorm_16.png new file mode 100644 index 0000000000..e22c5fb6c4 Binary files /dev/null and b/indra/newview/icons/beta/firestorm_16.png differ diff --git a/indra/newview/icons/beta/firestorm_256.BMP b/indra/newview/icons/beta/firestorm_256.BMP new file mode 100644 index 0000000000..066b6244b0 Binary files /dev/null and b/indra/newview/icons/beta/firestorm_256.BMP differ diff --git a/indra/newview/icons/beta/firestorm_256.png b/indra/newview/icons/beta/firestorm_256.png new file mode 100644 index 0000000000..c440137b72 Binary files /dev/null and b/indra/newview/icons/beta/firestorm_256.png differ diff --git a/indra/newview/icons/beta/firestorm_32.png b/indra/newview/icons/beta/firestorm_32.png new file mode 100644 index 0000000000..fc9e6f0e2c Binary files /dev/null and b/indra/newview/icons/beta/firestorm_32.png differ diff --git a/indra/newview/icons/beta/firestorm_48.png b/indra/newview/icons/beta/firestorm_48.png new file mode 100644 index 0000000000..d2f31b77c9 Binary files /dev/null and b/indra/newview/icons/beta/firestorm_48.png differ diff --git a/indra/newview/icons/beta/firestorm_512.png b/indra/newview/icons/beta/firestorm_512.png new file mode 100644 index 0000000000..ce0742d66a Binary files /dev/null and b/indra/newview/icons/beta/firestorm_512.png differ diff --git a/indra/newview/icons/beta/firestorm_icon.ico b/indra/newview/icons/beta/firestorm_icon.ico new file mode 100644 index 0000000000..8f59ecd435 Binary files /dev/null and b/indra/newview/icons/beta/firestorm_icon.ico differ diff --git a/indra/newview/icons/beta/phoenix_icon.icns b/indra/newview/icons/beta/phoenix_icon.icns new file mode 100644 index 0000000000..2f1125b6ca Binary files /dev/null and b/indra/newview/icons/beta/phoenix_icon.icns differ diff --git a/indra/newview/icons/development/firestorm_128.png b/indra/newview/icons/development/firestorm_128.png new file mode 100644 index 0000000000..9b9c34821e Binary files /dev/null and b/indra/newview/icons/development/firestorm_128.png differ diff --git a/indra/newview/icons/development/firestorm_16.png b/indra/newview/icons/development/firestorm_16.png new file mode 100644 index 0000000000..e22c5fb6c4 Binary files /dev/null and b/indra/newview/icons/development/firestorm_16.png differ diff --git a/indra/newview/icons/development/firestorm_256.BMP b/indra/newview/icons/development/firestorm_256.BMP new file mode 100644 index 0000000000..066b6244b0 Binary files /dev/null and b/indra/newview/icons/development/firestorm_256.BMP differ diff --git a/indra/newview/icons/development/firestorm_256.png b/indra/newview/icons/development/firestorm_256.png new file mode 100644 index 0000000000..c440137b72 Binary files /dev/null and b/indra/newview/icons/development/firestorm_256.png differ diff --git a/indra/newview/icons/development/firestorm_32.png b/indra/newview/icons/development/firestorm_32.png new file mode 100644 index 0000000000..fc9e6f0e2c Binary files /dev/null and b/indra/newview/icons/development/firestorm_32.png differ diff --git a/indra/newview/icons/development/firestorm_48.png b/indra/newview/icons/development/firestorm_48.png new file mode 100644 index 0000000000..d2f31b77c9 Binary files /dev/null and b/indra/newview/icons/development/firestorm_48.png differ diff --git a/indra/newview/icons/development/firestorm_512.png b/indra/newview/icons/development/firestorm_512.png new file mode 100644 index 0000000000..ce0742d66a Binary files /dev/null and b/indra/newview/icons/development/firestorm_512.png differ diff --git a/indra/newview/icons/development/firestorm_icon.ico b/indra/newview/icons/development/firestorm_icon.ico new file mode 100644 index 0000000000..8f59ecd435 Binary files /dev/null and b/indra/newview/icons/development/firestorm_icon.ico differ diff --git a/indra/newview/icons/development/phoenix_icon.icns b/indra/newview/icons/development/phoenix_icon.icns new file mode 100644 index 0000000000..2f1125b6ca Binary files /dev/null and b/indra/newview/icons/development/phoenix_icon.icns differ diff --git a/indra/newview/icons/private/firestorm_128.png b/indra/newview/icons/private/firestorm_128.png new file mode 100644 index 0000000000..9b9c34821e Binary files /dev/null and b/indra/newview/icons/private/firestorm_128.png differ diff --git a/indra/newview/icons/private/firestorm_16.png b/indra/newview/icons/private/firestorm_16.png new file mode 100644 index 0000000000..e22c5fb6c4 Binary files /dev/null and b/indra/newview/icons/private/firestorm_16.png differ diff --git a/indra/newview/icons/private/firestorm_256.BMP b/indra/newview/icons/private/firestorm_256.BMP new file mode 100644 index 0000000000..066b6244b0 Binary files /dev/null and b/indra/newview/icons/private/firestorm_256.BMP differ diff --git a/indra/newview/icons/private/firestorm_256.png b/indra/newview/icons/private/firestorm_256.png new file mode 100644 index 0000000000..c440137b72 Binary files /dev/null and b/indra/newview/icons/private/firestorm_256.png differ diff --git a/indra/newview/icons/private/firestorm_32.png b/indra/newview/icons/private/firestorm_32.png new file mode 100644 index 0000000000..fc9e6f0e2c Binary files /dev/null and b/indra/newview/icons/private/firestorm_32.png differ diff --git a/indra/newview/icons/private/firestorm_48.png b/indra/newview/icons/private/firestorm_48.png new file mode 100644 index 0000000000..d2f31b77c9 Binary files /dev/null and b/indra/newview/icons/private/firestorm_48.png differ diff --git a/indra/newview/icons/private/firestorm_512.png b/indra/newview/icons/private/firestorm_512.png new file mode 100644 index 0000000000..ce0742d66a Binary files /dev/null and b/indra/newview/icons/private/firestorm_512.png differ diff --git a/indra/newview/icons/private/firestorm_icon.ico b/indra/newview/icons/private/firestorm_icon.ico new file mode 100644 index 0000000000..8f59ecd435 Binary files /dev/null and b/indra/newview/icons/private/firestorm_icon.ico differ diff --git a/indra/newview/icons/private/phoenix_icon.icns b/indra/newview/icons/private/phoenix_icon.icns new file mode 100644 index 0000000000..2f1125b6ca Binary files /dev/null and b/indra/newview/icons/private/phoenix_icon.icns differ diff --git a/indra/newview/icons/project/firestorm_128.png b/indra/newview/icons/project/firestorm_128.png new file mode 100644 index 0000000000..9b9c34821e Binary files /dev/null and b/indra/newview/icons/project/firestorm_128.png differ diff --git a/indra/newview/icons/project/firestorm_16.png b/indra/newview/icons/project/firestorm_16.png new file mode 100644 index 0000000000..e22c5fb6c4 Binary files /dev/null and b/indra/newview/icons/project/firestorm_16.png differ diff --git a/indra/newview/icons/project/firestorm_256.BMP b/indra/newview/icons/project/firestorm_256.BMP new file mode 100644 index 0000000000..066b6244b0 Binary files /dev/null and b/indra/newview/icons/project/firestorm_256.BMP differ diff --git a/indra/newview/icons/project/firestorm_256.png b/indra/newview/icons/project/firestorm_256.png new file mode 100644 index 0000000000..c440137b72 Binary files /dev/null and b/indra/newview/icons/project/firestorm_256.png differ diff --git a/indra/newview/icons/project/firestorm_32.png b/indra/newview/icons/project/firestorm_32.png new file mode 100644 index 0000000000..fc9e6f0e2c Binary files /dev/null and b/indra/newview/icons/project/firestorm_32.png differ diff --git a/indra/newview/icons/project/firestorm_48.png b/indra/newview/icons/project/firestorm_48.png new file mode 100644 index 0000000000..d2f31b77c9 Binary files /dev/null and b/indra/newview/icons/project/firestorm_48.png differ diff --git a/indra/newview/icons/project/firestorm_512.png b/indra/newview/icons/project/firestorm_512.png new file mode 100644 index 0000000000..ce0742d66a Binary files /dev/null and b/indra/newview/icons/project/firestorm_512.png differ diff --git a/indra/newview/icons/project/firestorm_icon.ico b/indra/newview/icons/project/firestorm_icon.ico new file mode 100644 index 0000000000..8f59ecd435 Binary files /dev/null and b/indra/newview/icons/project/firestorm_icon.ico differ diff --git a/indra/newview/icons/project/phoenix_icon.icns b/indra/newview/icons/project/phoenix_icon.icns new file mode 100644 index 0000000000..2f1125b6ca Binary files /dev/null and b/indra/newview/icons/project/phoenix_icon.icns differ diff --git a/indra/newview/icons/release/firestorm_128.png b/indra/newview/icons/release/firestorm_128.png new file mode 100644 index 0000000000..9b9c34821e Binary files /dev/null and b/indra/newview/icons/release/firestorm_128.png differ diff --git a/indra/newview/icons/release/firestorm_16.png b/indra/newview/icons/release/firestorm_16.png new file mode 100644 index 0000000000..e22c5fb6c4 Binary files /dev/null and b/indra/newview/icons/release/firestorm_16.png differ diff --git a/indra/newview/icons/release/firestorm_256.BMP b/indra/newview/icons/release/firestorm_256.BMP new file mode 100644 index 0000000000..066b6244b0 Binary files /dev/null and b/indra/newview/icons/release/firestorm_256.BMP differ diff --git a/indra/newview/icons/release/firestorm_256.png b/indra/newview/icons/release/firestorm_256.png new file mode 100644 index 0000000000..c440137b72 Binary files /dev/null and b/indra/newview/icons/release/firestorm_256.png differ diff --git a/indra/newview/icons/release/firestorm_32.png b/indra/newview/icons/release/firestorm_32.png new file mode 100644 index 0000000000..fc9e6f0e2c Binary files /dev/null and b/indra/newview/icons/release/firestorm_32.png differ diff --git a/indra/newview/icons/release/firestorm_48.png b/indra/newview/icons/release/firestorm_48.png new file mode 100644 index 0000000000..d2f31b77c9 Binary files /dev/null and b/indra/newview/icons/release/firestorm_48.png differ diff --git a/indra/newview/icons/release/firestorm_512.png b/indra/newview/icons/release/firestorm_512.png new file mode 100644 index 0000000000..ce0742d66a Binary files /dev/null and b/indra/newview/icons/release/firestorm_512.png differ diff --git a/indra/newview/icons/release/firestorm_icon.ico b/indra/newview/icons/release/firestorm_icon.ico new file mode 100644 index 0000000000..8f59ecd435 Binary files /dev/null and b/indra/newview/icons/release/firestorm_icon.ico differ diff --git a/indra/newview/icons/release/phoenix_icon.icns b/indra/newview/icons/release/phoenix_icon.icns new file mode 100644 index 0000000000..2f1125b6ca Binary files /dev/null and b/indra/newview/icons/release/phoenix_icon.icns differ diff --git a/indra/newview/icons/test/firestorm_128.png b/indra/newview/icons/test/firestorm_128.png new file mode 100644 index 0000000000..9b9c34821e Binary files /dev/null and b/indra/newview/icons/test/firestorm_128.png differ diff --git a/indra/newview/icons/test/firestorm_16.png b/indra/newview/icons/test/firestorm_16.png new file mode 100644 index 0000000000..e22c5fb6c4 Binary files /dev/null and b/indra/newview/icons/test/firestorm_16.png differ diff --git a/indra/newview/icons/test/firestorm_256.BMP b/indra/newview/icons/test/firestorm_256.BMP new file mode 100644 index 0000000000..066b6244b0 Binary files /dev/null and b/indra/newview/icons/test/firestorm_256.BMP differ diff --git a/indra/newview/icons/test/firestorm_256.png b/indra/newview/icons/test/firestorm_256.png new file mode 100644 index 0000000000..c440137b72 Binary files /dev/null and b/indra/newview/icons/test/firestorm_256.png differ diff --git a/indra/newview/icons/test/firestorm_32.png b/indra/newview/icons/test/firestorm_32.png new file mode 100644 index 0000000000..fc9e6f0e2c Binary files /dev/null and b/indra/newview/icons/test/firestorm_32.png differ diff --git a/indra/newview/icons/test/firestorm_48.png b/indra/newview/icons/test/firestorm_48.png new file mode 100644 index 0000000000..d2f31b77c9 Binary files /dev/null and b/indra/newview/icons/test/firestorm_48.png differ diff --git a/indra/newview/icons/test/firestorm_512.png b/indra/newview/icons/test/firestorm_512.png new file mode 100644 index 0000000000..ce0742d66a Binary files /dev/null and b/indra/newview/icons/test/firestorm_512.png differ diff --git a/indra/newview/icons/test/firestorm_icon.ico b/indra/newview/icons/test/firestorm_icon.ico new file mode 100644 index 0000000000..8f59ecd435 Binary files /dev/null and b/indra/newview/icons/test/firestorm_icon.ico differ diff --git a/indra/newview/icons/test/phoenix_icon.icns b/indra/newview/icons/test/phoenix_icon.icns new file mode 100644 index 0000000000..2f1125b6ca Binary files /dev/null and b/indra/newview/icons/test/phoenix_icon.icns differ diff --git a/indra/newview/installers/darwin/firstlook-dmg/Applications-alias.r b/indra/newview/installers/darwin/firstlook-dmg/Applications-alias.r deleted file mode 100644 index aa3cfb87d8..0000000000 --- a/indra/newview/installers/darwin/firstlook-dmg/Applications-alias.r +++ /dev/null @@ -1,6996 +0,0 @@ -data 'alis' (0) { - $"0000 0000 0112 0002 0001 036D 6277 0000" /* ...........mbw.. */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 C135 A717 482B 0000 0000" /* ......Á5§.H+.... */ - $"0002 0C41 7070 6C69 6361 7469 6F6E 7300" /* ...Applications. */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 00E2 4F18 C2E8 9FB0 0000 0000 0000" /* ...âO.Â蟰...... */ - $"0000 FFFF FFFF 0000 0920 0000 0000 0000" /* ..ÿÿÿÿ..Æ ...... */ - $"0000 0000 0000 0000 0003 6D62 7700 0010" /* ..........mbw... */ - $"0008 0000 C136 0987 0000 0011 0008 0000" /* ....Á6Ƈ........ */ - $"C2E9 0220 0000 0001 0000 0002 0010 6D62" /* Âé. ..........mb */ - $"773A 4170 706C 6963 6174 696F 6E73 000E" /* w:Applications.. */ - $"001A 000C 0041 0070 0070 006C 0069 0063" /* .....A.p.p.l.i.c */ - $"0061 0074 0069 006F 006E 0073 000F 0008" /* .a.t.i.o.n.s.... */ - $"0003 006D 0062 0077 0012 000C 4170 706C" /* ...m.b.w....Appl */ - $"6963 6174 696F 6E73 0013 0001 2F00 FFFF" /* ications..../.ÿÿ */ - $"0000" /* .. */ -}; - - -data 'icns' (-16455) { - $"6963 6E73 0001 B3AC 6973 3332 0000 0224" /* icns..³¬is32...$ */ - $"9F00 005F 8061 005D 8700 055D 9AA2 A0A4" /* Ÿ.._€a.]‡..]𢠤 */ - $"8986 0008 557D B3B2 B1B3 A881 8081 8104" /* ‰†..U}³²±³¨€. */ - $"826F 577E AF82 A801 B3AE 82AD 03AF 7B7A" /* ‚oW~¯‚¨.³®‚­.¯{z */ - $"A781 A203 9EB7 C89D 81A2 03A6 776E 9A80" /* §¢.ž·È¢.¦wnš€ */ - $"9705 959F D3DC A295 8097 5899 6C67 8F8D" /* —.•ŸÓÜ¢•€—X™lg */ - $"8E89 85C9 BCA9 C883 898D 8D8E 6561 8585" /* މ…ɼ©Èƒ‰Žea…… */ - $"83A8 B7F3 BAB4 DFB6 AA84 8585 605E 7B7D" /* ƒ¨·óº´ß¶ª„……`^{} */ - $"79D0 F9E0 F0F2 DAE1 D87C 7D7B 5D5B 7476" /* yÐùàðòÚáØ|}{][tv */ - $"7099 D876 7373 76CA 8A72 7673 5B5A 6D70" /* p™ØvssvÊŠrvs[Zmp */ - $"6B9B 816C 6F6F 67B3 C567 706C 5A59 686B" /* k›loog³ÅgplZYhk */ - $"6B67 686B 806A 056B 6F6A 6B67 5A88 5900" /* kghk€j.kojkgZˆY. */ - $"5882 598A 5801 0059 9F00 0482 8383 8480" /* X‚YŠX..YŸ..‚ƒƒ„€ */ - $"8700 057F B7BE BDC0 A786 0008 799E D0CE" /* ‡...·¾½À§†..yžÐÎ */ - $"CECF C5A1 A081 A105 A390 7AA0 D0CA 80C9" /* ÎÏÅ¡ ¡.£z ÐÊ€É */ - $"01CA D183 CE03 D09C 9ECD 81C9 03C7 D4DE" /* .ÊуÎ.МžÍÉ.ÇÔÞ */ - $"C681 C903 CD9A 94C5 80C2 05C1 C6E3 E9C8" /* ÆÉ.Íš”Å€Â.ÁÆãéÈ */ - $"C180 C20D C491 8DBD BBBC B9B6 DDD7 CCDD" /* Á€Â.Ä‘½»¼¹¶Ý×ÌÝ */ - $"B5B9 80BC 468B 87B4 B4B3 C8D1 F7D3 CFEA" /* µ¹€¼F‹‡´´³ÈÑ÷ÓÏê */ - $"D0C9 B4B4 B385 83AA ABA9 E0FB EAF5 F6E5" /* ÐÉ´´³…ƒª«©àûêõöå */ - $"EAE5 AAAB A981 80A0 A39E BAE4 A2A0 A1A2" /* ê媫©€ £žºä¢ ¡¢ */ - $"DAAF 9FA3 9F7F 7E97 9B97 B8A6 979A 9A94" /* Ú¯Ÿ£Ÿ.~—›—¸¦—šš” */ - $"CAD6 949B 977D 7D90 9493 9091 8293 0496" /* ÊÖ”›—}}”“‘‚“.– */ - $"9294 907D 8E7C 8A7B 0100 7C9F 0000 7A80" /* ’”}Ž|Š{..|Ÿ..z€ */ - $"7C00 7887 0005 77B1 B8B7 BBA0 8600 0871" /* |.x‡..w±¸·» †..q */ - $"97CB C9C8 CAC0 9B99 819A 049C 8972 99CA" /* —ËÉÈÊÀ›™š.œ‰r™Ê */ - $"82C3 00CB 83C8 03CA 9596 C681 C203 BFCF" /* ‚Ã.˃È.Ê•–ÆÂ.¿Ï */ - $"DABF 81C2 03C6 938C BD80 BA05 B9BF E0E7" /* Ú¿Â.Æ“Œ½€º.¹¿àç */ - $"C1B9 80BA 57BC 8985 B5B3 B3B0 ADD9 D2C6" /* Á¹€ºW¼‰…µ³³°­ÙÒÆ */ - $"D9AC B0B3 B3B4 827F ACAB AAC2 CCF6 CECA" /* Ù¬°³³´‚.¬«ªÂÌöÎÊ */ - $"E8CB C3AB ACAA 7D7B A1A3 A0DD FAE9 F4F5" /* èË묪}{¡£ Ýúéôõ */ - $"E3E8 E3A2 A3A0 7A78 989B 96B3 E29A 9898" /* ãè㢣 zx˜›–³âš˜˜ */ - $"9AD7 A897 9B97 7776 8F93 8FB2 9F8F 9292" /* š×¨—›—wv“²Ÿ’’ */ - $"8BC5 D28C 938F 7575 888C 8B89 8982 8B04" /* ‹ÅÒŒ“uuˆŒ‹‰‰‚‹. */ - $"8F8A 8C88 758E 748A 7301 0074 7338 6D6B" /* ŠŒˆuŽtŠs..ts8mk */ - $"0000 0108 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 1E24 2424 1600 0000 0000" /* .......$$$...... */ - $"0000 0000 0011 BDC8 C8C8 9600 0000 0000" /* ......½ÈÈÈ–..... */ - $"0000 0000 048C FFFF FFFF F5A7 9C9E 9E9E" /* .....Œÿÿÿÿõ§œžžž */ - $"9E9E 6003 8AFF FCFC FCFC FEFF FFFF FFFF" /* žž`.Šÿüüüüþÿÿÿÿÿ */ - $"FFFF FF7A 89FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿz‰ÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF7A 73FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿzsÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF64 62FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿdbÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF53 53FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿSSÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF45 48FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿEHÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF3C 41FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿdçYJ¢ý */ - $"5CF9 2D3F 6F47 4854 7085 62C1 C65D C07C" /* \ù-?oGHTp…bÁÆ]À| */ - $"86A0 3E43 500F 90D0 4787 8CE8 726C 5109" /* † >CP.ÐG‡ŒèrlQÆ */ - $"FD68 8099 E8FE 2A66 2F02 78F5 C78B 6A34" /* ýh€™èþ*f/.xõÇ‹j4 */ - $"0A9E 25FE 0DE3 E3C8 BD7B 3530 98D5 CF03" /* ž%þ.ããȽ{50˜ÕÏ. */ - $"CE64 A57D 620C 87C5 65B4 7BE1 34BC 3058" /* Îd¥}b.‡Åe´{á4¼0X */ - $"572A 9EBF 5E0C 5A01 80A3 B334 DF5A E1B8" /* W*ž¿^.Z.€£³4ßZḠ*/ - $"08C3 5C30 2CC4 C1F5 1341 F516 40FA 8A00" /* .Ã\0,ÄÁõ.Aõ.@úŠ. */ - $"477D B516 AD2F 4DD3 BE8C 58F0 7C77 A236" /* G}µ.­/MÓ¾ŒXð|w¢6 */ - $"DD43 6611 D582 F050 DC31 59D0 194D A6FD" /* ÝCf.Õ‚ðPÜ1YÐ.M¦ý */ - $"652E FA16 4BA7 25FE 0DE3 E3D9 B950 06E2" /* e.ú.K§%þ.ããÙ¹P.â */ - $"3A8A DA86 827A 4C68 5798 55FC FD46 A583" /* :ŠÚ†‚zLhW˜UüýF¥ƒ */ - $"064D 8FB0 29D9 8DAD 53CC 5229 B675 ACAB" /* .M°)Ù­SÌR)¶u¬« */ - $"8EED 34BC 2F12 142E 446C 0DF7 0BC3 D6E7" /* Ží4¼/...Dl.÷.ÃÖç */ - $"A086 8D72 6AE7 9270 B97C D981 C7F1 C38A" /*  †rjç’p¹|ÙÇñÊ */ - $"47EE E585 FC19 FCE3 668C C7E0 471F 813C" /* Gîå…ü.üãfŒÇàG.< */ - $"3F02 0005 B422 0345 FC66 9A91 446D DDCA" /* ?...´".Eüfš‘DmÝÊ */ - $"449B CCDB 8E8F A0B8 3942 A8FC 6409 F7F3" /* D›ÌÛŽ ¸9B¨üdÆ÷ó */ - $"ED01 353A 2B01 1B0C 2939 619B 9890 94E7" /* í.5:+...)9a›˜”ç */ - $"5FDA 75F2 7323 BF3A 7AED 757E 42D6 C336" /* _Úuòs#¿:zíu~BÖÃ6 */ - $"E74E 6B5F 2D43 4780 CA1C C462 6507 4801" /* çNk_-CG€Ê.Äbe.H. */ - $"EDEF 5B2A 7297 8FC6 1E13 E7FA 56B5 4279" /* íï[*r—Æ..çúVµBy */ - $"5BB4 B307 F4DE E273 4FC3 E9B1 72C3 EDA2" /* [´³.ôÞâsOÃé±rÃí¢ */ - $"A3F0 A9E0 FB5D C018 B35C 8B45 CD63 99FE" /* £ð©àû]À.³\‹EÍc™þ */ - $"11FB 8993 21D1 BA8B 69EB 5CB9 F258 468F" /* .û‰“!Ѻ‹ië\¹òXF */ - $"73D4 6804 C6E6 045E AE54 954C D0E5 D836" /* sÔh.Ææ.^®T•LÐåØ6 */ - $"EA0D DB9A 2806 36FA B3E9 5973 789D 6591" /* ê.Ûš(.6ú³éYsxe‘ */ - $"1EC2 F271 E9E2 5681 C542 A2FC F4EF 8111" /* .ÂòqéâVÅB¢üôï. */ - $"59D5 FC91 9749 52A3 EA37 B239 4939 8625" /* YÕü‘—IR£ê7²9I9†% */ - $"F248 18D2 075A 80A1 8005 9ED2 437F C705" /* òH.Ò.Z€¡€.žÒC.Ç. */ - $"2BFD 308C F1F0 E1BC 8FDA F5D5 50D9 9770" /* +ý0Œñðá¼ÚõÕPÙ—p */ - $"7EF5 213F 91F6 5B8B 189D EE67 70EF F40A" /* ~õ!?‘ö[‹.îgpïô */ - $"2E24 C54B F37D 4941 FCD2 7779 5C8B 59CC" /* .$ÅKó}IAüÒwy\‹YÌ */ - $"F284 3377 A496 0399 6F17 47AC B5EA 3A84" /* ò„3w¤–.™o.G¬µê:„ */ - $"844E DC13 D058 BE9F 1BBE 8CE0 E615 D2E1" /* „NÜ.ÐX¾Ÿ.¾Œàæ.Òá */ - $"88A5 9DA6 9FB4 4EDE B804 ED14 A7EA 54E0" /* ˆ¥¦Ÿ´NÞ¸.í.§êTà */ - $"5A87 311B 5E69 70F5 EDA3 2E78 8862 7603" /* Z‡1.^ipõí£.xˆbv. */ - $"7761 094D 4A69 5AB0 A9BB 3F4F 92BE 205B" /* waÆMJiZ°©»?O’¾ [ */ - $"A226 24D5 C8B2 CCF7 E064 31C7 E727 6E2C" /* ¢&$ÕȲÌ÷àd1Çç'n, */ - $"D6A1 347F 41CD 5F70 E1C0 1AFC 4FBC 81A9" /* Ö¡4.AÍ_páÀ.üO¼© */ - $"A884 F03A CD84 B581 1F03 A523 838B 8038" /* ¨„ð:Í„µ..¥#ƒ‹€8 */ - $"02F4 6DE8 98FC EDD6 B331 21F7 4AC5 A31E" /* .ômè˜üíÖ³1!÷JÅ£. */ - $"9EB4 E770 D465 386E 18A6 D1BE EF6D B008" /* ž´çpÔe8n.¦Ñ¾ïm°. */ - $"63E6 1066 1374 4D10 3270 8C7F F297 F91D" /* cæ.f.tM.2pŒ.ò—ù. */ - $"DA61 677B 29FD A878 B122 E33C 17E3 8ED1" /* Úag{)ý¨x±"ã<.ãŽÑ */ - $"FB8E 4407 8B82 32AD 1B50 09DF BDA8 C80E" /* ûŽD.‹‚2­.PÆß½¨È. */ - $"7E28 ED9D A005 4297 B9C1 8D66 CA77 C41D" /* ~(í .B—¹ÁfÊwÄ. */ - $"41C5 E3B3 F94D 96E5 1308 7C59 1EB8 0871" /* AÅã³ùM–å..|Y.¸.q */ - $"C7A4 FED7 47F2 F800 6889 A21D 1FF4 9E93" /* Ǥþ×Gòø.h‰¢..ôž“ */ - $"1321 7377 D96E 86F5 A0CB EB17 C77A 81C0" /* .!swÙn†õ Ëë.ÇzÀ */ - $"7C8D A01F 0E91 00F9 1D00 94FD 4D32 E5DB" /* | ..‘.ù..”ýM2åÛ */ - $"0482 DEB8 CF1C 792A EA3B DECA 4470 4898" /* .‚Þ¸Ï.y*ê;ÞÊDpH˜ */ - $"81C0 5457 FE66 63DD CAF3 0B98 08E1 DC3F" /* ÀTWþfcÝÊó.˜.áÜ? */ - $"CF68 7F31 9BEE 73EF A3A5 8D57 8969 EEC3" /* Ïh.1›îsW‰iîà */ - $"0F13 3ED9 390D FC4C B37F C4F7 01E4 B115" /* ..>Ù9.üL³.Ä÷.ä±. */ - $"E9F9 9526 00FA 10D0 0D64 4CC5 8481 D231" /* éù•&.ú.Ð.dLÅ„Ò1 */ - $"DE6D 483E 8046 7F58 5BD3 1FFC CF82 297A" /* ÞmH>€F.X[Ó.üÏ‚)z */ - $"88A1 7E78 0668 3222 9E8B A287 30A3 DB10" /* ˆ¡~x.h2"ž‹¢‡0£Û. */ - $"A77F A842 87FC 164E 92B8 96DF 4920 EEC2" /* §.¨B‡ü.N’¸–ßI î */ - $"47B6 83F1 F68F 9309 63CE FAAC 3C8F 9FCF" /* G¶ƒñö“ÆcÎú¬<ŸÏ */ - $"A166 9621 ADC0 0ABB 7F1A 7E3C A4AD 3755" /* ¡f–!­À»..~<¤­7U */ - $"E2D8 E26D CAD1 6F24 F808 BC0D E94B EEBC" /* âØâmÊÑo$ø.¼.éKî¼ */ - $"D601 C1F5 30C1 F53B C0FA 97C0 90E6 901B" /* Ö.Áõ0Áõ;Àú—Àæ. */ - $"71C2 1EAB 8A4C 52A4 4431 058C DFB9 4148" /* qÂ.«ŠLR¤D1.Œß¹AH */ - $"185C 1E93 01C6 82D3 C81B 6398 8173 189D" /* .\.“.Æ‚ÓÈ.c˜s. */ - $"F73C 4887 5155 0C95 0088 4C69 0A27 3F39" /* ÷«×j */ - $"A227 4F09 072C 4682 9B0F 995C 7551 94E7" /* ¢'OÆ.,F‚›.™\uQ”ç */ - $"419A 0098 0283 19E8 0489 687B 4F66 B74C" /* Aš.˜.ƒ.è.‰h{Of·L */ - $"7F59 C07A A552 B04D 628F E401 E55C A4ED" /* .YÀz¥R°Mbä.å\¤í */ - $"390F C34D 81BB 9F88 0C50 F50F 9FBD A377" /* 9.ÃM»Ÿˆ.Põ.Ÿ½£w */ - $"F538 3F9C E243 FF47 D346 87F2 444B C479" /* õ8?œâCÿGÓF‡òDKÄy */ - $"F6B3 1C76 5125 F487 0FAF 294A DA20 EC56" /* ö³.vQ%ô‡.¯)JÚ ìV */ - $"07AB DE07 14C2 1721 F3E0 D687 1F67 039D" /* .«Þ..Â.!óàÖ‡.g. */ - $"461F 0D82 9CAA B2D4 DFC6 6AA5 D31E 4D01" /* F..‚œª²Ô߯j¥Ó.M. */ - $"5AC2 B2BD FD97 7D6E 00D1 7ADF 377C 15A7" /* Z²½ý—}n.Ñzß7|.§ */ - $"9681 C7B2 8168 D706 425B 35EF 7298 C053" /* –Dzh×.B[5ïr˜ÀS */ - $"E198 B5E2 B835 712B 1AD8 BA77 CF86 83A3" /* ᘵâ¸5q+.غwφƒ£ */ - $"B0B9 C5E6 F37A A3DE D93B 8EC8 132F A52A" /* °¹Åæóz£ÞÙ;ŽÈ./¥* */ - $"AB20 E166 F719 7130 6482 5BE2 605B D78E" /* « áf÷.q0d‚[â`[׎ */ - $"672D 7AE6 3906 DA75 0E3D 1962 8A60 9294" /* g-zæ9.Úu.=.bŠ`’” */ - $"1FC8 C0F3 216D 815D 4DDE 5DDE D8AB 3F9C" /* .ÈÀó!m]MÞ]ÞØ«?œ */ - $"7F9F 24B3 7BBF CCB9 2F80 19B6 70AE 1B3D" /* .Ÿ$³{¿Ì¹/€.¶p®.= */ - $"C71A 1F7C 81D2 639F 0D03 24EA D4B1 D351" /* Ç..|ÒcŸ..$êÔ±ÓQ */ - $"DD10 FBD5 EA3F 4957 A7ED 04C6 384D C10F" /* Ý.ûÕê?IW§í.Æ8MÁ. */ - $"8A55 0C03 694F 0D18 70D8 0AC3 33C0 17D1" /* ŠU..iO..pØÂÃ3À.Ñ */ - $"73BB E85F 5204 090F FDFE 8AC5 9AD6 22D5" /* s»è_R.Æ.ýþŠÅšÖ"Õ */ - $"CA31 A6DE EF44 D910 B34A 0E59 7866 536F" /* Ê1¦ÞïDÙ.³J.YxfSo */ - $"9B0B A341 3AB8 C06C C64F 3F86 8160 DFB9" /* ›.£A:¸ÀlÆO?†`ß¹ */ - $"A709 59D8 88C3 3316 9FFA F83F 5120 E40E" /* §ÆY؈Ã3.Ÿúø?Q ä. */ - $"4DEA C88F C418 37F6 4C0B 7606 9632 EEC5" /* MêÈÄ.7öL.v.–2îÅ */ - $"6380 FB25 A69F AAE2 0888 B722 008F 35CB" /* c€û%¦Ÿªâ.ˆ·".5Ë */ - $"F6A7 90BF D0DB 6367 A14B 5A86 EE98 FD18" /* ö§¿ÐÛcg¡KZ†î˜ý. */ - $"A629 1BAB 3BE2 920D E99D BEC2 88B4 F909" /* ¦).«;â’.é¾Âˆ´ùÆ */ - $"66B1 535D 3940 AF78 8200 0C46 142A EA2A" /* f±S]9@¯x‚..F.*ê* */ - $"A991 95E8 FD2B D30B 0E4A 76E2 A97B FAA7" /* ©‘•èý+Ó..Jvâ©{ú§ */ - $"97E2 9B30 54FA 5E97 962A 7E83 5711 A707" /* —â›0Tú^—–*~ƒW.§. */ - $"2A21 3729 2046 9C41 8282 A161 E5F6 AB24" /* *!7) FœA‚‚¡aåö«$ */ - $"3324 74CF 1AF6 C935 D884 0008 DC18 663C" /* 3$tÏ.öÉ5Ø„..Ü.f< */ - $"3A00 25E4 92D7 8F23 4C07 3C63 DB6E 4924" /* :.%ä’×#L.X>q.㣷«* */ - $"A998 FE5A 74DB 537A CE3D CD46 49B6 DB6D" /* ©˜þZtÛSzÎ=ÍFI¶Ûm */ - $"B6DB 6DB2 8EE9 1D6F 6480 8613 D8D2 7D8F" /* ¶Ûm²Žé.od€†.ØÒ} */ - $"5615 3EAB B25B 722D ECB8 ED12 70F2 BA06" /* V.>«²[r-ì¸í.pòº. */ - $"E5A2 45C1 547C F861 A7D5 8E1C 08BC 346B" /* å¢EÁT|øa§ÕŽ..¼4k */ - $"2730 C670 2FD8 F159 6ABE 2092 ED98 AC34" /* '0Æp/ØñYj¾ ’혬4 */ - $"B4CA 8565 90CF 0034 6E68 F777 9672 F29D" /* ´Ê…eÏ.4nh÷w–rò */ - $"4621 6E73 9C90 5C3D A8DB F5B0 CACF A63E" /* F!nsœ\=¨Ûõ°ÊϦ> */ - $"861E 8B9E F490 8E15 69BC A01D EF59 E898" /* †.‹žôŽ.i¼ .ïYè˜ */ - $"7040 B817 5AA9 BFB1 09A0 FE74 D2F7 BEA8" /* p@¸.Z©¿±Æ þtÒ÷¾¨ */ - $"A4F3 FEAC 38A4 409E B504 9CC9 EAA3 533B" /* ¤óþ¬8¤@žµ.œÉê£S; */ - $"153D F710 FC9E 2055 A395 C374 2AF9 E7C5" /* .=÷.üž U£•Ãt*ùçÅ */ - $"E1E8 7F74 3CDB D568 B606 A9D5 B7AE E207" /* áè.t<ÛÕh¶.©Õ·®â. */ - $"947E 2E65 1C27 336D 927A 4F86 5422 0E04" /* ”~.e.'3m’zO†T".. */ - $"42C7 668A 9403 EAB7 21A3 C9F1 18BC 5380" /* BÇfŠ”.ê·!£Éñ.¼S€ */ - $"BED7 07B5 F9B1 B798 8727 D54A 7A6E E493" /* ¾×.µù±·˜‡'ÕJznä“ */ - $"5271 F27D 7C35 DCEE D0BC CB31 C1FB 879F" /* Rqò}|5ÜîмË1Áû‡Ÿ */ - $"E074 9EB9 D7BE C9ED D2C8 BD00 C7FC D05B" /* àtž¹×¾ÉíÒȽ.ÇüÐ[ */ - $"2B2C 9647 A924 9F22 A06D 62B4 A946 77B7" /* +,–G©$Ÿ" mb´©Fw· */ - $"AD6D 60EE C841 997D A7E8 7AD2 AFA8 EEC4" /* ­m`îÈA™}§èzÒ¯¨îÄ */ - $"D61F FC06 FD7A E761 AA33 0F74 A08F 8E5B" /* Ö.ü.ýzçaª3.t Ž[ */ - $"B7C0 7C9A 1201 F0F5 6403 E4D0 60D8 92D9" /* ·À|š..ðõd.äÐ`Ø’Ù */ - $"84ED 064F 1B29 D7A7 1D77 F4B3 61D6 2651" /* „í.O.)×§.wô³aÖ&Q */ - $"329E 2CA5 53B4 956D 1061 3A3A A73B FC8E" /* 2ž,¥S´•m.a::§;üŽ */ - $"DD3C 60C9 F855 32FB 3C04 6287 50F7 6BB3" /* Ý<`ÉøU2û<.b‡P÷k³ */ - $"B84A 05A6 3145 A832 3BBC CA56 115B 9D7F" /* ¸J.¦1E¨2;¼ÊV.[. */ - $"8ADB 5660 429D 1FF6 4E6D 4899 EFDA 592F" /* ŠÛV`B.öNmH™ïÚY/ */ - $"19DC 9790 802A 1C17 2250 ADEC 0312 2C23" /* .Ü—€*.."P­ì..,# */ - $"223B 1EC8 482C 6E26 DD67 528F 7CDC 1841" /* ";.ÈH,n&ÝgR|Ü.A */ - $"DBCB CF9E 6D26 B564 4FD4 0AB5 DA0B ADE2" /* ÛËÏžm&µdOÔµÚ.­â */ - $"C129 D895 00FF 105B 0D0B F4DB 286A B347" /* Á)Ø•.ÿ.[..ôÛ(j³G */ - $"A261 30A9 0A9B 7A0D 585B 3991 3217 6FF7" /* ¢a0©Â›z.X[9‘2.o÷ */ - $"A368 D6A8 E862 161A 3584 613E 04D9 DBCB" /* £hÖ¨èb..5„a>.ÙÛË */ - $"4D96 66A3 B736 F802 D67A 309F 04E6 AFD8" /* M–f£·6ø.Öz0Ÿ.æ¯Ø */ - $"888E A8A5 4461 F1F0 1B6B 2DC4 0DFE C676" /* ˆŽ¨¥Dañð.k-Ä.þÆv */ - $"8D4E 3750 C3E6 C233 EFC5 368B 6113 5B53" /* N7PÃæÂ3ïÅ6‹a.[S */ - $"08E0 C259 1B88 AA0C 74B0 862E 1024 BB3F" /* .àÂY.ˆª.t°†..$»? */ - $"2816 B320 715C 5DFA 9FF0 CBC3 6A85 777A" /* (.³ q\]úŸðËÃj…wz */ - $"23CB F89B D813 6706 313E 2CF5 A163 0848" /* #Ëø›Ø.g.1>,õ¡c.H */ - $"94C9 3288 B556 53DD 2A45 2302 F28E 7ED1" /* ”É2ˆµVSÝ*E#.òŽ~Ñ */ - $"B5A0 67C8 53BB 4CE4 45D9 317F 92AB B13B" /* µ gÈS»LäEÙ1.’«±; */ - $"7246 F6DE 5348 49C9 42A1 CA62 64B0 209E" /* rFöÞSHIÉB¡Êbd° ž */ - $"43F2 DF7C 9BBC 097F C94A EA52 8D01 ADEF" /* Còß|›¼Æ.ÉJêR.­ï */ - $"5241 7C9B 2876 75F4 D748 AF9D 6FBB 3306" /* RA|›(vuô×H¯o»3. */ - $"0AD1 3953 6C99 5BB7 F1F5 1C1F BCE7 CA83" /* ÂÑ9Sl™[·ñõ..¼çʃ */ - $"08C1 6811 FBC5 AE18 343C C6F5 E515 F9CF" /* .Áh.ûÅ®.4<Æõå.ùÏ */ - $"FE48 C6E9 956E 6712 DDCA D62C 7F37 6DFE" /* þHÆé•ng.ÝÊÖ,.7mþ */ - $"2465 A8EE 1BAF E106 CA62 101F 0144 31DC" /* $e¨î.¯á.Êb...D1Ü */ - $"029E ED0F 9E47 F22E 0C17 0D31 E60B 1662" /* .ží.žGò....1æ..b */ - $"C1F5 5C90 7D5A 6D03 EAB6 C0C8 1653 E821" /* Áõ\}Zm.ê¶ÀÈ.Sè! */ - $"5860 ED0B C711 39E5 E5C8 268D 2246 E3FB" /* X`í.Ç.9ååÈ&"Fãû */ - $"68A4 3B12 A487 350D FE94 3722 65AC 949B" /* h¤;.¤‡5.þ”7"e¬”› */ - $"2526 7CD5 0E28 E093 CFE8 314C BE18 5B60" /* %&|Õ.(à“Ïè1L¾.[` */ - $"827E 154B 9609 2536 F890 A361 BA29 8211" /* ‚~.K–Æ%6ø£aº)‚. */ - $"AF42 BEC6 1BCB CE6D 2910 8083 C890 D7FF" /* ¯B¾Æ.ËÎm).€ƒÈ×ÿ */ - $"6F04 CEF4 F47C 0D92 00BD D90F 4095 0A48" /* o.Îôô|.’.½Ù.@•ÂH */ - $"4DC6 210C 351D 34A5 5FDA E576 1E1B 1684" /* MÆ!.5.4¥_Úåv...„ */ - $"F2A0 B30A 589C 1DBC 4831 E906 0D67 0CDD" /* ò ³ÂXœ.¼H1é..g.Ý */ - $"876B 994F 6D66 47DD AF40 7158 4385 738E" /* ‡k™OmfGݯ@qXC…sŽ */ - $"82F8 E637 9B5C 7389 0AA5 2A04 D105 5E88" /* ‚øæ7›\s‰Â¥*.Ñ.^ˆ */ - $"C2A2 2943 E125 6C2F 0AD1 1E5C AF1F CFF6" /* ¢)Cá%l/ÂÑ.\¯.Ïö */ - $"B39B C799 0F39 6151 6625 BB66 C3C3 418B" /* ³›Ç™.9aQf%»fÃÃA‹ */ - $"90A4 F6F7 BD30 7A04 88E6 0F8A 3F0B FF2C" /* ¤ö÷½0z.ˆæ.Š?.ÿ, */ - $"D18B 1D88 1442 EB54 A6FC D226 251A 015D" /* Ñ‹.ˆ.BëT¦üÒ&%..] */ - $"4DA8 32CA 371B 86EB 4E89 1415 9A41 6AD2" /* M¨2Ê7.†ëN‰..šAjÒ */ - $"1F0F 7656 41E5 B874 72E7 5F88 ABDA 28D7" /* ..vVAå¸trç_ˆ«Ú(× */ - $"37D5 EE40 567F F751 2591 01A3 03B9 EFCD" /* 7Õî@V.÷Q%‘.£.¹ïÍ */ - $"E0A8 8CC8 8C8E 0945 3036 453A 1787 59C4" /* à¨ŒÈŒŽÆE06E:.‡YÄ */ - $"B99C 02D2 D5F6 1B5E E34C 551E 8C43 9A20" /* ¹œ.ÒÕö.^ãLU.ŒCš */ - $"981D 0B44 C6D1 E6AA 2B92 5F33 8016 C4F1" /* ˜..DÆÑæª+’_3€.Äñ */ - $"7AA6 E605 4676 A533 1D38 6ADA 9BC6 2C13" /* z¦æ.Fv¥3.8jÚ›Æ,. */ - $"385A 3DCE 7E2E B9A1 81BB 27C6 AFF8 FF5D" /* 8Z=Î~.¹¡»'Ưøÿ] */ - $"A511 4C25 DC70 082C B597 3EC4 004C D4B8" /* ¥.L%Üp.,µ—>Ä.LÔ¸ */ - $"BE6A B79D EF70 2610 B57B FEFE 6ACC 9EEE" /* ¾j·ïp&.µ{þþjÌžî */ - $"B94A 73A8 4B30 C207 7391 789E C0FE 6992" /* ¹Js¨K0Â.s‘xžÀþi’ */ - $"AB13 E2AA FF53 4B22 A338 0EA3 B476 D732" /* «.âªÿSK"£8.£´v×2 */ - $"EDA3 2009 3422 B4AA 64DE 26C3 5894 D6DD" /* í£ Æ4"´ªdÞ&ÃX”ÖÝ */ - $"F7A9 5A3B 6F31 5D2C EC22 1FAC 928B 647F" /* ÷©Z;o1],ì".¬’‹d. */ - $"1600 A961 11C3 FD11 E594 81F9 E0AC 20D4" /* ..©a.Ãý.å”ùà¬ Ô */ - $"0DCA 9CE0 FF14 3BE3 3010 00E1 9DFE F0C8" /* .Êœàÿ.;ã0..áþðÈ */ - $"70E7 D3A5 A7F9 884E 6941 CBCB FEBE 0C27" /* pçÓ¥§ùˆNiAËËþ¾.' */ - $"B3F5 BAA4 3068 BFC1 DB20 1E5F 9E83 BF7D" /* ³õº¤0h¿ÁÛ ._žƒ¿} */ - $"8EA3 8FB0 F355 FF02 DED2 5CC8 2B4D 4DA5" /* Ž£°óUÿ.ÞÒ\È+MM¥ */ - $"8122 C96A CDAB B130 2D35 B73E 2EE9 0AA9" /* "ÉjÍ«±0-5·>.é© */ - $"7DB8 B81D 7B0A 776B DFF3 2B02 1F6A EF5B" /* }¸¸.{Âwkßó+..jï[ */ - $"E6A6 177F D8C0 1C3B A88C 2154 18F3 BFB3" /* æ¦..ØÀ.;¨Œ!T.ó¿³ */ - $"F7EF 1249 860B F87F 60D6 AE06 B5B2 7824" /* ÷ï.I†.ø.`Ö®.µ²x$ */ - $"E601 91D7 1436 80CF 054C 9691 1321 B299" /* æ.‘×.6€Ï.L–‘.!²™ */ - $"11F3 2BA3 51F6 447E 1BC0 28CB 666B 9BA0" /* .ó+£QöD~.À(Ëfk›  */ - $"425A E39B 066C 1B7C 340B 950A BDCC E05D" /* BZã›.l.|4.•½Ìà] */ - $"C8DC 568C BDC6 54E9 0AA2 2D89 6E22 37E4" /* ÈÜVŒ½ÆTé¢-‰n"7ä */ - $"3508 39CC EE8F 8EE6 F926 626B E33F 4A06" /* 5.9ÌîŽæù&bkã?J. */ - $"4CD1 AE16 9063 3119 5554 58CA BB53 4A73" /* LÑ®.c1.UTXÊ»SJs */ - $"AA2B 2A71 B86B 3E95 BED6 D9D2 9D59 3E60" /* ª+*q¸k>•¾ÖÙÒY>` */ - $"C5D1 FA4C E6A7 880F 30D8 A679 6467 697E" /* ÅÑúL槈.0ئydgi~ */ - $"F327 EAA4 E0D1 01F9 9B74 AAA1 6CDD 7DA7" /* ó'ê¤àÑ.ù›tª¡lÝ}§ */ - $"D2AB C9CB 63D6 D3DF C778 C6ED 71A5 0571" /* Ò«ÉËcÖÓßÇxÆíq¥.q */ - $"C7E1 4EC7 E16C 43F0 75B1 3C9E 91EA AAAC" /* ÇáNÇálCðu±<ž‘ꪬ */ - $"9A2E A47E 8DF0 873E 2275 3F71 F986 DF3D" /* š.¤~ð‡>"u?qù†ß= */ - $"DBE5 1F4C 0D83 C3F5 F2D4 5A7C 0BFB E4FC" /* Ûå.L.ƒÃõòÔZ|.ûäü */ - $"C83E D8A4 FAF4 F589 09F2 4909 40AA 2AA8" /* È>ؤúôõ‰ÆòIÆ@ª*¨ */ - $"C190 BE4D D484 1408 6EAD 722F 6BA6 7502" /* Á¾MÔ„..n­r/k¦u. */ - $"A53F 1B9A BE86 841A FC60 53F3 8AE9 2E4C" /* ¥?.𾆄.ü`SóŠé.L */ - $"4B8E 1D09 F47C 3BAA CFB7 80DE 6A41 F007" /* KŽ.Æô|;ªÏ·€ÞjAð. */ - $"80A3 413A C568 5C02 6166 E8AF 9B6C EF86" /* €£A:Åh\.af诛lï† */ - $"F178 273B A803 89E9 520A ACFC 0E98 6198" /* ñx';¨.‰éR¬ü.˜a˜ */ - $"6ECE D094 76D1 8AF8 1035 D0C8 B9E5 ECC9" /* nÎДvÑŠø.5ÐȹåìÉ */ - $"08E6 748A F28B B0E0 F9AB 71B4 7971 9626" /* .ætŠò‹°àù«q´yq–& */ - $"5397 5D5A 31CB 5F9E 7C98 8300 72B1 2C67" /* S—]Z1Ë_ž|˜ƒ.r±,g */ - $"A38D 0C02 C603 C0C2 2000 E528 0CAA 9472" /* £..Æ.À .å(.ª”r */ - $"3115 8C05 0EE6 3F33 3F6D B6DB 64C7 AAB2" /* 1.Œ..æ?3?m¶ÛdǪ² */ - $"94EA DD85 D3DF F14E FF3F D3A2 778B 3749" /* ”êÝ…ÓßñNÿ?Ó¢w‹7I */ - $"B31B 6DB6 C5B6 5311 C782 3FCF 2880 6695" /* ³.m¶Å¶S.Ç‚?Ï(€f• */ - $"085A 35C2 3938 420E 8705 50BD 51C3 BD21" /* .Z5Â98B.‡.P½Qý! */ - $"41B9 C3ED 3A76 367F 40F5 DA53 3618 DF7A" /* A¹Ãí:v6.@õÚS6.ßz */ - $"EE11 B2D6 D9AD 4351 7D8F BC5A 7217 9352" /* î.²ÖÙ­CQ}¼Zr.“R */ - $"D43F 54B9 F618 3E0E 5FF8 1599 CD00 5489" /* Ô?T¹ö.>._ø.™Í.T‰ */ - $"459D 1B65 0538 7A92 D8EC 6AD5 E756 776E" /* E.e.8z’ØìjÕçVwn */ - $"5B66 A07C 36D6 A4B0 2E00 21E0 ABFC 2AB8" /* [f |6Ö¤°..!à«ü*¸ */ - $"F387 5784 0DB9 1978 67FE DEFF 0CCC CCCC" /* ó‡W„.¹.xgþÞÿ.ÌÌÌ */ - $"CCCC CCCC CCCC CCD3 5F84 850A F245 C370" /* ÌÌÌÌÌÌÌÓ_„…ÂòEÃp */ - $"786E 76C5 56A5 8C9B FC7F 6869 3085 EB26" /* xnvÅV¥Œ›ü.hi0…ë& */ - $"6162 A234 8BF4 868D 0BA5 77FA 56D2 31FD" /* ab¢4‹ô†.¥wúVÒ1ý */ - $"7436 0147 944C 2AAE C8C1 DE46 2A3A 2449" /* t6.G”L*®ÈÁÞF*:$I */ - $"EAD0 8E9E FF0B 129F 7F9C 1436 A6BC 10E6" /* êÐŽžÿ..Ÿ.œ.6¦¼.æ */ - $"3116 7A98 5FF6 97E9 FC84 7136 FEA5 C122" /* 1.z˜_ö—éü„q6þ¥Á" */ - $"E58F 44D6 D7A4 0AD3 E9B4 7C91 B833 1F91" /* åDÖפÂÓé´|‘¸3.‘ */ - $"5F0F D8F7 8A80 6560 B332 081A C68D 0FF9" /* _.Ø÷Š€e`³2..Æ.ù */ - $"899F 2CC7 E1D6 FC7E 1DEB C3ED EA04 F55D" /* ‰Ÿ,ÇáÖü~.ëÃíê.õ] */ - $"017D B775 48A1 A844 EAB2 8E3A 5FF2 20AF" /* .}·uH¡¨D겎:_ò ¯ */ - $"6231 D1B0 D4D9 D308 999B 09F2 95B1 7071" /* b1ѰÔÙÓ.™›Æò•±pq */ - $"F57C 1F1E 7960 4639 6A62 5BC6 9E5A D45D" /* õ|..y`F9jb[ÆžZÔ] */ - $"F339 9597 BF1B 62EB D128 B3D8 9BD3 52BF" /* ó9•—¿.bëÑ(³Ø›ÓR¿ */ - $"0703 43F9 E1C7 940E EA41 F4B1 75E4 891F" /* ..CùáÇ”.êAô±uä‰. */ - $"09A4 D439 7DFF 6AB7 EB4F 1253 A9C0 8BBE" /* ƤÔ9}ÿj·ëO.S©À‹¾ */ - $"40A0 3CE6 965D F886 A9EF 7E69 712D 41C2" /* @ <æ–]ø†©ï~iq-A */ - $"0062 6917 5D06 6548 9FD6 1470 4A0C 8545" /* .bi.].eHŸÖ.pJ.…E */ - $"8417 6C73 0C2D DF44 0E4A D5F9 7443 D629" /* „.ls.-ßD.JÕùtCÖ) */ - $"E62D DE53 CCFA EAEA E08A F0E1 9D37 9616" /* æ-ÞSÌúêêàŠðá7–. */ - $"C0DA 1FD4 6A42 6CE6 1D10 AB6A 911A 19D2" /* ÀÚ.ÔjBlæ..«j‘..Ò */ - $"47A0 4AC5 6A3C 12FF 0FE8 3AFB 7DFD 3D27" /* G JÅj<.ÿ.è:û}ý=' */ - $"42C6 E2BA 6DDE D1ED 21CE 1EA0 F444 055B" /* BÆâºmÞÑí!Î. ôD.[ */ - $"122A 41EE D8C1 144C B39C 0EEA 014E 7448" /* .*AîØÁ.L³œ.ê.NtH */ - $"0B72 7C2C 92B6 0CAC 3CB5 ADA7 8BF8 0C56" /* .r|,’¶.¬<µ­§‹ø.V */ - $"1DD5 B763 907F 6B60 8A85 ED4A F87D FBDC" /* .Õ·c.k`Š…íJø}ûÜ */ - $"391D 822B CBF5 7266 0E6B B2D4 32DE 606C" /* 9.‚+Ëõrf.k²Ô2Þ`l */ - $"014E 64BF F969 E3A5 C8E4 09EC B205 6391" /* .Nd¿ùiã¥ÈäÆì².c‘ */ - $"3081 96F5 9A80 0599 50D2 38FF 635B 9C35" /* 0–õš€.™PÒ8ÿc[œ5 */ - $"97CF A325 D94F B8E1 A794 EABC DA8A 7CC3" /* —Ï£%ÙO¸á§”ê¼ÚŠ|à */ - $"8713 2EBB 1EA6 69B0 9A72 A93D 874A 1F30" /* ‡..».¦i°šr©=‡J.0 */ - $"4C7B B341 B8CF F61E 7CEE 60CC E9B0 6D85" /* L{³A¸Ïö.|î`Ìé°m… */ - $"4F96 977D F85D F85A 08AF 46EF F259 FD70" /* O–—}ø]øZ.¯FïòYýp */ - $"E364 C54D 1F3D C951 B1DD 2CB4 8B94 9350" /* ãdÅM.=ÉQ±Ý,´‹”“P */ - $"8FFC CD4E D39E 2FF5 DC65 9DB7 2133 6E97" /* üÍNÓž/õÜe·!3n— */ - $"9705 2AA6 2625 534E B2A2 D775 FCFA 60E0" /* —.*¦&%SN²¢×uüú`à */ - $"4929 3681 2E72 5087 F3CD FB3A 6386 36A2" /* I)6.rP‡óÍû:c†6¢ */ - $"5E62 8705 57E4 8441 1986 1487 E88F C834" /* ^b‡.Wä„A.†.‡èÈ4 */ - $"C59D D57C CCA2 D56F 3889 44AC 0E4D 0E88" /* ÅÕ|Ì¢Õo8‰D¬.M.ˆ */ - $"2592 A50A F98D DF1D 17F2 78BD D4AB FDB4" /* %’¥Âùß..òx½Ô«ý´ */ - $"4249 FBDE 3E56 BE58 B587 88B4 8D75 299F" /* BIûÞ>V¾Xµ‡ˆ´u)Ÿ */ - $"4C92 6D9A 6B17 6153 9A65 4770 E0EC BBEF" /* L’mšk.aSšeGpàì»ï */ - $"2F91 8C35 8FFA 04AF 880C D9B6 204A D65E" /* /‘Œ5ú.¯ˆ.Ù¶ JÖ^ */ - $"68DD DBE7 63BC E1C5 CCDD E994 3796 10EF" /* hÝÛçc¼áÅÌÝé”7–.ï */ - $"354D C0E7 7A72 E57E EFAC 7C75 E4CE F47F" /* 5MÀçzrå~ï¬|uäÎô. */ - $"2E82 A8D0 6401 3CC4 1ACC 4513 1211 DCC9" /* .‚¨Ðd.<Ä.ÌE...ÜÉ */ - $"BD7A 47CA F093 83C7 38EB 866D 1ED5 AC6C" /* ½zGÊð“ƒÇ8ë†m.Õ¬l */ - $"FF01 C348 CFA1 2532 DAD5 2BDD 8CCC 71C1" /* ÿ.ÃHÏ¡%2ÚÕ+ÝŒÌqÁ */ - $"1208 75AA 308B 4796 A89E 0EAF AB67 422A" /* ..uª0‹G–¨ž.¯«gB* */ - $"AA43 8162 68BC 9878 8578 419C AB2E 9518" /* ªCbh¼˜x…xAœ«.•. */ - $"A9E0 4298 DB46 36D7 ADD0 DE21 DC41 AEA7" /* ©àB˜ÛF6×­ÐÞ!ÜA®§ */ - $"A05D 795D AB14 E247 6750 3EA8 0A31 5A06" /*  ]y]«.âGgP>¨Â1Z. */ - $"FAEC AD07 ECF7 C636 A068 22AA E179 7613" /* úì­.ì÷Æ6 h"ªáyv. */ - $"30F9 831C 0AFA 38C0 E20B 96A9 464E B57A" /* 0ùƒ.Âú8Àâ.–©FNµz */ - $"5AF3 D612 DC70 2A8D 1D09 C7C9 967F 7F7B" /* ZóÖ.Üp*.ÆÇÉ–..{ */ - $"F47F 4017 A722 9853 37C2 DE55 34CF 104E" /* ô.@.§"˜S7ÂÞU4Ï.N */ - $"9DD3 35DF DEE2 589C FAF1 07DE 1803 86B1" /* Ó5ßÞâXœúñ.Þ..†± */ - $"2DE6 6B46 FC45 F24E 8718 3B6E D557 8008" /* -ækFüEòN‡.;nÕW€. */ - $"FF3B 8EC2 28BD 6146 3EF6 A0FB 0BCA 37C1" /* ÿ;ŽÂ(½aF>ö û.Ê7Á */ - $"749B 49F2 F419 9EC5 DC0A A6DE 0CFC 1BD2" /* t›Iòô.žÅܦÞ.ü.Ò */ - $"AAF5 4920 1AB3 842A 1813 606E 97CD 0EC2" /* ªõI .³„*..`n—Í. */ - $"50D4 84CD F427 569F 776D 940A A6F7 68D7" /* PÔ„Íô'VŸwm”¦÷h× */ - $"2A18 4C6D 2056 D254 1226 7F3C 1ED0 7AB8" /* *.Lm VÒT.&.<.Ðz¸ */ - $"BEFE 2050 50E6 C5FB 173C 1857 FF7F 86D9" /* ¾þ PPæÅû.<.Wÿ.†Ù */ - $"6CE3 E235 1AFA CBB4 D2BE 4E64 9713 B880" /* lãâ5.úË´Ò¾Nd—.¸€ */ - $"0C41 2E14 401B D14F 5BA4 AD20 7060 C05E" /* .A..@.ÑO[¤­ p`À^ */ - $"2011 000E C557 2951 009C A584 6178 50E8" /* ...ÅW)Q.œ¥„axPè */ - $"6E0D 922F BFF7 EC41 A907 0D2B EF09 3CE0" /* n.’/¿÷ìA©..+ïÆ<à */ - $"6344 B3D6 742A 0448 042D 44C3 390B 089B" /* cD³Öt*.H.-DÃ9..› */ - $"B0FF 2877 1C62 BE1E AC48 09B0 4667 19BC" /* °ÿ(w.b¾.¬HưFg.¼ */ - $"319D 1FEA ABB5 1EE9 02D8 C845 A20C 2E3F" /* 1.ꫵ.é.ØÈE¢..? */ - $"7010 FA38 E2A0 1F01 2933 0557 19BD 9DCD" /* p.ú8â ..)3.W.½Í */ - $"5486 F044 5838 C953 CC32 2DF8 6A04 30ED" /* T†ðDX8ÉSÌ2-øj.0í */ - $"2C42 0A7D 1B38 7F94 4936 5908 39F1 424F" /* ,BÂ}.8.”I6Y.9ñBO */ - $"2BFF 7F46 F53E 11D3 DA1E 41B4 67AB 296E" /* +ÿ.Fõ>.ÓÚ.A´g«)n */ - $"0B59 6213 9E16 1568 8787 ED75 8822 A102" /* .Yb.ž..h‡‡íuˆ"¡. */ - $"DAAC D7D6 FA63 ED91 52D2 E98C 6EEB ABBB" /* Ú¬×Öúcí‘RÒéŒnë«» */ - $"5465 7C7C 0CEB 3016 0CC6 5793 D7FF 7FFB" /* Te||.ë0..ÆW“×ÿ.û */ - $"34E7 7BDE 794E 6D8C 392D 051A 478B 4AD7" /* 4ç{ÞyNmŒ9-..G‹J× */ - $"028C 3119 EDCA 833C 2F1B A23A 5C69 908F" /* .Œ1.íʃ.u¬%û³–.† */ - $"5EF0 4C11 ACE0 90D2 6568 EB55 75AB FF24" /* ^ðL.¬àÒehëUu«ÿ$ */ - $"54B8 0E77 3110 5C67 3138 8369 5BEA 3458" /* T¸.w1.\g18ƒi[ê4X */ - $"7FFE 6000 9940 0044 18C6 1A34 14B6 9CD2" /* .þ`.™@.D.Æ.4.¶œÒ */ - $"C039 2A00 00CC 8F27 9EFE FF80 1CAA 8000" /* À9*..Ì'žþÿ€.ª€. */ - $"0000 0000 D9B1 C1D0 BFE1 D01D 2DD4 E3DF" /* ....Ù±ÁпáÐ.-Ôãß */ - $"949B 6DB6 DB6D B83D 6B98 82BC 446D 0CB3" /* ”›m¶Ûm¸=k˜‚¼Dm.³ */ - $"55A5 C140 D9E5 5E98 37AF 0E38 4474 B8DC" /* U¥Á@Ùå^˜7¯.8Dt¸Ü */ - $"FCFA B14E BD14 730B DAA0 4B18 1B4D 81E7" /* üú±N½.s.Ú K..Mç */ - $"B8A8 26E7 EFB0 8272 4619 2A00 0000 0000" /* ¸¨&çï°‚rF.*..... */ - $"0000 0000 0000 060D CD91 05BE 3A07 80DE" /* ........Í‘.¾:.€Þ */ - $"29D6 2680 7867 5359 9411 F430 48D9 A22D" /* )Ö&€xgSY”.ô0HÙ¢- */ - $"DF74 0855 C0C4 C5AA D3F4 FC40 5815 C5FC" /* ßt.UÀÄŪÓôü@X.Åü */ - $"B741 3001 FF7F FDC6 00B8 F1BA FEC9 B662" /* ·A0.ÿ.ýÆ.¸ñºþɶb */ - $"4973 2EE9 5029 E237 296D D4A4 04DE 4DB9" /* Is.éP)â7)mÔ¤.ÞM¹ */ - $"5305 FD42 9A82 6842 EF09 9DA2 201D C6EF" /* S.ýBš‚hBïÆ¢ .Æï */ - $"4078 4FC3 038C B201 A1C0 0791 7B09 CF18" /* @xOÃ.Œ².¡À.‘{ÆÏ. */ - $"D61B DABD 0409 372B F69D 3CF8 E2E1 31A1" /* Ö.Ú½.Æ7+ö<øâá1¡ */ - $"023B B0FD 60B3 3933 16F2 C716 9259 82F8" /* .;°ý`³93.òÇ.’Y‚ø */ - $"77BB 3A47 46D2 D998 7AA1 01E1 DF78 8000" /* w»:GFÒÙ˜z¡.áßx€. */ - $"0000 0001 D8FD 4FB2 C620 0000 005A CD78" /* ....ØýO²Æ ...ZÍx */ - $"B755 53CD E910 3B50 96A8 4000 0000 0003" /* ·USÍé.;P–¨@..... */ - $"FD6F 5DD1 31D8 A087 6BC5 09F3 E81E B49F" /* ýo]Ñ1Ø ‡kÅÆóè.´Ÿ */ - $"5A88 0DB9 2492 4924 9234 EE49 0E46 EE5B" /* Zˆ.¹$’I$’4îI.Fî[ */ - $"8D2A E866 7AD0 1F3C 936D 50EF 6EF5 FDE7" /* *èfzÐ.<“mPïnõýç */ - $"BFFE 6EFF 82AD 0EDF 556D B01D C573 CA68" /* ¿þnÿ‚­.ßUm°.ÅsÊh */ - $"985A F307 82C5 D933 4C26 B9EE EEF7 D4C6" /* ˜Zó.‚ÅÙ3L&¹îî÷ÔÆ */ - $"BFB5 4130 F610 4AFE 602E 3723 0C95 0000" /* ¿µA0ö.Jþ`.7#.•.. */ - $"0000 0000 0000 0000 0002 7F7E DE44 DDEB" /* ...........~ÞDÝë */ - $"B8B1 0AB8 BA80 7F79 D59C 851A 0244 B8D1" /* ¸±Â¸º€.yÕœ…..D¸Ñ */ - $"6B92 AB1A 4997 5556 C0C7 5935 05AD B380" /* k’«.I—UVÀÇY5.­³€ */ - $"318D A387 1E5F 1523 0170 B5DB D9FA 0E80" /* 1£‡._.#.pµÛÙú.€ */ - $"7342 6634 1E36 FB10 615A 1862 FF53 1545" /* sBf4.6û.aZ.bÿS.E */ - $"C795 B42C 8282 534C 3AFD D370 7621 820E" /* Ç•´,‚‚SL:ýÓpv!‚. */ - $"9EDA AF3A 476B 3537 E327 52DE 4A99 73D1" /* žÚ¯:Gk57ã'RÞJ™sÑ */ - $"0718 7C16 82D5 99A5 32DD 0E83 9C4F 60F8" /* ..|.‚Õ™¥2Ý.ƒœO`ø */ - $"0743 325D 2056 84FF 06BC C6BB 338C 64CF" /* .C2] V„ÿ.¼Æ»3ŒdÏ */ - $"B7B9 C4C7 9800 E4DA EE0A 6636 DEE8 B8F8" /* ·¹Äǘ.äÚîÂf6Þè¸ø */ - $"739E 1EBD 408C C620 9790 A337 E987 2E54" /* sž.½@ŒÆ —£7é‡.T */ - $"DD4A E501 C0BF 44E6 E8EF ACCF 028F 253C" /* ÝJå.À¿Dæèï¬Ï.%< */ - $"F466 FA92 BEE6 A066 F4B6 5B41 CA80 3567" /* ôfú’¾æ fô¶[AÊ€5g */ - $"A079 E31D CEE9 CD64 0AED 265D E591 B98C" /*  yã.ÎéÍdÂí&]呹Œ */ - $"DF22 C203 3C43 E1D8 5D64 CA99 E6C7 EF30" /* ß"Â.Ãɺ9ìÛâûšÅ¯.CÜ-®dÀ§ 9 */ - $"A6C9 6079 72D6 0BC7 C501 A3A4 5EF4 A060" /* ¦É`yrÖ.ÇÅ.£¤^ô ` */ - $"C46E FCB9 1958 AD83 1176 0776 81C2 13C2" /* Änü¹.X­ƒ.v.vÂ. */ - $"DF08 4A76 137F DC5C 4867 0493 EE96 8373" /* ß.Jv..Ü\Hg.“î–ƒs */ - $"4644 13A4 F789 39FF 813B D226 575A 5A18" /* FD.¤÷‰9ÿ;Ò&WZZ. */ - $"3AF5 4B88 2747 3D47 681F 9670 0069 DD02" /* :õKˆ'G=Gh.–p.iÝ. */ - $"4252 ADB0 D6FB F1F1 1432 C24B D920 7290" /* BR­°Öûññ.2ÂKÙ r */ - $"3709 3D60 15D9 0C49 23EC 77F8 F791 F132" /* 7Æ=`.Ù.I#ìwø÷‘ñ2 */ - $"046E 0D05 9AFA 210A 9992 29D9 7AA6 F18E" /* .n..šú!™’)Ùz¦ñŽ */ - $"E245 75E0 018F BCEB 8D1B C2D0 083E 985F" /* âEuà.¼ë.ÂÐ.>˜_ */ - $"B791 554D F5F5 AD71 E064 75E6 1F3A D463" /* ·‘UMõõ­qàduæ.:Ôc */ - $"9A59 0A43 3457 BD7C 44A7 5C5E 9D19 C5D8" /* šYÂC4W½|D§\^.ÅØ */ - $"5880 C2CC 5DF0 2964 C0FD ABA1 004B 008D" /* X€ÂÌ]ð)dÀý«¡.K. */ - $"5205 7F2E 0843 E484 2D37 9C34 2425 7AFF" /* R....Cä„-7œ4$%zÿ */ - $"7021 D907 B6E1 F5E5 02C3 F3DD 44C8 2252" /* p!Ù.¶áõå.ÃóÝDÈ"R */ - $"0649 3C1A 1A80 449A 64D1 1720 76D6 4987" /* .I<..€DšdÑ. vÖI‡ */ - $"B4B1 E749 E899 BF69 5B35 F925 2EE6 6CE6" /* ´±çI虿i[5ù%.ælæ */ - $"B4FD CEB3 54C0 7C9D 4380 F93B 5701 F274" /* ´ýγTÀ|C€ù;W.òt */ - $"C4F3 CC20 F972 1FD1 56B3 911D 2995 5FC9" /* ÄóÌ ùr.ÑV³‘.)•_É */ - $"1F35 BAE0 9AC7 3082 1372 C1D5 4B23 D79E" /* .5ºàšÇ0‚.rÁÕK#מ */ - $"EF63 A93F 8E74 26FB AC68 CDBE BD3E 9720" /* ïc©?Žt&û¬h;½>— */ - $"DF71 956D 5D26 559E 2795 2F1B F798 7821" /* ßq•m]&Už'•/.÷˜x! */ - $"F3CB 1E6F 2351 11BD 0EFF 19B2 40A2 1C7F" /* óË.o#Q.½.ÿ.²@¢.. */ - $"267D D302 F6AE 5410 1E96 40DC 386E CB7B" /* &}Ó.ö®T..–@Ü8nË{ */ - $"7EA3 5CF7 46BA 8758 D0EE 12B3 34DF 46FE" /* ~£\÷Fº‡XÐî.³4ßFþ */ - $"517B E0F8 7E28 83A5 E93A C06D 7C3F 254B" /* Q{àø~(ƒ¥é:Àm|?%K */ - $"53DF 91ED F6AB FD0A 53A0 5257 F9B8 E8B7" /* Sß‘íö«ýÂS RWù¸è· */ - $"5A14 6036 C6DA E3FE C29D 799F 8B43 46D6" /* Z.`6ÆÚãþÂyŸ‹CFÖ */ - $"94DF 1954 073C 7C30 40F4 A00D 93D4 AADF" /* ”ß.T.<|0@ô .“ﻧ */ - $"4839 EF36 F92A 3758 97CE 955A 3521 3CB5" /* H9ï6ù*7X—ΕZ5!<µ */ - $"8269 30A7 2A93 6A40 07BE DCC3 50B6 C86B" /* ‚i0§*“j@.¾ÜÃP¶Èk */ - $"CE9A AF28 3B80 4FE6 873C DB8E A29C 15DC" /* Κ¯(;€Oæ‡<ÛŽ¢œ.Ü */ - $"81A8 F841 4F77 6237 7267 55C4 1289 2DA1" /* ¨øAOwb7rgUÄ.‰-¡ */ - $"8392 424A 398F 9FA7 8DBE 2CC6 44E9 A005" /* ƒ’BJ9Ÿ§¾,ÆDé . */ - $"0E57 6638 ADDD 9F15 D32E 13A9 F752 67BA" /* .Wf8­ÝŸ.Ó..©÷Rgº */ - $"9F1D 753C 0023 2BC1 2C48 19AF FF28 66E6" /* Ÿ.u<.#+Á,H.¯ÿ(fæ */ - $"0A05 1D62 536F C372 7DEC 5069 B44D AFD4" /* Â..bSoÃr}ìPi´M¯Ô */ - $"BE3C 9C16 161E 95B4 89E7 B034 4524 E373" /* ¾<œ...•´‰ç°4E$ãs */ - $"D4A2 2F82 F1BB 8F20 7861 0F95 7CDF C184" /* Ô¢/‚ñ» xa.•|ßÁ„ */ - $"5B65 6015 001B F6BD 5D52 D4BC 3A42 FD56" /* [e`...ö½]RÔ¼:BýV */ - $"D48F 3358 7432 09BD FF19 625D 3A11 13DA" /* Ô3Xt2ƽÿ.b]:..Ú */ - $"F222 12E8 5A1B 12BF 9B3B A234 A367 8FB6" /* ò".èZ..¿›;¢4£g¶ */ - $"4BF2 EE99 DB11 5D13 7021 71B4 2280 A1BC" /* Kòî™Û.].p!q´"€¡¼ */ - $"2AEF ECB5 D7EC 047C 0860 9676 78B1 CA76" /* *ïìµ×ì.|.`–vx±Êv */ - $"9AFB C995 D4EB 900A AD98 6423 E572 B68C" /* šûÉ•Ôë­˜d#år¶Œ */ - $"A271 A30B D157 8E95 8250 29BB 0323 E26C" /* ¢q£.ÑWŽ•‚P)».#âl */ - $"9223 91C7 0CD4 F0B0 442E 1BD3 1473 C699" /* ’#‘Ç.Ôð°D..Ó.sÆ™ */ - $"2D1C 8791 C699 920E 72C0 0D3E F6E9 9E2B" /* -.‡‘Æ™’.rÀ.>öéž+ */ - $"60B6 A87F 6CBE 146C 1224 90FC BF7B C6A9" /* `¶¨.l¾.l.$ü¿{Æ© */ - $"090E 3EAD C89D 5065 414B 3A1C F271 9327" /* Æ.>­ÈPeAK:.òq“' */ - $"D490 CD2B FBB3 BEFF 768D 4601 635B A746" /* ÔÍ+û³¾ÿvF.c[§F */ - $"8A4B 0981 8B8F EA85 D255 2113 8792 CC76" /* ŠKÆ‹ê…ÒU!.‡’Ìv */ - $"DE84 B950 C5F4 A4C1 D4EF 7D52 CC74 CCEE" /* Þ„¹PÅô¤ÁÔï}RÌtÌî */ - $"B40E B94F 9467 15CA 1DE0 3557 BF09 D787" /* ´.¹O”g.Ê.à5W¿Æ×‡ */ - $"ED66 345A E153 B4DC EF7C 2952 3161 5A99" /* íf4ZáS´Üï|)R1aZ™ */ - $"A193 D5EB 40F5 1300 65FA 8DFD 621A AE94" /* ¡“Õë@õ..eúýb.®” */ - $"30CD 6D25 A0FC 942E 37AC 52C8 CEAD 2D1F" /* 0Ím% ü”.7¬RÈέ-. */ - $"87D5 D078 F173 F5AD 7A56 DD1B 10C3 F9BF" /* ‡ÕÐxñsõ­zVÝ..Ãù¿ */ - $"69C1 9E6B E021 A0C7 84BF D87A 8AA8 327C" /* iÁžkà! Ç„¿ØzЍ2| */ - $"7D48 0D97 E584 FF7F AE07 2001 BF6C 2691" /* }H.—å„ÿ.®. .¿l&‘ */ - $"3032 E118 8741 42AD 7709 3086 8488 F9D3" /* 02á.‡AB­wÆ0†„ˆùÓ */ - $"0353 D79E 2E21 8F21 46CC 005C DA8A 0229" /* .Sמ.!!FÌ.\ÚŠ.) */ - $"A56B A72A C69E FCF7 7558 5D72 0050 2BDE" /* ¥k§*Æžü÷uX]r.P+Þ */ - $"0F36 E4F0 C744 89FC 37F0 7ECA F488 FE8C" /* .6äðÇD‰ü7ð~ÊôˆþŒ */ - $"1B6B 0158 B34D 1EA6 9B1F 154E FF79 01D4" /* .k.X³M.¦›..Nÿy.Ô */ - $"725F D9CF D9BF CCFF 439D 8F5C A92D D20D" /* r_ÙÏÙ¿ÌÿC\©-Ò. */ - $"0613 88F8 5C1C B6BD 07B9 9078 151D 8353" /* ..ˆø\.¶½.¹x..ƒS */ - $"0E68 8495 D521 92D8 E92D CF9B 10E6 ABDC" /* .h„•Õ!’Øé-Ï›.æ«Ü */ - $"53D9 DFB2 F2AF F964 14E3 74D6 3D64 01E2" /* SÙß²ò¯ùd.ãtÖ=d.â */ - $"FAFB 2D0B D303 DCF7 7718 E6CF 30DB 3FAE" /* úû-.Ó.Ü÷w.æÏ0Û?® */ - $"2873 3339 54A3 1E48 04D2 FDF2 E863 6201" /* (s39T£.H.Òýòècb. */ - $"01D1 182C 4C2A D85D AE26 DE15 9796 494C" /* .Ñ.,L*Ø]®&Þ.—–IL */ - $"82EA B4C0 2D3C 3D3E 1732 2ACA AC27 B7DB" /* ‚ê´À-<=>.2*ʬ'·Û */ - $"5CED 6F9D 3EDB FF04 5E83 BE60 1636 AE2C" /* \ío>Ûÿ.^ƒ¾`.6®, */ - $"754D 2928 7128 ACFD 15E8 C1A0 30A5 1063" /* uM)(q(¬ý.èÁ 0¥.c */ - $"1E6F 10F7 A946 B9B4 D921 5DB3 113F 332E" /* .o.÷©F¹´Ù!]³.?3. */ - $"61B8 AB3D 2F87 E081 C9D9 32B7 1060 785A" /* a¸«=/‡àÉÙ2·.`xZ */ - $"EFDD F472 0283 E235 4D42 E903 A06B 51CB" /* ïÝôr.ƒâ5MBé. kQË */ - $"39DC A412 A492 918E 235E F57C E4CE 4E0F" /* 9ܤ.¤’‘Ž#^õ|äÎN. */ - $"6BE6 7036 FA8A 7B2C 21FE 60B1 6FCA 7654" /* kæp6úŠ{,!þ`±oÊvT */ - $"C9FD DCDF E497 B2A6 D6D5 87ED 9D3B 5B86" /* ÉýÜßä—²¦ÖÕ‡í;[† */ - $"DA51 6B5B AE3E 520B 1DB3 5A6B 2B4D A777" /* ÚQk[®>R..³Zk+M§w */ - $"4F13 A04C 7D4F 819B 1FEB 086D 5F34 6643" /* O. L}O›.ë.m_4fC */ - $"0208 693A D70C 55B2 7A07 BC27 3A41 B739" /* ..i:×.U²z.¼':A·9 */ - $"C1F5 7425 07D5 D74C 1F56 F680 F1C4 B0CB" /* Áõt%.Õ×L.Vö€ñÄ°Ë */ - $"F3E0 DE80 53FC 256D EFD0 6B64 028C EC70" /* óàÞ€Sü%mïÐkd.Œìp */ - $"4973 06D4 242C DAAA 8373 DFAC B0C9 14A1" /* Is.Ô$,Úªƒs߬°É.¡ */ - $"BFBC 0BB4 E250 919E 3D2B B388 3A89 FB02" /* ¿¼.´âP‘ž=+³ˆ:‰û. */ - $"9796 86E6 20F8 C26C 8120 349C 757A 6875" /* —–†æ øÂl 4œuzhu */ - $"F63E AE68 84C3 03A3 6F64 F9EE F892 2CF8" /* ö>®h„Ã.£odùîø’,ø */ - $"61C1 B13A E941 0D67 DA36 4C05 9565 DC85" /* aÁ±:éA.gÚ6L.•eÜ… */ - $"D7F8 6EB9 D903 D428 F59A 3EBF C73E 5E95" /* ×øn¹Ù.Ô(õš>¿Ç>^• */ - $"764D 15FB 98F2 BECE 0FC8 EA3C 4E51 E1DD" /* vM.û˜ò¾Î.Èêw' */ - $"DDEE 0A95 231F 04AC B6EF D134 C09D 1540" /* Ýî•#..¬¶ïÑ4À.@ */ - $"0E94 57E2 8418 C208 1F26 7396 96A0 D08F" /* .”Wâ„.Â..&s–– Ð */ - $"0CC0 40C8 C596 39BA 0CAE A6ED F8E8 7D6B" /* .À@ÈÅ–9º.®¦íøè}k */ - $"A76C 391B 6113 555F 62E0 6E14 5D27 E7BC" /* §l9.a.U_bàn.]'ç¼ */ - $"EDB7 D038 DED2 7BEE FC9D 6211 241E 0795" /* í·Ð8ÞÒ{îüb.$..• */ - $"9CDE 1607 B4C7 828E 24D2 4E9F FCA0 36EA" /* œÞ..´Ç‚Ž$ÒNŸü 6ê */ - $"004C C960 1680 01CE 7FF6 A201 EDAB 1ADF" /* .LÉ`.€.Î.ö¢.í«.ß */ - $"80D8 4524 390C 23DD EA8E 062C 5DDB 3C57" /* €ØE$9.#ÝêŽ.,]Û6 */ - $"00C2 0E05 134F 4802 3846 3575 1902 676D" /* .Â...OH.8F5u..gm */ - $"1006 D8AE 0D5F 1934 78F6 0721 F3C4 1000" /* ..Ø®._.4xö.!óÄ.. */ - $"8991 FA85 45B5 37A9 5A0C 54EE 014B 297B" /* ‰‘ú…Eµ7©Z.Tî.K){ */ - $"52F2 5ADD 7422 C97B EAA9 D291 45A7 A44A" /* RòZÝt"É{ê©Ò‘E§¤J */ - $"40FE AE73 5086 C7D3 85FD D734 67F2 8909" /* @þ®sP†ÇÓ…ý×4gò‰Æ */ - $"506D 36D8 2361 990C 802F A59E B603 9C94" /* Pm6Ø#a™.€/¥ž¶.œ” */ - $"F7BD AED9 8518 8651 DFFE 3D0E E920 E874" /* ÷½®Ù….†Qßþ=.é èt */ - $"FEB0 EE3C 3242 C249 4704 EEA8 9EFA DC61" /* þ°î<2BÂIG.úÜa */ - $"49C6 929E 2A9D 51CD FE0A FF02 3DDB 01EC" /* IÆ’ž*QÍþÂÿ.=Û.ì */ - $"80E8 630A B0C8 C9FC 7693 C60B 07E8 5D2F" /* €èc°ÈÉüv“Æ..è]/ */ - $"B97A 9F04 444E C836 DD68 FF12 EC9C 7E4F" /* ¹zŸ.DNÈ6Ýhÿ.ìœ~O */ - $"3CE9 83A8 191A 1E61 05F8 90FF 67E8 011A" /* <部...a.øÿgè.. */ - $"71EA 3EE8 AFBD 6328 ED84 9807 788D F3BC" /* qê>诽c(턘.xó¼ */ - $"2FA0 A210 7FFF 1D02 2519 4EC7 2A80 7FD0" /* / ¢..ÿ..%.NÇ*€.Ð */ - $"2064 A8F4 CC78 5EC8 88AF F1AB 868B 9F8D" /* d¨ôÌx^Ȉ¯ñ«†‹Ÿ */ - $"883E 3FDA D188 FBB7 3AFC 0C72 E01A CEF3" /* ˆ>?Úшû·:ü.rà.Îó */ - $"21E1 1718 4FDB 9A43 3767 424A 639B DFFE" /* !á..OÛšC7gBJc›ßþ */ - $"CA5F 7BA9 8F82 3EA6 6D4E 6986 6945 80DE" /* Ê_{©‚>¦mNi†iE€Þ */ - $"8274 4927 166A 6062 DF1D 0A72 F23B FA5A" /* ‚tI'.j`bß.Ârò;úZ */ - $"4DE4 5D19 54FC 488B 5237 FF5F 7B81 62C5" /* Mä].TüH‹R7ÿ_{bÅ */ - $"F6B7 B580 3016 11B6 22CF 63B8 428A D39A" /* ö·µ€0..¶"Ïc¸BŠÓš */ - $"5AC3 80FF 7310 8386 FF54 F361 304F 3BB5" /* ZÀÿs.ƒ†ÿTóa0O;µ */ - $"A7EB 0419 7DFB 6E56 20A8 3670 9018 9CB3" /* §ë..}ûnV ¨6p.œ³ */ - $"4B35 7082 32A7 E917 9CF8 FF7F FF80 0A6C" /* K5p‚2§é.œøÿ.ÿ€Âl */ - $"A48C 447E 3ECF 411D 89E4 F923 373B DCBE" /* ¤ŒD~>ÏA.‰äù#7;ܾ */ - $"2CE8 6580 0F87 1A23 1D93 62AE 48EF DEB8" /* ,èe€.‡.#.“b®HïÞ¸ */ - $"5DE8 DB68 1CA3 8D4B D3FE A476 7B3D ACAA" /* ]èÛh.£KÓþ¤v{=¬ª */ - $"284F 83EB 428F A201 D122 CB1A CCB2 C1FE" /* (OƒëB¢.Ñ"Ë.̲Áþ */ - $"367F 60D3 155D 8C00 22D8 ED33 D56B 1DE2" /* 6.`Ó.]Œ."Øí3Õk.â */ - $"98B0 A4A9 E041 2BF1 AA58 E78D 47E5 929F" /* ˜°¤©àA+ñªXçGå’Ÿ */ - $"85DA 699E C45A 0064 B931 CF2B 4169 44F0" /* …ÚižÄZ.d¹1Ï+AiDð */ - $"4B4F 083B 3D7C B2B2 D87B 785E 91A8 C614" /* KO.;=|²²Ø{x^‘¨Æ. */ - $"6EE6 A63C C8A7 B9E3 839D E245 4128 3BF9" /* næ¦<ȧ¹ãƒâEA(;ù */ - $"98CD 0C23 72EB E3A9 D21F 1BC2 4E13 274B" /* ˜Í.#rëã©Ò..ÂN.'K */ - $"19C8 CB39 5E7A D218 FBDB 0C42 51A1 1203" /* .ÈË9^zÒ.ûÛ.BQ¡.. */ - $"C0EB CDC2 9249 E461 1DE4 3DB6 FDFE 1334" /* ÀëÍÂ’Iäa.ä=¶ýþ.4 */ - $"1952 8231 CD71 A170 C55B 1FD0 6706 57F0" /* .R‚1Íq¡pÅ[.Ðg.Wð */ - $"282D 09A2 0893 A5BA 0314 43DD 32AF 3478" /* (-Æ¢.“¥º..CÝ2¯4x */ - $"EF6C 15F0 55C9 6A47 ECFE 3F3F 4DB4 5ED8" /* ïl.ðUÉjGìþ??M´^Ø */ - $"EFF8 8CA5 71F9 6669 078C 550C 943A 7046" /* ïøŒ¥qùfi.ŒU.”:pF */ - $"C031 6CE2 4681 4177 2913 CFE7 D857 C62A" /* À1lâFAw).ÏçØWÆ* */ - $"4652 88E2 8830 DF42 9C3D 2D76 E710 A8F1" /* FRˆâˆ0ßBœ=-vç.¨ñ */ - $"3626 45F2 55CC 008C EAB8 B891 A5F3 1AD2" /* 6&EòUÌ.Œê¸¸‘¥ó.Ò */ - $"AB11 6C48 3F18 40C0 51F0 DB88 0BD1 168C" /* «.lH?.@ÀQðÛˆ.Ñ.Œ */ - $"2E54 2DA6 CC60 BB05 4700 2C4E 179B 271B" /* .T-¦Ì`».G.,N.›'. */ - $"688C 1EE9 4D9A C781 8108 296B FE4F 028A" /* hŒ.éMšÇ.)kþO.Š */ - $"63D6 6EDF 6FEB FC17 BDFE 7A70 B48E D94E" /* cÖnßoëü.½þzp´ŽÙN */ - $"D985 3384 1BD2 B4C9 5213 B0D1 041B 876C" /* Ù…3„.Ò´ÉR.°Ñ..‡l */ - $"131C 4A9C 947B A79C A466 9779 E7C9 D2E1" /* ..Jœ”{§œ¤f—yçÉÒá */ - $"4E9F 0509 30E0 1115 E5C7 CAED 197B 818A" /* NŸ.Æ0à..åÇÊí.{Š */ - $"324D 8F8E ED44 BF44 5340 D647 1776 B983" /* 2MŽíD¿DS@ÖG.v¹ƒ */ - $"6D8C 88B1 6976 F7EB AFDB 6638 CAD3 F275" /* mŒˆ±iv÷ë¯Ûf8ÊÓòu */ - $"D93A 6CD3 9D6E C617 3969 D8E5 3059 947B" /* Ù:lÓnÆ.9iØå0Y”{ */ - $"6AFA 0E9B A19C 24C9 E1DC 089D 3545 89E4" /* jú.›¡œ$ÉáÜ.5E‰ä */ - $"E860 FB54 068C B464 EE9B 66B7 F267 34CF" /* è`ûT.Œ´dî›f·òg4Ï */ - $"1276 C6B2 47E6 8284 300B D1A9 1409 0C93" /* .vƲGæ‚„0.Ñ©.Æ.“ */ - $"E36A 8095 409A 7352 FF7A 0F50 A5E2 E678" /* ãj€•@šsRÿz.P¥âæx */ - $"C195 0898 E51E EB15 8D7A E918 29A6 D5CE" /* Á•.˜å.ë.zé.)¦ÕÎ */ - $"4DBC 978B 2CAA 9BA7 8727 EA1C 1C7A 6CC2" /* M¼—‹,ª›§‡'ê..zl */ - $"D172 DDF5 4BD4 9C69 607B 609F AEC8 FD84" /* ÑrÝõKÔœi`{`Ÿ®Èý„ */ - $"1DDA A076 C7E1 A7B1 F86C BC7E 1720 EB83" /* .Ú vÇá§±øl¼~. ëƒ */ - $"095B F1C8 7239 10FD 6A26 D10E 534B E257" /* Æ[ñÈr9.ýj&Ñ.SKâW */ - $"B691 5D92 6949 E7D8 7470 AA8C 421F F945" /* ¶‘]’iIçØtpªŒB.ùE */ - $"99F6 9492 B806 E264 47B0 4EF5 6206 734E" /* ™ö”’¸.âdG°Nõb.sN */ - $"944B 102F A688 23A4 EAB0 CCEA 0017 0156" /* ”K./¦ˆ#¤ê°Ìê...V */ - $"A8C9 2A3F FF49 4137 E23A 09D0 97BB 0E5F" /* ¨É*?ÿIA7â:ÆÐ—»._ */ - $"E2A2 2247 4980 6A20 B443 3E0B 0465 B9EF" /* â¢"GI€j ´C>..e¹ï */ - $"C490 B954 3AEA ABB7 3D53 111D 8897 551C" /* ĹT:ê«·=S..ˆ—U. */ - $"B865 1EA2 33F2 AD50 D488 1D6D 9733 27F3" /* ¸e.¢3ò­PÔˆ.m—3'ó */ - $"78AC C946 FB3C 4D2F 6580 1B3A 3368 3D54" /* x¬ÉFû1¤ ÀÌ»À²žwqOÞ */ - $"1679 23F1 DE12 5574 68E3 60A1 9C00 CBEC" /* .y#ñÞ.Uthã`¡œ.Ëì */ - $"9C44 9009 0000 08DE 28C3 2776 AAA2 829A" /* œDÆ...Þ(Ã'vª¢‚š */ - $"05E0 47E9 0001 48A9 672C 0775 EE58 F075" /* .àGé..H©g,.uîXðu */ - $"7458 B48A 5455 DB33 3524 BE73 1D7C E223" /* tX´ŠTUÛ35$¾s.|â# */ - $"4EC4 732C EC4B 128D 341C 790C 00A2 1309" /* NÄs,ìK.4.y..¢.Æ */ - $"2D0B 5EA7 B07B C82C 976B 68C2 642A F095" /* -.^§°{È,—khÂd*ð• */ - $"A1C4 010E C94E D8A9 34BB FD3E 2B2F 92EC" /* ¡Ä..ÉNØ©4»ý>+/’ì */ - $"30E1 A7B3 040B C920 3FFF 7FA1 317B 90F7" /* 0á§³..É ?ÿ.¡1{÷ */ - $"C744 40B8 8325 4036 82FB 0C6C D800 19C4" /* ÇD@¸ƒ%@6‚û.lØ..Ä */ - $"2631 C4B8 3160 8649 2492 4924 9248 A747" /* &1ĸ1`†I$’I$’H§G */ - $"3D41 A17D 23A6 9AC7 9000 0000 0000 0000" /* =A¡}#¦šÇ....... */ - $"0000 0019 1A70 8823 BB21 7C62 4556 F257" /* .....pˆ#»!|bEVòW */ - $"62C0 CF0B 72EE F37E 64EC 43C2 AE04 9F58" /* bÀÏ.rîó~dìC®.ŸX */ - $"94DC E128 91EC BAA2 DADD 57A7 D5F7 1972" /* ”Üá(‘캢ÚÝW§Õ÷.r */ - $"7543 9A9A 0DB3 C3FD 42E0 19A3 8F45 7FDF" /* uCšš.³ÃýBà.£E.ß */ - $"CEB1 A7E5 8A09 5B4A F9E6 294B C5DC 80C9" /* α§åŠÆ[Jùæ)KÅÜ€É */ - $"9AEE 0729 374F 04FD 79D6 7170 D940 14F0" /* šî.)7O.ýyÖqpÙ@.ð */ - $"830F 0B71 50E7 3C76 97AF 0F71 A32D DC5A" /* ƒ..qPçF2£• */ - $"57A3 0EC0 B3A3 969D 9DF0 6ACC 859F FF7F" /* W£.À³£–ðjÌ…Ÿÿ. */ - $"FF27 DAA0 AF8E 216C E5D8 874A 530F 555E" /* ÿ'Ú ¯Ž!l娇JS.U^ */ - $"AF3F E231 5BAF F7B6 8E73 5742 2717 4031" /* ¯?â1[¯÷¶ŽsWB'.@1 */ - $"175D 5FDA F402 B756 AEAE 7E7E BFEE CE68" /* .]_Úô.·V®®~~¿îÎh */ - $"7878 870D 01C2 C2A4 61D5 64E3 E195 B914" /* xx‡..¤aÕdãᕹ. */ - $"A45F FF52 DC14 F5E9 E037 65E3 5477 62A5" /* ¤_ÿRÜ.õéà7eãTwb¥ */ - $"3EEC CA32 6558 5965 8B6E 3F13 9DB2 1361" /* >ìÊ2eXYe‹n?.².a */ - $"8426 9FD7 B329 4E75 FF1D 9B78 9735 4B1B" /* „&Ÿ×³)Nuÿ.›x—5K. */ - $"D80E 1781 192F 6777 8F94 F6A2 5016 726D" /* Ø.../gw”ö¢P.rm */ - $"1E0D D2CB 6F87 B3C6 09A2 1FE3 915E 8943" /* ..ÒËo‡³ÆÆ¢.ã‘^‰C */ - $"FE6C 6743 4733 D5BC A9DD 5338 C9E1 AF50" /* þlgCG3Õ¼©ÝS8Éá¯P */ - $"3634 C26C 0C1F 94E7 50B2 4310 DD62 4F09" /* 64Âl..”çP²C.ÝbOÆ */ - $"ABCD 7821 8B7B 7B87 2EEA 25A1 9D3C 55CC" /* «Íx!‹{{‡.ê%¡Òúq%éø‡±‡ºÛ±... */ - $"93B3 4206 45ED 7238 3F80 1441 50CA CCBA" /* “³B.Eír8?€.APÊ̺ */ - $"EF59 3BC5 4236 2ABF 9150 7335 49C5 0216" /* ïY;ÅB6*¿‘Ps5IÅ.. */ - $"F97B D5A5 1EF5 A69D 8B34 C25B 73E1 DA52" /* ù{Õ¥.õ¦‹4Â[sáÚR */ - $"79E5 9EB1 9CB1 0952 B3F5 E221 D426 4759" /* yåž±œ±ÆR³õâ!Ô&GY */ - $"D5CF 2D18 CC2A 270A 859D F10C 8108 52FF" /* ÕÏ-.Ì*'Â…ñ..Rÿ */ - $"2A7D D39E EFFD 568C 2DB3 7BD5 62D0 2403" /* *}ÓžïýVŒ-³{ÕbÐ$. */ - $"69D1 A4B6 2D24 E485 973D F6A5 E6DC 1DB5" /* iѤ¶-$ä…—=ö¥æÜ.µ */ - $"BF0B E185 5592 E3A0 6046 E050 5151 9546" /* ¿.á…U’ã `FàPQQ•F */ - $"17F7 0CF6 222F 17E0 40E5 3EF5 74EE BAB6" /* .÷.ö"/.à@å>õt */ - $"55BD 76C1 DD80 39C8 BAE0 37B8 398A B370" /* U½vÁÝ€9Ⱥà7¸9гp */ - $"D400 0C29 5DC9 94FF 069B 36E2 CD79 195F" /* Ô..)]É”ÿ.›6âÍy._ */ - $"5B9B 1237 1F18 C560 C901 F9A4 184B 7570" /* [›.7..Å`É.ù¤.Kup */ - $"433E 75BE 0297 C641 7D9B 7092 8D64 96F5" /* C>u¾.—ÆA}›p’d–õ */ - $"D70C 9B66 71D3 09B1 F635 0FC3 0B49 7D6E" /* ×.›fqÓÆ±ö5.Ã.I}n */ - $"660C 8E1D 0257 672B 97EE C2A5 7B84 729E" /* f.Ž..Wg+—îÂ¥{„rž */ - $"6516 585E 354F 2E22 88A7 A515 B945 3745" /* e.X^5O."ˆ§¥.¹E7E */ - $"F6A5 5CB2 E212 10AD AB6F 07F5 FDA3 09EB" /* ö¥\²â..­«o.õý£Æë */ - $"A053 313B 9A8E 757D E132 D483 DC78 0882" /*  S1;šŽu}á2ÔƒÜx.‚ */ - $"A63C 95E0 036C 4626 F66B 5F6C 39A1 9401" /* ¦<•à.lF&ök_l9¡”. */ - $"7276 4DCE 4487 7D8C 12A3 B713 9139 AC0A" /* rvMÎD‡}Œ.£·.‘9¬Â */ - $"18AD 4DFD 2A3D 69E7 E76E 593C 8DAB FD56" /* .­Mý*=iççnY<«ýV */ - $"F959 BA6B FBA3 2853 D610 4DB0 7A30 3A09" /* ùYºkû£(SÖ.M°z0:Æ */ - $"916B DFF7 B3B4 F8D3 9619 0FD9 8FBC FC6B" /* ‘kß÷³´øÓ–..Ù¼ük */ - $"D73D ABD2 4C41 6AD0 6584 AF19 3074 AF6E" /* ×=«ÒLAjÐe„¯.0t¯n */ - $"369C BEB1 76D5 D311 6172 F157 D522 DDED" /* 6œ¾±vÕÓ.arñWÕ"Ýí */ - $"D4ED 0230 0BB5 E881 0E6B 9C4F 111F 4F6E" /* Ôí.0.µè.kœO..On */ - $"7CAD 4745 7BBF DA70 A9C4 051E FDEA 206C" /* |­GE{¿Úp©Ä..ýê l */ - $"9983 0E2D 4A4A A4DE 82E9 DAAF 5748 37AE" /* ™ƒ.-JJ¤Þ‚éÚ¯WH7® */ - $"4046 DCCB 0D1A 80DA 1804 20E2 F7CF AD69" /* @FÜË..€Ú.. â÷Ï­i */ - $"F9D8 5106 D02D 16E9 4437 9560 B618 1126" /* ùØQ.Ð-.éD7•`¶..& */ - $"95A2 4B23 89C4 78EE 898E D80C 8E49 5201" /* •¢K#‰ÄxØ.ŽIR. */ - $"2095 ABAF 9CA5 0F8E CB22 00D4 4289 59B3" /* •«¯œ¥.ŽË".ÔB‰Y³ */ - $"1835 1395 8AE5 3A88 7185 E7DD 57F3 4CE4" /* .5.•Šå:ˆq…çÝWóLä */ - $"1465 C878 6B72 7146 2AF1 F053 5B31 7697" /* .eÈxkrqF*ñðS[1v— */ - $"7300 A777 3919 099E BD1C 79C3 24C4 A355" /* s.§w9.Æž½.yÃ$Ä£U */ - $"0C88 C727 1831 D498 E513 47A5 F25F DDBE" /* .ˆÇ'.1Ô˜å.G¥ò_ݾ */ - $"46E7 40B5 EBCC 080F 6915 3FDF EDB9 A9B1" /* Fç@µëÌ..i.?ßí¹©± */ - $"39ED D794 60E1 A5A2 0EEC 7A09 46BF 201E" /* 9í×”`ᥢ.ìzÆF¿ . */ - $"311F EEEE 88EF C6C1 C10D E238 50C9 7F01" /* 1.îîˆïÆÁÁ.â8PÉ.. */ - $"DFF1 17BA D8F4 0017 47E7 75F2 4D82 679E" /* ßñ.ºØô..GçuòM‚gž */ - $"6867 60A4 6222 77B9 319B 186D FCB3 168A" /* hg`¤b"w¹1›.mü³.Š */ - $"EAF3 C227 1082 D7ED 2C70 E619 8676 0186" /* êóÂ'.‚×í,pæ.†v.† */ - $"8C23 5DE5 D4A0 61CB CDE4 AED5 E008 6F3C" /* Œ#]åÔ aËÍä®Õà.o< */ - $"D894 AC14 6FEC 5D4C C2FF 3A6C 512F E475" /* Ø”¬.oì]LÂÿ:lQ/äu */ - $"FCB8 DFA4 EB46 2DF4 E133 5858 364B 54E1" /* ü¸ß¤ëF-ôá3XX6KTá */ - $"A6E1 5D0C 157E D987 DF95 B1FB 3723 4F2F" /* ¦á]..~هߕ±û7#O/ */ - $"C9BF C6D4 D979 412E D0EB B285 8DFF 7CAC" /* É¿ÆÔÙyA.Ðë²…ÿ|¬ */ - $"F1BF 1825 8B89 9992 3848 C666 4184 4906" /* ñ¿.%‹‰™’8HÆfA„I. */ - $"0D61 6B58 9355 A5D9 C940 B6F2 6918 82E1" /* .akX“U¥ÙÉ@¶òi.‚á */ - $"FF7D 4F5F FE94 5208 650B B780 0D2B DD4F" /* ÿ}O_þ”R.e.·€.+ÝO */ - $"5874 3627 2353 6328 06B9 908C 6C95 D898" /* Xt6'#Sc(.¹Œl•ؘ */ - $"8C24 1D0F 641B 7763 CFBE E88A BB05 8639" /* Œ$..d.wcϾ芻.†9 */ - $"D91C 4A38 3A3F 75C6 61BD BFED CA10 2A73" /* Ù.J8:?uÆa½¿íÊ.*s */ - $"E3C5 E85C BF5B 0346 2105 4286 300D D812" /* ãÅè\¿[.F!.B†0.Ø. */ - $"8BE4 DAE4 292B A765 338E 7E42 50F1 8046" /* ‹äÚä)+§e3Ž~BPñ€F */ - $"3FDC 1A85 4616 61E5 7321 18D9 5AB9 8903" /* ?Ü.…F.aås!.ÙZ¹‰. */ - $"90BD 6F89 E7D0 35D1 0AA3 BBAE 3CF8 A7B7" /* ½o‰çÐ5Ñ£»®<ø§· */ - $"73C8 8B94 B409 16EC 60A6 E819 BCA7 BA66" /* sÈ‹”´Æ.ì`¦è.¼§ºf */ - $"2245 524C 718C 635D E4F7 ACA0 02C3 E0A7" /* "ERLqŒc]ä÷¬ .Ãà§ */ - $"B542 0FF5 7029 FF4D 1D88 E3B3 D657 802B" /* µB.õp)ÿM.ˆã³ÖW€+ */ - $"8068 9BD4 B17F 9A6B CC1C 4B53 246F 81E5" /* €h›Ô±.škÌ.KS$oå */ - $"9168 48EC 4B44 3FFF 7B8B 5777 5677 134E" /* ‘hHìKD?ÿ{‹WwVw.N */ - $"1B8E 8C91 429F CE85 86EF 62B4 71AF EAE7" /* .ŽŒ‘BŸÎ…†ïb´q¯êç */ - $"E333 7BD3 2825 7230 C950 0000 1B8D 8BA6" /* ã3{Ó(%r0ÉP...‹¦ */ - $"04C1 56DC 30F0 619E DD6C D196 C91E 1ED4" /* .ÁVÜ0ðažÝlÑ–É..Ô */ - $"1285 94A8 F775 05A9 3440 78FF 7E52 8833" /* .…”¨÷u.©4@xÿ~Rˆ3 */ - $"E8A1 A4E4 4580 38DD ADE1 3BD5 AD19 74E6" /* 衤äE€8Ý­á;Õ­.tæ */ - $"EEA1 B4B1 0B0B 9BE9 08EC DB78 E6AA 37E5" /* î¡´±..›é.ìÛxæª7å */ - $"AD06 72A6 51FC 0004 4737 BF1A 89FF 7E11" /* ­.r¦Qü..G7¿.‰ÿ~. */ - $"0A68 EAD7 BDA5 4D5B 2C8D 0C7A 952E 2190" /* Âhê×½¥M[,.z•.! */ - $"8451 1B38 CEFD 2835 5ADD BDA2 01C2 A3D6" /* „Q.8Îý(5Zݽ¢.壅 */ - $"6046 4BD8 41DF D8B6 D9B1 1F96 5FF8 CC56" /* `FKØAߨ¶Ù±.–_øÌV */ - $"A63B 6E14 5035 26D6 946D 1F59 4D17 5507" /* ¦;n.P5&Ö”m.YM.U. */ - $"85F7 2DAF A737 4E30 9097 2E2E DAF8 37D1" /* …÷-¯§7N0—..Úø7Ñ */ - $"D987 4E59 ABFD CDF3 AAC3 30D1 8616 FAB3" /* Ù‡NY«ýÍóªÃ0ц.ú³ */ - $"2914 92AA 6913 C36F 66DA 4B0B 18FE DD55" /* ).’ªi.ÃofÚK..þÝU */ - $"1D2A 3F00 D80C 2423 D923 95C6 E11D 0069" /* .*?.Ø.$#Ù#•Æá..i */ - $"B5C9 0803 0907 B950 13DF 48EC F794 3D36" /* µÉ..Æ.¹P.ßHì÷”=6 */ - $"5249 2492 4924 9249 2489 9EF6 DC36 9A6B" /* RI$’I$’I$‰žöÜ6šk */ - $"1751 415E A37F 47EC A4EA 67AC A222 733C" /* .QA^£.Gì¤êg¬¢"s< */ - $"467D 1FFE C727 E6AA 6E99 C584 A87E DFFF" /* F}.þÇ'æªn™Å„¨~ßÿ */ - $"7FC3 7592 8204 71A2 6088 C38B 6E65 868E" /* .Ãu’‚.q¢`ˆÃ‹ne†Ž */ - $"5A3F FF7F F919 4069 CF10 A302 5125 525C" /* Z?ÿ.ù.@iÏ.£.Q%R\ */ - $"A443 88AF 4104 7807 1410 84BA E955 76E8" /* ¤Cˆ¯A.x...„ºéUvè */ - $"5F35 B612 A668 5694 9249 2492 4924 9249" /* _5¶.¦hV”’I$’I$’I */ - $"2492 4924 4C25 1941 A4EB 1996 7A28 19C1" /* $’I$L%.A¤ë.–z(.Á */ - $"A1B0 01D7 ACB2 3F83 42DC D154 27C9 F11F" /* ¡°.׬²?ƒBÜÑT'Éñ. */ - $"FC46 90B1 89C4 F78A 4C6F 5C2A 833D 8425" /* üF±‰Ä÷ŠLo\*ƒ=„% */ - $"D837 CA14 E4C7 7F8A 9833 99B7 E589 1376" /* Ø7Ê.äÇ.Š˜3™·å‰.v */ - $"C867 FF1D 200A 4C9B 624E 68E3 11AE C8AF" /* Ègÿ. ÂL›bNhã.®È¯ */ - $"1723 C741 CEAC 16CE C548 72FF 15CD 3E67" /* .#ÇAά.ÎÅHrÿ.Í>g */ - $"AF2C 323F 0FD0 6752 4973 55BD CC10 05B4" /* ¯,2?.ÐgRIsU½Ì..´ */ - $"AB3F 9302 00C3 EE70 1BA4 B650 FAB2 5821" /* «?“..Ãîp.¤¶Pú²X! */ - $"3856 3872 1B02 7D70 F1F9 0B28 A9DC CAE7" /* 8V8r..}pñù.(©ÜÊç */ - $"D9E7 6252 A768 A7DE 0FB1 FCB1 F54B 98C4" /* ÙçbR§h§Þ.±ü±õK˜Ä */ - $"7B6E 5E24 BC53 F945 741F 66A0 A51E EE5A" /* {n^$¼SùEt.f ¥.îZ */ - $"2A0D B951 4EEE A88B 4F2F C326 F326 1D12" /* *.¹QNO/Ã&ó&.. */ - $"524A 9E48 CC53 44EF C54F 1737 8505 46CF" /* RJžHÌSDïÅO.7….FÏ */ - $"351E 4354 05C7 C832 2A7D 8899 D009 E617" /* 5.CT.ÇÈ2*}ˆ™ÐÆæ. */ - $"0334 305D 9497 D845 E6D3 2CD2 178F 1316" /* .40]”—ØEæÓ,Ò... */ - $"65AD 239E 2ED5 ECCB 402A E728 09B5 E847" /* e­#ž.ÕìË@*ç(ƵèG */ - $"65BD 3F31 CAC5 F9D8 6606 B8AF 4F84 89FE" /* e½?1ÊÅùØf.¸¯O„‰þ */ - $"9004 4730 30BC E58F 5FB3 38CF 36B9 38FC" /* .G00¼å_³8Ï6¹8ü */ - $"FB9D 07EA D13F 9DB9 7185 0E88 0E3B 06E5" /* û.êÑ?¹q….ˆ.;.å */ - $"D476 CFCA 1587 3067 9257 B5DF 1E83 E7FF" /* ÔvÏÊ.‡0g’Wµß.ƒçÿ */ - $"7FFF 7FFF 0E68 E181 AC15 B980 2AFB 1D80" /* .ÿ.ÿ.há¬.¹€*û.€ */ - $"C5BB A88D E36A 4DC5 94CF 6DB2 0694 F977" /* Å»¨ãjMÅ”Ïm².”ùw */ - $"D708 02D1 F380 6773 016A CA84 3B1C 6A33" /* ×..Ñó€gs.jÊ„;.j3 */ - $"5AAC BA2D FEC5 7542 51FC 68D0 CDDD EA44" /* Z¬º-þÅuBQühÐÍÝêD */ - $"788E 2F96 D80C F159 FF45 3316 1494 A7F5" /* xŽ/–Ø.ñYÿE3..”§õ */ - $"98B4 FC39 0062 D59B 52A6 32CB F97C ABD6" /* ˜´ü9.bÕ›R¦2Ëù|«Ö */ - $"42AE AE46 6AA7 D986 0A4E DCDD 717E 8B7C" /* B®®Fj§Ù†ÂNÜÝq~‹| */ - $"8FB8 B396 65A6 83FF 6A4A A5C1 597F 70AF" /* ¸³–e¦ƒÿjJ¥ÁY.p¯ */ - $"DC96 E2EC 0C1D 7A00 3428 2C60 DE32 8DB8" /* Ü–âì..z.4(,`Þ2¸ */ - $"1604 C249 5E82 1F5B 6C23 E562 B2D4 754E" /* ..ÂI^‚.[l#åb²ÔuN */ - $"7F73 442A 25D3 C42A 6A6D 5D09 0E8C 2E67" /* .sD*%ÓÄ*jm]Æ.Œ.g */ - $"95EC 08FE B505 8B5A A4A8 0000 0000 0000" /* •ì.þµ.‹Z¤¨...... */ - $"0000 0000 6121 26B3 27C3 AEC0 FF52 2FEE" /* ....a!&³'îÀÿR/î */ - $"D4F3 92BB 06E2 ABE4 35DC A278 9084 B2F0" /* Ôó’».â«ä5Ü¢x„²ð */ - $"EE1A ADB2 F770 3D4E 120A FD01 B042 CD00" /* î.­²÷p=N.Âý.°BÍ. */ - $"B9C2 B661 40B0 E5FC DC59 59F0 61C5 53A7" /* ¹Â¶a@°åüÜYYðaÅS§ */ - $"7AC1 7EDC 77B7 1C84 0F9A E321 389C E693" /* zÁ~Üw·.„.šã!8œæ“ */ - $"AC98 5160 DDD0 C9A9 BE17 ED52 A10A 300C" /* ¬˜Q`ÝÐÉ©¾.íR¡Â0. */ - $"88ED BB5A 80DA C23B 1196 0C7C 6BA8 D4EA" /* ˆí»Z€ÚÂ;.–.|k¨Ôê */ - $"4FAB 08A9 EBE3 1CC9 6782 F6A9 85A4 1829" /* O«.©ëã.Ég‚ö©…¤.) */ - $"48BB D188 41E8 65BA 28BB 8AC1 8368 DC2F" /* H»ÑˆAèeº(»ŠÁƒhÜ/ */ - $"B2DE 61FE 95C0 BD88 C027 9CD9 3819 8A81" /* ²Þaþ•À½ˆÀ'œÙ8.Š */ - $"20FF 616C DEAE C6EA 15A3 D12F 764A B4E2" /* ÿalÞ®Æê.£Ñ/vJ´â */ - $"ECA3 AF32 36FF 29B0 E3CD 5046 527E 39B7" /* 죯26ÿ)°ãÍPFR~9· */ - $"921A ABF8 F0CB 7040 5FCD A182 4C57 986D" /* ’.«øðËp@_Í¡‚LW˜m */ - $"1115 DD94 687C 3663 7CFB 6C40 642D C8CA" /* ..Ý”h|6c|ûl@d-ÈÊ */ - $"1117 B5A9 8025 123D 9406 58F9 96B5 321E" /* ..µ©€%.=”.Xù–µ2. */ - $"7646 4BFD 48DE 0B9B DBEF B79F B6C7 031E" /* vFKýHÞ.›Ûï·Ÿ¶Ç.. */ - $"1D3B 1D18 B35D 2813 5601 3924 6AE1 FC21" /* .;..³](.V.9$jáü! */ - $"60B9 0B9F 6B4B AFB9 15D8 C57A 5345 7461" /* `¹.ŸkK¯¹.ØÅzSEta */ - $"0EF9 4B6B 88D1 7833 02DF 4FB8 DBEC 836A" /* .ùKkˆÑx3.ßO¸Ûìƒj */ - $"BEA7 3972 93C0 F973 37B5 C84F 1655 031C" /* ¾§9r“Àùs7µÈO.U.. */ - $"674D 741E 308E E3BA 6684 5BB0 4506 AB40" /* gMt.0Žãºf„[°E.«@ */ - $"14DE BFF2 9B38 4026 C5C2 3A44 FDFF 25CB" /* .Þ¿ò›8@&ÅÂ:Dýÿ%Ë */ - $"072E 1D99 62E3 22B8 DE8D 9CF1 79FA 1D38" /* ...™bã"¸Þœñyú.8 */ - $"8900 17CB A72B 8124 7EAF CF2F FC8D 34D6" /* ‰..˧+$~¯Ï/ü4Ö */ - $"E0AC 58ED 8BC1 0DAA 7964 FB91 BF08 EFA6" /* à¬Xí‹Á.ªydû‘¿.ï¦ */ - $"42FF 7FFF 7FE3 AF13 7C4B 1CF4 D643 3CD3" /* Bÿ.ÿ.ã¯.|K.ôÖC<Ó */ - $"5F1A 08BB 7C56 5CFB 6D27 04DE C66A 9AF1" /* _..»|V\ûm'.ÞÆjšñ */ - $"2053 D4B2 EE60 44FF 2A89 1FFC DFCC 57C1" /* SÔ²î`Dÿ*‰.üßÌWÁ */ - $"3800 1290 7854 7902 FF7A 9A36 D71E F8D1" /* 8..xTy.ÿzš6×.øÑ */ - $"D439 471B D02F 4A39 E5BC D25F FDF0 8B54" /* Ô9G.Ð/J9å¼Ò_ýð‹T */ - $"AE0A 3677 2625 B286 7DEC 8FF7 2457 2B25" /* ®Â6w&%²†}ì÷$W+% */ - $"C066 2A4E A605 EE16 7244 CCFD D3D3 FDA1" /* Àf*N¦.î.rDÌýÓÓý¡ */ - $"F3B8 76C3 1C5F 491C 0165 8735 D71D 19AD" /* ó¸vÃ._I..e‡5×..­ */ - $"9BB1 A40D E5BA 9D1C E34B B71C 9CF0 EC7A" /* ›±¤.åº.ãK·.œðìz */ - $"5E87 C4F0 A326 0913 9E2C 6517 50A3 E72B" /* ^‡Äð£&Æ.ž,e.P£ç+ */ - $"87FE D348 2E5D 0A00 0000 0000 0000 0000" /* ‡þÓH.]Â......... */ - $"0002 2C86 A73D 4030 2FE4 D32C 2B56 C74C" /* ..,†§=@0/äÓ,+VÇL */ - $"0869 A5C9 151A 69B9 9390 DA50 4411 8FFF" /* .i¥É..i¹“ÚPD.ÿ */ - $"4938 4E36 F9DD 09FB E4A0 C339 2431 ED8B" /* I8N6ùÝÆûä Ã9$1í‹ */ - $"793D 6354 12C0 97F9 C379 ADA9 7DEE E5EF" /* y=cT.À—ùÃy­©}îåï */ - $"2366 FF4F E2A2 F01A C90F 02E3 51CD B477" /* #fÿOâ¢ð.É..ãQÍ´w */ - $"2230 690A B47C E28B 463C 2E88 7579 7943" /* "0i´|â‹F<.ˆuyyC */ - $"5055 6D0A EEC5 F3BF 2404 37D8 EFE1 71AC" /* PUmÂîÅó¿$.7Øïáq¬ */ - $"6AFE A3E4 A7EB 28BF BFFE 4373 E5FF 7E4A" /* jþ£ä§ë(¿¿þCsåÿ~J */ - $"2D5D 1ED3 6D78 1657 9914 A061 7958 972C" /* -].Ómx.W™. ayX—, */ - $"56FB D5B0 1FFD A18B 7A29 0C81 295B DF7C" /* VûÕ°.ý¡‹z).)[ß| */ - $"83E3 CD36 0E66 7E2B D8FA 3096 AA44 7F9B" /* ƒãÍ6.f~+Øú0–ªD.› */ - $"F0B9 EA48 8CC7 0FFF 7E1C F394 CC5B 6A25" /* ð¹êHŒÇ.ÿ~.ó”Ì[j% */ - $"FD4C CECC 630B 38B7 D621 F081 73EE 9D40" /* ýLÎÌc.8·Ö!ðsî@ */ - $"7FAD FADD 8111 6492 599E DD2C 3600 FF6C" /* .­úÝ.d’YžÝ,6.ÿl */ - $"5A8D B0B8 2AE7 668D C5A0 826B FA0D C5B1" /* Z°¸*çfÅ ‚kú.ű */ - $"6873 D749 B533 9627 C2F6 4922 63F7 8944" /* hs×Iµ3–'ÂöI"c÷‰D */ - $"15C5 A1F9 8539 A21A 1CEB 1C2D 7D1B 0516" /* .Å¡ù…9¢..ë.-}... */ - $"FD6C 5D4F 92A3 14D9 126F C5FC 4116 B499" /* ýl]O’£.Ù.oÅüA.´™ */ - $"D878 D889 9123 D3C8 4637 36E3 8644 6F0B" /* Øx؉‘#ÓÈF76ã†Do. */ - $"D2C6 A599 B793 1367 B548 23BD 8836 11E5" /* ÒÆ¥™·“.gµH#½ˆ6.å */ - $"C323 7AD5 0534 3D05 A4E6 70B3 0376 2B0C" /* Ã#zÕ.4=.¤æp³.v+. */ - $"A964 173B F0BC 2A52 7FE4 2A53 85C2 22B2" /* ©d.;ð¼*R.ä*S…Â"² */ - $"B83F 7185 FB4C 3769 5B3E 4A24 E7E1 D0FD" /* ¸?q…ûL7i[>J$çáÐý */ - $"9B17 8737 FE8B E4C7 9FC1 0E30 D904 D0C5" /* ›.‡7þ‹äÇŸÁ.0Ù.ÐÅ */ - $"D2F5 05E4 3CD6 5FA7 B9AF FB98 755E 0BAF" /* Òõ.ä<Ö_§¹¯û˜u^.¯ */ - $"E4EE 408D A8BE 5E58 07A6 059D 1B33 37F3" /* äî@¨¾^X.¦..37ó */ - $"8D14 871A 7FC6 43ED 6A6F 8F41 9681 095E" /* .‡..ÆCíjoA–Æ^ */ - $"EE46 5BA4 1E15 F5F2 3063 E524 A62A 7C7F" /* îF[¤..õò0cå$¦*|. */ - $"0E38 5D00 A378 8F6D 3861 2088 EDD7 AC24" /* .8].£xm8a ˆí׬$ */ - $"D3B6 B052 DE10 357D B65A 1414 4596 8E3D" /* Ó¶°RÞ.5}¶Z..E–Ž= */ - $"97E3 D838 9ACC 3C84 AF82 EA8D 8BD3 0180" /* —ãØ8šÌ<„¯‚ê‹Ó.€ */ - $"1582 0654 BB61 1047 ACA1 29D3 7CFA 00C8" /* .‚.T»a.G¬¡)Ó|ú.È */ - $"BABC 146B 250C 8D19 8A4E A8B3 50D6 B986" /* º¼.k%..ŠN¨³PÖ¹† */ - $"2AD6 CEFA 02D6 AE11 FF7C B0A2 E6E0 30E9" /* *ÖÎú.Ö®.ÿ|°¢æà0é */ - $"D904 4C03 3BC1 8B68 5892 30B8 7D69 C2D6" /* Ù.L.;Á‹hX’0¸}iÂÖ */ - $"A9F8 56A2 7417 1E31 186F 09A1 4C11 6DCA" /* ©øV¢t..1.oÆ¡L.mÊ */ - $"A62E 5FCC F59A CCE8 6A29 B0DF E2BC E8BF" /* ¦._ÌõšÌèj)°ßâ¼è¿ */ - $"92DF 70C1 8B09 21DF 1440 1684 4413 2A60" /* ’ßpÁ‹Æ!ß.@.„D.*` */ - $"E033 6D92 8573 E63C 2746 6F40 D8F0 D0C9" /* à3m’…sæ<'Fo@ØðÐÉ */ - $"10AF 85A2 CFBF 373B B250 85E4 C1D3 85D2" /* .¯…¢Ï¿7;²P…äÁÓ…Ò */ - $"E167 1222 DF4A 67D9 B3D6 55B4 B047 8675" /* ág."ßJgÙ³ÖU´°G†u */ - $"C803 6AE5 E5AE AF92 C4B7 591A A040 98AC" /* È.jå宯’Ä·Y. @˜¬ */ - $"4412 45F8 BBC8 6482 F7BD 81B2 98FE 9D0B" /* D.Eø»Èd‚÷½²˜þ. */ - $"DAB1 2959 952C 9115 3504 9A24 BBA4 A04C" /* Ú±)Y•,‘.5.š$»¤ L */ - $"4125 5810 54F5 C268 63C2 1DB9 11CF 85BB" /* A%X.TõÂhcÂ.¹.Ï…» */ - $"D941 F5A1 0239 DED3 856D BBE5 7CF3 49C3" /* ÙAõ¡.9ÞÓ…m»å|óIà */ - $"C9CF 1BD1 A953 F58A F9AF E704 E70E 43B7" /* ÉÏ.Ñ©SõŠù¯ç.ç.C· */ - $"2B51 BE14 4FF3 262C 914B 90AF F2A9 E060" /* +Q¾.Oó&,‘K¯ò©à` */ - $"6A24 6553 B776 C48D 19AD ECD3 2DD3 8ECF" /* j$eS·vÄ.­ìÓ-ÓŽÏ */ - $"9EC7 8A0D 97F4 3C69 6E56 0881 1136 C147" /* žÇŠ.—ôù.yzSº¤ôz */ - $"6926 DAD2 72F9 5D4B 1014 8BD5 A4FA 68EA" /* i&ÚÒrù]K..‹Õ¤úhê */ - $"D9F9 F684 BFD5 F2ED FB9E 4C18 91C3 FF17" /* Ùùö„¿ÕòíûžL.‘Ãÿ. */ - $"2D17 D99A DE29 FE6E 63A4 C901 8642 9357" /* -.ÙšÞ)þnc¤É.†B“W */ - $"3120 4386 1938 E7D2 572D 0C59 E3C9 7FED" /* 1 C†.8çÒW-.YãÉ.í */ - $"30FA E54A CEF8 A94C F92D AF19 76EA 3372" /* 0úåJÎø©Lù-¯.vê3r */ - $"B4E1 E7C5 8239 A4AC A247 4838 55E8 EB9B" /* ´áçÅ‚9¤¬¢GH8Uèë› */ - $"DE7D 94E9 DBD7 07FB D488 1672 E61D 9E4C" /* Þ}”éÛ×.ûÔˆ.ræ.žL */ - $"6DF2 97D5 4936 F89A 5CBC D37A 8C2C F7ED" /* mò—ÕI6øš\¼ÓzŒ,÷í */ - $"9755 19F2 0350 AB2E D851 F0B7 78B5 9770" /* —U.ò.P«.ØQð·xµ—p */ - $"4DF3 4212 9C9C CA3B 403A BA7B D497 9410" /* MóB.œœÊ;@:º{Ô—”. */ - $"04C6 288B 5058 5DC9 EB79 AB85 622C 9A55" /* .Æ(‹PX]Éëy«…b,šU */ - $"2DA7 C113 9315 7CAE D84E 6B50 4062 AE94" /* -§Á.“.|®ØNkP@b®” */ - $"8F5E 7969 4BA5 56B2 E881 8C02 ED3B 5259" /* ^yiK¥V²èŒ.í;RY */ - $"24CE C98A 4348 12B1 314F E3E3 B6A3 4E61" /* $ÎÉŠCH.±1Oãã¶£Na */ - $"A426 6350 E380 B0B5 DEFF 64CF 72D6 D4B9" /* ¤&cP〰µÞÿdÏrÖÔ¹ */ - $"907C 9BE0 7E4D 39F9 2BB7 C3DE D7C3 DCD8" /* |›à~M9ù+·ÃÞ×ÃÜØ */ - $"1F93 775F 0F44 DF0F A717 C3E9 D603 F269" /* .“w_.Dß.§.ÃéÖ.òi */ - $"FBE1 D36F 87B3 6F87 B280 E8AB DECC AF0D" /* ûáÓo‡³o‡²€è«Þ̯. */ - $"6C8A C695 8734 87EB A75F 5130 05EC 9BA8" /* lŠÆ•‡4‡ë§_Q0.웨 */ - $"78DB 85A2 680C 75A0 EDD1 4AA2 7E1B BAFF" /* xÛ…¢h.u íÑJ¢~.ºÿ */ - $"5AFC FD6C 3E36 A6D9 923A 2DCE 24BC 35EF" /* Züýl>6¦Ù’:-Î$¼5ï */ - $"27F4 8813 7CC4 0141 3CD9 9568 BFE6 BBB3" /* 'ôˆ.|Ä.A<Ù•h¿æ»³ */ - $"219B 0442 5227 3796 635D 0DE7 499A A701" /* !›.BR'7–c].çIš§. */ - $"7F74 FB13 F9DF E737 08AB 0A91 3D9E B77D" /* .tû.ùßç7.«Â‘=ž·} */ - $"E616 57BB 8BAF 7A0D 1B28 42E6 D653 6BD3" /* æ.W»‹¯z..(BæÖSkÓ */ - $"D7A8 9A2B 0905 6198 8809 E5D0 D0A4 F589" /* רš+Æ.a˜ˆÆåÐФõ‰ */ - $"3D04 8161 C4CB 7BC9 96E2 9DA4 1C59 C982" /* =.aÄË{É–â¤.YÉ‚ */ - $"4705 B1BE 1E05 E391 5E89 43FE 6C67 4342" /* G.±¾..ã‘^‰CþlgCB */ - $"636F 80C5 6A98 16E6 6B80 27C8 D0D9 B28C" /* co€Åj˜.æk€'ÈÐÙ²Œ */ - $"6FD4 E109 61AB 8FCB D4CB 19ED 2BE7 B510" /* oÔáÆa«ËÔË.í+çµ. */ - $"C0E8 5883 0642 92A1 6094 7E45 5D3F 819A" /* ÀèXƒ.B’¡`”~E]?š */ - $"4B6F AE8E ED0B 4B30 ABB1 2789 5C58 EEFD" /* Ko®Ží.K0«±'‰\Xîý */ - $"06C9 EF2B 2A12 1731 7581 4428 C72D 2501" /* .Éï+*..1uD(Ç-%. */ - $"2C14 0DA4 2C98 035F FEA8 51A2 0E61 4C50" /* ,..¤,˜._þ¨Q¢.aLP */ - $"4A65 60DE FA1C F36C 62D9 A3FA 93A6 4CAC" /* Je`Þú.ólbÙ£ú“¦L¬ */ - $"C1D0 079D 912F A133 724B 13CC AFF4 1382" /* ÁÐ.‘/¡3rK.̯ô.‚ */ - $"D61F 8AF2 A48B CCA6 5D66 4F61 E6BE 657B" /* Ö.Šò¤‹Ì¦]fOaæ¾e{ */ - $"7F5B 6F20 397A BBC2 3F23 86DF 2355 4A18" /* .[o 9z»Â?#†ß#UJ. */ - $"15DB CB3E 201F FF7C 4AC9 C764 B098 CA46" /* .ÛË> .ÿ|JÉÇd°˜ÊF */ - $"C2CF 44C6 42E7 D30A FD05 380F 6BD3 24C1" /* ÂÏDÆBçÓÂý.8.kÓ$Á */ - $"3998 C5C1 E7D5 0E2C 8D50 7FBB 7A11 6CB7" /* 9˜ÅÁçÕ.,P.»z.l· */ - $"B80F 5A84 44BE E746 C43C 6B5D F055 7A3B" /* ¸.Z„D¾çFÄ=.Èý.‡'Ç */ - $"F936 55E0 D0CE BF1A 50D8 51CE 6253 0293" /* ù6UàÐο.PØQÎbS.“ */ - $"1958 3FA2 BF6C 54A5 B158 4236 7F88 7DE4" /* .X?¢¿lT¥±XB6.ˆ}ä */ - $"C231 6D0B 62F1 2C6C 1A1D F8AA 0317 C52D" /* Â1m.bñ,l..øª..Å- */ - $"D9D5 0B61 312B A074 B2B8 1905 FCF9 A102" /* ÙÕ.a1+ t²¸..üù¡. */ - $"6188 616D 74E6 8232 245D 9C8A 4FD8 E2FD" /* aˆamtæ‚2$]œŠOØâý */ - $"0C6C 8F2E 5C82 5724 C542 3AE5 BA0A EE0B" /* .l.\‚W$ÅB:åºÂî. */ - $"2A14 BCDE 8005 4446 25B1 CF8A 6744 9F5C" /* *.¼Þ€.DF%±ÏŠgDŸ\ */ - $"9B09 6571 3003 9F52 A42A 7669 CCAA 7A75" /* ›Æeq0.ŸR¤*vi̪zu */ - $"F807 2530 7BA9 1474 F318 5A7B E64A 5DD7" /* ø.%0{©.tó.Z{æJ]× */ - $"A6F2 13B0 AFA5 7BF8 46DC CABF 4D80 CC26" /* ¦ò.°¯¥{øFÜÊ¿M€Ì& */ - $"5838 4016 3C05 4550 C62F 1504 5B79 0816" /* X8@.<.EPÆ/..[y.. */ - $"556C 8524 5DDA E914 92F1 3124 5C5B 3213" /* Ul…$]Úé.’ñ1$\[2. */ - $"7851 D9B8 EE79 46CF 3F06 1EAB 662A FD9E" /* xQÙ¸îyFÏ?..«f*ýž */ - $"E7D8 2E8C 938F 43FA B1B1 34B0 9207 34EC" /* çØ.Œ“Cú±±4°’.4ì */ - $"7A09 46BF 201E 311F EEEE 88EF C6C1 C10D" /* zÆF¿ .1.îîˆïÆÁÁ. */ - $"E238 50C9 7F01 DFF0 2170 EDD1 7471 8C14" /* â8PÉ..ßð!píÑtqŒ. */ - $"FB17 6678 A8B9 6611 9713 D8BB 8840 427C" /* û.fx¨¹f.—.Ø»ˆ@B| */ - $"8E5E 1608 D5E6 79B6 0BD7 3592 5D97 3864" /* Ž^..Õæy¶.×5’]—8d */ - $"71DF 6137 C0E6 2EB0 F71D 466C CFFF 50EF" /* qßa7Àæ.°÷.FlÏÿPï */ - $"FE99 2E4D 0DBB 537F 32F1 DECB D5D4 39DF" /* þ™.M.»S.2ñÞËÕÔ9ß */ - $"4FCC 2FC2 C399 8EB9 FC8B 2806 3FB7 F227" /* OÌ/ÂÃ™Ž¹ü‹(.?·ò' */ - $"BA12 A288 9858 9159 B6ED 0DBF 3DCC 8FA1" /* º.¢ˆ˜X‘Y¶í.¿=Ì¡ */ - $"9CF5 836D 499F B9E7 DB4E 497F D3A4 57BF" /* œõƒmIŸ¹çÛNI.Ó¤W¿ */ - $"9F0A EECE 8E29 127A 82FF 4222 75AC 32D4" /* ŸÂîÎŽ).z‚ÿB"u¬2Ô */ - $"6540 8040 4137 9EB4 EFFF 7FEC 9D37 60B4" /* e@€@A7ž´ïÿ.ì7`´ */ - $"184A 9567 71E4 F5FE 1C55 BB95 9FD8 BE6D" /* .J•gqäõþ.U»•ŸØ¾m */ - $"037F 052C 035B 91D7 903B 6EEC 1642 3D18" /* ...,.[‘×;nì.B=. */ - $"0B05 FEC5 4C0C 9ED3 BFA5 94AF CBB1 E725" /* ..þÅL.žÓ¿¥”¯Ë±ç% */ - $"DFC3 AF74 2485 D5A2 7F79 1275 C7DD ADE1" /* ßït$…Õ¢.y.uÇÝ­á */ - $"3BD5 AD19 74E6 EE9F 6846 7900 C09D 090B" /* ;Õ­.tæîŸhFy.ÀÆ. */ - $"C17C FB0F 2C9F 4DEB B9FE 7152 A47E B1CB" /* Á|û.,ŸMë¹þqR¤~±Ë */ - $"FB0E 7108 21C7 EFAB 8FA3 8AF0 2FDC 17A9" /* û.q.!Çï«£Šð/Ü.© */ - $"2565 5082 BEBF 4DDD 0699 3265 82AE D421" /* %eP‚¾¿MÝ.™2e‚®Ô! */ - $"3776 341F C56C ECDA B302 0306 AE5F 37FF" /* 7v4.ÅlìÚ³...®_7ÿ */ - $"7FB7 1192 8D68 5475 EE0B 4D80 6149 DEBB" /* .·.’hTuî.M€aIÞ» */ - $"F9A7 D7E7 A35D 9515 8000 4F04 C4D6 670C" /* ù§×ç£]•.€.O.ÄÖg. */ - $"54B7 93BB D264 43E0 E8D4 2D4D D3E2 AEB0" /* T·“»ÒdCàèÔ-MÓâ®° */ - $"FBAE F5BD A155 A8F2 07B4 AAA6 CE0A 84CC" /* û®õ½¡U¨ò.´ª¦ÎÂ„Ì */ - $"907F D5C4 9900 8FE2 0E0D F385 55A0 CDFF" /* .ÕÄ™.â..ó…U Íÿ */ - $"7FFE D776 193F A5C4 0334 DD15 7A6A 0890" /* .þ×v.?¥Ä.4Ý.zj. */ - $"DE98 5707 7799 9A5B D638 31B9 982B 5623" /* Þ˜W.w™š[Ö81¹˜+V# */ - $"3AFA A84A 20E7 417C F56E 7776 0C54 0765" /* :ú¨J çA|õnwv.T.e */ - $"91DE A19E 3DD2 4D8B F9F9 0D61 6343 0746" /* ‘Þ¡ž=ÒM‹ùù.acC.F */ - $"7D72 600B 4E15 FC8F 60FA A273 4348 A86E" /* }r`.N.ü`ú¢sCH¨n */ - $"E11A CD6B 3FFF 7ED1 E486 AAAA A380 045A" /* á.Ík?ÿ~Ñ䆪ª£€.Z */ - $"70E5 3753 4FFF 7FC6 ADBE 8E71 66FF 8165" /* på7SOÿ.Æ­¾Žqfÿe */ - $"D782 24E8 7399 0C15 03BF 29B5 5685 FDA1" /* ׂ$ès™...¿)µV…ý¡ */ - $"5BAD 5751 6D53 799A A7C6 572E 6A37 B46A" /* [­WQmSyš§ÆW.j7´j */ - $"B9BF 05BF 3131 F7DB E3B8 8F11 EE2F 13D6" /* ¹¿.¿11÷Ûã¸.î/.Ö */ - $"7DE9 D552 0B25 FEAF AEFE F0A7 FBE9 487F" /* }éÕR.%þ¯®þð§ûéH. */ - $"9085 0FFA 23FE A9DB 0494 B0E1 FEFD 1D50" /* ….ú#þ©Û.”°áþý.P */ - $"15B4 6548 AAA0 0182 C5FF 7D24 05C8 B15E" /* .´eHª .‚Åÿ}$.ȱ^ */ - $"E45F A508 3C68 CA73 3A57 A35E 462D 9213" /* ä_¥.^¥Fl¾.³äÞH.©}Æn. */ - $"05B3 2AD0 EF87 EFB1 6D03 06E4 85AB 36C6" /* .³*Ðï‡ï±m..ä…«6Æ */ - $"9BF6 8382 74F2 F321 62DF 269C 8D95 8FBD" /* ›öƒ‚tòó!bß&œ•½ */ - $"C4CA 7278 FDBA C51B A4FC C224 BD43 5F76" /* ÄÊrxýºÅ.¤üÂ$½C_v */ - $"F9D9 0970 5EAA 5F05 FDCB 50DE 35E7 A82E" /* ùÙÆp^ª_.ýËPÞ5ç¨. */ - $"1E7E 584D 33D8 EF90 B221 622F 778E 460D" /* .~XM3Øï²!b/wŽF. */ - $"6DC9 383F CF41 7B89 7414 97EF EFE2 CC75" /* mÉ8?ÏA{‰t.—ïïâÌu */ - $"8895 6AFD C6E8 610E 5E29 7AE1 FAAF 9FD5" /* ˆ•jýÆèa.^)záú¯ŸÕ */ - $"435F 3F61 6F9F AC78 7EAD 62BE 7DF7 7CFD" /* C_?aoŸ¬x~­b¾}÷|ý */ - $"D3FD 5BAF 83F5 5B37 CF6D BE7E 9DDF 3F4D" /* Óý[¯ƒõ[7Ïm¾~ß?M */ - $"80E8 ABDE CCAF 0D6C 8AC6 9587 348A 7A5A" /* €è«Þ̯.lŠÆ•‡4ŠzZ */ - $"21F6 5D05 F6A4 1727 AC99 8E36 4607 A805" /* !ö].ö¤.'¬™Ž6F.¨. */ - $"1CA8 FB12 6979 4216 6FCF DF65 6135 AFF9" /* .¨û.iyB.oÏßea5¯ù */ - $"5A1E 01C1 15A0 4F38 E547 6F65 858D 0788" /* Z..Á. O8åGoe….ˆ */ - $"49E3 07A2 D476 B767 EC21 FF65 559D 3B3F" /* Iã.¢Ôv·gì!ÿeU;? */ - $"B8A5 C1A8 6496 5183 24E6 93A6 DF2F 52F1" /* ¸¥Á¨d–Qƒ$擦ß/Rñ */ - $"19CA BFD7 1479 8040 2F9C 0DB9 00F0 49C5" /* .Ê¿×.y€@/œ.¹.ðIÅ */ - $"3D32 5B0C 9453 8D1F 452F D9E7 75FD CD61" /* =2[.”S.E/ÙçuýÍa */ - $"44A9 62C3 F0C8 BAF0 6A66 A4D4 AA8B 73B0" /* D©bÃðȺðjf¤Ôª‹s° */ - $"C942 686A 4A1E E3A7 2343 A0ED D595 9AFC" /* ÉBhjJ.ã§#C íÕ•šü */ - $"5546 0ACB FD23 6F2E DCEE ABBD 70E7 FA93" /* UFÂËý#o.Üpçú“ */ - $"3FFF 7FC5 7D31 FA1C D910 1C70 6CDC 3362" /* ?ÿ.Å}1ú.Ù..plÜ3b */ - $"B0A1 C6F3 16D1 BE51 73D2 4697 37CA 8197" /* °¡Æó.ѾQsÒF—7Ê— */ - $"A8C6 89C1 FF78 99EB 31B8 5F88 7B08 C557" /* ¨Æ‰Áÿx™ë1¸_ˆ{.ÅW */ - $"5483 A35C 0713 94D5 D2DF B84C 36CA D9EC" /* Tƒ£\..”ÕÒ߸L6ÊÙì */ - $"8FC7 A305 814F 8B04 07D2 E391 5E89 43FE" /* Ç£.O‹..Òã‘^‰Cþ */ - $"6C67 4343 91DB DD56 C1D2 FEA6 9F1F 346F" /* lgCC‘ÛÝVÁÒþ¦Ÿ.4o */ - $"714B 79E1 7AC7 53A1 9934 69F4 E886 5A9C" /* qKyázÇS¡™4iôè†Zœ */ - $"6F9A D26F DD48 5F60 A72A 7E20 77F8 1BE8" /* ošÒoÝH_`§*~ wø.è */ - $"91B9 9018 8124 7694 3664 4202 7B94 1007" /* ‘¹.$v”6dB.{”.. */ - $"4234 15FC 04A2 6DE0 DC6B 5EDE 4332 F592" /* B4.ü.¢màÜk^ÞC2õ’ */ - $"779A A3BD 8E84 5464 DE08 6BAE AE2F 6EEF" /* wš£½Ž„TdÞ.k®®/nï */ - $"CB75 5862 59D8 1362 5D60 79D2 137C 7606" /* ËuXbYØ.b]`yÒ.|v. */ - $"F2B1 06DE 8A2F B76A A7D9 84DB 8F52 1107" /* ò±.ÞŠ/·j§Ù„ÛR.. */ - $"A42C 9803 2476 0448 42C9 A9E5 D0F5 9110" /* ¤,˜.$v.HBÉ©åÐõ‘. */ - $"2FAB AAF4 0752 81C9 6064 B8F7 6CEB 438E" /* /«ªô.RÉ`d¸÷lëCŽ */ - $"DC4B 916C 21F0 1C8F 2A6A 1919 9E26 2B36" /* ÜK‘l!ð.*j..ž&+6 */ - $"3E51 F543 F7C5 2549 66D0 2F14 D18F 42F1" /* >QõC÷Å%IfÐ/.ÑBñ */ - $"397B BA52 99ED 853C E07D 629B 92A1 2589" /* 9{ºR™í…<à}b›’¡%‰ */ - $"B3A9 B812 DC8D A368 3204 F8AA 7549 AF2B" /* ³©¸.Ü£h2.øªuI¯+ */ - $"2DE7 529C 1ECB 9747 A4B8 F6EC 8DDC 0AC4" /* -çRœ.Ë—G¤¸öìÜÂÄ */ - $"2C31 F042 C407 3F18 FD32 9280 60E4 60D8" /* ,1ðBÄ.?.ý2’€`ä`Ø */ - $"77B5 C019 A5FF 6E0D 8E35 A78E C7AA E95B" /* wµÀ.¥ÿn.Ž5§ŽÇªé[ */ - $"D37C D883 5DD2 756B 385A 08BB 7708 AA5E" /* Ó|؃]Òuk8Z.»w.ª^ */ - $"5B89 0628 F831 7775 3555 A523 BF2F 721A" /* [‰.(ø1wu5U¥#¿/r. */ - $"099B E6B4 5128 9EA6 41E1 9B8B 18C1 928C" /* Æ›æ´Q(ž¦Aᛋ.Á’Œ */ - $"72A0 BD1E 84D6 836A C947 0982 284A 9238" /* r ½.„ÖƒjÉGÆ‚(J’8 */ - $"A06F E390 1BD5 BBFD 323F BA86 2091 BAD5" /*  oã.Õ»ý2?º† ‘ºÕ */ - $"351D 16C5 1D44 E8C7 66C7 D469 047D 5548" /* 5..Å.DèÇfÇÔi.}UH */ - $"7049 7B42 B682 DF4C 68DE B5D2 2EDC C105" /* pI{B¶‚ßLhÞµÒ.ÜÁ. */ - $"4047 9A7E 0403 F48B 6215 C3ED 8DBA 12E9" /* @Gš~..ô‹b.Ãíº.é */ - $"EEFB B61B 906E F6F6 DDFD D030 CD1C 47FD" /* îû¶.nööÝýÐ0Í.Gý */ - $"7C37 E7C7 DC08 213E 3C33 08E6 74A0 F400" /* |7çÇÜ.!><3.æt ô. */ - $"7CFC 3B85 1A2E 5ACA 573F F24C 7D2C 0E3B" /* |ü;…..ZÊW?òL},.; */ - $"2A6D CEDC 6C9C 6E97 A572 915F A892 3833" /* *mÎÜlœn—¥r‘_¨’83 */ - $"A08F 0070 A602 FB49 0EA6 62FC 4237 C568" /*  .p¦.ûI.¦büB7Åh */ - $"E937 1DC1 1FC2 C3F1 AA30 AC4D DDB8 E747" /* é7.Á.ÂÃñª0¬MݸçG */ - $"5EE4 FD73 8124 56EB ADBE 6DB3 F27B 80C0" /* ^äýs$Vë­¾m³ò{€À */ - $"E536 971B 511B C76B AB20 8BA4 4DCD BFCB" /* å6—.Q.Çk« ‹¤MÍ¿Ë */ - $"4A0C 34DC 3DDC 9BEF 5122 89D0 99D1 9BE7" /* J.4Ü=Ü›ïQ"‰Ð™Ñ›ç */ - $"8840 002A A77A 25E2 9C2C F9BC 78F9 FB0E" /* ˆ@.*§z%âœ,ù¼xùû. */ - $"0DB7 4F14 B07A 12F6 65D3 ABE1 660D A84A" /* .·O.°z.öeÓ«áf.¨J */ - $"EFF9 A799 1852 8ED0 9582 B79A D812 1BE6" /* ïù§™.RŽÐ•‚·šØ..æ */ - $"F3D0 D5FA 9C76 5EBD DBFD 42A9 F7B3 885E" /* óÐÕúœv^½ÛýB©÷³ˆ^ */ - $"4A68 DBE7 9663 FB7F 1AC4 5004 197F 97F0" /* JhÛç–cû..ÄP...—ð */ - $"F57B 135D 19ED E0E0 1C84 139C BA3B 2493" /* õ{.].íàà.„.œº;$“ */ - $"D997 333D B6A7 9E83 619C FCE9 9875 134D" /* Ù—3=¶§žƒaœüé˜u.M */ - $"4B31 FCB3 5808 B917 C8BB 0B67 4564 488E" /* K1ü³X.¹.È».gEdHŽ */ - $"3554 8125 C3A4 DB4A 0BB2 E501 244C 1F49" /* 5T%äÛJ.²å.$L.I */ - $"C6A7 51E4 6C51 A134 3DF4 CE21 2993 FF3B" /* ƧQälQ¡4=ôÎ!)“ÿ; */ - $"80F6 AE0B B9F8 D1D5 8853 4531 6806 4F3E" /* €ö®.¹øÑÕˆSE1h.O> */ - $"D2B6 5F62 796A 683C D3C9 A22B 6D56 C497" /* Ò¶_byjh<ÓÉ¢+mVÄ— */ - $"D854 2E14 C281 0F94 0220 BEE7 3754 D077" /* ØT..Â.”. ¾ç7TÐw */ - $"EDB0 0F0E 95C1 A40B 55C9 B5AE 4DA8 A8A6" /* í°..•Á¤.Uɵ®M¨¨¦ */ - $"ADD6 4A11 DE81 B148 70D3 FA4F 795C 9171" /* ­ÖJ.Þ±HpÓúOy\‘q */ - $"C72E 7EF2 454C 0336 BE4A EE68 960E 25BA" /* Ç.~òEL.6¾Jîh–.%º */ - $"E686 01F4 6FF5 3C7C 8B33 60D8 24D3 70A1" /* æ†.ôoõ<|‹3`Ø$Óp¡ */ - $"06C6 E616 29D4 63D6 3334 379F 743E 745D" /* .Ææ.)ÔcÖ347Ÿt>t] */ - $"4EF5 ECB5 072E 9F62 0750 F7BA 6FDE B6B0" /* Nõìµ..Ÿb.P÷ºoÞ¶° */ - $"0BD0 4FCC 8F59 9B13 0C77 0A30 9BAE DF36" /* .ÐOÌY›..wÂ0›®ß6 */ - $"B13D D861 E92A 12C7 EC7A 0946 BF20 1E31" /* ±=Øaé*.ÇìzÆF¿ .1 */ - $"1FEE EE88 EFC6 C1C1 0DE2 3850 C97F 01DF" /* .îîˆïÆÁÁ.â8PÉ..ß */ - $"F021 605A D52A 570D 7089 0C1B B3FE 8B4D" /* ð!`ZÕ*W.p‰..³þ‹M */ - $"E441 70AC 5F71 3FCE 527F EBF4 048A A307" /* äAp¬_q?ÎR.ëô.Š£. */ - $"CEFD 4EB0 87ED BFE2 A36C 51B9 EAD3 37C6" /* ÎýN°‡í¿â£lQ¹êÓ7Æ */ - $"E8F0 9A3D 8F78 8747 81D4 33F0 9EEB 5EA0" /* èðš=x‡GÔ3ðžë^  */ - $"6FE0 A580 6B6B C126 1CE3 F1B2 DC9C CFCE" /* oीkkÁ&.ãñ²ÜœÏÎ */ - $"42EE 7E91 EF2F 0DDF CFDE 75EB 554D 6941" /* Bî~‘ï/.ßÏÞuëUMiA */ - $"07A5 21BE AD52 7CC1 49B5 FE74 AE40 F70F" /* .¥!¾­R|ÁIµþt®@÷. */ - $"AB3B 0C16 98F5 7742 3DCE 842D 0B2B 2FEB" /* «;..˜õwB=΄-.+/ë */ - $"5E90 DEBC 8BA9 81AC 40CC 0030 2853 FE9C" /* ^Þ¼‹©¬@Ì.0(Sþœ */ - $"6FC2 569B 2CD1 6200 2881 802D 7697 8442" /* oÂV›,Ñb.(€-v—„B */ - $"92C8 666B BC90 3252 F4D3 9BD2 AD14 0027" /* ’Èfk¼2RôÓ›Ò­..' */ - $"CE11 F5A4 437B 3F80 B250 AA4C 23B6 AD83" /* Î.õ¤C{?€²PªL#¶­ƒ */ - $"277E 5EF0 8132 6331 9325 D1A3 CFB6 6F73" /* '~^ð2c1“%ѣ϶os */ - $"D37D 780F 91CC CD40 6234 2FE2 F097 1681" /* Ó}x.‘ÌÍ@b4/âð—. */ - $"6097 88BD BFFF 18F5 2CBB FF67 FDBC 2F07" /* `—ˆ½¿ÿ.õ,»ÿgý¼/. */ - $"67FF 7FFF 1946 84C7 A551 03FF 7F52 A7C2" /* gÿ.ÿ.F„Ç¥Q.ÿ.R§Â */ - $"8AC8 1080 56FF 0C48 1804 A884 A5A2 08FF" /* ŠÈ.€Vÿ.H..¨„¥¢.ÿ */ - $"7FF5 3220 8043 9005 C25D DE15 02FB 7F2B" /* .õ2 €C.Â]Þ..û.+ */ - $"8205 5CA8 40BE EFB1 78F0 2656 2AD4 14FF" /* ‚.\¨@¾ï±xð&V*Ô.ÿ */ - $"7505 20CD 8BE2 8B15 47BB 9E26 105E 15DD" /* u. Í‹â‹.G»ž&.^.Ý */ - $"21A7 82AE E19D FE27 5D8B DDAD E13B D5AD" /* !§‚®áþ']‹Ý­á;Õ­ */ - $"1974 E6EE 9F68 4679 00C0 9D09 0BC1 7CFB" /* .tæîŸhFy.ÀÆ.Á|û */ - $"0F2C 9F4E 082C 2CB4 569B A7B0 0009 E098" /* .,ŸN.,,´V›§°.Æà˜ */ - $"9AB0 9892 B1FF 6957 1D78 2613 4289 24C6" /* š°˜’±ÿiW.x&.B‰$Æ */ - $"12BC E2EF C9AE E6D9 784F C157 77AB 3470" /* .¼âïÉ®æÙxOÁWw«4p */ - $"D8C7 C746 1978 322D D4E9 FA24 B8B2 5054" /* ØÇÇF.x2-Ôéú$¸²PT */ - $"D643 8270 9090 D6D8 0C24 16E5 1146 421C" /* ÖC‚pÖØ.$.å.FB. */ - $"D6A2 40D9 1864 A800 0000 0000 0001 4554" /* Ö¢@Ù.d¨.......ET */ - $"031E 793B 33D3 FD4A CE0A 3D8A 9D46 37B0" /* ..y;3ÓýJÎÂ=ŠF7° */ - $"4D2C 6F04 2BFF 071C 023F E153 6688 1815" /* M,o.+ÿ...?áSfˆ.. */ - $"BA20 BF61 DDDF 2979 84E3 3348 50F6 E9B8" /* º ¿aÝß)y„ã3HPöé¸ */ - $"634A 8937 FF7F F1AE E84B C95A 771F 4C9C" /* cJ‰7ÿ.ñ®èKÉZw.Lœ */ - $"3FFE 0734 7D7F 6E35 4A2E 21E0 E52F FF7E" /* ?þ.4}.n5J.!àå/ÿ~ */ - $"8532 8513 7869 A6E6 495D 3E58 F349 1EF5" /* …2….xi¦æI]>XóI.õ */ - $"886C 6441 9091 82E8 0C24 1507 0E02 A105" /* ˆldA‘‚è.$....¡. */ - $"95C5 1409 096C 9A37 F758 F13A 5ABF 149E" /* •Å.ÆÆlš7÷Xñ:Z¿.ž */ - $"DA31 52E9 0DA9 0BFF 45EB 20C7 1A1C E54C" /* Ú1Ré.©.ÿEë Ç..åL */ - $"29D1 6C8E D1EC 9D59 F945 4303 373F FF7F" /* )ÑlŽÑìYùEC.7?ÿ. */ - $"CE95 B027 88F7 AB06 28B9 92E7 D540 BC2B" /* Ε°'ˆ÷«.(¹’çÕ@¼+ */ - $"7167 8C6C C87E 32B0 C904 7D7D 278E E519" /* qgŒlÈ~2°É.}}'Žå. */ - $"707D 2C42 1714 C425 F9D0 DC01 D910 23DB" /* p},B..Ä%ùÐÜ.Ù.#Û */ - $"E7F3 391C A4E6 FAE1 C850 5A1F 456A 6690" /* çó9.¤æúáÈPZ.Ejf */ - $"3F37 F970 3841 73D3 1095 39CF 10A3 40F8" /* ?7ùp8AsÓ.•9Ï.£@ø */ - $"4CCC 4985 E3D5 127F 7CF4 92BC DCE9 2335" /* LÌI…ãÕ..|ô’¼Üé#5 */ - $"43FB 7460 8D5C C121 CFF2 1165 1CCE BBB2" /* Cût`\Á!Ïò.e.λ² */ - $"5EA8 0279 2C97 E45B A43D 328C 7A6C 5EBC" /* ^¨.y,—ä[¤=2Œzl^¼ */ - $"61DD BB2C E34E 25E4 1725 3C6B EC12 BFEF" /* aÝ»,ãN%ä.%^ÂÏvmN‰x*Åñ8uZ */ - $"CBDD 8421 F74E 9A07 A070 16ED 100C 769A" /* ËÝ„!÷Nš. p.í..vš */ - $"6571 1FA0 4D62 8ADC A3F1 0AAA 2253 1A39" /* eq. MbŠÜ£ñª"S.9 */ - $"0006 DF51 B09A 2267 BA13 3AD9 0120 8520" /* ..ßQ°š"gº.:Ù. … */ - $"7375 BB11 0715 9FFF 7FFF 276F 9A44 4D02" /* su»...Ÿÿ.ÿ'ošDM. */ - $"9DF2 BE32 729A 8C71 FBC9 4C73 FA4B 1D24" /* ò¾2ršŒqûÉLsúK.$ */ - $"4115 B69E 4FFF 7FFF 45B5 7091 9925 CEBD" /* A.¶žOÿ.ÿEµp‘™%ν */ - $"6A4E 1AA3 BFFF 7FFD AA3B 4043 EE5A 76B0" /* jN.£¿ÿ.ýª;@CîZv° */ - $"A073 CF17 7A58 3A06 649C B972 3CB8 897B" /*  sÏ.zX:.dœ¹r<¸‰{ */ - $"31E2 637A 05AC 83FA B94C 0F75 7113 FF7B" /* 1âcz.¬ƒú¹L.uq.ÿ{ */ - $"E690 225A FB16 A961 626A B7FE 22EF 864B" /* æ"Zû.©abj·þ"ï†K */ - $"F464 1D62 4127 02B3 DB08 1C01 3ECE 1326" /* ôd.bA'.³Û...>Î.& */ - $"CF03 BF05 5771 4992 75FE 29FC 5FFF 60D5" /* Ï.¿.WqI’uþ)ü_ÿ`Õ */ - $"DCC3 1B1F 40FF 6990 DC69 3E47 D09A 6E6A" /* ÜÃ..@ÿiÜi>GКnj */ - $"2866 9BA8 D74C BAAA 204E 05F9 DBFE E679" /* (f›¨×Lºª N.ùÛþæy */ - $"E76C 383D 9F92 BB32 1E14 2CA1 CBD5 E93C" /* çl8=Ÿ’»2..,¡ËÕé< */ - $"6C00 DFA2 B04F D650 3F14 60FF 7F73 29C3" /* l.ߢ°OÖP?.`ÿ.s)à */ - $"E20E 5672 C31B 6D72 FDCF 8097 B8B0 1482" /* â.VrÃ.mrýÏ€—¸°.‚ */ - $"C37E 4C4A 28FA 6E67 F061 E00C 371B 8655" /* Ã~LJ(úngðaà.7.†U */ - $"BDCB 2942 6AB1 0E31 38D3 6948 0D3F 6FEF" /* ½Ë)Bj±.18ÓiH.?oï */ - $"C2AB 669A E502 2490 C158 FC07 05F0 348A" /* «fšå.$ÁXü..ð4Š */ - $"0505 F0B2 E7E3 F934 19DA 2DB9 9686 603E" /* ..ð²çãù4.Ú-¹–†`> */ - $"C2C3 4B2F EB95 FB4E 62D2 F085 4364 9DCA" /* ÂÃK/ë•ûNbÒð…CdÊ */ - $"A6E8 94F8 CC41 2603 5BFC 4E90 C05F 068D" /* ¦è”øÌA&.[üNÀ_. */ - $"414C 618C 8860 58B1 7059 0B4C 39E8 FB58" /* ALaŒˆ`X±pY.L9èûX */ - $"C413 43C6 BF39 CC12 6E5B F65C F671 DD29" /* Ä.CÆ¿9Ì.n[ö\öqÝ) */ - $"8A03 BC15 FF06 2028 49E4 BF04 E6FC D4FD" /* Š.¼.ÿ. (Iä¿.æüÔý */ - $"401A CB9C 5F7F EFE7 8F41 E707 7803 9F1A" /* @.Ëœ_.ïçAç.x.Ÿ. */ - $"715F 951E E63A 9B4C 1404 32AA B5B7 98B0" /* q_•.æ:›L..2ªµ·˜° */ - $"D5F4 CD69 DD15 9E81 D2FD 09F7 462D AF3E" /* ÕôÍiÝ.žÒýÆ÷F-¯> */ - $"31DA 85C4 5053 8460 C06C 7018 908C 4821" /* 1Ú…ÄPS„`Àlp.ŒH! */ - $"D8AB AC44 7666 44D1 EA04 8979 3A4A A0FE" /* Ø«¬DvfDÑê.‰y:J þ */ - $"27D7 B0C3 DBAA 5233 F376 3CA8 4968 DF8A" /* '×°ÃÛªR3óv<¨Ihߊ */ - $"874C 2117 6A15 4664 03FF 7FFF 7F7C 2D12" /* ‡L!.j.Fd.ÿ.ÿ.|-. */ - $"B28B 8A4C 6D72 1106 16E0 BF7F 9822 2424" /* ²‹ŠLmr...à¿.˜"$$ */ - $"3C1B CBC8 2F76 1AC7 FF7F FF7F EB42 22AA" /* <.ËÈ/v.Çÿ.ÿ.ëB"ª */ - $"F30A 0C9D 6086 E561 E1BC C1D9 4E7F FADF" /* óÂ.`†åaá¼ÁÙN.úß */ - $"A85C B34C E2D4 FCF6 1A29 34F3 3B42 1DFC" /* ¨\³LâÔüö.)4ó;B.ü */ - $"C6BD 370B D203 B0C4 1C7D C348 1EE7 EAD9" /* ƽ7.Ò.°Ä.}ÃH.çêÙ */ - $"3145 E7FB 36CC 8E64 AB70 81DC 65E1 2C1D" /* 1Eçû6ÌŽd«pÜeá,. */ - $"9CB5 18A0 1C95 7DE2 96DF C185 7A40 50C7" /* œµ. .•}â–ßÁ…z@PÇ */ - $"E32C FCC1 FF6B 14F5 05FE 0E1C 8757 8D82" /* ã,üÁÿk.õ.þ..‡W‚ */ - $"3A41 284E 2906 8316 564F F479 4DCF FF7E" /* :A(N).ƒ.VOôyMÏÿ~ */ - $"5F11 3745 AC7F ED8D BC93 4205 7E12 E036" /* _.7E¬.í¼“B.~.à6 */ - $"0BE4 4B4F F99C F369 6B38 263E 63EC 6311" /* .äKOùœóik8&>cìc. */ - $"D577 8B5D 7957 D24D 7D64 A2B5 1107 4625" /* Õw‹]yWÒM}d¢µ..F% */ - $"E1EB 2460 41A2 E878 5967 CEAE AE16 D8D5" /* áë$`A¢èxYgή®.ØÕ */ - $"F960 B484 0B49 7253 26F2 714E 6A13 03E4" /* ù`´„.IrS&òqNj..ä */ - $"A0C3 3924 31ED 8B79 3D63 5412 C097 F9C3" /*  Ã9$1í‹y=cT.À—ùà */ - $"79AD A97D EEE5 EF23 66FF 15BD C854 5DFB" /* y­©}îåï#fÿ.½ÈT]û */ - $"5921 E05C 6A39 B68E 6444 6D55 3B7D 6DDA" /* Y!à\j9¶ŽdDmU;}mÚ */ - $"9003 8F53 5C49 D978 31CD 41C5 DD62 7DE4" /* .S\IÙx1ÍAÅÝb}ä */ - $"2F24 5932 A14F 9C9C 97B6 2652 5988 7970" /* /$Y2¡Oœœ—¶&RYˆyp */ - $"F890 8A5C 9614 EBF4 DAC8 15D1 6F3C 07E4" /* øŠ\–.ëôÚÈ.Ño<.ä */ - $"7B8B F763 6803 394F 2291 8D88 EB1B 3136" /* {‹÷ch.9O"‘ˆë.16 */ - $"10C9 5077 060A 7DB0 A890 CB7B 947F AD8B" /* .ÉPw.Â}°¨Ë{”.­‹ */ - $"0AAF 67FF 5D78 615A E459 013B 6923 5E0E" /* ¯gÿ]xaZäY.;i#^. */ - $"900D BA9C DFF2 37D0 0508 B5F3 EA48 FADE" /* .ºœßò7Ð..µóêHúÞ */ - $"D348 3F2F 8E71 E6CD B6BE 8941 8773 0E17" /* ÓH?/ŽqæÍ¶¾‰A‡s.. */ - $"E97A B699 5A4F 21C1 0766 538B B29A B8CA" /* éz¶™ZO!Á.fS‹²š¸Ê */ - $"FBAE 21FA 76A0 B197 C613 E523 B127 1FE4" /* û®!úv ±—Æ.å#±'.ä */ - $"0AA8 798D 688E 8F27 E386 446F 0BD2 C6A5" /* ¨yhŽ'ã†Do.ÒÆ¥ */ - $"99B7 9313 67B5 4823 BD88 3611 E5A8 8054" /* ™·“.gµH#½ˆ6.娀T */ - $"3C15 C120 1B02 5B2A 2195 DD25 F90A 48A6" /* <.Á ..[*!•Ý%ùÂH¦ */ - $"BF92 56B9 4639 F2BD AC5F 3350 9699 14A7" /* ¿’V¹F9ò½¬_3P–™.§ */ - $"30A2 4B91 C33D 3175 F806 15AA 4B01 558F" /* 0¢K‘Ã=1uø..ªK.U */ - $"400B 8148 DAF5 29FD 0561 1CA8 7239 51F4" /* @.HÚõ)ý.a.¨r9Qô */ - $"A169 A92B EE2F 4F3D 2F96 029B 186B 7219" /* ¡i©+î/O=/–.›.kr. */ - $"C673 0E85 6FAC 9889 C64A 90AE DBAF E8E3" /* Æs.…o¬˜‰ÆJ®Û¯èã */ - $"6607 DF2A C332 C690 840A 817A ABFF 3302" /* f.ß*Ã2Æ„Âz«ÿ3. */ - $"1464 A65F E1B3 04B0 90C6 51E5 6A2E 7EA2" /* .d¦_á³.°ÆQåj.~¢ */ - $"9222 EABA 0632 2F13 B1A3 2337 85B4 E390" /* ’"êº.2/.±£#7…´ã */ - $"766A 98DB BDDD 9813 F7BD 8AEA 1AB2 BEEC" /* vj˜Û½Ý˜.÷½Šê.²¾ì */ - $"BEE3 F4B7 EE35 6BB8 ADE1 E772 AEB0 7E66" /* ¾ãô·î5k¸­áçr®°~f */ - $"3F99 05C1 3339 69B2 C1D5 4CC7 DB0B 3C67" /* ?™.Á39i²ÁÕLÇÛ.üv¡œ®.Èh._Æ */ - $"A1BE 16D4 3BF4 91C9 6CF1 DBE0 E0CA 0DAA" /* ¡¾.Ô;ô‘ÉlñÛààÊ.ª */ - $"EFCB 2A06 908B 7BAC CCF3 4CF8 179A 615E" /* ïË*.‹{¬ÌóLø.ša^ */ - $"590D AB18 CB49 E032 B8ED 2A8E 584A ACDC" /* Y.«.ËIà2¸í*ŽXJ¬Ü */ - $"4797 F732 B8C9 24A4 0E5C 85A0 FED8 E30A" /* G—÷2¸É$¤.\… þØã */ - $"ECBF 08FB CDC1 E09D 9556 837A E086 95AC" /* ì¿.ûÍÁà•Vƒzà†•¬ */ - $"BA2C E411 756E F132 9CE6 EDC4 6C90 B09E" /* º,ä.unñ2œæíÄl°ž */ - $"3C59 DE78 44D0 E445 BCA0 3AE0 05D9 7440" /* ÞÞGi */ - $"289C 5523 9792 EFAC 19A6 A945 B504 9446" /* (œU#—’ï¬.¦©Eµ.”F */ - $"A4DF BAA6 B5EB BAEF 7B92 3E08 6D17 870F" /* ¤ßº¦µëºï{’>.m.‡. */ - $"9E0A 487E 8A60 90B5 E555 CD4F D2F1 FE67" /* žÂH~Š`µåUÍOÒñþg */ - $"88DE BB6A E653 A2B6 F9C7 B226 2544 A167" /* ˆÞ»jæS¢¶ùDz&%D¡g */ - $"5DF7 5F35 F38B DB99 30F8 C210 AF41 C7A4" /* ]÷_5ó‹Û™0øÂ.¯AǤ */ - $"167B 30B4 8B8D 0821 4ADB EFC6 5728 A86D" /* .{0´‹.!JÛïÆW(¨m */ - $"99A8 2A1D 51E2 4CE5 AEA5 7ECC 23CB 628B" /* ™¨*.QâL宥~Ì#Ëb‹ */ - $"E438 F41A A280 CF2E 8E51 5004 A9BA 64AB" /* ä8ô.¢€Ï.ŽQP.©ºd« */ - $"B0AA 608C 8C19 38F7 567B 0C45 B7C5 0E2D" /* °ª`ŒŒ.8÷V{.E·Å.- */ - $"0F3D A192 B0F5 A567 4EE1 9FF5 F085 979A" /* .=¡’°õ¥gNáŸõð…—š */ - $"13DA 6FC3 89D0 0370 C986 5F44 AADD CAB9" /* .ÚoÉÐ.pɆ_DªÝʹ */ - $"FBD0 8CDE 18D9 8FED 715E 264F 0D69 2CEF" /* ûÐŒÞ.Ùíq^&O.i,ï */ - $"63F0 7A64 D65B 094A 6976 E6D4 E3DC 1583" /* cðzdÖ[ÆJivæÔãÜ.ƒ */ - $"FE8C BD22 992E 3FDB AF18 03A7 0A74 8333" /* þŒ½"™.?Û¯..§Âtƒ3 */ - $"76E3 5195 C7FA A180 5123 7E0C 544B 9C8C" /* vãQ•Çú¡€Q#~.TKœŒ */ - $"928D 3DF6 F330 4D6E 8049 11AF 064E 4E3B" /* ’=öó0Mn€I.¯.NN; */ - $"B937 EE03 A4D2 F530 4513 47F0 5E98 E060" /* ¹7î.¤Òõ0E.Gð^˜à` */ - $"72C6 46EC B761 FAB4 B0FA 9A80 FF78 5408" /* rÆFì·aú´°úš€ÿxT. */ - $"9152 452E 0111 2383 5E5F 6C4F FC53 0EDE" /* ‘RE...#ƒ^_lOüS.Þ */ - $"1092 66D3 5F38 1AC8 1412 561A 4017 9110" /* .’fÓ_8.È..V.@.‘. */ - $"CA19 3E6F 8803 0908 5F57 A2E2 4744 E3C4" /* Ê.>oˆ.Æ._W¢âGDãÄ */ - $"F1BF 49F6 836F E294 610B 4098 2761 1502" /* ñ¿Iöƒoâ”a.@˜'a.. */ - $"CCB2 0C11 81DD 05B4 ACD8 8F28 C5DD 1DD8" /* ̲..Ý.´¬Ø(ÅÝ.Ø */ - $"58E0 C1E1 70A8 42BF 456F FE20 1261 1F81" /* XàÁáp¨B¿Eoþ .a. */ - $"08AC FEB1 F89C 3576 EF94 A20C 255F 3B3F" /* .¬þ±øœ5v.%_;? */ - $"5E6B B0C0 4B3F EADC 8536 55E9 8144 C946" /* ^k°ÀK?êÜ…6UéDÉF */ - $"7613 8662 DCB1 C761 2BDA 412D C7D6 2D5C" /* v.†bܱÇa+ÚA-ÇÖ-\ */ - $"BCC0 F84E 54E4 9B0B BDF7 4F45 FCA6 D6AE" /* ¼ÀøNTä›.½÷OEü¦Ö® */ - $"1754 31D1 E6CB 94F4 D163 2B1D 017D 4171" /* .T1ÑæË”ôÑc+..}Aq */ - $"ABE0 0285 395D 3D23 42D7 E641 348A 0C2E" /* «à.…9]=#B׿A4Š.. */ - $"9C16 42C9 8E99 B654 8046 C365 EA71 CE64" /* œ.BÉŽ™¶T€FÃeêqÎd */ - $"B762 0E4D 7C48 617B CDB9 6264 2C81 4A9F" /* ·b.M|Ha{͹bd,JŸ */ - $"8600 50B2 B985 EB73 DB96 82EA FF7D 1E50" /* †.P²¹…ësÛ–‚êÿ}.P */ - $"6A49 AEA3 78E3 2DFD 0D59 3013 F257 AAA9" /* jI®£xã-ý.Y0.òWª© */ - $"0E5D 81DA E983 8D48 41BE DF0B FB34 AEA5" /* .]ÚéƒHA¾ß.û4®¥ */ - $"07B6 B0AA 1E53 1D9F B9C7 4CE5 8D46 6151" /* .¶°ª.S.Ÿ¹ÇLåFaQ */ - $"8000 0C24 1D66 1946 1073 4456 2361 E486" /* €..$.f.F.sDV#aä† */ - $"120F 29F0 6121 2D6A AF51 0C82 F68C B571" /* ..)ða!-j¯Q.‚öŒµq */ - $"77AD BE59 9145 D105 DE8C 9500 0000 0000" /* w­¾Y‘EÑ.ÞŒ•..... */ - $"0000 0032 BC9A BD52 00B4 6C6F 3753 1A96" /* ...2¼š½R.´lo7S.– */ - $"9B00 FCD3 F055 A11A AFB1 FB95 1610 88D0" /* ›.üÓðU¡.¯±û•..ˆÐ */ - $"8D32 9653 FC10 55FD B965 C1A9 B6BD 2245" /* 2–Sü.Uý¹eÁ©¶½"E */ - $"D48B 8230 2EF5 56F1 6618 9F91 FEC4 4106" /* Ô‹‚0.õVñf.Ÿ‘þÄA. */ - $"F23B 7C8A 0320 79EA D7A0 D75F 09BD B985" /* ò;|Š. yê× ×_ƽ¹… */ - $"C22B E2F0 0508 64BA AA2F 2414 19D7 311D" /* Â+âð..dºª/$..×1. */ - $"F709 E05C 809B 9E62 83F8 FF13 2DE3 01D6" /* ÷Æà\€›žbƒøÿ.-ã.Ö */ - $"8ADC F118 5A80 77C8 DABC 2FB5 CEF6 FCFB" /* ŠÜñ.Z€wÈÚ¼/µÎöüû */ - $"7A94 2773 6CEC FAE2 7865 753C E612 E4AF" /* z”'slìúâxeu<æ.ä¯ */ - $"657C 5C67 8FB3 1E56 A319 1ED1 FE48 0D8D" /* e|\g³.V£..ÑþH. */ - $"2431 B10B 8E15 0A4B FF7F 7EB8 D068 5015" /* $1±.Ž.ÂKÿ.~¸ÐhP. */ - $"151E C37C 0390 F6CC 64A8 0000 0000 0000" /* ..Ã|.öÌd¨...... */ - $"0000 0002 5991 79E8 2B17 082C ABCB DA90" /* ....Y‘yè+..,«ËÚ */ - $"CE92 8CB0 E992 0710 2B8F CAAB D217 C4E9" /* Î’Œ°é’..+Ê«Ò.Äé */ - $"E55E 11D2 6200 B530 5EF4 6932 1CBF EA6C" /* å^.Òb.µ0^ôi2.¿êl */ - $"E58D 2AA9 68C2 89FF 7903 A6ED D674 F1FC" /* å*©h‰ÿy.¦íÖtñü */ - $"A256 3564 F7E0 4DDF CDA1 2729 F7FF 6EB2" /* ¢V5d÷àMßÍ¡')÷ÿn² */ - $"9D35 70A9 5447 924B B8E1 71D3 4A8A DECB" /* 5p©TG’K¸áqÓJŠÞË */ - $"93E1 8FA0 140E C9B7 6124 8020 D660 3D22" /* “á ..É·a$€ Ö`=" */ - $"C708 222E 7289 B890 0002 00E1 2BC6 84B9" /* Ç.".r‰¸...á+Æ„¹ */ - $"25DF 442F 97FF 7FEF 68EC 7325 B92C A150" /* %ßD/—ÿ.ïhìs%¹,¡P */ - $"EE19 48C3 2540 0000 0000 0000 0000 0749" /* î.HÃ%@.........I */ - $"DD4A 9891 375B B0E0 C176 A698 672E F295" /* ÝJ˜‘7[°àÁv¦˜g.ò• */ - $"0311 7B3E 2B87 B4B8 7FB3 5DF7 9C67 CBEA" /* ..{>+‡´¸.³]÷œgËê */ - $"6A19 4107 C9F4 2B19 6829 179A 3FFF 7E8C" /* j.A.Éô+.h).š?ÿ~Œ */ - $"44A2 15E8 8E37 B422 F825 1862 58FF 7FFE" /* D¢.èŽ7´"ø%.bXÿ.þ */ - $"8EA1 D38C 727A 3071 1FF0 541F 6AB4 EA83" /* Ž¡ÓŒrz0q.ðT.j´êƒ */ - $"44A0 086A BAD7 6966 FC5D 0E72 A66C C301" /* D .jº×ifü].r¦lÃ. */ - $"3E1F B82C 9192 20D5 0322 858F 224C 87F5" /* >.¸,‘’ Õ."…"L‡õ */ - $"E940 85ED 7B36 EC96 D05C 21FF 7B10 59E1" /* é@…í{6ì–Ð\!ÿ{.Yá */ - $"E125 6C79 7852 2031 F3BA 34FB 6E57 BC3B" /* á%lyxR 1óº4ûnW¼; */ - $"69F0 C303 3A2A A573 D1E0 9836 C703 D02C" /* iðÃ.:*¥sÑà˜6Ç.Ð, */ - $"58CC 3DA7 FF0D 4301 F607 07C1 31FA 7F66" /* XÌ=§ÿ.C.ö..Á1ú.f */ - $"89BD A759 90CD 107A E5BD 6398 D7BE F7BB" /* ‰½§YÍ.zå½c˜×¾÷» */ - $"E273 D09A F8EE D21B 1015 A513 18F5 5C7D" /* âsКøîÒ...¥..õ\} */ - $"FD20 E7C9 C6BE 3105 7A4B 831D 251B 4C36" /* ý çÉÆ¾1.zKƒ.%.L6 */ - $"2A49 3EAC 1A86 9F87 09CC 0B00 2CF4 643C" /* *I>¬.†Ÿ‡ÆÌ..,ôd< */ - $"7012 8574 D28F 952D E959 1093 FE7E F021" /* p.…tÒ•-éY.“þ~ð! */ - $"028C 74ED 0E90 8DCD 5F06 B4BE EA1A 4C53" /* .Œtí.Í_.´¾ê.LS */ - $"A47F 3706 93CB 8FAB 7864 D123 4A39 B6BA" /* ¤.7.“Ë«xdÑ#J9¶º */ - $"CDCB 8AA9 2128 54FA CFB5 C4E1 F470 AD6E" /* ÍËŠ©!(TúϵÄáôp­n */ - $"6A05 07C9 72AA 562E F22F C922 BCF9 7DDF" /* j..ÉrªV.ò/É"¼ù}ß */ - $"3565 1AD4 F707 7DC0 1038 129E 4EA0 297E" /* 5e.Ô÷.}À.8.žN )~ */ - $"1037 3516 64BB FF75 539A 5C03 F7A3 C14D" /* .75.d»ÿuSš\.÷£ÁM */ - $"C617 50C8 14F1 7C95 0372 1443 C3F0 7ED4" /* Æ.PÈ.ñ|•.r.CÃð~Ô */ - $"EFDA FA88 BDD2 E947 7A43 A4A3 2339 CD58" /* ïÚúˆ½ÒéGzC¤£#9ÍX */ - $"526C 8407 8211 1949 6431 DB89 390B EB27" /* Rl„.‚..Id1Û‰9.ë' */ - $"9975 F04F D507 AC80 5D51 95B0 992A 1AC6" /* ™uðOÕ.¬€]Q•°™*.Æ */ - $"8699 86CC E64E 441C 2EFD 4F8C 70C1 DB2A" /* †™†ÌæND..ýOŒpÁÛ* */ - $"5395 8DF7 E279 AA65 BA32 2FD1 48C9 F400" /* S•÷âyªeº2/ÑHÉô. */ - $"D0EA 663D 92FF 053E 130C A1A9 491B E583" /* Ðêf=’ÿ.>..¡©I.åƒ */ - $"6133 2EE1 AFBE 86B8 D218 B698 906D A5B9" /* a3.᯾†¸Ò.¶˜m¥¹ */ - $"ACD3 9DC7 8720 C668 E134 1A1C 9C71 EA49" /* ¬ÓLJ Æhá4..œqêI */ - $"7AE9 9276 56E9 78BB 5679 18E2 6044 2763" /* zé’vVéx»Vy.â`D'c */ - $"2342 64F4 3952 2712 F704 B2E8 C1D2 35CC" /* #Bdô9R'.÷.²èÁÒ5Ì */ - $"F0AB 5ABD 61A0 1CD5 5316 0E78 22E6 B807" /* ð«Z½a .ÕS..x"æ¸. */ - $"8774 CA36 91EF 0BFF D969 6330 3900 00D1" /* ‡tÊ6‘ï.ÿÙic09..Ñ */ - $"2300 0000 0C6A 5020 200D 0A87 0A00 0000" /* #....jP .‡Â... */ - $"1466 7479 706A 7032 2000 0000 006A 7032" /* .ftypjp2 ....jp2 */ - $"2000 0000 4F6A 7032 6800 0000 1669 6864" /* ...Ojp2h....ihd */ - $"7200 0002 0000 0002 0000 0407 0701 0000" /* r............... */ - $"0000 0F63 6F6C 7201 0000 0000 0010 0000" /* ...colr......... */ - $"0022 6364 6566 0004 0000 0000 0001 0003" /* ."cdef.......... */ - $"0001 0000 0001 0000 0002 0002 0000 0003" /* ................ */ - $"0000 0000 6A70 3263 FF4F FF51 0032 0000" /* ....jp2cÿOÿQ.2.. */ - $"0000 0200 0000 0200 0000 0000 0000 0000" /* ................ */ - $"0000 0200 0000 0200 0000 0000 0000 0000" /* ................ */ - $"0004 0701 0107 0101 0701 0107 0101 FF52" /* ..............ÿR */ - $"000C 0000 0001 0105 0404 0001 FF5C 0013" /* ............ÿ\.. */ - $"2050 5858 6058 5860 5858 6058 5858 5050" /* PXX`XX`XX`XXXPP */ - $"58FF 6400 1100 014B 616B 6164 752D 7635" /* Xÿd....Kakadu-v5 */ - $"2E32 2E31 FF90 000A 0000 0000 D036 0001" /* .2.1ÿ.Â....Ð6.. */ - $"FF93 CFC2 DC03 54F9 36EC A8DC 2A8C 3701" /* ÿ“ÏÂÜ.Tù6ì¨Ü*Œ7. */ - $"118B 95C3 F2B2 5A7A 0428 C30A 2C64 B704" /* .‹•Ãò²Zz.(ÃÂ,d·. */ - $"5C3C 6DED 8696 4890 6404 5638 430C 59C5" /* \VFK)D.Ž */ - $"CB0C F4C7 E144 47E1 47C1 F6BD 8089 21DB" /* Ë.ôÇáDGáGÁö½€‰!Û */ - $"8279 4533 01BF B9CC C444 AD53 5F75 D706" /* ‚yE3.¿¹ÌÄD­S_u×. */ - $"3FDD CA27 5D6C 9F54 1CCF F838 38E4 B2E4" /* ?ÝÊ']lŸT.Ïø88ä²ä */ - $"F9FF 429F 59FE D27B 4A5E A69F 2C21 38F6" /* ùÿBŸYþÒ{J^¦Ÿ,!8ö */ - $"5A74 D405 2FEE 50B8 E5F1 C489 2693 5B33" /* ZtÔ./îP¸åñĉ&“[3 */ - $"D2C2 9DEC 68ED F55C 1FAC 1401 8D66 795A" /* ÒÂìhíõ\.¬..fyZ */ - $"F5F3 27A3 5874 6681 9AC6 F41D A4E6 40DA" /* õó'£XtfšÆô.¤æ@Ú */ - $"3EE5 CCEE 340C AF72 87FD 6B2A EB94 88EC" /* >åÌî4.¯r‡ýk*딈ì */ - $"A61D A536 7AC2 C6B8 85D9 CEBD 146C 83B5" /* ¦.¥6zÂÆ¸…Ùν.lƒµ */ - $"F5E0 A3C7 B524 BC64 B6B5 91A6 BF91 C547" /* õà£Çµ$¼d¶µ‘¦¿‘ÅG */ - $"BD87 811F D58E 8E51 BB89 FA6C 5257 33D9" /* ½‡.ÕŽŽQ»‰úlRW3Ù */ - $"A964 A4AB 3BB9 9608 BECC 0D9C D6B9 3D3A" /* ©d¤«;¹–.¾Ì.œÖ¹=: */ - $"CB64 28BE 3B07 6318 DF9D C134 9F16 567A" /* Ëd(¾;.c.ßÁ4Ÿ.Vz */ - $"8127 5FFD F396 BA0C B86F AA17 2301 022A" /* '_ýó–º.¸oª.#..* */ - $"3742 CE95 B1AF F858 C503 8156 35E0 8F2C" /* 7BΕ±¯øXÅ.V5à, */ - $"67D7 2D41 1F0B 5284 1535 AF16 6540 FB65" /* g×-A..R„.5¯.e@ûe */ - $"65BC 5F6B 136D 73A5 1C5D 3D92 FF5F 8494" /* e¼_k.ms¥.]=’ÿ_„” */ - $"FDBF E0C5 821F 072A 0EEB B855 6B42 CEE8" /* ý¿àÅ‚..*.ë¸UkBÎè */ - $"ABEE 381E 894E DF1E 29DD 4B78 3F0A F5EB" /* «î8.‰Nß.)ÝKx?Âõë */ - $"B9F8 61B8 8266 3BD8 A2AC 5BC1 38F4 5098" /* ¹øa¸‚f;Ø¢¬[Á8ôP˜ */ - $"3951 2437 1798 7BF9 EA00 12BF CF3E 9166" /* 9Q$7.˜{ùê..¿Ï>‘f */ - $"8253 6FF0 B942 70D7 C729 0866 33F7 3484" /* ‚Soð¹Bp×Ç).f3÷4„ */ - $"ADF8 C3D2 4EF6 1DF4 0E6F 8E64 B470 1D5E" /* ­øÃÒNö.ô.oŽd´p.^ */ - $"F311 9BD1 EDE1 BA5D 7601 2053 D70A FDCD" /* ó.›Ñíáº]v. S×ÂýÍ */ - $"82C0 1BDA A35C FAD2 67AD E569 7851 10A7" /* ‚À.Ú£\úÒg­åixQ.§ */ - $"EF9A 3533 EC03 E813 08B6 D984 1A1D 3DC0" /* ïš53ì.è..¶Ù„..=À */ - $"7C8E E03E 4A44 03E4 7894 FF1F 080E 2BFD" /* |Žà>JD.äx”ÿ...+ý */ - $"EEB4 E64A C757 389B 5780 3AF8 248C 580D" /* î´æJÇW8›W€:ø$ŒX. */ - $"461B D417 66BA CEB2 2042 3C84 DAF9 C127" /* F.Ô.fºÎ² B<„ÚùÁ' */ - $"63E9 168C A9E3 D418 61E8 C46C CF01 F59B" /* cé.Œ©ãÔ.aèÄlÏ.õ› */ - $"4518 8833 3E62 5B14 BFD1 41A8 45D6 D311" /* E.ˆ3>b[.¿ÑA¨EÖÓ. */ - $"8431 80DB 1FD5 5839 DE81 BCD9 EAFB EE26" /* „1€Û.ÕX9Þ¼Ùêûî& */ - $"33DD 9E73 0B6F F957 26EE E7BA E0DA FF22" /* 3Ýžs.oùW&îçºàÚÿ" */ - $"EA50 24BF A182 089D 749A 6AAF BFF2 224D" /* êP$¿¡‚.tšj¯¿ò"M */ - $"30D4 11D0 E07A A012 587A 0633 92B4 CBFC" /* 0Ô.Ðàz .Xz.3’´Ëü */ - $"8E1B E5AC 9025 A74D 2819 3F9D 8132 B795" /* Ž.å¬%§M(.?2·• */ - $"458E 4651 1589 158D D24C A5B0 CBFA 359E" /* EŽFQ.‰.ÒL¥°Ëú5ž */ - $"BDB0 E4FB BFE3 5854 3E88 A646 71B1 9CB2" /* ½°äû¿ãXT>ˆ¦Fq±œ² */ - $"BB4E BA8E E170 8CBF C1F5 3141 F537 C0FA" /* »NºŽápŒ¿Áõ1Aõ7Àú */ - $"9780 6448 BA3B 94D6 3E8B 7AF0 0B5A C7A2" /* —€dHº;”Ö>‹zð.ZÇ¢ */ - $"4D05 C6BB 7F47 7102 F66E E4E8 3681 1C97" /* M.Æ».Gq.önäè6.— */ - $"0996 4491 F713 2A24 3756 2715 4B55 762F" /* Æ–D‘÷.*$7V'.KUv/ */ - $"78CB 2608 0563 73F7 5626 9F35 0C54 6822" /* xË&..cs÷V&Ÿ5.Th" */ - $"F061 792A 4AFC 163A 9F83 8F82 638B 524D" /* ðay*Jü.:Ÿƒ‚c‹RM */ - $"C21C 3735 DB76 6F4B 01F2 3E7E 5755 5945" /* Â.75ÛvoK.ò>~WUYE */ - $"6149 AAEE 1A88 7748 DC47 79E4 0660 318C" /* aIªî.ˆwHÜGyä.`1Œ */ - $"AA94 E92D 9879 C9C1 AC17 C828 7BBB 997A" /* ª”é-˜yÉÁ¬.È({»™z */ - $"315E 858F F31D 3522 A6D2 B3BD E548 DBA2" /* 1^…ó.5"¦Ò³½åHÛ¢ */ - $"3274 749B 11C1 9570 D715 0350 4CC4 6820" /* 2tt›.Á•p×..PLÄh */ - $"560A 8542 A38D 913B 3863 FF5C 97F2 9BA5" /* VÂ…B£‘;8cÿ\—ò›¥ */ - $"893F 6C9B 15A2 EE40 BCD6 2676 80A9 AC89" /* ‰?l›.¢î@¼Ö&v€©¬‰ */ - $"9054 849D 859C 8DCD 181B 64F4 6D7B 71B4" /* T„…œÍ..dôm{q´ */ - $"FBD3 0C84 21D4 CC6C CF84 F40A A3CD C958" /* ûÓ.„!ÔÌlÏ„ô£ÍÉX */ - $"928E 97E5 346C 6497 2888 7903 5B0B 3277" /* ’Ž—å4ld—(ˆy.[.2w */ - $"B4D6 9AA4 86C3 C691 CA1A 3C92 FCFB 02DE" /* ´Öš¤†ÃÆ‘Ê.<’üû.Þ */ - $"A25E 5C5C C6A8 1CE2 F5B5 88AB 3673 F912" /* ¢^\\ƨ.âõµˆ«6sù. */ - $"96AF E6BC 67FF 40CC 068D C6E3 8435 48AF" /* –¯æ¼gÿ@Ì.Æã„5H¯ */ - $"B929 F509 0F59 3410 A9A6 1087 8352 11EC" /* ¹)õÆ.Y4.©¦.‡ƒR.ì */ - $"23CF CD2E 3F05 487E 0740 9BE7 236F 56FB" /* #ÏÍ.?.H~.@›ç#oVû */ - $"D0F4 677F 9514 C6E9 50BB A61A 6135 73FB" /* Ðôg.•.ÆéP»¦.a5sû */ - $"37AA FA5C 0967 671C 8485 5326 6EB5 4955" /* 7ªú\Ægg.„…S&nµIU */ - $"1AAE 5FCE C271 D992 9E8C B0DF 7795 E0F2" /* .®_ÎÂqÙ’žŒ°ßw•àò */ - $"A17A B50F E53A FE12 756F D1A1 5CE1 7C9B" /* ¡zµ.å:þ.uoÑ¡\á|› */ - $"D185 2C1A 9224 BC62 5C98 FA35 1649 6EA7" /* Ñ…,.’$¼b\˜ú5.In§ */ - $"4C7C C191 DF92 9D7A 6FE9 71D9 9A11 5A19" /* L|Á‘ß’zoéqÙš.Z. */ - $"214D F951 38FA C459 E39A 6DAE 1253 31DF" /* !MùQ8úÄYãšm®.S1ß */ - $"B335 3337 39D2 7591 BFC1 31E6 887A 8BAB" /* ³5379Òu‘¿Á1æˆz‹« */ - $"ECCD 7A58 8E4A AD65 A7E1 5FC6 8EB0 DA82" /* ìÍzXŽJ­e§á_ÆŽ°Ú‚ */ - $"0F81 6849 5CE5 AB32 B763 1227 3F4C 5691" /* .hI\å«2·c.'?LV‘ */ - $"43C7 DD24 E8D9 C4F3 7BB0 4666 7A24 1C5B" /* CÇÝ$èÙÄó{°Ffz$.[ */ - $"F57D 719F 2BDB 3794 66BA BBB6 9D8D A662" /* õ}qŸ+Û7”fº»¶¦b */ - $"CF99 4DDC E533 96D6 EEE0 3FC7 BFB8 B1B7" /* Ï™MÜå3–Öîà?Ç¿¸±· */ - $"9AE3 57C7 E1A8 B1F8 6C5C 3F0D 19C1 812D" /* šãWÇᨱøl\?..Á- */ - $"8D31 C88B C396 B5E7 3CE0 4E2C AE73 7876" /* 1ȋÖµç<àN,®sxv */ - $"0436 A295 BEC6 BDF1 C604 C41C 94E6 E7C1" /* .6¢•¾Æ½ñÆ.Ä.”æçÁ */ - $"AC78 356A B92A DB37 3360 3372 6638 0C5C" /* ¬x5j¹*Û73`3rf8.\ */ - $"F388 7CDE 4045 060F E713 C4C3 321E E08B" /* óˆ|Þ@E..ç.ÄÃ2.à‹ */ - $"0810 71EE A6AB C032 2B85 C34C 2671 8143" /* ..qÀ2+…ÃL&qC */ - $"AFDE 07D1 A40C D86A ADBE B961 EAA3 54BD" /* ¯Þ.Ѥ.Øj­¾¹aê£T½ */ - $"804D 6FA9 AA3F 7FBE BCD9 E785 A230 EA4E" /* €Mo©ª?.¾¼Ùç…¢0êN */ - $"1C08 1DF6 8373 7754 5039 7854 1192 1512" /* ...öƒswTP9xT.’.. */ - $"B956 E9A7 575E E3DB F5F9 4B02 F739 F2BB" /* ¹Vé§W^ãÛõùK.÷9ò» */ - $"91B2 73E1 3D19 EBB6 AD2F 291C 5BAC 5EEA" /* ‘²sá=.ë¶­/).[¬^ê */ - $"EEDF 8DA7 5FCA 8E8C 952D 8FD0 441C 5BA4" /* îß§_ÊŽŒ•-ÐD.[¤ */ - $"8AF6 21BE 1FAF DAE3 DADD EA91 EF73 58A0" /* Šö!¾.¯ÚãÚÝê‘ïsX  */ - $"29E6 89B2 E279 B02A D092 DD08 6187 9095" /* )扲ây°*Ð’Ý.a‡• */ - $"5C85 C903 0DD2 9ED3 538B D9BB E936 8ABB" /* \…É..ÒžÓS‹Ù»é6Š» */ - $"E203 DD03 2944 5317 7BC3 0297 2125 F198" /* â.Ý.)DS.{Ã.—!%ñ˜ */ - $"D117 8DDB E382 71F8 D0A7 14B1 6D7A A0EB" /* Ñ.Ûã‚qøÐ§.±mz ë */ - $"7C6F 7651 D2EC ECA7 F670 D09F 6CF6 30DB" /* |ovQÒìì§öpПlö0Û */ - $"0830 39B5 BC45 3915 4054 4490 A7BA 5CEC" /* .09µ¼E9.@TD§º\ì */ - $"D37B FBC2 7890 B18F DEEA 4966 D46D 5FD2" /* Ó{ûÂx±ÞêIfÔm_Ò */ - $"7811 AAD0 8EBF FB40 0F30 D8A4 2B71 5A03" /* x.ªÐŽ¿û@.0ؤ+qZ. */ - $"636A C360 C889 891D D420 A828 E337 41CC" /* cjÃ`ȉ‰.Ô ¨(ã7AÌ */ - $"3314 5473 B91F 7B78 2B3B AC7A 1127 F2DE" /* 3.Ts¹.{x+;¬z.'òÞ */ - $"E997 2101 6008 26AE 43D5 7CE7 8532 B9CE" /* é—!.`.&®CÕ|ç…2¹Î */ - $"A81A 710E 5D87 49D7 3EF6 65A3 D533 977E" /* ¨.q.]‡I×>öe£Õ3—~ */ - $"7BE9 0CA7 8B28 9ADA AF4F 45A5 99BD E21D" /* {é.§‹(šÚ¯OE¥™½â. */ - $"D4B1 BB33 2508 C8D1 31E5 E9FB F917 A8E1" /* Ô±»3%.ÈÑ1åéûù.¨á */ - $"2955 9008 F531 9010 575A 3AFB 59F4 CD63" /* )U.õ1.WZ:ûYôÍc */ - $"3EEE 2409 BCD4 E5F1 1418 6155 B6D7 A94B" /* >î$ƼÔåñ..aU¶×©K */ - $"1D48 79A8 2F32 0770 476B CE28 023A DC86" /* .Hy¨/2.pGkÎ(.:܆ */ - $"E008 813B E64A 39F5 58CE 3E75 DAA6 BD7A" /* à.;æJ9õXÎ>uÚ¦½z */ - $"1528 FF50 0738 C132 5569 3C99 C4BC A20F" /* .(ÿP.8Á2Ui<™Ä¼¢. */ - $"6DED 9310 6FE1 8BE4 BF4D D0B1 993E 0FD3" /* mí“.oá‹ä¿Mб™>.Ó */ - $"4938 1302 E4A8 FDA2 A7D2 4615 CD89 1E52" /* I8..ä¨ý¢§ÒF.͉.R */ - $"4160 51F8 BABB FEED 4281 0E0C 31CD 91D7" /* A`Qøº»þíB..1Í‘× */ - $"C7CF E302 E155 4188 0F06 097F 6906 2EC9" /* ÇÏã.áUAˆ..Æ.i..É */ - $"BE00 A1FB 0D99 8FB1 3B3D E3D3 70B8 4296" /* ¾.¡û.™±;=ãÓp¸B– */ - $"F199 E066 15B5 920C 38A2 695F F2E8 81E1" /* ñ™àf.µ’.8¢i_òèá */ - $"E0EC 34E5 97B3 9580 459F A2D9 E267 B847" /* àì4å—³•€EŸ¢Ùâg¸G */ - $"E302 3AA0 8631 8C61 5F8E 88DE 2FBB 394B" /* ã.: †1Œa_ŽˆÞ/»9K */ - $"B9EC 234B 6515 BDF3 BA80 AA30 3D50 2F90" /* ¹ì#Ke.½óº€ª0=P/ */ - $"C26A D743 2198 707A 2DC1 9C64 1647 1FA3" /* Âj×C!˜pz-Áœd.G.£ */ - $"43A2 B1C7 C95D 1E19 9650 E616 F24B C118" /* C¢±ÇÉ]..–Pæ.òKÁ. */ - $"FB68 CE23 485E BF50 ACF8 F669 B5A3 92AA" /* ûhÎ#H^¿P¬øöiµ£’ª */ - $"5625 BF48 8584 A6E7 DAC0 E203 2AF0 89A0" /* V%¿H…„¦çÚÀâ.*ð‰  */ - $"DB92 4924 9249 1BF5 D855 0470 51D0 AAE2" /* Û’I$’I.õØU.pQЪâ */ - $"A1E5 FBC9 CB80 1798 2EB3 EB1E 9FD4 46E7" /* ¡åûÉË€.˜.³ë.ŸÔFç */ - $"63DB F02E 204B D35F 54DE 0FD3 2F81 FB63" /* cÛð. KÓ_TÞ.Ó/ûc */ - $"9CEC 37F1 C9FF 5B63 B13D BFBD 1169 0415" /* œì7ñÉÿ[c±=¿½.i.. */ - $"0E97 DA89 25E3 92C7 01F5 50E6 2181 A536" /* .—Ú‰%ã’Ç.õPæ!¥6 */ - $"4020 C49B 1977 1BF5 5226 FD7D 668A D76F" /* @ Ä›.w.õR&ý}fŠ×o */ - $"2954 58F1 F44F 2935 F136 18BD C844 05FD" /* )TXñôO)5ñ6.½ÈD.ý */ - $"E325 9012 9E92 6EC3 E822 D06F A958 C54C" /* ã%.ž’nÃè"Ðo©XÅL */ - $"6A4D 0A98 093C 481D 1424 7964 E810 7A60" /* jMÂ˜Æ */ - $"C450 03B7 E8DE 17B3 9CE7 02E1 BE72 100B" /* ÄP.·èÞ.³œç.á¾r.. */ - $"2EF5 787D 0D12 FC3B 855A 3F97 1850 05EF" /* .õx}..ü;…Z?—.P.ï */ - $"A05D 7CC2 405B BA6D 9175 7C99 BE1C 2370" /*  ]|Â@[ºm‘u|™¾.#p */ - $"1F57 2085 13F8 B672 728D 1152 8232 1EE4" /* .W ….ø¶rr.R‚2.ä */ - $"A666 BFD0 06A8 6CFF 3D73 D895 5968 A54A" /* ¦f¿Ð.¨lÿ=sØ•Yh¥J */ - $"3219 63AB D4CD 8E7D 52F3 D260 CE4D E329" /* 2.c«ÔÍŽ}RóÒ`ÎMã) */ - $"F554 C837 34CC 2866 FA1E 1F34 B209 B8C3" /* õTÈ74Ì(fú..4²Æ¸Ã */ - $"097B 8DBC 8788 F621 2A57 5468 5FD8 852B" /* Æ{¼‡ˆö!*WTh_Ø…+ */ - $"08A9 45F3 71A8 A26B F63C 2DB1 750F A833" /* .©Eóq¨¢kö<-±u.¨3 */ - $"4767 6D8A B551 FF10 9E54 AD5D EE2E 2207" /* GgmеQÿ.žT­]î.". */ - $"44EA 0D21 75D4 779D E96D 49FF 47CE D775" /* Dê.!uÔwémIÿGÎ×u */ - $"D7B0 2380 5F1C 4185 EF0B BECB 1A55 9696" /* ×°#€_.A…ï.¾Ë.U–– */ - $"81B8 94F2 4F5B 07D8 D5EC 9E2A 049D 5E87" /* ¸”òO[.ØÕìž*.^‡ */ - $"2601 FB44 4AD5 C57B A7B0 8088 B723 134E" /* &.ûDJÕÅ{§°€ˆ·#.N */ - $"0B8A 375E B972 F34F F25A 2B68 3F15 4496" /* .Š7^¹róOòZ+h?.D– */ - $"5734 FE10 D742 67F9 9FFF 639C FAFD 23DB" /* W4þ.×BgùŸÿcœúý#Û */ - $"B90C F402 17F0 81C6 2656 EFD0 E011 C866" /* ¹.ô..ðÆ&VïÐà.Èf */ - $"15C8 4927 3415 BEC1 7876 E693 74CB DBEA" /* .ÈI'4.¾Áxvæ“tËÛê */ - $"7206 2246 23EC DCCA 51CD 72C1 8C41 1B85" /* r."F#ìÜÊQÍrÁŒA.… */ - $"AE9B 6FA5 4286 03FB 7000 D94F 5A8B 8A85" /* ®›o¥B†.ûp.ÙOZ‹Š… */ - $"2F34 7575 E7AB 08FF 3CBD 328D D95D BDF5" /* /4uuç«.ÿ<½2Ù]½õ */ - $"8070 0FAD B573 A91E 5F83 D32D 3337 A5B7" /* €p.­µs©._ƒÓ-37¥· */ - $"C6A7 3048 8D7C 3F01 F6BF 1BAB D684 0585" /* Ƨ0H|?.ö¿.«Ö„.… */ - $"798A A28D 68A6 4993 22BC F35C E3A7 BABE" /* yŠ¢h¦I“"¼ó\㧺¾ */ - $"0D5B 7E43 2B91 5DA6 6821 0495 4B22 33C0" /* .[~C+‘]¦h!.•K"3À */ - $"1217 1302 A7EB 1093 C8BD 3622 F0FD 14C3" /* ....§ë.“Ƚ6"ðý.à */ - $"EDBA 60FA B4C2 07D5 6D80 C177 9C23 24FE" /* íº`ú´Â.Õm€Áwœ#$þ */ - $"C9E7 77A7 1945 4C1A 8945 129A 2581 498D" /* Éçw§.EL.‰E.š%I */ - $"F2BD 5AD6 EF89 4D80 3EC2 DA29 E093 A726" /* ò½ZÖï‰M€>ÂÚ)à“§& */ - $"88F1 0796 E9F0 8F36 D342 7AD3 DEC2 2CCA" /* ˆñ.–éð6ÓBzÓÞÂ,Ê */ - $"45B9 35A0 DE31 D18B 2954 C38C 4B3A EEA2" /* E¹5 Þ1Ñ‹)TÃŒK:î¢ */ - $"5CD5 333D 6C59 23C7 17B3 C98C 65EE 8117" /* \Õ3=lY#Ç.³ÉŒeî. */ - $"22A2 574D D223 581B D09B 6473 3F85 6E2A" /* "¢WMÒ#X.Лds?…n* */ - $"81B5 F600 CAB6 1A02 3B24 D726 4344 536F" /* µö.ʶ..;$×&CDSo */ - $"99AB 09C8 96EA B41B 01C9 7AC8 9478 B8AB" /* ™«ÆÈ–ê´..ÉzÈ”x¸« */ - $"69E3 1BF1 1100 AFF3 C59C 01FB 8EF9 047D" /* iã.ñ..¯óÅœ.ûŽù.} */ - $"21EF 11DE D2CA BEE2 8372 5DDB C39C DE6E" /* !ï.ÞÒʾâƒr]ÛÜÞn */ - $"B652 35FE FDFB F1E8 2E91 778A 86C3 3117" /* ¶R5þýûñè.‘wІÃ1. */ - $"87D8 A7D5 7862 68B7 30C1 3B32 D209 0256" /* ‡Ø§Õxbh·0Á;2ÒÆ.V */ - $"2BF7 DFEF 17C3 FC30 EF1D 9327 7041 FC3C" /* +÷ßï.Ãü0ï.“'pAü< */ - $"674F 3069 DAB2 0EA5 BB48 DC2C DC66 F660" /* gO0iÚ².¥»HÜ,Üfö` */ - $"9C9B C7C8 3734 C68B 7D5A 60A1 DF3D D3A8" /* œ›ÇÈ74Æ‹}Z`¡ß=Ó¨ */ - $"E60C D15A 11C7 FB3B F75A 358E A7F7 16CB" /* æ.ÑZ.Çû;÷Z5ާ÷.Ë */ - $"67B5 097E E2A2 DE6C E40A FD52 8F75 43EF" /* gµÆ~â¢ÞläÂýRuCï */ - $"F5DF 5A51 BBF5 A074 791F F54F 9724 23C3" /* õßZQ»õ ty.õO—$#à */ - $"F5E6 C4A3 E22C 1E06 3B71 A9A2 1C17 0109" /* õæÄ£â,..;q©¢...Æ */ - $"1B59 2742 AB03 0497 3E5A AD73 7FD3 DA51" /* .Y'B«..—>Z­s.ÓÚQ */ - $"9F17 A10E B9CF 7503 3395 8788 9D9D 4A58" /* Ÿ.¡.¹Ïu.3•‡ˆJX */ - $"F9B8 4A61 3DDA 7489 8086 9EAC 4D7D 62DD" /* ù¸Ja=Út‰€†ž¬M}bÝ */ - $"BF8B 9462 1CC0 6912 69BE 3BFE FED7 3174" /* ¿‹”b.Ài.i¾;þþ×1t */ - $"CAA6 A806 FF59 B963 ABEE 508B F428 D15C" /* ʦ¨.ÿY¹c«îP‹ô(Ñ\ */ - $"82FC BA30 6907 C572 F2BD C0DB E9A2 44AF" /* ‚üº0i.Årò½ÀÛé¢D¯ */ - $"EED6 81F7 C602 F802 0374 CD1D 0F41 5E2E" /* îÖ÷Æ.ø..tÍ..A^. */ - $"F54F E7AB C492 54F8 C570 48A6 1603 35D3" /* õOç«Ä’TøÅpH¦..5Ó */ - $"EA1A 6A6D FD79 27E3 F928 4E16 3A2D 43FE" /* ê.jmýy'ãù(N.:-Cþ */ - $"6C3D AFC6 FA1C 578C 7BA9 7343 5B2C 7BB9" /* l=¯Æú.WŒ{©sC[,{¹ */ - $"0614 915A 24C4 CAC1 A2D3 0EAF EAE8 7257" /* ..‘Z$ÄÊÁ¢Ó.¯êèrW */ - $"EA2D 1ED2 3FFE 26A7 3E28 28D0 1AE1 D790" /* ê-.Ò?þ&§>((Ð.á× */ - $"A25D 1C6C BA20 E196 1EEC 9720 92EE 6E62" /* ¢].lº á–.ì— ’înb */ - $"E218 5609 944E 9A2E 9228 117A 6065 93FF" /* â.VÆ”Nš.’(.z`e“ÿ */ - $"2B32 B2C1 7876 E657 E39E 8641 F202 62B4" /* +2²ÁxvæW㞆Aò.b´ */ - $"20C5 99D9 F9E5 7D83 D807 EDB7 9A34 475B" /* Å™Ùùå}ƒØ.í·š4G[ */ - $"4F45 9AE8 ACD6 3098 A0C2 8D14 CBDB 9A2B" /* OEšè¬Ö0˜ Â.ËÛš+ */ - $"0EF7 CB30 8B49 169F 1ECD 6F33 F063 65DA" /* .÷Ë0‹I.Ÿ.Ío3ðceÚ */ - $"2A2F F0B0 EE29 91F7 CA11 748C 5E4E A447" /* *.ð°î)‘÷Ê.tŒ^N¤G */ - $"0F7F 4B32 DB7A 366C 27C4 F178 33B7 5E9B" /* ..K2Ûz6l'Äñx3·^› */ - $"BAAF 29CD A3EF 39BB 5FAD AD2B 5DCA 09E8" /* º¯)Í£ï9»_­­+]ÊÆè */ - $"DB9A DD07 84DD 870E 2A4C 850B BD04 7F9A" /* ÛšÝ.„݇.*L….½..š */ - $"1354 1DAA 0819 F583 1F47 5905 6597 5F07" /* .T.ª..õƒ.GY.e—_. */ - $"7ED6 DFFA BA65 FA6C D01D F65F F833 D479" /* ~ÖßúºeúlÐ.ö_ø3Ôy */ - $"BFD3 F3D8 57BB 3718 EBC8 5A2D 732E 464E" /* ¿ÓóØW»7.ëÈZ-s.FN */ - $"6B46 9512 778B 8066 D5DA D21A 819D 5384" /* kF•.w‹€fÕÚÒ.S„ */ - $"A84C AE56 92E2 2E9A 4D27 8A21 E02D 67FC" /* ¨L®V’â.šM'Š!à-gü */ - $"EAA4 B3D5 9306 1D06 CC9A 84C8 D6C4 C7E1" /* ꤳՓ...Ìš„ÈÖÄÇá */ - $"4F47 E168 43F0 6EB1 9276 ED11 2C29 F1CB" /* OGáhCðn±’ví.,)ñË */ - $"90AB 1975 3405 422B 78EC 7776 FA5C 0A2C" /* «.u4.B+xìwvú\Â, */ - $"F4B1 4F40 32CE D338 8911 EAB4 4CFC 7765" /* ô±O@2ÎÓ8‰.ê´Lüwe */ - $"D9ED C10E 114B 0909 1122 6832 A41E 3365" /* ÙíÁ..KÆÆ."h2¤.3e */ - $"96EF FC81 A398 2FE8 0464 5D18 0C9F C1AF" /* –ïü£˜/è.d]..ŸÁ¯ */ - $"8E6F 42CA BDC9 1DC4 770E 1C2E 01BD 62DB" /* ŽoBʽÉ.Äw....½bÛ */ - $"7798 4167 FC4F B27D D7E6 32CE 7F95 954F" /* w˜AgüO²}׿2Î.••O */ - $"653C 833E B4F1 C6C2 307E 0796 686E 6F5C" /* e<ƒ>´ñÆÂ0~.–hno\ */ - $"6EE2 6260 4C0B 5329 36D8 839E 5F08 319C" /* nâb`L.S)6؃ž_.1œ */ - $"4CAE 85DE 6B64 F427 1358 C9FF 57B9 AF78" /* L®…Þkdô'.XÉÿW¹¯x */ - $"332B 82A6 0EBF 0F83 7A3C 8004 1402 6A12" /* 3+‚¦.¿.ƒz<€...j. */ - $"FEE8 1612 2D8A 47FE 5BDE 2714 B393 E32F" /* þè..-ŠGþ[Þ'.³“ã/ */ - $"013E BD7E 14FA 285D BF61 7CDA 3A92 734A" /* .>½~.ú(]¿a|Ú:’sJ */ - $"520E 978D 8736 6AA9 847B 05C9 F28B 3D9A" /* R.—‡6j©„{.Éò‹=š */ - $"9B2E 721C 9082 3EC1 362C D516 D306 1EB9" /* ›.r.‚>Á6,Õ.Ó..¹ */ - $"A95C EC63 3111 4ED2 054A EFF8 F26A 0E36" /* ©\ìc1.NÒ.Jïøòj.6 */ - $"7445 26A0 464F CEDC 924D B183 FAEF 28F7" /* tE& FOÎÜ’M±ƒúï(÷ */ - $"AF76 2DBA F15C 4F45 4BFD E003 CDC1 A878" /* ¯v-ºñ\OEKýà.ÍÁ¨x */ - $"6FB4 207C 2A45 1ED9 CE49 2495 F6A9 77E8" /* o´ |*E.ÙÎI$•ö©wè */ - $"E7FF 7FFF 7FFF 7FFF 70EC F373 E872 28BA" /* çÿ.ÿ.ÿ.ÿpìósèr(º */ - $"A0BB 38E4 AC79 94DA 6562 832A 9A7B EEA8" /*  »8ä¬y”Úebƒ*š{î¨ */ - $"6B09 FEA7 9249 2005 E7D1 D721 4761 B6DB" /* kÆþ§’I .çÑ×!Ga¶Û */ - $"6DB6 DB6D 98C5 C208 FD98 41AA F430 3EAE" /* m¶Ûm˜ÅÂ.ý˜Aªô0>® */ - $"7118 7229 50B1 07D8 C5CA 010D 4AB4 DE82" /* q.r)P±.ØÅÊ..J´Þ‚ */ - $"53D3 E184 6561 DE5F 7236 BBF5 550D 4A83" /* SÓá„eaÞ_r6»õU.Jƒ */ - $"555B 5C0F 9C0E F052 0080 F4AC 3912 DD30" /* U[\.œ.ðR.€ô¬9.Ý0 */ - $"47C9 B77E C632 15D7 8EB6 CD51 0454 A805" /* GÉ·~Æ2.׎¶ÍQ.T¨. */ - $"2DAD F687 6CB7 B37F 2289 759F F7D5 8839" /* -­ö‡l·³."‰uŸ÷Õˆ9 */ - $"B3E6 BCA5 AA89 9D9D 599A 5BDD 54B9 7F7D" /* ³æ¼¥ª‰Yš[ÝT¹.} */ - $"2770 11ED 2217 C539 0204 16FF 728A C52A" /* 'p.í".Å9...ÿrŠÅ* */ - $"2D24 5FC7 E1D7 C47E 1DE8 C3F0 EA38 E730" /* -$_Çá×Ä~.èÃðê8ç0 */ - $"2D9D 0AC5 991A F5DD 38EC 007B A963 8B4D" /* -ÂÅ™.õÝ8ì.{©c‹M */ - $"51BA A9FC AE25 908A 1B70 9145 EBA2 38C4" /* Qº©ü®%Š.p‘Eë¢8Ä */ - $"168F 70BB 10A5 CAA5 A249 1974 03F3 AB57" /* .p».¥Ê¥¢I.t.ó«W */ - $"3611 30C5 1F14 529F 040A A8EC EBDF F2FF" /* 6.0Å..RŸ.¨ìëßòÿ */ - $"232B 83FE C2D0 59D9 93C2 2A8A F86A 997F" /* #+ƒþÂÐYÙ“Â*Šøj™. */ - $"3207 03A7 C406 E96C C96F 23F1 1490 95DF" /* 2..§Ä.élÉo#ñ.•ß */ - $"4024 67DC 3DE6 E1B1 EB60 1026 8786 531C" /* @$gÜ=æá±ë`.&‡†S. */ - $"9A51 378D EE86 881F 496C 8854 9459 7799" /* šQ7.IlˆT”Yw™ */ - $"11EC 4196 0C22 0F05 3762 D8F4 C348 7299" /* .ìA–."..7bØôÃHr™ */ - $"793E 0718 14D3 D09C C192 80E1 9F7C 5CFA" /* y>...ÓМÁ’€áŸ|\ú */ - $"429C 7960 2F8B 9063 C7E1 1447 7F52 D850" /* Bœy`/‹cÇá.G.RØP */ - $"B80A F1D8 BE98 DC3C 9C44 3AB7 3DA7 E08C" /* ¸Âñؾ˜Ü<œD:·=§àŒ */ - $"E7B6 07CE 2B69 C0E9 0C21 6133 1EC5 DAB5" /* ç¶.Î+iÀé.!a3.ÅÚµ */ - $"B079 413B FBA4 0259 78B8 DA3A E6D1 4AAC" /* °yA;û¤.Yx¸Ú:æÑJ¬ */ - $"2459 93C8 AD9A D69C AC40 5CF7 7385 1B18" /* $Y“È­šÖœ¬@\÷s….. */ - $"D67D 82BD 5E44 3DF8 5D2F E6D3 CE47 0191" /* Ö}‚½^D=ø]/æÓÎG.‘ */ - $"6E57 0F2F E8E8 9FF0 14BC 21F1 7720 6F34" /* nW./èèŸð.¼!ñw o4 */ - $"1EEE 5EF6 F8FD 5481 44E3 AB6B B06E 2556" /* .î^öøýTDã«k°n%V */ - $"6F07 AD65 FC95 7C32 7487 10A0 3C20 9CA7" /* o.­eü•|2t‡. < œ§ */ - $"B0EB F703 2D09 F0A6 D3FD 55F6 354B EDB0" /* °ë÷.-Æð¦ÓýUö5Kí° */ - $"179B B267 B9EB 8DA1 ED8E 7D0F 1AFF 4D50" /* .›²g¹ë¡íŽ}..ÿMP */ - $"C1C7 A686 586C 6A26 3B0B 4292 60A0 A804" /* ÁǦ†Xlj&;.B’` ¨. */ - $"04F6 5FDB 0F76 E2BC D680 20B5 46AE 399D" /* .ö_Û.vâ¼Ö€ µF®9 */ - $"CC54 82A4 1DCA 08E7 E2B4 6710 ABD8 FC18" /* ÌT‚¤.Ê.çâ´g.«Øü. */ - $"949B 7076 11CD 598E 2A8B 99FC CC28 EC17" /* ”›pv.ÍYŽ*‹™üÌ(ì. */ - $"451C DE31 F7F4 C47E 3ABB AF03 FDC6 D875" /* E.Þ1÷ôÄ~:»¯.ýÆØu */ - $"BD0C AB3E B78F F942 A53E E5F8 CA09 414D" /* ½.«>·ùB¥>åøÊÆAM */ - $"7544 D5B4 8367 3256 6D8C CB66 6DE7 E99C" /* uDÕ´ƒg2VmŒËfmçéœ */ - $"88E9 FCDC EB55 F67B 20E7 F44D 7616 6B29" /* ˆéüÜëUö{ çôMv.k) */ - $"124A C9AB 95C7 E9A8 209D EDA5 499F 2D2F" /* .JÉ«•Çé¨ í¥IŸ-/ */ - $"20E5 DE8C 2EEE 92AF 4BD6 484B 7E18 2D81" /* åÞŒ.î’¯KÖHK~.- */ - $"0502 F439 C742 BA21 693B 43C5 60DF 8BA0" /* ..ô9ÇBº!i;CÅ`ß‹  */ - $"9EAC 0A98 DFE4 DB4B 0BE1 E526 9B74 5982" /* ž¬Â˜ßäÛK.áå&›tY‚ */ - $"1817 EA6B 067A D3E4 8786 883D 26DB D361" /* ..êk.zÓ䇆ˆ=&ÛÓa */ - $"C40F 89F4 B31F 2AF3 1369 FDA9 889A 5620" /* Ä.‰ô³.*ó.iý©ˆšV */ - $"9AE7 4384 7184 9D7F 6C37 F79B 9422 ADF3" /* šçC„q„.l7÷›”"­ó */ - $"2BEA A620 14CF 0267 110E AB20 594B F1DA" /* +ê¦ .Ï.g..« YKñÚ */ - $"9D7F DB53 3723 1A4E 0DEC DF68 3A10 078F" /* .ÛS7#.N.ìßh:.. */ - $"8CA5 471B 4400 0975 92AA A351 8C66 5DDA" /* Œ¥G.D.Æu’ª£QŒf]Ú */ - $"0E4E C7B1 286F 2F7C E0EB 24CC 0A8B CAF8" /* .NDZ(o/|àë$ÌÂ‹Êø */ - $"4F0F 75E5 CACF 26F5 0FFE 86A8 1E77 5F03" /* O.uåÊÏ&õ.þ†¨.w_. */ - $"A8B5 A544 F04B A521 B3FA 854A 64FA 70CD" /* ¨µ¥DðK¥!³ú…JdúpÍ */ - $"526F 97AE 807A 05FC 3F67 2471 61E5 2715" /* Ro—®€z.ü?g$qaå'. */ - $"5774 E452 7E4A CDDA 6E48 0DA2 04B3 3A29" /* WtäR~JÍÚnH.¢.³:) */ - $"DE10 8F75 3A3A 559D A881 B948 74F3 AB92" /* Þ.u::U¨¹Htó«’ */ - $"B154 0F88 A11B A00B 25ED 9A59 B894 618E" /* ±T.ˆ¡. .%íšY¸”aŽ */ - $"AD45 3D59 9C08 49EA 076C CD63 8F49 B714" /* ­E=Yœ.Iê.lÍcI·. */ - $"32B3 8743 2506 F55A C011 CBEF C94A 8606" /* 2³‡C%.õZÀ.ËïÉJ†. */ - $"EDE4 BE7D 2DC9 8830 6C23 91E0 0209 440C" /* íä¾}-Ɉ0l#‘à.ÆD. */ - $"9409 1457 6CA0 2201 8FF4 7573 54F8 CCEC" /* ”Æ.Wl ".ôusTøÌì */ - $"D201 4A3A 66A6 B191 4E14 4CB1 08B4 2100" /* Ò.J:f¦±‘N.L±.´!. */ - $"BCF2 3A0D 696F 4582 F8B0 3A60 2D09 E9A7" /* ¼ò:.ioE‚ø°:`-Æé§ */ - $"8E83 CF44 A16A 6516 31C1 B51E 2DFE BDAC" /* ŽƒÏD¡je.1Áµ.-þ½¬ */ - $"356B F402 856C BEA0 109C A125 A759 E580" /* 5kô.…l¾ .œ¡%§Yå€ */ - $"3501 F500 F252 9533 F180 6E7D 30A8 FD62" /* 5.õ.òR•3ñ€n}0¨ýb */ - $"7FD6 B4EB 9120 8504 493A DD87 D79A 0CB1" /* .Ö´ë‘ ….I:݇ך.± */ - $"B674 7010 830D 8A38 5B44 B11D 3632 3FA5" /* ¶tp.ƒ.Š8[D±.62?¥ */ - $"CE31 CE9A 1670 AF20 16F6 BDA6 4980 002E" /* Î1Κ.p¯ .ö½¦I€.. */ - $"3E9E 8AB0 8B1F 63C5 28C3 7914 2833 137F" /* >žŠ°‹.cÅ(Ãy.(3.. */ - $"0915 DD39 7D38 49A3 6054 B5DC 2509 EE11" /* Æ.Ý9}8I£`TµÜ%Æî. */ - $"D68A 5C2A C75B 5B9F 7A9A FF3A D06F 3331" /* ÖŠ\*Ç[[Ÿzšÿ:Ðo31 */ - $"29E6 A9F4 8AD5 E0D9 7FB9 84B1 F403 8910" /* )æ©ôŠÕàÙ.¹„±ô.‰. */ - $"1168 1270 19E2 E385 0353 0FFF 697F 96BE" /* .h.p.âã….S.ÿi.–¾ */ - $"EF55 21CA 25A1 CE5E 0CD7 03A9 094F 51FE" /* ïU!Ê%¡Î^.×.©ÆOQþ */ - $"5314 E59F 90EB 907A E37A DD9D 182A E41C" /* S.åŸëzãzÝ.*ä. */ - $"CFFB 7262 0D9E B904 8D95 2DE3 E02B F5CB" /* Ïûrb.ž¹.•-ãà+õË */ - $"BF61 6012 924E 50D3 2D8D 6C25 FC60 8D19" /* ¿a`.’NPÓ-l%ü`. */ - $"9855 8BF2 5400 0000 04E3 7684 B40E 9EE7" /* ˜U‹òT....ãv„´.žç */ - $"21F8 CB76 250B 7CE0 2605 7C84 7E9F F226" /* !øËv%.|à&.|„~Ÿò& */ - $"6B94 0DB5 02AA 61E7 A9FF 5D9F A9F2 B546" /* k”.µ.ªaç©ÿ]Ÿ©òµF */ - $"2417 2E4D B238 ADDF 9233 5911 1D61 D35A" /* $..M²8­ß’3Y..aÓZ */ - $"8788 DF34 284A 9664 B91E 7A11 4568 B395" /* ‡ˆß4(J–d¹.z.Eh³• */ - $"7C74 C891 2A46 C056 EE92 0459 D81C A41F" /* |tÈ‘*FÀVî’.YØ.¤. */ - $"CA5E 4752 3ADE 89AB 995B 2BF2 D070 41B1" /* Ê^GR:Þ‰«™[+òÐpA± */ - $"EBFE 65BF FF61 55F5 5460 A4E0 33CF 7F1E" /* ëþe¿ÿaUõT`¤à3Ï.. */ - $"691A 0DA4 9372 4DCD 4A7C FF30 7DA5 4AD0" /* i..¤“rMÍJ|ÿ0}¥JÐ */ - $"1236 3C90 00C2 4517 FF78 771E DA05 952D" /* .6<.ÂE.ÿxw.Ú.•- */ - $"1085 D433 FD50 1E6F D583 2585 CBD6 5CFC" /* .…Ô3ýP.oÕƒ%…ËÖ\ü */ - $"9EF2 539B BE7A CCA1 ABF6 5AED 484B FF78" /* žòS›¾zÌ¡«öZíHKÿx */ - $"D6BD 435E E56E 5510 3047 49DE C511 72CF" /* Ö½C^ånU.0GIÞÅ.rÏ */ - $"72A0 B2CE 5E4D E2DA 0AFA FEDE BDFD 3167" /* r ²Î^MâÚÂúþÞ½ý1g */ - $"02FE 3FBE A1B9 7A5F 205B 7D60 1BA3 C975" /* .þ?¾¡¹z_ [}`.£Éu */ - $"5949 A641 5A3E 5AF2 F237 53BE FCAC 71F1" /* YI¦AZ>Zòò7S¾ü¬qñ */ - $"E3E3 6AEB 35B9 41BD C4B6 3400 DBA0 4B7F" /* ããjë5¹A½Ä¶4.Û K. */ - $"FF79 17FD 23F9 918D E532 F6BD F949 B633" /* ÿy.ý#ù‘å2ö½ùI¶3 */ - $"6A36 7600 17D8 C912 DB72 6F48 869C 0D66" /* j6v..ØÉ.ÛroH†œ.f */ - $"1410 074A 8F5B 629C 5B8B F293 6DB6 DB6D" /* ...J[bœ[‹ò“m¶Ûm */ - $"B6DB 6740 B8F8 BF85 2938 ECDA 6390 6537" /* ¶Ûg@¸ø¿…)8ìÚce7 */ - $"5986 A2A6 B52C A20D F057 C41F 660A C203" /* Y†¢¦µ,¢.ðWÄ.fÂÂ. */ - $"E5C1 68B0 9D56 DAD8 F20C 665C 5D04 4BA2" /* åÁh°VÚØò.f\].K¢ */ - $"46FF 7DB5 4880 6121 2EA3 5D2A 82F4 B18A" /* Fÿ}µH€a!.£]*‚ô±Š */ - $"50FC 2D12 DEFE 1F4D 01BF 3315 10D3 5D94" /* Pü-.Þþ.M.¿3..Ó]” */ - $"11B1 0221 28B8 56D9 4CED 012D D9C9 4005" /* .±.!(¸VÙLí.-ÙÉ@. */ - $"316F E887 29A8 3E83 9E25 FF1F A4C1 5D25" /* 1oè‡)¨>ƒž%ÿ.¤Á]% */ - $"8893 36E0 73BE DE25 456A 4678 B7C5 AD7A" /* ˆ“6às¾Þ%EjFx·Å­z */ - $"90C9 3950 942F 1459 C737 31EF 991F 241B" /* É9P”/.YÇ71ï™.$. */ - $"C294 7CFB 9461 B43A 8D37 8A6D BBC8 D7F6" /* ”|û”a´:7Šm»È×ö */ - $"A128 281D DF2B EAC5 A154 E6D9 FF53 984D" /* ¡((.ß+êÅ¡TæÙÿS˜M */ - $"550E 9C70 3F64 0E0E 0940 0AFC 5CC9 CF43" /* U.œp?d..Æ@Âü\ÉÏC */ - $"7184 3D0F 9FDE 08DF EC31 B86E 0D38 AF71" /* q„=.ŸÞ.ßì1¸n.8¯q */ - $"29F1 A21D 7847 7150 6DCA 9211 C778 F1A4" /* )ñ¢.xGqPmÊ’.Çxñ¤ */ - $"26AA B90D 1A39 DB92 4924 9249 2493 36D2" /* &ª¹..9Û’I$’I$“6Ò */ - $"4924 9249 2492 49FE 069C E7B9 CB0D 4E87" /* I$’I$’Iþ.œç¹Ë.N‡ */ - $"7D9E 9D29 FC64 8A6F 6185 2BD9 806F 760B" /* }ž)üdŠoa…+Ù€ov. */ - $"464D 4732 BD90 0E7D CABF 2B6F 2A78 8608" /* FMG2½.}Ê¿+o*x†. */ - $"DEF5 406F D401 3FD4 AE82 058D D6C8 B980" /* Þõ@oÔ.?Ô®‚.Öȹ€ */ - $"FECA D9B9 E7B6 3982 9FD3 81EA 544B 30BD" /* þÊÙ¹ç¶9‚ŸÓêTK0½ */ - $"7E56 FD78 66FD 5A41 D0BD 7714 5FAF 2A1E" /* ~VýxfýZAнw._¯*. */ - $"8FDA B705 EAAE F6F2 D69C 9812 7194 A56E" /* Ú·.ê®öòÖœ˜.q”¥n */ - $"DB55 BF75 C4E4 BDCD 9FC2 ACAD C428 829F" /* ÛU¿uÄä½ÍŸÂ¬­Ä(‚Ÿ */ - $"2409 3BB2 A894 8020 A8E7 FC16 F4FF 4E84" /* $Æ;²¨”€ ¨çü.ôÿN„ */ - $"C06E 889C 1C74 96AD 5420 F825 1A2B 015C" /* Ànˆœ.t–­T ø%.+.\ */ - $"6BC2 31EE 64AB 7A44 15E5 3458 8040 AEEF" /* kÂ1îd«zD.å4X€@®ï */ - $"F6BD 7D58 6478 8344 018F D3C6 2E33 69A4" /* ö½}XdxƒD.ÓÆ.3i¤ */ - $"E5E8 721A 5B2F 777B C0D8 0A05 2CE7 EEC8" /* åèr.[/w{ÀØÂ.,çîÈ */ - $"69EF 417B A960 D320 842E 84DE D442 AB2F" /* iïA{©`Ó „.„ÞÔB«/ */ - $"3B31 84FE DCFC A608 2E09 AA42 60F6 DB2E" /* ;1„þÜü¦..ƪB`öÛ. */ - $"DA5B C95D D10A 77BE AD48 B5FF 0557 A5AC" /* Ú[É]ÑÂw¾­Hµÿ.W¥¬ */ - $"327B F763 FDA1 32BF 7308 3EFC 0C2B 2D22" /* 2{÷cý¡2¿s.>ü.+-" */ - $"584A F9CA BFB4 78FF 6E67 42CC B491 492B" /* XJùÊ¿´xÿngBÌ´‘I+ */ - $"17C3 C746 9966 5780 BA6C 2798 472E 1CFF" /* .ÃÇF™fW€ºl'˜G..ÿ */ - $"6A32 69A0 86E0 44C6 1679 08F9 9928 48D9" /* j2i †àDÆ.y.ù™(HÙ */ - $"3DA0 CBA0 1E5E 2618 7162 51C9 DEF0 56A0" /* = Ë .^&.qbQÉÞðV  */ - $"1924 F126 CAAD F248 A1A4 2816 13A7 FE76" /* .$ñ&Ê­òH¡¤(..§þv */ - $"594E 647C 36C4 C014 CDC7 5C89 DBAB 9854" /* YNd|6ÄÀ.ÍÇ\‰Û«˜T */ - $"9094 FC96 5FED 7476 AA3C DF0B B47B C123" /* ”ü–_ítvª<ß.´{Á# */ - $"BE6D CD5A BA07 CC19 94FC DC37 B85C 0FD2" /* ¾mÍZº.Ì.”üÜ7¸\.Ò */ - $"9FED 62E6 F910 2F49 529E CE10 9738 D296" /* Ÿíbæù./IRžÎ.—8Ò– */ - $"A81C 1A0D 0FBF 7CAE DB93 40C0 3BC9 5A0C" /* ¨....¿|®Û“@À;ÉZ. */ - $"B23D FBD4 3863 C520 03A0 D966 5327 A0A2" /* ²=ûÔ8cÅ . ÙfS' ¢ */ - $"DD06 B7A1 942B 0A75 CB23 8664 4159 8647" /* Ý.·¡”+ÂuË#†dAY†G */ - $"2725 DAF6 693A 58D7 7A7D B34A 393D FE7A" /* '%Úöi:X×z}³J9=þz */ - $"C105 C374 193C 123C 130E 062C 8AB2 32FD" /* Á.Ãt.<.<...,в2ý */ - $"80E0 72E3 6AEA 2078 5D7C D3E5 4E20 D927" /* €àrãjê x]|ÓåN Ù' */ - $"157E 9DC5 1A29 2F0F C326 AFE3 3ACF C361" /* .~Å.)/.Ã&¯ã:ÏÃa */ - $"8C45 D79C EB27 7441 E4C7 8BFD 5832 DB93" /* ŒEלë'tAäÇ‹ýX2Û“ */ - $"78F5 B9DB BA4E 329E A262 C467 88DC C540" /* xõ¹ÛºN2ž¢bÄgˆÜÅ@ */ - $"78E0 4E55 34F3 806E 2DEA B371 E9B5 D8DF" /* xàNU4ó€n-ê³qéµØß */ - $"5EDA B5B9 1C48 5A11 ECAB E4F8 67B7 C76E" /* ^Úµ¹.HZ.ì«äøg·Çn */ - $"460F 8E6A C7BA B5F8 75F2 9105 1480 FD1A" /* F.ŽjǺµøuò‘..€ý. */ - $"80EB DB48 6115 AA6E 9AEA A07C 57B0 1A7F" /* €ëÛHa.ªnšê |W°.. */ - $"0CBF D5DE 47A7 89BE 4CAE 19FE 7B79 5839" /* .¿ÕÞG§‰¾L®.þ{yX9 */ - $"232D 495E 476C E267 D9D2 5257 F0E6 3EB5" /* #-I^GlâgÙÒRWðæ>µ */ - $"F140 AAAF 1E36 BA04 086A EEC5 3232 7958" /* ñ@ª¯.6º..jîÅ22yX */ - $"72E3 FCC3 9488 B44C 0C15 EF6B 811B CF97" /* rãüÔˆ´L..ïk.Ï— */ - $"0532 2B88 663D 8675 6050 AB94 A435 C0FC" /* .2+ˆf=†u`P«”¤5Àü */ - $"9E08 9873 92AF 6859 F7F5 64B0 0BA5 FA68" /* ž.˜s’¯hY÷õd°.¥úh */ - $"3557 0898 9E0D 5795 BF67 2866 5FB6 63C6" /* 5W.˜ž.W•¿g(f_¶cÆ */ - $"4F82 42CE A682 DC8D CB18 D4FE 6252 95D1" /* O‚BΦ‚ÜË.ÔþbR•Ñ */ - $"C85C 6B2C 0FC0 7C9D 5A80 F93B 8900 F93A" /* È\k,.À|Z€ù;‰.ù: */ - $"8EE6 7513 4AFA 1609 3CEE D5EB B420 A1CE" /* Žæu.Jú.Æ<îÕë´ ¡Î */ - $"318D 6F67 720A 7F84 4127 C0F2 9193 35CE" /* 1ogrÂ.„A'Àò‘“5Î */ - $"6D97 9682 5E5D B9FC 5A97 3B71 AB1F 64AA" /* m—–‚^]¹üZ—;q«.dª */ - $"3383 1F0E C0E9 26BE E6EB 24CD 499F F2BA" /* 3ƒ..Àé&¾æë$ÍIŸòº */ - $"997D E886 6FF8 C6B5 0607 1259 7715 7539" /* ™}è†oøÆµ...Yw.u9 */ - $"4B57 F7A9 56A7 A04B 031F 0786 6C02 E7BC" /* KW÷©V§ K...†l.ç¼ */ - $"8256 7F27 A39A B66D 6B95 6C11 CDE4 C580" /* ‚V.'£š¶mk•l.ÍäÅ€ */ - $"54DE 7E26 129C EB67 ABC8 455E 6CC3 453E" /* TÞ~&.œëg«ÈE^lÃE> */ - $"F9A8 3ED5 9B43 4EB8 384E 0F7B 28E0 16FF" /* ù¨>Õ›CN¸8N.{(à.ÿ */ - $"1342 18B1 31B6 EAEF 4C40 36F7 0CFF 6AFF" /* .B.±1¶êïL@6÷.ÿjÿ */ - $"8059 5D1C 275B 4F7D B392 4DB0 5E5D 4304" /* €Y].'[O}³’M°^]C. */ - $"4848 2A3A C93F BAD6 638D 315A 8771 1150" /* HH*:É?ºÖc1Z‡q.P */ - $"1D41 B6A7 C9B8 782E 19D8 F8E7 07EB ED20" /* .A¶§É¸x..Øøç.ëí */ - $"7D4E AFFF 5FD2 4FA0 2B48 B549 6A50 AD81" /* }N¯ÿ_ÒO +HµIjP­ */ - $"F11D 357F 7CB2 4B8B F28B 6C97 2C23 58A3" /* ñ.5.|²K‹ò‹l—,#X£ */ - $"92E8 2BFB 77F2 1ECE 7A2A C437 47E3 A833" /* ’è+ûwò.Îz*Ä7Gã¨3 */ - $"D60C C3CA 168A 85B8 620C 109C 4134 35BF" /* Ö.ÃÊ.Š…¸b..œA45¿ */ - $"ECCB 3629 944F AD29 444A C4B6 F019 F19B" /* ìË6)”O­)DJĶð.ñ› */ - $"4189 B1D3 8F28 65B9 85D8 C715 2E1A 267D" /* A‰±Ó(e¹…ØÇ...&} */ - $"A7DB 4C90 9829 BC86 E14C 9F44 757D 5436" /* §ÛL˜)¼†áLŸDu}T6 */ - $"9C38 979D 3654 9A63 E572 7864 E513 A083" /* œ8—6Tšcårxdå. ƒ */ - $"C943 97C5 A88B 23A2 4ECC E4F1 AEED F3EC" /* ÉC—Ũ‹#¢NÌäñ®íóì */ - $"C57D F254 B087 7E1F 81B3 59E6 E2A0 E5CB" /* Å}òT°‡~.³Yæâ åË */ - $"B710 EF71 0598 01BF 1400 3814 0759 EDA8" /* ·.ïq.˜.¿..8..Yí¨ */ - $"386C 3DF0 F1C5 CA93 612F C58D 71BA 6ED6" /* 8l=ðñÅÊ“a/ÅqºnÖ */ - $"FE35 90B4 9C10 A938 33B6 6987 E407 AE7B" /* þ5´œ.©83¶i‡ä.®{ */ - $"5B1A 8E0E BE53 1C94 D747 9303 2ED9 13FA" /* [.Ž.¾S.”×G“..Ù.ú */ - $"226C F38A 7134 3CF6 1923 B85F A254 0048" /* "lóŠq4<ö.#¸_¢T.H */ - $"A765 B678 FC9C 1E2C E183 FC80 CA83 9572" /* §e¶xüœ.,áƒü€Êƒ•r */ - $"E573 B224 9894 7316 C931 4A49 C28F 6E33" /* ås²$˜”s.É1JIÂn3 */ - $"B579 EE14 84BC 61CC 351B 41FB 7095 5F8C" /* µyî.„¼aÌ5.Aûp•_Œ */ - $"1B15 6DAF FF7F F8EA 5A11 5453 6ECA 1C02" /* ..m¯ÿ.øêZ.TSnÊ.. */ - $"C8A4 F40F AD00 7BC9 EDFD AC3A 28E4 546F" /* Ȥô.­.{Éíý¬:(äTo */ - $"1E36 BE45 897E F5D5 BE25 E84B 57C6 9080" /* .6¾E‰~õÕ¾%èKWÆ€ */ - $"B6C4 79B8 153B 110F D90B 215D 401C 0453" /* ¶Äy¸.;..Ù.!]@..S */ - $"8243 BF4A CDAE 9270 0658 462F E0C7 82A8" /* ‚C¿JÍ®’p.XF/àÇ‚¨ */ - $"E155 C547 D144 EBAD 74EC EAFF 7799 6D50" /* áUÅGÑDë­tìêÿw™mP */ - $"D0F9 6BA4 D8B3 0FBB B75B BC48 D5BA 8EAB" /* Ðùk¤Ø³.»·[¼HÕºŽ« */ - $"FF7F 3A2A 820F D817 FB8B 7590 ED4A 3D7B" /* ÿ.:*‚.Ø.û‹uíJ={ */ - $"DAF8 C05F BDCF 1B7C 8862 53A8 95D6 C0DF" /* ÚøÀ_½Ï.|ˆbS¨•ÖÀß */ - $"4069 36DA 0739 783C C432 1E0C 7DA6 2D70" /* @i6Ú.9x<Ä2..}¦-p */ - $"B33A C5AD 810A FBBD E9BB B776 6463 9FDC" /* ³:Å­Âû½é»·vdcŸÜ */ - $"B401 211D 81BA A9FA 8761 ED36 A1EF 439D" /* ´.!.º©ú‡aí6¡ïC */ - $"9880 BE88 E045 3068 F59F 7AD7 EFFF 7FFC" /* ˜€¾ˆàE0hõŸz×ïÿ.ü */ - $"5562 1F00 0818 22D6 5002 F762 7A20 0DC0" /* Ub...."ÖP.÷bz .À */ - $"3ADD FF5D 1851 D391 F011 0000 0000 0000" /* :Ýÿ].QÓ‘ð....... */ - $"0000 0000 0138 5715 ED61 F2C5 2C28 30C0" /* .....8W.íaòÅ,(0À */ - $"F669 9389 6153 3A95 E010 CCA0 2FEF B36F" /* öi“‰aS:•à.Ì /ï³o */ - $"9576 F8C0 F17B 27F6 F6FA 412C 70C7 CF14" /* •vøÀñ{'ööúA,pÇÏ. */ - $"7625 6871 7FE2 16C9 B6E9 5BF1 1A16 E2F0" /* v%hq.â.ɶé[ñ..âð */ - $"945D E51E CCF9 0970 E586 517C 475F 8856" /* ”]å.ÌùÆpå†Q|G_ˆV */ - $"CA0C 1DD9 E001 D7BC 1876 745C 8077 672D" /* Ê..Ùà.×¼.vt\€wg- */ - $"CECA FF0B 01D1 76FA 32F5 C047 26FB 451F" /* ÎÊÿ..Ñvú2õÀG&ûE. */ - $"5261 79B6 5990 79C9 4DF7 5B69 D548 E894" /* Ray¶YyÉM÷[iÕHè” */ - $"F249 0C84 D3F0 9555 7B99 EA27 FA38 184E" /* òI.„Óð•U{™ê'ú8.N */ - $"F863 AFA1 CE80 AEBC CB89 DD99 B8E2 0BEC" /* øc¯¡Î€®¼Ë‰Ý™¸â.ì */ - $"2F74 E534 3FF4 B50A 4B04 02B1 C178 B189" /* /tå4?ôµÂK..±Áx±‰ */ - $"D30F 77DC 8A15 8C9E AF87 1DCD D545 AC6B" /* Ó.wÜŠ.Œž¯‡.ÍÕE¬k */ - $"CAFB 832B E240 6752 8EF2 9BDF 76E8 621D" /* Êûƒ+â@gRŽò›ßvèb. */ - $"892E 384C 7BF0 4DE8 F910 7689 C3F0 E7E9" /* ‰.8L{ðMèù.v‰Ãðçé */ - $"E401 C781 F341 A84F 6922 E97B FC22 E259" /* ä.ÇóA¨Oi"é{ü"âY */ - $"6B26 9B03 14A7 DFA1 B7BD CBED 9539 5DE3" /* k&›..§ß¡·½Ëí•9]ã */ - $"2041 2F5F A37A 2F23 00FC 6424 D7F8 902E" /* A/_£z/#.üd$×ø. */ - $"7261 227B B4EC F4D1 9C18 22C3 8CA5 EFF8" /* ra"{´ìôÑœ."ÃŒ¥ïø */ - $"5701 6734 9110 8B4E D9E0 EE8F 7FEA 202F" /* W.g4‘.‹NÙàî.ê / */ - $"CFF7 5CC7 6107 0B22 B0BE A87B 32EF 0FA8" /* Ï÷\Ça.."°¾¨{2ï.¨ */ - $"3D2D 794E 556E 6089 ACBA D46C 17EC A9DC" /* =-yNUn`‰¬ºÔl.ì©Ü */ - $"0F4E D57D B8C8 EED1 F9D4 F96A 7BEE 3794" /* .NÕ}¸ÈîÑùÔùj{î7” */ - $"49DE 3AA7 EE2E 0B25 A47C 966A D90D C792" /* IÞ:§î..%¤|–jÙ.Ç’ */ - $"6304 7C05 C6EB A26D 83B8 3E0C AAF5 AFFE" /* c.|.Æë¢mƒ¸>.ªõ¯þ */ - $"FDC3 F7C4 C0A3 C3ED E8D2 0FAB AC58 1F56" /* ýÃ÷ÄÀ£ÃíèÒ.«¬X.V */ - $"FF40 F44B 4289 C6D7 CC17 A019 AD4A C889" /* ÿ@ôKB‰Æ×Ì. .­Jȉ */ - $"67AD 0673 32A0 B6BA 087E 7279 19C2 025F" /* g­.s2 ¶º.~ry.Â._ */ - $"DB0E 0E97 02D9 2268 5BCA CDE6 B94E 8D9B" /* Û..—.Ù"h[ÊÍæ¹N› */ - $"03EB D786 1698 2D8A 2ECD 432E D615 931F" /* .ë׆.˜-Š.ÍC.Ö.“. */ - $"452B 5D40 0950 5BBE A70F BD95 9F0E 8B95" /* E+]@ÆP[¾§.½•Ÿ.‹• */ - $"86B7 47DE 0757 BFE4 9775 3082 9D22 863A" /* †·GÞ.W¿ä—u0‚"†: */ - $"E404 B84C 5E88 8424 31DD 689A D234 88E2" /* ä.¸L^ˆ„$1ÝhšÒ4ˆâ */ - $"971F 9E59 429C 6C7E 3670 8F7C 8F86 A80D" /* —.žYBœl~6p|†¨. */ - $"848E E78B 5331 058E E444 FEC2 269A 7E23" /* „Žç‹S1.ŽäDþÂ&š~# */ - $"608D 0502 E075 F7A4 DACF 515F AA08 31C1" /* `..àu÷¤ÚÏQ_ª.1Á */ - $"1275 02C0 F37E F465 ADE9 1918 F1F0 0E4F" /* .u.Àó~ôe­é..ñð.O */ - $"E5A4 41A5 F655 22D9 946A 7FEC 0720 3D3A" /* å¤A¥öU"Ù”j.ì. =: */ - $"4961 05B2 F02D 51D2 1212 084B B3EA 5DC9" /* Ia.²ð-QÒ...K³ê]É */ - $"F986 5763 A2AC E2AC 1144 5DC3 E6A5 D092" /* ù†Wc¢¬â¬.D]Ãæ¥Ð’ */ - $"3654 3737 A598 21C2 34FF 097C B8B8 5934" /* 6T77¥˜!Â4ÿÆ|¸¸Y4 */ - $"C947 05C9 B4BA F52B 99FF 3AFE 6B15 2CAE" /* ÉG.É´ºõ+™ÿ:þk.,® */ - $"06CF D962 CCDE D937 D4AE B3D9 7E92 E2AF" /* .ÏÙbÌÞÙ7Ô®³Ù~’⯠*/ - $"8F4E 31CE 06E7 0AD8 71DB 4456 7101 E221" /* N1Î.çÂØqÛDVq.â! */ - $"74AC 1159 9EDF 9841 CFA3 E04F DECF 6FD3" /* t¬.Yžß˜AÏ£àOÞÏoÓ */ - $"90CC C22F 63B0 45CC C98B 3125 33C0 CFBA" /* ÌÂ/c°EÌÉ‹1%3ÀϺ */ - $"4CE7 3FAD F2E4 85E7 0C74 35A5 97E9 8672" /* Lç?­òä…ç.t5¥—é†r */ - $"9180 E059 EF0F C416 E25F 0E83 095A 36AA" /* ‘€àYï.Ä.â_.ƒÆZ6ª */ - $"8E74 F1F7 11A8 49DD C47E 5098 D576 DC41" /* Žtñ÷.¨IÝÄ~P˜ÕvÜA */ - $"D6FC 7C37 E307 A2DB 997E A046 C114 CF04" /* Öü|7ã.¢Û™~ FÁ.Ï. */ - $"FD8E 32D1 2AC6 3A81 C8B6 C680 6E60 7826" /* ýŽ2Ñ*Æ:ȶƀn`x& */ - $"9A40 9C80 BA1B 4DE8 854B 09D9 33B3 95BE" /* š@œ€º.Mè…KÆÙ3³•¾ */ - $"7CE5 CCA3 C463 5D1C 1F2B A160 E208 AA0A" /* |åÌ£Äc]..+¡`â.ªÂ */ - $"D00F 1933 5FB5 2705 4E9C 3733 0FD0 2AA0" /* Ð..3_µ'.Nœ73.Ð*  */ - $"D116 F240 05EA 53BB 5A5A 0A4B 3D9E FCB7" /* Ñ.ò@.êS»ZZÂK=žü· */ - $"FE35 1D0B 1E56 C4AA 9B6C 8CE6 10CA DAA5" /* þ5...VĪ›lŒæ.ÊÚ¥ */ - $"6DF1 6F74 C332 BD93 556E 89F5 A94A 232D" /* mñotÃ2½“Un‰õ©J#- */ - $"E9EF C950 666C 7D3E D1BA C98F 4489 3C5D" /* éïÉPfl}>ѺÉD‰<] */ - $"F7FC 88D4 C90E EE9D 7691 C976 2CFE 6BA0" /* ÷üˆÔÉ.îv‘Év,þk  */ - $"B53E 5C59 749E FEBC 4AB4 490C A3B6 5187" /* µ>\Ytžþ¼J´I.£¶Q‡ */ - $"4A10 1076 6348 AEC1 054B 0A98 9196 29C3" /* J..vcH®Á.K˜‘–)à */ - $"F995 50E4 E003 F099 9495 7ECC 1C78 C536" /* ù•Päà.ð™”•~Ì.xÅ6 */ - $"AA8D 7305 BE7F FF72 99F7 25ED 4C38 0896" /* ªs.¾.ÿr™÷%íL8.– */ - $"A1BE F2D4 016E B744 CBB7 9CEE 1C88 5E3D" /* ¡¾òÔ.n·DË·œî.ˆ^= */ - $"1B9E E3CB 29D2 AAA7 C3F6 41F4 B6C0 5861" /* .žãË)Òª§ÃöAô¶ÀXa */ - $"93D3 4773 858E 3470 E670 4F94 E206 FBA3" /* “ÓGs…Ž4pæpO”â.û£ */ - $"7050 2A3D 6DC0 004E 32D7 6043 4E5E C44F" /* pP*=mÀ.N2×`CN^ÄO */ - $"284A 3214 97B7 19DE 41C4 6204 56CB 1695" /* (J2.—·.ÞAÄb.VË.• */ - $"BAD8 C308 0FFE BEB7 FE14 C6AC CEE8 5022" /* ºØÃ..þ¾·þ.ƬÎèP" */ - $"C27A 2CCA 4714 4C52 3975 615D A1C8 62BF" /* Âz,ÊG.LR9ua]¡Èb¿ */ - $"C477 FF7E 2637 3B89 8C43 6E09 285B 2D1A" /* Äwÿ~&7;‰ŒCnÆ([-. */ - $"8E9E 4110 CE7B E30A E21C A140 02C8 D0AD" /* ŽžA.Î{ãÂâ.¡@.ÈЭ */ - $"630B 5488 7CE7 B884 393A 6FDD 5A68 7FB9" /* c.Tˆ|縄9:oÝZh.¹ */ - $"60EC C73B 143E 3F61 3E31 1A3E 8438 7944" /* `ìÇ;.>?a>1.>„8yD */ - $"B652 14AE 63CA 803C 9B67 C6FE 2F5D 4CD0" /* ¶R.®cÊ€<›gÆþ/]LÐ */ - $"3A63 1328 8809 A4AB B4A1 8664 FE90 F03E" /* :c.(ˆÆ¤«´¡†dþð> */ - $"18E2 7982 7DDC A444 1306 4546 61B2 A710" /* .ây‚}ܤD..EFa²§. */ - $"CCED 529C 92CB D547 22F5 0DB0 B10F 8450" /* ÌíRœ’ËÕG"õ.°±.„P */ - $"E5AC 253A 6937 BFBD D0C6 8AED 14C7 787E" /* å¬%:i7¿½ÐÆŠí.Çx~ */ - $"21E7 860D 8567 633D A9E6 0466 93A5 6789" /* !ç†.…gc=©æ.f“¥g‰ */ - $"D643 2EEE 7542 7B02 086A 83C4 AD3C 785C" /* ÖC.îuB{..jƒÄ­úE¹ä¨.ßߎÕÿ */ - $"750C 2E52 4F3F 5960 B3B7 3DEB CFE3 4EC3" /* u..RO?Y`³·=ëÏãNà */ - $"676F D76A F8C3 67EB 383B 042A C000 1CF5" /* go×jøÃgë8;.*À..õ */ - $"FB57 51DF 4E0F 9709 4A58 F371 8A53 79CD" /* ûWQßN.—ÆJXóqŠSyÍ */ - $"B935 29C8 5953 BBFB B216 24F0 FF5C F1BE" /* ¹5)ÈYS»û².$ðÿ\ñ¾ */ - $"1649 C9BE 754A CC45 62C3 44A2 3E12 A872" /* .IɾuJÌEbÃD¢>.¨r */ - $"736B 05DD F77C C7C6 F33D 8224 147E D163" /* sk.Ý÷|ÇÆó=‚$.~Ñc */ - $"02B4 0BC6 297A FA75 03A7 BFDD 709A A878" /* .´.Æ)zúu.§¿Ýpš¨x */ - $"734A 7236 791A BFF6 9F21 CC67 268D 160D" /* sJr6y.¿öŸ!Ìg&.. */ - $"A6D0 7988 72CF 6475 146C 81EB 8249 518A" /* ¦ÐyˆrÏdu.lë‚IQŠ */ - $"49B7 0389 FDB6 9CEB DCA2 41ED 085D 4E85" /* I·.‰ý¶œëÜ¢Aí.]N… */ - $"03E4 3F4E D8CF 25E1 658D 38F6 8F88 A499" /* .ä?NØÏ%áe8öˆ¤™ */ - $"B64A DD79 FDF2 39FB 5CEC F29B 714A 733B" /* ¶JÝyýò9û\ìò›qJs; */ - $"76E4 94E5 F567 3A71 28F0 13A6 7A74 CD91" /* vä”åõg:q(ð.¦ztÍ‘ */ - $"5804 065E D3C7 09B7 ED19 51E5 0913 4436" /* X..^ÓÇÆ·í.QåÆ.D6 */ - $"9791 BB58 10F3 7183 5DB6 4874 65D2 AAD2" /* —‘»X.óqƒ]¶HteÒªÒ */ - $"DBA2 C761 A70F 3EEE 9256 2EF0 945D E52D" /* Û¢Ça§.>î’V.ð”]å- */ - $"34CF 10DF B2AF 8E14 A5A4 E24F 0051 F63E" /* 4Ï.ß²¯Ž.¥¤âO.Qö> */ - $"F11C 5DAC 6D8D DEDD A585 96FC A2AB A5FF" /* ñ.]¬mÞÝ¥…–ü¢«¥ÿ */ - $"5298 6349 DB41 9276 C1C6 F1E2 9ABF 822B" /* R˜cIÛA’vÁÆñâš¿‚+ */ - $"346F 8679 726C 666A 9638 246A EABE 54A9" /* 4o†yrlfj–8$jê¾T© */ - $"49DD F22A BC62 5867 51F2 FDBD B33B 40E0" /* IÝò*¼bXgQòý½³;@à */ - $"220F 075D 031C EAAE 3CDE 67CF 2269 E26D" /* "..]..ê®<ÞgÏ"iâm */ - $"BEF3 1873 E610 D43E 8F03 A14F F04F 980B" /* ¾ó.sæ.Ô>.¡OðO˜. */ - $"69FF 1E4A 1925 DDE6 B473 84B5 6F53 75DD" /* iÿ.J.%Ýæ´s„µoSuÝ */ - $"CF71 C4C0 72DC 5403 7E7B 1A9B 6F16 BA87" /* ÏqÄÀrÜT.~{.›o.º‡ */ - $"A44D D4A2 8029 E15A 8C17 BE55 A30B 87B3" /* ¤MÔ¢€)áZŒ.¾U£.‡³ */ - $"DC5B CED9 2E4C A8F3 939B 6F82 8885 9BD5" /* Ü[ÎÙ.L¨ó“›o‚ˆ…›Õ */ - $"905B 6EE2 E3C9 D45E DE91 DD46 7EDD 23BB" /* [nâãÉÔ^Þ‘ÝF~Ý#» */ - $"6852 2BD3 3D31 2755 2D1B 7431 35EB 6CBD" /* hR+Ó=1'U-.t15ël½ */ - $"638C 9E5D F0EB 9AE0 49BC D327 7536 BCB3" /* cŒž]ðëšàI¼Ó'u6¼³ */ - $"65F1 992B E073 9D25 980D A244 7F9E 749F" /* eñ™+às%˜.¢D.žtŸ */ - $"53BD D08A C5EF 64A2 D672 7A55 9146 5CAD" /* S½ÐŠÅïd¢ÖrzU‘F\­ */ - $"7839 E1B6 7543 4556 146E C347 33E3 2798" /* x9á¶uCEV.nÃG3ã'˜ */ - $"4752 6F78 AAA5 AE5E 7B02 CD92 D5F1 FD30" /* GRoxª¥®^{.Í’Õñý0 */ - $"F78A 7BFB 03AB CF34 58BF 3810 B8A7 CDAB" /* ÷Š{û.«Ï4X¿8.¸§Í« */ - $"A573 658E 260A 7C50 000F 00AC D13F 618E" /* ¥seŽ&Â|P...¬Ñ?aŽ */ - $"A241 9458 3945 9D59 3F9B 13C5 04CC 600E" /* ¢A”X9EY?›.Å.Ì`. */ - $"FC51 8C8D FBA0 4150 5832 4539 730B 4631" /* üQŒû APX2E9s.F1 */ - $"0598 EE14 817C B560 97C5 B953 64D4 980D" /* .˜î.|µ`—ŹSdÔ˜. */ - $"C379 6FFF 3E63 6746 7BE8 D3AB 5215 B47F" /* Ãyoÿ>cgF{èÓ«R.´. */ - $"3CAE 42E4 D4BF B7BF 6580 3319 6A71 C2E9" /* <®BäÔ¿·¿e€3.jqÂé */ - $"48AA 2C5E 9D78 B9C3 F8DA B858 D5AB 99F4" /* Hª,^x¹ÃøÚ¸XÕ«™ô */ - $"B04F EAAC D0DE 2302 F874 7E64 A69B 89CE" /* °Oê¬ÐÞ#.øt~d¦›‰Î */ - $"AEAB A73F F815 0D06 B24E 39EC D8E9 EFB7" /* ®«§?ø...²N9ìØéï· */ - $"ED32 55A0 8E21 B52A E55C 17AE E07B 42F4" /* í2U Ž!µ*å\.®à{Bô */ - $"D451 CB7C E941 1578 3EE3 9565 087E 9A05" /* ÔQË|éA.x>ã•e.~š. */ - $"B5FC 403A AAA2 25CE 5AC1 B658 1EE9 9A53" /* µü@:ª¢%ÎZÁ¶X.éšS */ - $"4000 51DF 95E8 C605 97AC C7E1 A8B1 F86C" /* @.Qß•èÆ.—¬Çᨱøl */ - $"7C3F 0BCC E410 8FA7 78C0 7964 BDD0 E341" /* |?.Ìä.§xÀyd½ÐãA */ - $"5DC5 D977 EF99 460C FC48 A51A B5CD DE47" /* ]ÅÙwï™F.üH¥.µÍÞG */ - $"F9E2 194D 1F2D B2B6 556B 0F68 BD1B 5BEA" /* ùâ.M.-²¶Uk.h½.[ê */ - $"9FDD 1280 92A3 EF96 132C 22F6 CA8A 1C20" /* ŸÝ.€’£ï–.,"öÊŠ. */ - $"54DA F163 6119 BC02 7AE6 10CA A16B 993A" /* TÚñca.¼.zæ.Ê¡k™: */ - $"E22B CC58 D181 40E6 EA99 0897 5166 4C1F" /* â+ÌXÑ@æê™.—QfL. */ - $"6D58 D092 5119 1AF5 0C2B 1DC6 029D F0E8" /* mXÐ’Q..õ.+.Æ.ðè */ - $"1F6F 9F5C 17D8 68A0 F600 5C68 5C16 4269" /* .oŸ\.Øh ö.\h\.Bi */ - $"F5A9 4D97 32DE 3A9C 6609 86C2 1D0F BA56" /* õ©M—2Þ:œfƆÂ..ºV */ - $"3C8C 1046 E0DC 2ECB 9BDB D61E 6955 CE38" /* <Œ.FàÜ.Ë›ÛÖ.iUÎ8 */ - $"DB97 859B 9E73 78BF FDEB ED74 0C4E 4203" /* Û—…›žsx¿ýëít.NB. */ - $"431D 69C4 635D D1EA 1A9A 6462 BE48 DDB9" /* C.iÄc]Ñê.šdb¾Hݹ */ - $"6E63 C4D8 8886 51CB 19E6 A7C9 5941 8443" /* ncÄØˆ†QË.æ§ÉYA„C */ - $"57E5 8C3B B907 FF17 4B41 08DA 7AFC 1B8B" /* WåŒ;¹.ÿ.KA.Úzü.‹ */ - $"9B05 622E 1F81 91D8 2C60 9C6A 3B23 608B" /* ›.b..‘Ø,`œj;#`‹ */ - $"F2EC E527 70F9 D963 D302 D7AC 18E2 2692" /* òìå'pùÙcÓ.׬.â&’ */ - $"AE0C D915 7E30 5B09 305C 8F5D 1346 3FF2" /* ®.Ù.~0[Æ0\].F?ò */ - $"8635 ECEC 1CB7 962D 0846 3FA9 5920 C1B0" /* †5ìì.·–-.F?©Y Á° */ - $"5582 FF3A 24E0 FAAE 8FAE 3843 DFCF B74F" /* U‚ÿ:$àú®®8CßÏ·O */ - $"CAEC 5602 D1C5 1760 5ECD 92C8 1DD1 4ABE" /* ÊìV.ÑÅ.`^Í’È.ÑJ¾ */ - $"2336 8A90 E444 6753 D3E0 0F02 8E99 7393" /* #6ŠäDgSÓà..Ž™s“ */ - $"8B26 6C9F BFB4 64DE 7867 73F7 10F0 477A" /* ‹&lŸ¿´dÞxgs÷.ðGz */ - $"8383 ADA5 49C3 722B 1FD7 0BB5 4118 4714" /* ƒƒ­¥IÃr+.×.µA.G. */ - $"D5F9 6C20 CDD0 8151 EAB4 457F FF4E 314C" /* Õùl ÍÐQê´E.ÿN1L */ - $"6E7F 04DB DE0C 611B 62AC 2A4E 869C 06FB" /* n..ÛÞ.a.b¬*N†œ.û */ - $"DB81 F238 C4FC 149E 8176 3F0C 4B83 0DFF" /* Ûò8Äü.žv?.Kƒ.ÿ */ - $"7FB4 A5F5 80C7 E4F0 47AD 8D3F 5426 B12A" /* .´¥õ€ÇäðG­?T&±* */ - $"8678 11E1 A0EF 5439 31D8 E97E 3AE9 E4DD" /* †x.á ïT91Øé~:éäÝ */ - $"3DB7 4A94 7FFF 7135 0C02 ACE2 70F5 626B" /* =·J”.ÿq5..¬âpõbk */ - $"271A 4401 DF00 AE70 E43B D3F8 75AD 0DAB" /* '.D.ß.®pä;Óøu­.« */ - $"794A C0C7 928F 8621 BE61 DA60 A89F 8E95" /* yJÀÇ’†!¾aÚ`¨ŸŽ• */ - $"64E1 4B82 9CA5 D1CB 26FA 3B49 2FDF 8007" /* dáK‚œ¥ÑË&ú;I/߀. */ - $"60B1 1C23 B192 973E 87DD 9323 E697 CA76" /* `±.#±’—>‡Ý“#æ—Êv */ - $"03D6 B09A 33FA 5CEC 856D 1D12 5249 2492" /* .Ö°š3ú\ì…m..RI$’ */ - $"4924 9249 2492 4924 9231 8B0A C6C2 C882" /* I$’I$’I$’1‹ÂÆÂÈ‚ */ - $"FC66 E59C E646 38B0 B26F A097 FEA2 30FE" /* üfåœæF8°²o —þ¢0þ */ - $"F5B9 90DC 3FEF 3116 73C4 7B20 6C09 EA40" /* õ¹Ü?ï1.sÄ{ lÆê@ */ - $"AB90 6257 8BAD 951C 002E 138D 7274 121D" /* «bW‹­•....rt.. */ - $"B91E 66F5 6038 8257 FD9A 18C9 0155 522C" /* ¹.fõ`8‚Wýš.É.UR, */ - $"D6CC 0F6A 6A4A 09F3 0C4A B702 47FF 7FFC" /* ÖÌ.jjJÆó.J·.Gÿ.ü */ - $"B504 0034 6682 CE19 CA7C 50BE F8B0 9DCB" /* µ..4f‚Î.Ê|P¾ø°Ë */ - $"0092 4924 9248 F298 B4D2 A612 6CEE 878F" /* .’I$’Hò˜´Ò¦.lî‡ */ - $"FF7F FF5F 8F59 B3E0 FE9F A74E 506D C924" /* ÿ.ÿ_Y³àþŸ§NPmÉ$ */ - $"9249 2492 4924 9249 2492 4924 924D 57A2" /* ’I$’I$’I$’I$’MW¢ */ - $"2CC8 426C 393A 96E4 50FB 0ACE 8874 7A86" /* ,ÈBl9:–äPûÂΈtz† */ - $"2B20 84D4 0F34 1532 DFF0 D633 0231 0F65" /* + „Ô.4.2ßðÖ3.1.e */ - $"91D1 8E19 A917 CD2A 8D35 89BE F64E D1A8" /* ‘ÑŽ.©.Í*5‰¾öNѨ */ - $"926C AE06 3A49 80F9 C1FE 0E81 52D8 5A8C" /* ’l®.:I€ùÁþ.RØZŒ */ - $"7A00 5EF2 9F04 3659 74EC D695 94B6 5B90" /* z.^òŸ.6YtìÖ•”¶[ */ - $"89C0 E661 DFC4 5E69 965B 4D1D 4B76 7C0E" /* ‰ÀæaßÄ^i–[M.Kv|. */ - $"89D2 C1E8 B1EF CF9E 5E96 3977 AEA6 532B" /* ‰ÒÁè±ïÏž^–9w®¦S+ */ - $"68B1 BD73 2BE6 BB5B 766E FA91 5C36 628C" /* h±½s+æ»[vnú‘\6bŒ */ - $"F45F FEEA C7DF 49F0 278F F459 E9B6 BDAC" /* ô_þêÇßIð'ôYé¶½¬ */ - $"1A28 F485 45C5 2761 DC37 C72A 8A17 2D08" /* .(ô…EÅ'aÜ7Ç*Š.-. */ - $"5130 E9D5 E1BD 2D59 07B5 2290 00F9 F737" /* Q0éÕá½-Y.µ".ù÷7 */ - $"C1F4 5C78 1058 C4C6 13AB AE5C 45DE ACB4" /* Áô\x.XÄÆ.«®\EÞ¬´ */ - $"7DC9 03C4 0F82 7850 6F9E 5FD3 9223 36FE" /* }É.Ä.‚xPož_Ó’#6þ */ - $"8A1D 1D99 FBB3 646B 206B FC7E 668E 4730" /* Š..™û³dk kü~fŽG0 */ - $"7C8C 79D9 A37A 427B 1E91 E7A1 DED2 E57D" /* |ŒyÙ£zB{.‘ç¡ÞÒå} */ - $"E167 967A 8B9F A6C0 A36F 68E8 D03C 84C6" /* ág–z‹Ÿ¦À£ohèÐ<„Æ */ - $"E952 3CAF 039F 18CD 236C 4AE1 FB74 D7F6" /* éR<¯.Ÿ.Í#lJáût×ö */ - $"DFBF B7A4 AFDB D27E 2FB7 7BBF 86F0 DF6F" /* ß¿·¤¯ÛÒ~/·{¿†ðßo */ - $"4F9F C3A7 EC7F 0D0F BEDB 1EFB 77AA FB77" /* OŸÃ§ì...¾Û.ûwªûw */ - $"2CED 1CDE F39E A2F3 567D 91E9 4703 B8A2" /* ,í.Þóž¢óV}‘éG.¸¢ */ - $"5006 2494 6271 81F3 3B95 0B89 EDD5 7FE8" /* P.$”bqó;•.‰íÕ.è */ - $"B864 3D84 75CD 7478 A5D6 28C8 D483 39EF" /* ¸d=„uÍtx¥Ö(ÈÔƒ9ï */ - $"86CA 5763 87CA 97CF A9D4 AFA9 0450 6744" /* †ÊWc‡Ê—ϩԯ©.PgD */ - $"16E3 8C0B 0015 88DA 5244 1AB2 9790 35B0" /* .ãŒ...ˆÚRD.²—5° */ - $"0489 B911 D871 2BB4 6576 C185 22B7 1F86" /* .‰¹.Øq+´evÁ…"·.† */ - $"230A 3CD3 ECB5 20A6 23BA A068 A53E 8EAD" /* #Â<Óìµ ¦#º h¥>Ž­ */ - $"3793 46B5 BA07 96A8 DF28 6A66 CE05 73CE" /* 7“Fµº.–¨ß(jfÎ.sÎ */ - $"1938 F9A6 9CBC 0D7F F193 E0D5 09CC 3426" /* .8ù¦œ¼..ñ“àÕÆÌ4& */ - $"4BB1 52B9 F337 0537 FA01 B010 5471 B015" /* K±R¹ó7.7ú.°.Tq°. */ - $"754C A1A6 E071 800C 1A26 243D 172B 1497" /* uL¡¦àq€..&$=.+.— */ - $"E5DF 1EB1 6A6C 6761 3BA6 52C0 C0B4 69BD" /* åß.±jlga;¦RÀÀ´i½ */ - $"E6B4 275E EB6E 42BF D693 8928 15A4 9DB2" /* æ´'^ënB¿Ö“‰(.¤² */ - $"D8FA E273 6C04 CBB5 06A9 8096 5E97 5D11" /* Øúâsl.˵.©€–^—]. */ - $"0B1B 8E93 BDCC 1AE8 4CBA 9413 A729 F6A7" /* ..Ž“½Ì.èLº”.§)ö§ */ - $"F24D 467F 0316 BF60 F777 C2E3 7FAA DC07" /* òMF...¿`÷wÂã.ªÜ. */ - $"148F 5C26 91C3 20B8 F3A0 9088 F893 6D47" /* .\&‘à ¸ó ˆø“mG */ - $"7AC1 A0D9 5483 8281 5B98 28AE 9EAB 94F0" /* zÁ ÙTƒ‚[˜(®ž«”ð */ - $"9B68 08E3 E3DA 7E3A AA84 9EED F083 117F" /* ›h.ããÚ~:ª„žíðƒ.. */ - $"FE75 781E E394 EEEC F9AC 21D6 FF5E DD57" /* þux.ã”îìù¬!Öÿ^ÝW */ - $"96CF A7DF 3C0D 7E2F F9E7 F212 83EE E629" /* –ϧß<.~/ùçò.ƒîæ) */ - $"9543 AA61 C10A 4B12 1DD8 6835 405A D739" /* •CªaÁÂK..Øh5@Z×9 */ - $"DBD7 1628 2816 909D 1DEB 81F2 16AF 8953" /* Û×.((..ëò.¯‰S */ - $"9239 B79D A64A 3275 E506 BFD3 0198 776C" /* ’9·¦J2uå.¿Ó.˜wl */ - $"F4C2 39CD 4CF8 2482 D781 526A 7D82 0B83" /* ôÂ9ÍLø$‚×Rj}‚.ƒ */ - $"120C B2AB 1FC0 2DAA 4A72 ACD9 B4C7 926A" /* ..²«.À-ªJr¬Ù´Ç’j */ - $"CE69 46FA C67E 904D 12D4 D6EC 2F77 AC43" /* ÎiFúÆ~M.ÔÖì/w¬C */ - $"0A82 A09A 8FAC 59F0 D192 4F8F E6D1 A8B3" /* ‚ š¬YðÑ’OæÑ¨³ */ - $"26FD EAD1 7727 E253 F826 580D 8786 8EAD" /* &ýêÑw'âSø&X.‡†Ž­ */ - $"4561 33FC 6C93 72E4 3F53 3E92 5E78 9597" /* Ea3ül“rä?S>’^x•— */ - $"895F 61B9 D382 514D 839E D4E8 A40B 6F99" /* ‰_a¹Ó‚QMƒžÔè¤.o™ */ - $"0BEC 889F F976 6F24 AEAC 2A18 479B 9CD0" /* .숟ùvo$®¬*.G›œÐ */ - $"A58D E4A8 4940 D7A9 26A7 8649 C387 22EB" /* ¥ä¨I@ש&§†IÇ"ë */ - $"10F3 AB7F 805D 57F4 6918 508A 429D FC32" /* .ó«.€]Wôi.PŠBü2 */ - $"0E49 3480 E5A6 0267 54A6 D677 422D 1B62" /* .I4€å¦.gT¦ÖwB-.b */ - $"4DFB C3A4 2E01 8C0D 029D D238 87B0 230E" /* Mûä..Œ..Ò8‡°#. */ - $"AB6E AEFD 64F3 F7AE 7BD7 DA13 2BCC DCFB" /* «n®ýdó÷®{×Ú.+ÌÜû */ - $"13EC E7EE A36F 86C6 A2D8 DD70 6174 04FA" /* .ìçî£o†Æ¢ØÝpat.ú */ - $"B7F7 A3BF 9C4C F99C C177 9B27 9148 3998" /* ·÷£¿œLùœÁw›'‘H9˜ */ - $"013A 4B0C E3A5 6905 6ADC 739C 3586 7009" /* .:K.ã¥i.jÜsœ5†pÆ */ - $"38DA 0496 C25E DFB2 F2AB 34C0 F138 4F81" /* 8Ú.–Â^ß²ò«4Àñ8O */ - $"7240 2774 4588 B153 267B DBBE DFDE AEAD" /* r@'tEˆ±S&{Û¾ßÞ®­ */ - $"1D90 BA71 2B83 D108 1CDB 8B36 7837 8AAA" /* .ºq+ƒÑ..Û‹6x7Šª */ - $"299C 2916 D66C CC2E 2FCF B0E3 228A 88C1" /* )œ).ÖlÌ./ϰã"ŠˆÁ */ - $"568F 12D8 D599 AB3F 29DE 1FA6 9336 132F" /* V.ØÕ™«?)Þ.¦“6./ */ - $"521E 8EB9 9BD4 30E4 362E 349E 209A 6EB6" /* R.޹›Ô0ä6.4ž šn¶ */ - $"D5CC 985B E51E 8A74 B9A0 1718 2753 A1E0" /* Õ̘[å.Št¹ ..'S¡à */ - $"BDCC 77CC 5697 641D B916 AB08 C12F 102F" /* ½ÌwÌV—d.¹.«.Á/./ */ - $"59A0 4283 27A8 9F9E 1980 381A 4785 E896" /* Y Bƒ'¨Ÿž.€8.G…è– */ - $"B9C8 A383 0C1E EBDE A8DC D1A0 00FB 61C2" /* ¹È£ƒ..ëÞ¨ÜÑ .ûa */ - $"70F1 84C8 8368 337E DA6C 7A1A 014F 77C3" /* pñ„ȃh3~Úlz..Owà */ - $"EFFF 0CCC F88E E539 B4FF 3187 54EA 4B2E" /* ïÿ.ÌøŽå9´ÿ1‡TêK. */ - $"27BF 1121 0DCD 456F 5AB4 E115 9E30 8B1C" /* '¿.!.ÍEoZ´á.ž0‹. */ - $"FCFB 8634 E35F E3F0 2A65 8EC0 775F C0EE" /* üû†4ã_ãð*eŽÀw_Àî */ - $"37B2 6C5A AA44 2B7C 889A 5854 FBB4 DC29" /* 7²lZªD+|ˆšXTû´Ü) */ - $"E875 94AB D4F4 19C2 5989 594D 6B55 CB5E" /* èu”«Ôô.ÂY‰YMkUË^ */ - $"012C A350 BF1C 322E 6DC6 6CFB 052A B48D" /* .,£P¿.2.mÆlû.*´ */ - $"2FFE D908 D443 2FB2 706F 13A8 B2BF 2E97" /* /þÙ.ÔC/²po.¨²¿.— */ - $"D7EF 6FE2 7D0B 4D6C 89E6 24BB D547 A266" /* ×ïoâ}.Ml‰æ$»ÕG¢f */ - $"3B92 FF58 BE83 0D95 D587 B51D B83A B360" /* ;’ÿX¾ƒ.•Õ‡µ.¸:³` */ - $"DF16 A55F 5D17 5ED7 C7D7 88FD D24B 89C4" /* ß.¥_].^×Ç׈ýÒK‰Ä */ - $"17FF 1CE0 2FC5 E332 79FF 6532 D599 2C36" /* .ÿ.à/Åã2yÿe2Õ™,6 */ - $"7360 56F2 6017 1165 F8CD AC09 6435 530F" /* s`Vò`..eøÍ¬Æd5S. */ - $"8E48 0152 06AE 7F31 9D5A A12E EC4A 26BD" /* ŽH.R.®.1Z¡.ìJ&½ */ - $"1D28 2D81 EBF2 625A 03C8 8240 FAB0 343C" /* .(-ëòbZ.È‚@ú°4< */ - $"3460 4650 A369 CBAF D533 EC55 DB4D 46F7" /* 4`FP£i˯Õ3ìUÛMF÷ */ - $"45C4 1B75 581D CC26 9E29 8B0F C424 5512" /* EÄ.uX.Ì&ž)‹.Ä$U. */ - $"9417 F11C 77C1 F3FD 57B1 487F D8F8 A086" /* ”.ñ.wÁóýW±H.Øø † */ - $"E60E 2356 E9E1 F3EC 7F31 52E1 E3DB C75E" /* æ.#Véáóì.1RáãÛÇ^ */ - $"7A4B 2D19 8F06 AB86 5A88 F23D C312 C565" /* zK-..«†Zˆò=Ã.Åe */ - $"1AF0 4B35 F0D9 D100 6634 A377 90C1 A69A" /* .ðK5ðÙÑ.f4£wÁ¦š */ - $"1C64 495A BEF2 5A5C 1714 0504 2639 71A2" /* .dIZ¾òZ\....&9q¢ */ - $"5989 FF6E F887 5ADD 9843 A719 60CC 5185" /* Y‰ÿnø‡ZݘC§.`ÌQ… */ - $"B308 2551 F63A 7543 2A92 3949 FCC5 5023" /* ³.%Qö:uC*’9IüÅP# */ - $"5A92 FE32 A26E FF00 9CFC 0CFF 4A08 60C7" /* Z’þ2¢nÿ.œü.ÿJ.`Ç */ - $"F76C 480A E682 3C58 66B8 7045 CDBA 616C" /* ÷lHÂæ‚¯.Ñáùõ¯Æ */ - $"6428 F517 1201 C3F1 1B80 0DD2 DCD9 CA31" /* d(õ...Ãñ.€.ÒÜÙÊ1 */ - $"B022 DAFB D990 A8B1 6FF1 004E 4847 E5C8" /* °"ÚûÙ¨±oñ.NHGåÈ */ - $"0580 DA86 704F E2FF 7E83 5167 5C3F ADB2" /* .€Ú†pOâÿ~ƒQg\?­² */ - $"4C44 A9D9 DB84 C360 68ED 1BF0 068E 04BF" /* LD©ÙÛ„Ã`hí.ð.Ž.¿ */ - $"D16E B55F 0701 3739 42FA E15C 0EA2 BF81" /* Ñnµ_..79Búá\.¢¿ */ - $"31C1 F1A3 A766 CAB8 C82E C96B 4868 D491" /* 1Áñ£§fʸÈ.ÉkHhÔ‘ */ - $"5ACB 6EED 4027 0C73 AACA 730C ECA6 DE42" /* ZËní@'.sªÊs.ì¦ÞB */ - $"38DA E07E CE64 BC49 7FDD FCCB 07B3 45BF" /* 8Úà~Îd¼I.ÝüË.³E¿ */ - $"B9DC FF13 039F D40E 43BB ACE4 B8F8 31F5" /* ¹Üÿ..ŸÔ.C»¬ä¸ø1õ */ - $"6743 9390 0B87 C9B1 194A 0200 FB53 29CD" /* gC“.‡É±.J..ûS)Í */ - $"3141 15F5 3C38 9F70 2B7E 0E46 B5A7 5C94" /* 1A.õ<8Ÿp+~.Fµ§\” */ - $"AED4 E415 1639 7B49 20DA 1541 9742 A3A6" /* ®Ôä..9{I Ú.A—B£¦ */ - $"B873 4C7C 9112 1322 7D7F 5F6E 14AB 57FC" /* ¸sL|‘.."}._n.«Wü */ - $"A01D 94EC BC05 F45B C4C4 1FC3 D61B F5D3" /*  .”ì¼.ô[ÄÄ.ÃÖ.õÓ */ - $"0E62 9C2F CAE6 C609 B0D2 803B AF5F CC7F" /* .bœ/ÊæÆÆ°Ò€;¯_Ì. */ - $"4085 5B49 F81B 0AB3 DB0C 27C1 7A95 45D6" /* @…[Iø.³Û.'Áz•EÖ */ - $"CDDD 4F06 1A20 A7FE 22F6 EA13 EB6E C723" /* ÍÝO.. §þ"öê.ënÇ# */ - $"87B9 A058 CAF9 9F59 C9C9 6AAD 8358 5147" /* ‡¹ XÊùŸYÉÉj­ƒXQG */ - $"2B3E 2FD8 506F A48B 305C 97C7 5D25 5C75" /* +>/ØPo¤‹0\—Ç]%\u */ - $"C5B1 E7B4 CBC7 C76A 2FE5 1669 302C 2318" /* űç´ËÇÇj/å.i0,#. */ - $"CB1D BB38 5B47 3563 F041 0F00 C23A B1E9" /* Ë.»8[G5cðA..Â:±é */ - $"1972 D9C9 2F2F 4013 F8EF A6CA 7E8E 705C" /* .rÙÉ//@.øï¦Ê~Žp\ */ - $"0CB6 1301 5ED4 25E6 F7D9 999D AB8F 4CAC" /* .¶..^Ô%æ÷Ù™«L¬ */ - $"6FF2 04C8 8307 016C 6E46 645B 5488 79C0" /* oò.ȃ..lnFd[TˆyÀ */ - $"C0E5 8A2A 46EB DB4C 65A0 27FC 6230 781C" /* ÀåŠ*FëÛLe 'üb0x. */ - $"EDB8 4666 1604 1937 9603 A2AA D8C3 43A6" /* í¸Ff...7–.¢ªØÃC¦ */ - $"E254 D745 866F D24A DD91 397E C575 F187" /* âT×E†oÒJÝ‘9~Åuñ‡ */ - $"193B F5F5 819B 7D57 EC83 0871 ED1B 64F6" /* .;õõ›}Wìƒ.qí.dö */ - $"E47A E1B0 65F9 67DF 5680 3642 52AA BB4B" /* äzá°eùgßV€6BRª»K */ - $"BA52 D8BA 8AF7 0A96 412A 92B2 045F 9739" /* ºRغŠ÷–A*’²._—9 */ - $"3A52 D961 6BC6 1D2E D90D 29A7 E9DE 2651" /* :RÙakÆ..Ù.)§éÞ&Q */ - $"CE3F 9921 03BC 7A7A CBFD 63E2 4C7C 9025" /* Î?™!.¼zzËýcâL|% */ - $"BCC3 D509 745E 9AE4 1675 0242 26EE E4F6" /* ¼ÃÕÆt^šä.u.B&îäö */ - $"B04B CFB3 E37F EADB 2840 E47E 0209 C8C5" /* °Kϳã.êÛ(@ä~.ÆÈÅ */ - $"56FC 6228 BB57 F43A BE32 0753 73FB EAE2" /* Vüb(»Wô:¾2.Ssûêâ */ - $"55B4 D581 42C8 10B8 AEA9 67C4 F685 982C" /* U´ÕBÈ.¸®©gÄö…˜, */ - $"3104 095F DCBD 3701 8749 9CBA A7A5 B714" /* 1.Æ_ܽ7.‡Iœº§¥·. */ - $"FDED FAA3 F034 54D8 728F 8640 4A61 560C" /* ýíú£ð4TØr†@JaV. */ - $"50D4 B224 A5F1 6715 6C8B 7EC6 BF5C 120D" /* PÔ²$¥ñg.l‹~Æ¿\.. */ - $"8797 B25E B0E1 C57E 69AF 1FF2 99C3 44B5" /* ‡—²^°áÅ~i¯.ò™ÃDµ */ - $"0508 0061 1F44 795F 27C0 511E 0796 9740" /* ...a.Dy_'ÀQ..–—@ */ - $"14FF 4C51 5651 34F3 658D 4CA8 3FBF 43CC" /* .ÿLQVQ4óeL¨?¿CÌ */ - $"8813 D372 1723 7DB5 6D44 4524 4E91 B644" /* ˆ.Ór.#}µmDE$N‘¶D */ - $"4B7D CDEC E0E0 8468 622D 87FE 80E3 E097" /* K}Íìàà„hb-‡þ€ãà— */ - $"303D 8894 1FFF 7FA6 9AAB C6E0 0B83 3EDD" /* 0=ˆ”.ÿ.¦š«Æà.ƒ>Ý */ - $"86A5 43D3 C650 0008 D364 A800 0000 0000" /* †¥CÓÆP..Ód¨..... */ - $"0000 07D7 8F92 61B9 E6E0 BCBF CD4A AB76" /* ...×’a¹æà¼¿ÍJ«v */ - $"5B6E 246A 8DFB D274 41F9 3583 773D 5165" /* [n$jûÒtAù5ƒw=Qe */ - $"2139 B773 476E DF91 33F0 8CDA F420 613F" /* !9·sGnß‘3ðŒÚô a? */ - $"9B35 33C9 8298 A661 A5DB 2CEF 1A1C BC3E" /* ›53É‚˜¦a¥Û,ï..¼> */ - $"09B4 5415 8511 4FE5 3FF8 B88C 339D C169" /* Æ´T.….Oå?ø¸Œ3Ái */ - $"9608 FF62 B2D6 285A 80A2 22C9 E4AA 5A99" /* –.ÿb²Ö(Z€¢"ÉäªZ™ */ - $"B3F5 E9D4 7FFF 7FF4 7D5C 4CC0 788F 0EB6" /* ³õéÔ.ÿ.ô}\LÀx.¶ */ - $"8024 0000 0A1E 1F40 0000 0000 0000 0000" /* €$..Â..@........ */ - $"CA54 CF6A 897B B6D7 9C90 87E9 FF6A 22A0" /* ÊTÏj‰{¶×œ‡éÿj"  */ - $"0765 4AE8 B827 B7A1 C412 4000 0000 0000" /* .eJè¸'·¡Ä.@..... */ - $"0000 2222 DAB7 AEED C4EB AFCB FF79 6610" /* ..""Ú·®íÄë¯Ëÿyf. */ - $"A362 D5F2 1401 DA9F 8978 3FC3 FF60 341C" /* £bÕò..ÚŸ‰x?Ãÿ`4. */ - $"524C CBF3 AF64 9BA4 637F F217 CA8C A4CE" /* RLËó¯d›¤c.ò.ÊŒ¤Î */ - $"A881 46DE C63F CB0B 4C86 F71C CDFF 6CDC" /* ¨FÞÆ?Ë.L†÷.ÍÿlÜ */ - $"3C86 AFD6 02EF 25B3 E392 0238 14ED F9FF" /* <†¯Ö.ï%³ã’.8.íùÿ */ - $"71EA 1A7B 7848 281D C18D 83C1 F0D1 C115" /* qê.{xH(.ÁƒÁðÑÁ. */ - $"C525 7E38 9E60 32A4 CED2 A5DE 8006 1212" /* Å%~8ž`2¤ÎÒ¥Þ€... */ - $"7136 14A1 74D1 9C7D F74C 708E 43DE 4154" /* q6.¡tÑœ}÷LpŽCÞAT */ - $"2939 179A 87BB 2AAF 7401 4404 CB30 458F" /* )9.š‡»*¯t.D.Ë0E */ - $"F1B7 EE42 3E46 458F B220 6F30 EE24 7D86" /* ñ·îB>FE² o0î$}† */ - $"2D28 3CA7 C184 60D3 4EBC 9C79 C402 02FC" /* -(<§Á„`ÓN¼œyÄ..ü */ - $"553C C62D DDC0 3D0C F12B C1FF 546D A4FF" /* U<Æ-ÝÀ=.ñ+ÁÿTm¤ÿ */ - $"5885 6B1B 9EF6 2206 8FB5 1CB0 2D3D B922" /* X…k.žö".µ.°-=¹" */ - $"644F D104 0152 70F8 BF41 4D6E 4F05 B928" /* dOÑ..Rpø¿AMnO.¹( */ - $"396A 4A92 9B1B 24AB 4611 6D95 87D6 2D7C" /* 9jJ’›.$«F.m•‡Ö-| */ - $"7546 B839 A3B1 C612 0F2A 796E 7911 5FF9" /* uF¸9£±Æ..*yny._ù */ - $"03C4 D13E EF00 2DEF 9CFE FDDE 3A2C FF3E" /* .ÄÑ>ï.-ïœþýÞ:,ÿ> */ - $"4567 F432 3673 3F84 8787 B65C 7A4F 2007" /* Egô26s?„‡‡¶\zO . */ - $"FF7C D894 A762 3872 8FA4 9563 D178 5039" /* ÿ|Ø”§b8r¤•cÑxP9 */ - $"C4BD 2EB4 0491 2A80 0000 0000 0000 0001" /* Ľ.´.‘*€........ */ - $"F172 6FA1 09F2 9F35 F3BC 2E0B 8E46 2557" /* ñro¡ÆòŸ5ó¼..ŽF%W */ - $"67C5 4F12 D1CF F08C BC61 0F89 E4A4 9249" /* gÅO.ÑÏðŒ¼a.‰ä¤’I */ - $"2492 4924 9249 221B 4708 65ED 84CA FDD2" /* $’I$’I".G.eí„ÊýÒ */ - $"D193 7C69 0CA3 95EF DDF2 33FF 556E D976" /* Ñ“|i.£•ïÝò3ÿUnÙv */ - $"2E4D FDCE E0FC 8669 83FF 768E 3CBB 179B" /* .MýÎàü†iƒÿvŽ<».› */ - $"DBB9 253D BFFF 79F1 5006 27BF 5548 40B9" /* Û¹%=¿ÿyñP.'¿UH@¹ */ - $"BADC F963 10BA 8BD9 367F E03A 6E29 5908" /* ºÜùc.º‹Ù6.à:n)Y. */ - $"0000 0000 0000 0000 0028 8080 0000 000A" /* .........(€€... */ - $"6370 D000 0142 83C0 0000 0011 CD3F D940" /* cpÐ..BƒÀ....Í?Ù@ */ - $"0022 C990 C912 501C 14FC 1926 5412 0E88" /* ."ÉÉ.P..ü.&T..ˆ */ - $"C32F B2ED E7A4 9249 2492 4924 9249 247E" /* Ã/²í礒I$’I$’I$~ */ - $"FB2C 999E D2ED 6DFF 783B 4C3A 3DB7 14A5" /* û,™žÒímÿx;L:=·.¥ */ - $"872C 2B85 8FC2 72EA 3412 FCA8 32E0 7A2E" /* ‡,+…Ârê4.ü¨2àz. */ - $"B109 F66C 3F99 7C32 2761 1522 7B9C 1851" /* ±Æöl?™|2'a."{œ.Q */ - $"B3CB 5373 0652 CE79 D8C5 B721 03D7 CD81" /* ³ËSs.RÎyØÅ·!.×Í */ - $"A03A CD5F CECF B58A 4122 7ED2 9FFF 7FFF" /*  :Í_ÎϵŠA"~ÒŸÿ.ÿ */ - $"1575 DF0B 430B 0A6C 6108 B421 B33F E9FA" /* .uß.C.Âla.´!³?éú */ - $"AC06 391C EB01 17F4 3BF4 4CDA 87DA 516F" /* ¬.9.ë..ô;ôLÚ‡ÚQo */ - $"EFA3 E7F9 651A 6902 C269 AF79 2EA4 D861" /* ï£çùe.i.Âi¯y.¤Øa */ - $"CBC1 7F37 146D 4163 38BB B16B AAD4 9AC2" /* ËÁ.7.mAc8»±kªÔšÂ */ - $"424A B3CE 1368 78EF B4B0 FE68 2FBA 0CB2" /* BJ³Î.hxï´°þh/º.² */ - $"E672 A89D 999E 64CD 417A 98A3 8458 0603" /* ær¨™ždÍAz˜£„X.. */ - $"C03D 9F9E B15E 8418 0FC6 F3E0 BA39 A3C1" /* À=Ÿž±^„..Æóàº9£Á */ - $"9929 0547 9C29 FC76 57CA B1E5 F887 AE73" /* ™).Gœ)üvWÊ±åø‡®s */ - $"78AA BA9F FF7F C07C 00F0 28E9 7533 0FC1" /* xªºŸÿ.À|.ð(éu3.Á */ - $"097C 4ABC F3CB 6604 EEC2 5194 A1F2 A201" /* Æ|J¼óËf.îÂQ”¡ò¢. */ - $"D6B0 C5F3 4AA3 8FD8 34DC A382 0CD4 134E" /* Ö°ÅóJ£Ø4Ü£‚.Ô.N */ - $"8275 37F5 2388 74C6 1A6C F889 1037 A348" /* ‚u7õ#ˆtÆ.lø‰.7£H */ - $"ACB4 EFF5 B446 564C C6DC 75F7 8445 013F" /* ¬´ïõ´FVLÆÜu÷„E.? */ - $"79FF 407B 05EE 9C66 8A53 FF7A 367A 6D06" /* yÿ@{.îœfŠSÿz6zm. */ - $"9ADF CBDD 25B5 0629 78A0 A071 35BA EE49" /* šßËÝ%µ.)x  q5ºîI */ - $"64E9 3EA3 9A07 917A 66E3 090C B916 3BF5" /* dé>£š.‘zfãÆ.¹.;õ */ - $"10D7 77D5 7281 248E 3F09 0C0F 319E 7F71" /* .×wÕr$Ž?Æ..1ž.q */ - $"98DA A34A C823 06A4 6BFD 8EA1 8C71 EB25" /* ˜Ú£JÈ#.¤kýŽ¡Œqë% */ - $"E5FC 0BA1 DB35 9514 A229 56F0 7E42 9FD0" /* åü.¡Û5•.¢)Vð~BŸÐ */ - $"5435 3CB7 AED9 0A4F 625B A493 D1B2 C654" /* T5<·®ÙÂOb[¤“ѲÆT */ - $"F691 87F9 F8E9 7459 1823 E06B 57D6 C638" /* ö‘‡ùøétY.#àkWÖÆ8 */ - $"7EE2 8CA0 1D79 4000 0000 0000 0000 0000" /* ~⌠.y@......... */ - $"0000 0000 442A 0D8C 8522 4E1A 3752 5040" /* ....D*.Œ…"N.7RP@ */ - $"E53D EE69 0B70 A6BF 9D0D D725 D66E 8D50" /* å=îi.p¦¿.×%ÖnP */ - $"10DB 966B 649B 0CA3 958B 6457 90CC 214A" /* .Û–kd›.£•‹dWÌ!J */ - $"C4C0 27A2 95F4 98AD 14C2 1892 EBE7 864B" /* ÄÀ'¢•ô˜­.Â.’ëç†K */ - $"18AA 55C7 50D2 4A15 7F4E 566A 9C13 9C52" /* .ªUÇPÒJ..NVjœ.œR */ - $"AC77 FE86 B3A2 5D92 D112 516C BA99 60EE" /* ¬wþ†³¢]’Ñ.Qlº™`î */ - $"221A F194 D9DF FF5F FF6B 77F9 4B01 4F8F" /* ".ñ”Ùßÿ_ÿkwùK.O */ - $"F681 8614 2F3E 31E3 EABB 7C34 6025 A491" /* ö†./>1ãê»|4`%¤‘ */ - $"9BC1 A348 628D 34AE 751A F8F7 7521 7F48" /* ›Á£Hb4®u.ø÷u!.H */ - $"68A4 6B9C F66F 252D 6021 9C97 39AB B637" /* h¤kœöo%-`!œ—9«¶7 */ - $"3B5D E8FB 56EE 824A F65D C84D E23C 7BF2" /* ;]èûVî‚Jö]ÈMâ<{ò */ - $"5400 0000 0000 0000 0000 0000 0014 080D" /* T............... */ - $"B05B 4688 1F60 376D 2209 1DE1 7E75 CD30" /* °[Fˆ.`7m"Æ.á~uÍ0 */ - $"5D2F 627B A077 8D86 2001 62AF 1031 6853" /* ]/b{ w† .b¯.1hS */ - $"2A8E 0308 16F6 C4EC E5B6 814A 1DF2 23EB" /* *Ž...öÄìå¶J.ò#ë */ - $"8C16 64F9 A1ED 8A1F 346E 2E1C 5ACB 4376" /* Œ.dù¡íŠ.4n..ZËCv */ - $"5014 B885 5212 5294 8F4F DF56 7339 8A5D" /* P.¸…R.R”OßVs9Š] */ - $"03C0 A05F D60B 5D58 2677 CD67 A4EE 3803" /* .À _Ö.]X&wÍg¤î8. */ - $"B2B1 9AD5 A41A C3EF 3281 3FFF 780A A5BD" /* ²±šÕ¤.Ãï2?ÿxÂ¥½ */ - $"861B 62F7 456F 1021 93CD A115 BD61 7E4C" /* †.b÷Eo.!“Í¡.½a~L */ - $"2306 D6BF D5D9 18AF 12BB 22D9 E32E 6976" /* #.Ö¿ÕÙ.¯.»"Ùã.iv */ - $"9282 5E47 A842 7983 2C87 64C5 6215 A0D9" /* ’‚^G¨Byƒ,‡dÅb. Ù */ - $"E45A EFAE 74F3 E5E5 7679 A7C0 D366 649C" /* äZï®tóååvy§ÀÓfdœ */ - $"9EF3 D763 2D6C D0AD 48E5 7A2A 9454 8B34" /* žó×c-lЭHåz*”T‹4 */ - $"B7FF 7FCD F604 90E4 2716 1C40 DD8A 8B1A" /* ·ÿ.Íö.ä'..@ÝŠ‹. */ - $"24C8 2F0C 06AC 999A 58B7 C15E E6B1 431B" /* $È/..¬™šX·Á^æ±C. */ - $"73D1 FEC5 5182 4A2D 33CB E920 AFBE 9F5A" /* sÑþÅQ‚J-3Ëé ¯¾ŸZ */ - $"0478 C2F3 80D7 241A 2E07 8BF3 FD3F 471A" /* .xÂó€×$...‹óý?G. */ - $"7C53 1C79 2F17 C32F D5C6 B977 E2F9 9D80" /* |S.y/.Ã/ÕÆ¹wâù€ */ - $"558B 7336 75BC 5945 3986 BD1C CE95 EA07" /* U‹s6u¼YE9†½.Εê. */ - $"7152 C778 65AD 73E9 F1B7 24D4 BDB0 7F24" /* qRÇxe­séñ·$Ô½°.$ */ - $"BACD 3C51 D344 33D7 21C7 BE9A 915D 2808" /* ºÍh?.C®0Î.ÿg.x„˜ */ - $"08D8 E1D9 3F1A E50B EB7C E564 6F4C 57F3" /* .ØáÙ?.å.ë|ådoLWó */ - $"9E60 5F9B 244E 83A9 33C9 668A 3951 7E33" /* ž`_›$Nƒ©3ÉfŠ9Q~3 */ - $"31D7 01E7 0342 6BC0 7FD1 7488 2BE1 9AD1" /* 1×.ç.BkÀ.Ñtˆ+ášÑ */ - $"1938 BBD8 7710 BAD3 BB92 2C80 A162 B2EF" /* .8»Øw.ºÓ»’,€¡b²ï */ - $"3FEA 6FC2 47D2 0D0E 28AB 03DA 4B34 4027" /* ?êoÂGÒ..(«.ÚK4@' */ - $"7FFD 87BC 9D96 E076 3C00 0000 0000 0000" /* .ý‡¼–àv<....... */ - $"0000 0000 0000 136C 1721 95F0 1991 3F80" /* .......l.!•ð.‘?€ */ - $"65DC 1F3F AEA0 BE5C 71D2 94CE C7FF 7FFF" /* eÜ.?® ¾\qÒ”ÎÇÿ.ÿ */ - $"7917 BEAD D458 935A 563C CC9C 6C0D CFFF" /* y.¾­ÔX“ZV<Ìœl.Ïÿ */ - $"55DA 93C2 F199 3D1E C4C2 3C5F A7BC D48E" /* UÚ“Âñ™=.ÄÂ<_§¼ÔŽ */ - $"4980 037B 9FCC F7BC 6E1E 78CD 2838 DC58" /* I€.{ŸÌ÷¼n.xÍ(8ÜX */ - $"F156 C827 88EA BFF7 BD95 BBD6 FE11 C305" /* ñVÈ'ˆê¿÷½•»Öþ.Ã. */ - $"A1D2 FA2A EA0B E56B 285B 91FE 551E F5E2" /* ¡Òú*ê.åk([‘þU.õâ */ - $"687C 5A51 1A67 64D3 BD76 4937 F455 4C94" /* h|ZQ.gdÓ½vI7ôUL” */ - $"6A7E B888 CB40 7AA3 DDEE 8BD8 2D9F 1EB6" /* j~¸ˆË@z£Ýî‹Ø-Ÿ.¶ */ - $"48DF 9C66 6BF3 A26A 3CC4 2D4D E47A 6D9A" /* Hßœfkó¢j<Ä-Mäzmš */ - $"DAB1 1DA4 083A D994 4416 C0D2 2E63 539E" /* Ú±.¤.:Ù”D.ÀÒ.cSž */ - $"7274 3C04 85F4 D7B5 EDEF 507A B2B7 1832" /* rt<.…ô×µíïPz²·.2 */ - $"6615 A186 4A80 0000 0000 0000 0000 0000" /* f.¡†J€.......... */ - $"07CF BF6C 3626 7453 BF7D 8B57 26C9 F556" /* .Ï¿l6&tS¿}‹W&ÉõV */ - $"1F12 0BB9 5DC4 797D 3C69 7DB2 2FFF 7F33" /* ...¹]Äy}LJ¬ */ - $"3161 5289 3A6A FC0B E254 CAFA 6A32 2F8C" /* 1aR‰:jü.âTÊúj2/Œ */ - $"8B76 FA87 DADD 0333 2250 0058 F5C6 21CD" /* ‹vú‡ÚÝ.3"P.XõÆ!Í */ - $"D094 5CD5 10DD 2FA0 B74B 06FB AA9B 2B62" /* Д\Õ.Ý/ ·K.ûª›+b */ - $"E36D 708E B8F5 0739 3097 7F03 47BE 48F5" /* ãmpޏõ.90—..G¾Hõ */ - $"D079 1641 CA5D DF28 C92B 0EFA B18F CE6F" /* Ðy.AÊ]ß(É+.ú±Îo */ - $"6648 DB26 DE5C 1D17 2BD3 28AF DD89 801C" /* fHÛ&Þ\..+Ó(¯Ý‰€. */ - $"AB0D 40D1 9016 D542 63A0 8222 9D7A F0F5" /* «.@Ñ.ÕBc ‚"zðõ */ - $"A171 2D28 3D2C C22E 09AB 3AA9 C50B 7545" /* ¡q-(=,Â.Æ«:©Å.uE */ - $"4C64 18E8 8E67 3A7D DDBE 36CE 2F97 5AD0" /* Ld.èŽg:}ݾ6Î/—ZÐ */ - $"E4F0 8AFB 6071 6268 E5F6 09EA 245F 9F87" /* äðŠû`qbhåöÆê$_Ÿ‡ */ - $"E304 242C 234C 9FF7 1D0A 11C7 4FE7 20BC" /* ã.$,#LŸ÷.Â.ÇOç ¼ */ - $"EC58 1A4B 5A8E DE45 0E5F 4A03 4C8A 5051" /* ìX.KZŽÞE._J.LŠPQ */ - $"E410 4405 321B BD82 AC69 94F7 AA5E 5C65" /* ä.D.2.½‚¬i”÷ª^\e */ - $"436F 861A C95F 1AB0 2E2B 9689 AA43 B247" /* Co†.É_.°.+–‰ªC²G */ - $"6DE3 4E9E F205 F221 D175 86BB 4434 C0EE" /* mãNžò.ò!Ñu†»D4Àî */ - $"C472 EA2B 499D 63FA B4C8 FAB3 91F3 060D" /* Ärê+Icú´Èú³‘ó.. */ - $"C203 A636 1D98 6B00 D678 0D3C BE92 309E" /* Â.¦6.˜k.Öx.<¾’0ž */ - $"759A 11D4 B514 24FB E4D2 7089 76DE 42DD" /* uš.Ôµ.$ûäÒp‰vÞBÝ */ - $"5338 4798 5943 4A6B 500A 472E 77BE AEBD" /* S8G˜YCJkPÂG.w¾®½ */ - $"93B0 117A 0E2D A8E4 DFED 5A76 1775 2BFF" /* “°.z.-¨äßíZv.u+ÿ */ - $"1A84 CBE1 B007 D3EA 11B0 9BB8 4B3F BB56" /* .„Ëá°.Óê.°›¸K?»V */ - $"33F6 B242 4C5C A63D 638F 1BA5 0AC5 698D" /* 3ö²BL\¦=c.¥ÂÅi */ - $"45B3 D343 D769 FEEE C45D 50B0 9AAA 4146" /* E³ÓC×iþîÄ]P°šªAF */ - $"0BFA F8CC 694B A42D FC1E C3F1 54F0 D3F9" /* .úøÌiK¤-ü.ÃñTðÓù */ - $"F051 5182 D373 5210 38AA F9B0 D3F3 6B07" /* ðQQ‚ÓsR.8ªù°Óók. */ - $"C944 7FCA 2126 D17A 01B1 7763 CDE8 D5FF" /* ÉD.Ê!&Ñz.±wcÍèÕÿ */ - $"00F4 08D7 4060 339C D8E2 7EA4 B00D 3171" /* .ô.×@`3œØâ~¤°.1q */ - $"ABB0 7F47 D146 13B9 398E 14B3 C55D 10AF" /* «°.GÑF.¹9Ž.³Å].¯ */ - $"8D0A 2444 26A0 EFEA 6CB2 51FD EA28 0FD7" /* Â$D& ïêl²Qýê(.× */ - $"4E2F F54F 0066 62F2 66F3 334C 5D9D 77ED" /* N/õO.fbòfó3L]wí */ - $"F3D0 12ED 7A95 89A1 B928 8429 DCFB 8C68" /* óÐ.íz•‰¡¹(„)ÜûŒh */ - $"C35C 3C77 5D7D 5180 A012 ADA3 AE60 AAE0" /* Ã\rœ`u¨&i". */ - $"E140 D538 7CD4 5763 D708 6D5E 45C0 AE61" /* á@Õ8|ÔWc×.m^EÀ®a */ - $"EC8B E180 1D9C 712C 4DB9 F177 6733 0F76" /* ì‹á€.œq,M¹ñwg3.v */ - $"9A72 7AD0 D18D 2BE6 9DCE 6294 4092 CE8E" /* šrzÐÑ+æÎb”@’ÎŽ */ - $"ACED 8B00 B050 AE53 C09C 98D6 CFD1 4208" /* ¬í‹.°P®SÀœ˜ÖÏÑB. */ - $"DEB2 AF01 5ED7 E1F4 4EAA 0B09 2263 FE09" /* Þ²¯.^×áôNª.Æ"cþÆ */ - $"2771 6EB7 9181 1DFE A5DD 9A12 4592 02FD" /* 'qn·‘.þ¥Ýš.E’.ý */ - $"5F2D D4D6 5C15 B454 B07C 9B6A B9F9 AEC2" /* _-ÔÖ\.´T°|›j¹ù®Â */ - $"D883 1F5F B9B1 8258 6732 C7E3 5C90 DB16" /* ؃._¹±‚Xg2Çã\Û. */ - $"42EC D875 2B9D FEAF 1FED BD80 261D BAAE" /* BìØu+þ¯.í½€&.º® */ - $"3799 FDC7 DBE5 E769 A11C 3304 5D3B 419C" /* 7™ýÇÛåçi¡.3.];Aœ */ - $"5844 E615 EE7A 5DCE 272E D055 121D 1F84" /* XDæ.îz]Î'.ÐU...„ */ - $"2EC6 E6B1 A7DA D03A D600 6D58 4FF0 9196" /* .Ææ±§ÚÐ:Ö.mXOð‘– */ - $"FBCA CDDC 1B8D 9D1A BB7B 3782 0F3F 626C" /* ûÊÍÜ..»{7‚.?bl */ - $"26AA AF34 6A20 8210 1E96 ED21 5A26 EF04" /* &ª¯4j ‚..–í!Z&ï. */ - $"5F66 5C2D A8A4 F3BC 1871 AD1D FE4D 8C8B" /* _f\-¨¤ó¼.q­.þMŒ‹ */ - $"F1E5 A382 654B 08C7 EFC4 BFBA C29B 5C73" /* ñ壂eK.ÇïÄ¿ºÂ›\s */ - $"2420 9390 3B75 6DE6 0208 6F4F BB53 B2AA" /* $ “;umæ..oO»S²ª */ - $"AD28 4360 1A8A 4301 088C 6F17 68CC 9180" /* ­(C`.ŠC..Œo.hÌ‘€ */ - $"D757 7012 3BE3 C4AB DF05 97B9 4B57 B6FC" /* ×Wp.;ãÄ«ß.—¹KW¶ü */ - $"7693 36DE 89E8 E2AB 4352 A782 4520 DA28" /* v“6Þ‰èâ«CR§‚E Ú( */ - $"F1F2 34D6 2EAE E401 ED61 1E2E 4E74 D4EB" /* ñò4Ö.®ä.ía..NtÔë */ - $"98A9 94AD F856 8EE1 E3D0 06FC AA37 31E5" /* ˜©”­øVŽáãÐ.üª71å */ - $"1047 113E C151 CE86 B6A4 0F82 E5D9 CE50" /* .G.>ÁQΆ¶¤.‚åÙÎP */ - $"57A8 8F86 AFAD 21D1 2C4C F181 8BD7 106C" /* W¨†¯­!Ñ,Lñ‹×.l */ - $"3C77 649E 038E 3C63 66F4 EE1A 2906 755C" /* 1dÄ>Ta */ - $"4BD0 139E 6390 0E05 4793 56B8 5080 CBF6" /* KÐ.žc..G“V¸P€Ëö */ - $"9E70 BEA1 FB26 DD1E AEE1 E78D 0D32 FA02" /* žp¾¡û&Ý.®áç.2ú. */ - $"43FC FBC6 7464 2C9A 14AD 2C7C 0969 995F" /* CüûÆtd,š.­,|Æi™_ */ - $"6363 3037 9C34 C5F8 42DF B339 D2B0 5C45" /* cc07œ4ÅøBß³9Ò°\E */ - $"6130 509D 28E7 D3A7 9308 74ED 9265 B7F9" /* a0P(çÓ§“.tí’e·ù */ - $"0F54 D265 33D9 EB57 07C4 852B E3C8 771F" /* .TÒe3ÙëW.Ä…+ãÈw. */ - $"21F8 ADA3 D807 625C 513A E395 604B 0D6A" /* !ø­£Ø.b\Q:ã•`K.j */ - $"A9FC 297E 63AF 7622 23B6 63E1 EF25 F572" /* ©ü)~c¯v"#¶cáï%õr */ - $"01B0 400D 18C6 C9FA 6AF5 3E26 4199 6E68" /* .°@..ÆÉújõ>&A™nh */ - $"99B5 B3A9 F861 3419 C6C7 B65C D0F6 353B" /* ™µ³©øa4.ÆÇ¶\Ðö5; */ - $"6551 1B0A 9D82 1F07 4185 8C46 5867 DC22" /* eQ.‚..A…ŒFXgÜ" */ - $"BD38 AFF7 27BA 1114 9266 5EF4 1EA9 89B4" /* ½8¯÷'º..’f^ô.©‰´ */ - $"A634 E917 65E5 502E 8028 D24E 725F 0C22" /* ¦4é.eåP.€(ÒNr_." */ - $"1513 7B38 5FEA 3150 520B 6D8A 03D8 F796" /* ..{8_ê1PR.mŠ.Ø÷– */ - $"D183 D8FA 82E2 C147 B662 593B 9FC8 A2A0" /* уØú‚âÁG¶bY;ŸÈ¢  */ - $"C63B D151 D905 072C 02E5 919B 0BE9 6D76" /* Æ;ÑQÙ..,.å‘›.émv */ - $"4BEF 7D51 FF67 C2F2 BB61 DDD2 7981 0B7E" /* Kï}QÿgÂò»aÝÒy.~ */ - $"D406 3679 DFA4 FAE3 A33C 28AC 06C6 93C1" /* Ô.6yߤúã£<(¬.Æ“Á */ - $"B82F 53DB 1EB8 A6F3 5A24 A44A 1A76 9204" /* ¸/SÛ.¸¦óZ$¤J.v’. */ - $"6543 FC80 18DA 3C5D 395B 01DC D7E8 C21E" /* eCü€.Ú<]9[.Ü×èÂ. */ - $"A66C 9AE3 08D6 DBFC EE95 9E73 F71D 7CCA" /* ¦lšã.ÖÛüs÷.|Ê */ - $"2A6A F6D2 11D9 AC28 BEDE 8E1B 65EF A995" /* *jöÒ.Ù¬(¾ÞŽ.eï©• */ - $"F7B5 B19D 5F63 F42B D0AD D69A BD47 1EED" /* ÷µ±_cô+Э֚½G.í */ - $"2E5C 0276 3AEA F6D9 6E3F 314C 7F5F 52C3" /* .\.v:êöÙn?1L._Rà */ - $"093D C8A9 23E4 C154 5587 294A 98A9 0643" /* Æ=È©#äÁTU‡)J˜©.C */ - $"AF18 0D20 51A4 6FE1 F326 11E7 5A91 2919" /* ¯.. Q¤oáó&.çZ‘). */ - $"DD53 B13B 2CB3 DE77 FAB9 420E BAFB 305B" /* ÝS±;,³Þwú¹B.ºû0[ */ - $"E9AB 7A2B 623B 78FE 346D 8BB6 BA40 AE40" /* é«z+b;xþ4m‹¶º@®@ */ - $"5B6D 6D53 81A1 076D 7058 E792 E410 3FA7" /* [mmS¡.mpXç’ä.?§ */ - $"AD06 7E2E 5158 D129 9233 6E1D 6B7C C701" /* ­.~.QXÑ)’3n.k|Ç. */ - $"D61D 42D8 472F D5E2 2710 0B6C 828A 2352" /* Ö.BØG/Õâ'..l‚Š#R */ - $"D400 65FA E227 A938 1832 18CC 2BCE 19A8" /* Ô.eúâ'©8.2.Ì+Î.¨ */ - $"773C 3CB1 C6BD D722 8EE1 8AE2 4D4B 97D4" /* w<<±Æ½×"ŽáŠâMK—Ô */ - $"1763 37E4 2F93 8578 534E 0BA9 B493 3B80" /* .c7ä/“…xSN.©´“;€ */ - $"F018 28BE 2A52 15B2 8499 08A8 005F F028" /* ð.(¾*R.²„™.¨._ð( */ - $"ADFD ACEB 238F 922A 75E4 1C65 F2C3 F14B" /* ­ý¬ë#’*uä.eòÃñK */ - $"213D 7263 4A9A 1C80 12BD 5895 0EC8 B955" /* !=rcJš.€.½X•.ȹU */ - $"8CD0 FB81 63CF FF7F B545 85DF E201 36A9" /* ŒÐûcÏÿ.µE…ßâ.6© */ - $"E524 1BD6 EDDA 7C33 8CD2 E114 BA93 51E0" /* å$.ÖíÚ|3ŒÒá.º“Qà */ - $"A113 A12A FBEA 8570 B5FE E1B6 7963 5B31" /* ¡.¡*ûê…pµþá¶yc[1 */ - $"512A 99B1 3A59 E50E C584 DD7F FF7F FF7E" /* Q*™±:Yå.Å„Ý.ÿ.ÿ~ */ - $"D3C9 019B 1FBC DB70 2C2A 14A6 E7F1 0147" /* ÓÉ.›.¼Ûp,*.¦çñ.G */ - $"5F3A A36C 6F8A 9038 ABD8 EB8F FF7F FE79" /* _:£loŠ8«Øëÿ.þy */ - $"6C12 2D6F FD6D F9A0 0392 0E82 0296 3C14" /* l.-oýmù .’.‚.–<. */ - $"FEFA 803C A3D4 1049 CF30 E22F 6542 7ABF" /* þú€<£Ô.IÏ0â/eBz¿ */ - $"378E 66B2 9091 D396 B953 DCF5 66D3 C5B5" /* 7Žf²‘Ó–¹SÜõfÓŵ */ - $"7719 028C 5C0F F898 00A1 0C1D E181 F9C7" /* w..Œ\.ø˜.¡..áùÇ */ - $"2E46 06D4 D623 1256 EFAE 89E3 4FFF 7FDD" /* .F.ÔÖ#.VﮉãOÿ.Ý */ - $"F00D 4E11 65D5 B8F9 7C0B A045 AC4A 1E42" /* ð.N.eÕ¸ù|. E¬J.B */ - $"221C B512 5480 EF2D CB80 A089 3603 2CA1" /* ".µ.T€ï-Ë€ ‰6.,¡ */ - $"391C 7925 C817 92E3 8438 C438 08D1 0637" /* 9.y%È.’ã„8Ä8.Ñ.7 */ - $"9FCD F4C2 C04C 40BB A484 5043 0C1E 7C85" /* ŸÍôÂÀL@»¤„PC..|… */ - $"D7F6 1F6D BFC7 60AA 4D18 A399 9A13 CCD0" /* ×ö.m¿Ç`ªM.£™š.ÌÐ */ - $"26DA 3F97 24CB E902 0668 67F7 FE63 7A2E" /* &Ú?—$Ëé..hg÷þcz. */ - $"16D6 987F FF7F AFC1 5C35 E63D BA36 6227" /* .Ö˜.ÿ.¯Á\5æ=º6b' */ - $"FF7C FD39 8B8B 1A5F 6026 831B 0764 8805" /* ÿ|ý9‹‹._`&ƒ..dˆ. */ - $"E40B 0F19 7FFF 7FFC DEBC DD5B 9008 0000" /* ä....ÿ.üÞ¼Ý[... */ - $"0C24 1D44 4641 3BC8 4248 E229 62D2 088D" /* .$.DFA;ÈBHâ)bÒ. */ - $"117F DE8D 0B52 C3FD 1DD9 3823 F138 4C98" /* ..Þ.RÃý.Ù8#ñ8L˜ */ - $"58A8 2683 519C F914 4961 5226 891F F863" /* X¨&ƒQœù.IaR&‰.øc */ - $"3FF2 B19F 113D BFEF 9D12 30C6 66BD E2A6" /* ?ò±Ÿ.=¿ï.0Æf½â¦ */ - $"5D8C BE7E BE19 3D8F 03F2 5D26 FF7F FF7E" /* ]Œ¾~¾.=.ò]&ÿ.ÿ~ */ - $"A82B 5E03 E7A8 E8F1 8C4D B6F1 F0E2 FC36" /* ¨+^.ç¨èñŒM¶ñðâü6 */ - $"DE7A 2F55 38B1 B436 2E50 7D25 E3F0 82C8" /* Þz/U8±´6.P}%ãð‚È */ - $"580F 0D19 C280 415C 2A7F FCD9 C720 E649" /* X...€A\*.üÙÇ æI */ - $"4064 2624 04AC 0B71 41FD 3937 8359 4137" /* @d&$.¬.qAý97ƒYA7 */ - $"8CA9 B642 C318 BD37 82D3 B786 8217 3252" /* Œ©¶BÃ.½7‚Ó·†‚.2R */ - $"44EA 4598 57D2 2F66 957F 39FE D712 F449" /* DêE˜WÒ/f•.9þ×.ôI */ - $"213A BEBB B6CC F551 FF7F EB0A AE45 8497" /* !:¾»¶ÌõQÿ.ë®E„— */ - $"0F4C FD34 4090 01FE CFC8 51AA C32A 7D95" /* .Lý4@.þÏÈQªÃ*}• */ - $"D414 2609 E22F 1B7D E10E 97BB 05D1 9D04" /* Ô.&Æâ/.}á.—».Ñ. */ - $"0592 9271 0D39 AB59 F165 0D09 549C B4E3" /* .’’q.9«Yñe.ÆTœ´ã */ - $"AEE5 555F 00A3 5E0A E4D3 BAFE 1EC6 2FCE" /* ®åU_.£^ÂäÓºþ.Æ/Î */ - $"FB04 C9BC 71D8 A42D 2F70 9FE1 EC17 C31D" /* û.ɼqؤ-/pŸáì.Ã. */ - $"ECB2 0A82 EFB1 914C F6D2 E54C 5316 B6C4" /* ì²Â‚ﱑLöÒåLS.¶Ä */ - $"4FFF 653B FD6E 27A6 9959 244B F458 B35C" /* Oÿe;ýn'¦™Y$KôX³\ */ - $"865C EB94 2CD7 7343 B74C C211 8A4D 2A99" /* †\ë”,×sC·LÂ.ŠM*™ */ - $"732E 3B43 CEAC C300 A520 924D 6F1F 8295" /* s.;CάÃ.¥ ’Mo.‚• */ - $"DF36 1FD4 E8F0 9221 6313 1B33 0C98 2721" /* ß6.Ôèð’!c..3.˜'! */ - $"8F55 5BA1 0E46 A755 1D7F A914 458D 9FFF" /* U[¡.F§U..©.EŸÿ */ - $"33CF 4CE3 AFC6 3383 BC4D A7E9 F546 FDCB" /* 3ÏLã¯Æ3ƒ¼M§éõFýË */ - $"8276 7778 2BBA EF7C 3677 6251 58C0 9EFF" /* ‚vwx+ºï|6wbQXÀžÿ */ - $"526C C883 6CFF 7FFF 7D4C 3F9F BD74 6BE9" /* Rlȃlÿ.ÿ}L?Ÿ½tké */ - $"B6EB 9003 823B 235D 6AD9 B382 FC45 F10C" /* ¶ë.‚;#]jÙ³‚üEñ. */ - $"8282 90ED 9D47 E949 FADC 7B04 1C1C 9EF1" /* ‚‚íGéIúÜ{...žñ */ - $"1ABB 270D 07BE 1943 4E14 70E0 48FF 81EE" /* .»'..¾.CN.pàHÿî */ - $"CE8A 5AAD 3CE9 090D 3126 F96A AEBA 5853" /* ΊZ­<éÆ.1&ùj®ºXS */ - $"D02E ADE8 4614 E2B7 2E7E 3DB6 DE6A 77A8" /* Ð.­èF.â·.~=¶Þjw¨ */ - $"48D0 2DBB BAF4 E94C 735D 27D6 87FF 7F80" /* HÐ-»ºôéLs]'Ö‡ÿ.€ */ - $"5BCC 3CA6 1168 D9E0 38B4 22B2 2154 02AA" /* [Ì<¦.hÙà8´"²!T.ª */ - $"A1FF 6D87 EB2B F3EB 3814 9F74 DEF3 4D86" /* ¡ÿm‡ë+óë8.ŸtÞóM† */ - $"ED68 7E75 9E81 1FD9 170B E013 7E4D 97B3" /* íh~už.Ù..à.~M—³ */ - $"51B0 6B2A 42AF EEB4 899B D2A2 6AC9 8EBF" /* Q°k*B¯î´‰›Ò¢jÉŽ¿ */ - $"2858 9FFC 5050 3364 8F2D 313E 94A9 5ED5" /* (XŸüPP3d-1>”©^Õ */ - $"6213 E9DD 6FF6 5813 72DA FE40 0F70 06C4" /* b.éÝoöX.rÚþ@.p.Ä */ - $"FF7D 053C 3E69 C976 DDFF 02D9 4688 D8D7" /* ÿ}.<>iÉvÝÿ.ÙFˆØ× */ - $"8DEF 5187 FCA3 40EE 3167 B6DD 7EE6 42AB" /* ïQ‡ü£@î1g¶Ý~æB« */ - $"B07A DB20 DC1D 7016 631F 8FB0 C83A 9CC2" /* °zÛ Ü.p.c.°È:œÂ */ - $"66B9 304B 74F5 03F7 217C D3E3 6000 ECE6" /* f¹0Ktõ.÷!|Óã`.ìæ */ - $"A319 FD9E 4131 7E74 59C6 FB3F 1B51 FE89" /* £.ýžA1~tYÆû?.Qþ‰ */ - $"52D3 C845 1BF0 4BFE 3BAE 4940 9830 8E9C" /* RÓÈE.ðKþ;®I@˜0Žœ */ - $"F843 F6A2 218E B2E2 8092 8E0E 3889 8137" /* øCö¢!Ž²â€’Ž.8‰7 */ - $"583C 394F CCE6 3D1B 37B8 C9A4 D805 B9E4" /* X<9OÌæ=.7¸É¤Ø.¹ä */ - $"A037 E45D 1167 9627 81E0 538C 1B6D EA0E" /*  7ä].g–'àSŒ.mê. */ - $"18CD 8E3C EE0C 5E0C B048 8DD2 C804 CA38" /* .ÍŽ<î.^.°HÒÈ.Ê8 */ - $"8678 CAA9 5EE1 8B6C E7D9 FDE1 5C14 D52A" /* †xÊ©^á‹lçÙýá\.Õ* */ - $"67F3 8A12 F698 857A 5692 1FB3 FF27 FE1B" /* góŠ.ö˜…zV’.³ÿ'þ. */ - $"7E31 5D25 B4A2 3647 FF07 064A 4D7B F160" /* ~1]%´¢6Gÿ..JM{ñ` */ - $"62D7 81CE 0940 AE5F CAEB F1A6 10C4 CB0E" /* b×ÎÆ@®_Êëñ¦.ÄË. */ - $"3D77 2C40 0146 8C72 B765 F6A9 3047 E748" /* =w,@.FŒr·eö©0GçH */ - $"0239 A725 8B4C 56F0 7E86 9A24 53D7 4832" /* .9§%‹LVð~†š$S×H2 */ - $"7924 73CB 4431 4977 0487 03FC F1B3 A21C" /* y$sËD1Iw.‡.üñ³¢. */ - $"2792 0B05 8183 8348 8EC0 2635 47D9 B51D" /* '’..ƒƒHŽÀ&5GÙµ. */ - $"CE40 1FA4 20C5 93A8 BEB4 B8CD 93D8 A79E" /* Î@.¤ Å“¨¾´¸Í“اž */ - $"62C5 846C 964D 0404 BE21 3AA5 9EC3 4450" /* bÅ„l–M..¾!:¥žÃDP */ - $"FAEE 938A A428 E4D0 7F1B 46A8 7AEC 97FB" /* ú¤(äÐ..F¨zì—û */ - $"1AFF 71DA F26D B5B1 E6F2 66B4 865E 1F12" /* .ÿqÚòmµ±æòf´†^.. */ - $"CE0F 3A8A EDF1 6321 BC5A 22D5 D3D6 BE19" /* Î.:Šíñc!¼Z"ÕÓÖ¾. */ - $"671A 38C3 11E8 FC9D 93AC 895A 1B84 7C9B" /* g.8Ã.èü“¬‰Z.„|› */ - $"979F 5DC5 BBE6 19A8 5D03 BE83 6FA4 B8F2" /* —Ÿ]Å»æ.¨].¾ƒo¤¸ò */ - $"AFCD 8115 B21B C1D5 80B4 5E20 3B19 9E48" /* ¯Í.².ÁÕ€´^ ;.žH */ - $"29C0 68DA F799 EC0D 56B3 7049 5EC1 11CB" /* )ÀhÚ÷™ì.V³pI^Á.Ë */ - $"CBAF FA0A 5AF1 22F1 3A4C 6F13 635A C681" /* ˯úÂZñ"ñ:Lo.cZÆ */ - $"06DA 8B44 A35B CF31 9B6F 57E6 AEC2 8D59" /* .Ú‹D£[Ï1›oWæ®ÂY */ - $"1556 A43E A289 74DC C398 B209 31B9 8CD0" /* .V¤>¢‰tÜØ²Æ1¹ŒÐ */ - $"07BE D253 76AB 7D79 4F26 D099 7AE8 E52C" /* .¾ÒSv«}yO&Йzèå, */ - $"EA35 D7BB E968 CAA0 5F61 EAE5 E9A1 E903" /* ê5×»éhÊ _aêåé¡é. */ - $"100E ED2C 5A66 21E2 1426 BE74 7A19 8C98" /* ..í,Zf!â.&¾tz.Œ˜ */ - $"3D67 A4D2 370F C95D 7131 2D31 0971 6022" /* =g¤Ò7.É]q1-1Æq`" */ - $"F4F2 359E 1FBD D23A CD94 4467 205E F7B1" /* ôò5ž.½Ò:Í”Dg ^÷± */ - $"5D18 EE91 9078 176B ADC2 65EB EECF D1A8" /* ].î‘x.k­ÂeëîÏѨ */ - $"F1B3 B999 E7CC 3079 BD9C 82D8 DF6E 29E0" /* ñ³¹™çÌ0y½œ‚Øßn)à */ - $"9502 EC8D 5C13 629B 109E A7C0 F438 6674" /* •.ì\.b›.ž§Àô8ft */ - $"C48B E75A 7CAC 28AE 3E9C 0ECF 9ADF F7BF" /* Ä‹çZ|¬(®>œ.Ïšß÷¿ */ - $"C51A E20D 64F1 B1DD C986 0C6F 6BFF 5102" /* Å.â.dñ±ÝɆ.okÿQ. */ - $"B233 B826 EBC9 35E2 9799 0A0F E81D 0816" /* ²3¸&ëÉ5â—™Â.è... */ - $"E01C B1A8 E4D9 1CCF 7F2E 4DB3 371B 83C0" /* à.±¨äÙ.Ï..M³7.ƒÀ */ - $"9DFD A603 83D6 4412 7DCF 2E2F 85D8 8259" /* ý¦.ƒÖD.}Ï./…Ø‚Y */ - $"DC97 798F 2E8A 09F5 C1A7 1E56 55F3 BFD0" /* Ü—y.ŠÆõÁ§.VUó¿Ð */ - $"34CE 311A 98BE C87C 8CCE 6EDF C85C A788" /* 4Î1.˜¾È|ŒÎnßÈ\§ˆ */ - $"AA7E 47D5 72AF 1842 5C5F 9D6A C586 CA4C" /* ª~GÕr¯.B\_jņÊL */ - $"34D3 6315 D6CA 0D6D 5B75 6C85 551B E270" /* 4Óc.ÖÊ.m[ul…U.âp */ - $"E9DD 6127 C363 1F5A 0AA4 8F55 114F 9ED3" /* éÝa'Ãc.Z¤U.OžÓ */ - $"034E A968 1BF1 513A 2F0D 3E61 612A 15E6" /* .N©h.ñQ:/.>aa*.æ */ - $"B89F 1877 F38E 8C96 20C3 1952 A559 62AE" /* ¸Ÿ.w󎌖 Ã.R¥Yb® */ - $"20E0 BE7D BF7C FAA3 F56C FF75 6D5E 07E7" /* à¾}¿|ú£õlÿum^.ç */ - $"EB87 E7E9 BFE7 EE37 E7EE B60B E7DA F7CF" /* ë‡çé¿çî7çî¶.çÚ÷Ï */ - $"A6FF 2B5C 2F9F AC00 ED1C BCF0 084D B6D5" /* ¦ÿ+\/Ÿ¬.í.¼ð.M¶Õ */ - $"A3F8 3A1B 179B 5659 AE02 A536 8D65 B1A0" /* £ø:..›VY®.¥6e±  */ - $"F806 81C6 9453 B9E5 1E84 EF36 3D8C 9922" /* ø.Æ”S¹å.„ï6=Œ™" */ - $"A841 EBC7 584D 175D A8CF 5AE5 52F4 364A" /* ¨AëÇXM.]¨ÏZåRô6J */ - $"CACB F4FA 59D1 6C18 1FE0 5F96 0F70 465A" /* ÊËôúYÑl..à_–.pFZ */ - $"7CFD 0C37 59FF 6248 10C6 4872 8573 D54E" /* |ý.7YÿbH.ÆHr…sÕN */ - $"7839 337E D900 4336 CF58 B59C BCC4 602F" /* x93~Ù.C6ÏXµœ¼Ä`/ */ - $"EA1A 205F CD8D 635B AE0D 5750 3316 72C7" /* ê. _Íc[®.WP3.rÇ */ - $"A765 C2F2 CF8C 52FB 1892 F55E B7A5 6D85" /* §eÂòÏŒRû.’õ^·¥m… */ - $"5782 FAB6 FBB5 CDF3 2DC2 0256 2927 4F4F" /* W‚ú¶ûµÍó-Â.V)'OO */ - $"1F92 5F99 B540 87DD 7A80 991B 0677 AB00" /* .’_™µ@‡Ýz€™..w«. */ - $"2D82 C5F6 11F7 F21B 2652 B798 75D5 42A6" /* -‚Åö.÷ò.&R·˜uÕB¦ */ - $"7757 E0E7 3C3F DBA5 6106 9F44 1800 E044" /* wWàç¼×ý */ - $"B79B E645 6FD3 A5EE ECE2 C9A7 53C7 B2E3" /* ·›æEoÓ¥îìâɧSDzã */ - $"C659 D5C5 0FBD 7C88 93C3 D3D9 D81F 0AEB" /* ÆYÕÅ.½|ˆ“ÃÓÙØ.Âë */ - $"5784 8BF9 DAD7 993D 0C8B 9873 08A4 254B" /* W„‹ùÚ×™=.‹˜s.¤%K */ - $"2452 F95D 29CA 8B3E D48D 18FB C813 4ECB" /* $Rù])Ê‹>Ô.ûÈ.NË */ - $"D118 E3FA 926C 7A5F E5CC F774 D1DB B5C1" /* Ñ.ãú’lz_åÌ÷tÑÛµÁ */ - $"579A 2647 619A 67A0 423D 6C64 B3A6 9357" /* Wš&Gašg B=ld³¦“W */ - $"B8C6 8FBE A3AC E380 E548 5ED3 D83D 7DB9" /* ¸Æ¾£¬ã€åH^ÓØ=}¹ */ - $"93E8 9071 F6E0 168F 6BEC F674 6D08 F4DA" /* “èqöà.kìötm.ôÚ */ - $"C1F7 11FD DEF8 2420 30DA 71E2 C605 81EB" /* Á÷.ýÞø$ 0ÚqâÆ.ë */ - $"565B D461 AF6E 3127 34AC BA64 C660 14E1" /* V[Ôa¯n1'4¬ºdÆ`.á */ - $"F6AB DA92 386B 3E7B BD42 90E9 ABA2 6EE7" /* ö«Ú’8k>{½Bé«¢nç */ - $"8D0D 373C D280 46EC 6746 310C EA41 862B" /* .7<Ò€FìgF1.êA†+ */ - $"6D1B 7BE9 93AF 17F6 1D3A E7AB CA55 8A4B" /* m.{铯.ö.:ç«ÊUŠK */ - $"E867 6EF3 29DF FF5F B839 75E1 FA04 DD81" /* ègnó)ßÿ_¸9uáú.Ý */ - $"B6C9 DA44 D268 3B1A FF63 60F5 37A5 DDCB" /* ¶ÉÚDÒh;.ÿc`õ7¥ÝË */ - $"1AB3 5275 7692 7F15 F8E8 6A96 CEB4 D9E5" /* .³Ruv’..øèj–δÙå */ - $"3E5A 0E16 B1D0 B056 D0D2 0360 0900 5773" /* >Z..±Ð°VÐÒ.`Æ.Ws */ - $"BB3F C215 FD55 C9BF E3FC 48A1 CFAB BD39" /* »?Â.ýUÉ¿ãüH¡Ï«½9 */ - $"CD3D 906E 21CB C3DD E4D3 548C 4731 E777" /* Í=n!ËÃÝäÓTŒG1çw */ - $"EE15 C0DE CEBC 0F2F 85A6 9822 F1FF 7B2F" /* î.ÀÞμ./…¦˜"ñÿ{/ */ - $"2530 48C7 0C39 3659 CD03 06C5 7C8E 3D49" /* %0HÇ.96YÍ..Å|Ž=I */ - $"FED5 7B72 4652 772C 39C7 8F1B 63E8 2DC1" /* þÕ{rFRw,9Ç.cè-Á */ - $"1242 CA35 E396 6103 15DF D939 0597 B8D4" /* .BÊ5ã–a..ßÙ9.—¸Ô */ - $"8858 ACE3 3C32 6EE5 69A3 8512 3447 2B3B" /* ˆX¬ã<2nåi£….4G+; */ - $"0647 8C1F 2D31 4E57 0D03 BE26 5235 5275" /* .GŒ.-1NW..¾&R5Ru */ - $"74E8 B8F6 CF32 E077 8C51 41DB ED67 EE30" /* tè¸öÏ2àwŒQAÛígî0 */ - $"AD97 7956 D279 B0A8 768D 00E3 F604 A240" /* ­—yVÒy°¨v.ãö.¢@ */ - $"9656 5BCD B309 D0CD 3ECE C477 31EC F88D" /* –V[ͳÆÐÍ>ÎÄw1ìø */ - $"782F 8B9E 37FA A741 C636 7B55 D047 64A4" /* x/‹ž7ú§AÆ6{UÐGd¤ */ - $"E2EC C69D F609 F38F 821E 8D20 8709 87FF" /* âìÆöÆó‚. ‡Æ‡ÿ */ - $"3C3A B1ED C420 1F0B 52E3 8999 C684 30F3" /* <:±íÄ ..R㉙Ƅ0ó */ - $"C4ED 7FA9 3A2C D0E7 AE48 1AC2 7196 9347" /* Äí.©:,Ðç®H.Âq–“G */ - $"6BC9 BEE1 4112 4209 93CA 307A 7FF7 8B12" /* kɾáA.BÆ“Ê0z.÷‹. */ - $"EE76 8890 A529 33CC F435 A84F 9414 A719" /* îvˆ¥)3Ìô5¨O”.§. */ - $"BFB2 6305 201F 372D 567F 30DF 2E47 D0B9" /* ¿²c. .7-V.0ß.Gй */ - $"C68F 5126 7EAA D95A 12D0 DA8A 8CF4 8A2A" /* ÆQ&~ªÙZ.ÐÚŠŒôŠ* */ - $"CBAE 0509 B614 A9E1 2CA2 D0E0 F017 E395" /* Ë®.ƶ.©á,¢Ðàð.ã• */ - $"AF82 85B5 4509 E75C 8E4D 5465 7DF2 CF39" /* ¯‚…µEÆç\ŽMTe}òÏ9 */ - $"ACFB DD5B C683 62C0 0B1C B7B9 EAEC 049C" /* ¬ûÝ[ƃbÀ..·¹êì.œ */ - $"8045 0178 6757 E317 872D ABC2 B077 6EF6" /* €E.xgWã.‡-«Â°wnö */ - $"3612 4132 3DD7 D39B B49A 04A8 207D 6135" /* 6.A2=×Ó›´š.¨ }a5 */ - $"C64F 3A0F 5028 7B6B 953E 8F19 920A 718F" /* ÆO:.P({k•>.’Âq */ - $"08E9 A079 EC51 A08F 4A77 5130 C807 9BC2" /* .é yìQ JwQ0È.›Â */ - $"B37B 4C7B 9BAA 40F3 4E94 BE51 C027 32B5" /* ³{L{›ª@óN”¾QÀ'2µ */ - $"751F 4793 7271 226E 82F3 CF14 8BC3 F927" /* u.G“rq"n‚óÏ.‹Ãù' */ - $"4C81 7F29 AB70 8B3B E948 86D6 569F FEC2" /* L.)«p‹;éH†ÖVŸþ */ - $"BF6C 92F9 1011 3BE3 9E91 6458 1634 34A3" /* ¿l’ù..;ãž‘dX.44£ */ - $"3042 520F 5D64 6429 32CE 04FD 1B98 0698" /* 0BR.]dd)2Î.ý.˜.˜ */ - $"3A36 655C 86C7 C272 4B02 E259 0537 4DB8" /* :6e\†ÇÂrK.âY.7M¸ */ - $"C6C2 6980 ECFB 0FC1 C6D9 0A2C D00F 282A" /* ÆÂi€ìû.ÁÆÙÂ,Ð.(* */ - $"7A0B D91F 08CA 762C A629 048E 9BCC CFD2" /* z.Ù..Êv,¦).Ž›ÌÏÒ */ - $"1EBC 8F60 2F64 F24D F1FB 81C6 8AEC CFDB" /* .¼`/dòMñûÆŠìÏÛ */ - $"623A 01A9 35D2 B5E1 B80A 2D32 084E 3857" /* b:.©5Òµá¸Â-2.N8W */ - $"C025 BCDA 4728 F3AD 35AD 9AAA E054 21B7" /* À%¼ÚG(ó­5­šªàT!· */ - $"A47E 62C5 9921 02C0 09E3 440D 063A 3789" /* ¤~bÅ™!.ÀÆãD..:7‰ */ - $"5072 E54A 4654 E148 AC2E 4A99 C6A5 3923" /* PråJFTáH¬.J™Æ¥9# */ - $"49B5 6906 6531 FD5E 7CCE 1C4B EEDE 7482" /* Iµi.e1ý^|Î.KîÞt‚ */ - $"9E3F 73AE C777 0214 C921 3131 C5CB 9F61" /* ž?s®Çw..É!11ÅËŸa */ - $"64A4 4E70 57C2 5C04 E25B 266E 6887 7477" /* d¤NpWÂ\.â[&nh‡tw */ - $"FCCB 1F0C 89F2 6CF6 713E 4D08 8AC8 9B0C" /* üË..‰òlöq>M.ŠÈ›. */ - $"00AC D9D7 A28A C219 B52B B46A D704 F919" /* .¬Ù×¢ŠÂ.µ+´j×.ù. */ - $"2050 6CCA 215A 299B 9129 9739 DA6F 3A67" /* PlÊ!Z)›‘)—9Úo:g */ - $"FE12 2BF1 4F8B 26ED D21F F727 5B59 22F3" /* þ.+ñO‹&íÒ.÷'[Y"ó */ - $"2E05 F4A0 9754 F431 9AED 1B65 038C CD7F" /* ..ô —Tô1ší.e.ŒÍ. */ - $"8254 E3AE 035C 18D7 0E28 6300 0DF0 998D" /* ‚Tã®.\.×.(c..ð™ */ - $"0191 85AF C71B B3CF F0D6 3A8F B1AA 5E99" /* .‘…¯Ç.³ÏðÖ:±ª^™ */ - $"BAB8 7C7F 0214 F864 4744 E747 7248 3C94" /* º¸|...ødGDçGrH<” */ - $"3AC8 CE04 1019 11ED 4BCC 76E9 FE4E 5728" /* :ÈÎ....íKÌvéþNW( */ - $"5BB0 986C D763 A3C7 AF8A 14E9 D24A AD17" /* [°˜l×c£Ç¯Š.éÒJ­. */ - $"FF66 611F B77C 0830 9093 A560 06FA E9CF" /* ÿfa.·|.0“¥`.úéÏ */ - $"054B 5846 1681 5DBF 34F9 49A9 45E0 8F20" /* .KXF.]¿4ùI©Eà */ - $"7FFD 6264 2193 031D A60F A111 B0B7 CFEE" /* .ýbd!“..¦.¡.°·Ïî */ - $"DE49 EC80 C0F1 D7F6 A495 900B 4126 40BE" /* ÞIì€Àñ×ö¤•.A&@¾ */ - $"185B DFFE C7B0 12AC C143 AA85 70E5 81EF" /* .[ßþǰ.¬ÁCª…påï */ - $"79CE 1662 08E4 203F 1706 40FB CC39 CA8F" /* yÎ.b.ä ?..@ûÌ9Ê */ - $"8002 1CFA 3BCC 6B79 5C83 A4D2 7147 E38F" /* €..ú;Ìky\ƒ¤ÒqGã */ - $"C93B F2E8 6A15 6D30 C314 E898 81E3 FF7B" /* É;òèj.m0Ã.è˜ãÿ{ */ - $"5FC5 EE13 0449 1985 2CBC 73C7 C569 DCB1" /* _Åî..I.…,¼sÇÅiܱ */ - $"8024 F7CA CC7A FE3B CC15 4BCE 5B92 1BBB" /* €$÷ÊÌzþ;Ì.KÎ[’.» */ - $"0048 F291 579F FD20 F11A 1934 CC11 9C3F" /* .Hò‘WŸý ñ..4Ì.œ? */ - $"CE49 027A 9763 9E57 A2FF 7FFD 53E4 E50B" /* ÎI.z—cžW¢ÿ.ýSäå. */ - $"C747 02FF 7869 0537 1482 221E 0220 79D5" /* ÇG.ÿxi.7.‚".. yÕ */ - $"45B1 2E48 6A6C 8486 571F E1F1 BF39 0797" /* E±.Hjl„†W.áñ¿9.— */ - $"5D21 6964 EA9B 13F1 E6B7 C4B5 A2B7 E2BD" /* ]!idê›.ñæ·Äµ¢·â½ */ - $"09C2 B200 0000 0000 003E A392 6527 69B6" /* ÆÂ²......>£’e'i¶ */ - $"B189 8365 F55D 7A2B 0398 4196 BB60 D4F0" /* ±‰ƒeõ]z+.˜A–»`Ôð */ - $"06B6 100C 5B60 D76F 8FEE EFFB D525 0E2B" /* .¶..[`×oîïûÕ%.+ */ - $"3535 B765 22E7 F77C CF5C 8907 7626 62C0" /* 55·e"ç÷|Ï\‰.v&bÀ */ - $"3B04 A170 EEA6 A399 F26B CD7E 92BC 9E13" /* ;.¡p™òkÍ~’¼ž. */ - $"9D2D 6907 B06F 6B9A 957D 3C57 DC9F 06E6" /* -i.°okš•}£Ú*.ãŸþ:Ž */ - $"0D69 7E9D 5B07 1396 ED52 69BC 3971 5630" /* .i~[..–íRi¼9qV0 */ - $"7C63 8DA9 7A40 F364 CC6A FCAC DC7C 59DC" /* |c©z@ódÌjü¬Ü|YÜ */ - $"278A 92E3 6FBF F936 7157 2583 232E E558" /* 'Š’ão¿ù6qW%ƒ#.åX */ - $"0000 C241 6B90 4DCB 6421 F85A B681 4812" /* ..ÂAkMËd!øZ¶H. */ - $"9165 5C06 0195 F213 DB9F 5E2F 4BDE A075" /* ‘e\..•ò.ÛŸ^/KÞ u */ - $"BD9A 741B 971B 3411 1F73 7FF8 D719 BA55" /* ½št.—.4..s.ø×.ºU */ - $"8048 404F FEEA FC74 AEB1 84FD 03F9 5D43" /* €H@Oþêüt®±„ý.ù]C */ - $"BE42 E61F FF7F F4CA BA56 9654 B757 FF60" /* ¾Bæ.ÿ.ôʺV–T·Wÿ` */ - $"CA39 3290 054C E785 0EA7 F04D AF3E B342" /* Ê92.Lç….§ðM¯>³B */ - $"A80A 815D 3954 73F2 871A 51FF 7488 20CD" /* ¨Â]9Tsò‡.Qÿtˆ Í */ - $"90F3 23B8 80FE C6BF 726C 5426 83F2 5400" /* ó#¸€þÆ¿rlT&ƒòT. */ - $"0000 0000 0000 0000 BFA5 D802 777C F954" /* ........¿¥Ø.w|ùT */ - $"286B A586 76CF 26CE 72CA 6FE7 BD43 DB36" /* (k¥†vÏ&ÎrÊoç½CÛ6 */ - $"A826 870E 2EEF E2C4 2E22 E63C FF7F AF51" /* ¨&‡..ïâÄ."æ<ÿ.¯Q */ - $"40C1 B727 22F3 9ACC 894D 0C49 EC7A D998" /* @Á·'"óšÌ‰M.IìzÙ˜ */ - $"64A9 DD22 2545 B85C D621 0609 B73A 9D9F" /* d©Ý"%E¸\Ö!.Æ·:Ÿ */ - $"FF7F FF7F C0F7 00E1 B069 1D76 3BA1 E98C" /* ÿ.ÿ.À÷.á°i.v;¡éŒ */ - $"5F1B 1E11 B6F6 EB6D 6316 9DBC D1B2 DC90" /* _...¶öëmc.¼Ñ²Ü */ - $"5E1D 5EE0 3C65 57D0 B69C 3782 D1BE 3A77" /* ^.^àÛ®‹ÆÛ#S¤.. */ - $"74AA 7920 6233 E3BF B281 AFAA 957D FDFB" /* tªy b3㿲¯ª•}ýû */ - $"216A 3ECE 3139 37DF 8885 620B 5D55 D0FD" /* !j>Î197߈…b.]UÐý */ - $"F796 6A70 CEFD 33D8 B369 178E 99C0 9FFF" /* ÷–jpÎý3سi.Ž™ÀŸÿ */ - $"7FD2 27D4 D615 4840 B836 A0B5 1D6F 2A5A" /* .Ò'ÔÖ.H@¸6 µ.o*Z */ - $"1338 2369 83A0 D409 0FA7 77EF 19B9 21E6" /* .8#iƒ ÔÆ.§wï.¹!æ */ - $"3E21 0CB0 D4D3 362A EA6F 6340 8D73 27FB" /* >!.°ÔÓ6*êoc@s'û */ - $"C3EF 7823 33DF 7A8C 5C69 20C4 5816 72E4" /* Ãïx#3ßzŒ\i ÄX.rä */ - $"712C 3345 6755 76F3 FEAF 494B D0B4 3C8F" /* q,3EgUvóþ¯IKд< */ - $"B83F A050 C3E9 4CA2 6A6E 7AD0 D7FF 5860" /* ¸? PÃéL¢jnzÐ×ÿX` */ - $"548E 54E7 C3B9 6DDF 462C 54BE 5EF9 1A41" /* TŽTçùmßF,T¾^ù.A */ - $"6A46 A4FB 1C36 1CA4 77EC 2899 F147 3422" /* jF¤û.6.¤wì(™ñG4" */ - $"843C 7FAE 123E 6894 9B7F 3125 EB0F 3129" /* „<.®.>h”›.1%ë.1) */ - $"9DC1 8469 CE90 BB6E 4F2C 385A 0FD1 9AC7" /* Á„iλnO,8Z.ÑšÇ */ - $"3318 3BF0 B1AA A51A 9022 A143 29FF 7FC1" /* 3.;𱪥."¡C)ÿ.Á */ - $"0F0F 6570 67C4 7FA7 9906 DE4E 5439 A278" /* ..epgÄ.§™.ÞNT9¢x */ - $"34E1 3D57 BB0E 086E 4C71 4406 DA9D CA56" /* 4á=W»..nLqD.ÚÊV */ - $"3EFD D077 5DA5 CD7D C244 9128 F408 1F03" /* >ýÐw]¥Í}ÂD‘(ô... */ - $"0C8F FF4B 9274 2EC6 E208 13C5 EE1B 3CEA" /* .ÿK’t.Æâ..Åî.<ê */ - $"C5C0 06F5 0FA1 11FF 7FE3 A446 32E6 F4DA" /* ÅÀ.õ.¡.ÿ.ã¤F2æôÚ */ - $"23EC 5108 3AE0 CD16 AFFF 3965 8196 56E2" /* #ìQ.:àÍ.¯ÿ9e–Vâ */ - $"2881 4EB9 CA14 5C4A 8091 B176 8823 BF09" /* (N¹Ê.\J€‘±vˆ#¿Æ */ - $"CED5 0D88 E6BB DD95 1B72 36E8 809C D432" /* ÎÕ.ˆæ»Ý•.r6耜Ô2 */ - $"872D C08C 7DCB B30E 548B AE16 0D85 6B49" /* ‡-ÀŒ}˳.T‹®..…kI */ - $"9B28 D491 ECD6 F598 691A 0891 135A 63A0" /* ›(Ô‘ìÖõ˜i..‘.Zc  */ - $"593C 1FFD 8A54 4FB9 F2AB 20FC 5CF3 1B88" /* Y<.ýŠTO¹ò« ü\ó.ˆ */ - $"EE7E 8355 45D6 87C8 28CE 7B33 92A2 D8D6" /* î~ƒUEÖ‡È(Î{3’¢ØÖ */ - $"E8DF EF94 500A 0D78 DE9F 8657 F7BD 7F40" /* èßï”PÂ.xÞŸ†W÷½.@ */ - $"5E07 0789 EDC7 F3A5 A0BF 3929 6B19 A460" /* ^..‰íÇó¥ ¿9)k.¤` */ - $"7A50 91FF 42EA 5F12 DFA5 E0A0 84CC E869" /* zP‘ÿBê_.ߥࠄÌèi */ - $"BB1F 6EDA 2238 5DB0 7F22 3521 F04B FF6B" /* ».nÚ"8]°."5!ðKÿk */ - $"6827 722A DD5F 3C9D D3F4 2BE3 614D 0A3F" /* h'r*Ý_<Óô+ãaMÂ? */ - $"62C4 E6AC 95CA 5946 37E8 BC76 97FD 5167" /* bÄæ¬•ÊYF7è¼v—ýQg */ - $"C970 D4C7 0655 C470 5913 DBBD AA8C 87A4" /* ÉpÔÇ.UÄpY.Û½ªŒ‡¤ */ - $"3C63 0B7F 54CD 391E 574D F2D5 C728 20B7" /* .“„O.À.Z÷ßS.8 */ - $"3615 80D7 428E 90F6 4620 02EA 4590 DF22" /* 6.€×BŽöF .êEß" */ - $"4B70 2FB2 CADA A529 F7FA E7C6 BC99 DFCD" /* Kp/²ÊÚ¥)÷úçÆ¼™ßÍ */ - $"5EE7 D677 B5BE F819 6A55 6070 E1A9 DF53" /* ^çÖwµ¾ø.jU`pá©ßS */ - $"3F82 0229 B6B7 D247 1967 8313 056F 9D27" /* ?‚.)¶·ÒG.gƒ..o' */ - $"753E E4DD EB7F 1372 C0F7 D72E 349B 2F9B" /* u>äÝë..rÀ÷×.4›/› */ - $"686C C9AF 0896 0865 7A3A 5A9D 807F 292A" /* hlɯ.–.ez:Z€.)* */ - $"8DDA A776 4B3C 0993 532D D682 A41B 9DC2" /* Ú§vK<Æ“S-Ö‚¤. */ - $"5113 9D60 934B 2055 D671 C6C4 1252 3CEF" /* Q.`“K UÖqÆÄ.R<ï */ - $"C72F AC19 4BED 185D BC60 5957 F81B 8278" /* Ç/¬.Kí.]¼`YWø.‚x */ - $"20B5 9173 4A1B FDC9 295D 54B7 8AFE 6938" /* µ‘sJ.ýÉ)]T·Šþi8 */ - $"FE49 BA78 3225 49A1 4243 823C 52B9 8489" /* þIºx2%I¡BC‚ÚOî›-ó */ - $"B640 95E8 70A5 B577 8C1D 99D5 797D D482" /* ¶@•èp¥µwŒ.™Õy}Ô‚ */ - $"E23A 56DD 644D 9623 FEE2 63D2 A3DB E146" /* â:VÝdM–#þâcÒ£ÛáF */ - $"FC39 35A7 6C28 63D8 5240 0C80 0000 0000" /* ü95§l(cØR@.€.... */ - $"0001 4095 99D3 7A7A 0A05 B673 69BC DA9C" /* ..@•™ÓzzÂ.¶si¼Úœ */ - $"A108 DDEA EE48 6385 0790 FEA1 1AFC 2CED" /* ¡.ÝêîHc….þ¡.ü,í */ - $"2225 BE73 2ED7 00BB 2301 80FE 09DF E78E" /* "%¾s.×.»#.€þÆßçŽ */ - $"6FE6 4743 A0EE 0A03 4C9E F046 CDD8 E7F1" /* oæGC îÂ.LžðFÍØçñ */ - $"DB3F 1B67 F6E1 1F31 8096 90DF 5110 40B0" /* Û?.göá.1€–ßQ.@° */ - $"0000 0000 0000 0000 C0B9 E0FC 41FB A11C" /* ........À¹àüAû¡. */ - $"4696 89A0 DE42 F8C7 27D0 3F03 AA51 70FD" /* F–‰ ÞBøÇ'Ð?.ªQpý */ - $"DC5F D7B9 AFD3 A0F3 7BAA A910 9E5C 259E" /* Ü_×¹¯Ó ó{ª©.ž\%ž */ - $"E4FB 8F8E 01C1 96E2 0768 FE5A 0A43 E2F8" /* äûŽ.Á–â.hþZÂCâø */ - $"DA74 9500 C241 D1F6 3EFF 3F06 586F A511" /* Út•.ÂAÑö>ÿ?.Xo¥. */ - $"CCFE 8FE7 61E1 C392 D001 3F52 1CA8 CC23" /* ÌþçaáÃ’Ð.?R.¨Ì# */ - $"93F0 27DF 893F 4AC1 06C3 34DA 8953 BBC0" /* “ð'߉?JÁ.Ã4Ú‰S»À */ - $"84C0 4843 27E0 067E 5EBF FF7A 1540 4C0E" /* „ÀHC'à.~^¿ÿz.@L. */ - $"FA6C 44A1 A7BC DB24 6AD7 C367 EC93 33BF" /* úlD¡§¼Û$j×Ãgì“3¿ */ - $"FECB C1DF 83CC 5BF7 A7C0 DF62 2EFA 4283" /* þËÁ߃Ì[÷§Àßb.úBƒ */ - $"6E49 2492 4924 9249 2492 4924 9246 A4A5" /* nI$’I$’I$’I$’F¤¥ */ - $"7754 9685 B091 D8FF 1549 CF90 2079 3AFB" /* wT–…°‘Øÿ.IÏ y:û */ - $"E925 85CC 62A2 E49B 476B 47B9 319B 630F" /* é%…Ìb¢ä›GkG¹1›c. */ - $"A6B8 182C E282 D1CD 920A 4EB3 21BF 943C" /* ¦¸.,â‚ÑÍ’ÂN³!¿”< */ - $"27BF CCDE BD6E 481A 188C F70B C257 8118" /* '¿ÌÞ½nH..Œ÷.ÂW. */ - $"FBF7 FF78 F422 A3DB AE81 4980 0000 0000" /* û÷ÿxô"£Û®I€.... */ - $"0000 0000 0000 1EE1 BFBB C300 0000 0000" /* .......á¿»Ã..... */ - $"0000 0000 0000 14FB 3FE1 1B7A D142 E13F" /* .......û?á.zÑBá? */ - $"5B6F 704A 61CF 957D 258E F744 FB26 8356" /* [opJaÏ•}%Ž÷Dû&ƒV */ - $"74AD 1DDB 02F2 CF85 7AEB 3A06 6F12 084E" /* t­.Û.òÏ…zë:.o..N */ - $"8E93 D6DA E4FE 9FBE 2D16 1C87 701F 55C3" /* Ž“ÖÚäþŸ¾-..‡p.Uà */ - $"9966 3E8F 36CB 6D9F F3F6 F8D3 B3B9 E2C1" /* ™f>6ËmŸóöøÓ³¹âÁ */ - $"1019 C6E6 8FFF 7FDC 6948 D3AB C944 C64A" /* ..Ææÿ.ÜiHÓ«ÉDÆJ */ - $"8000 0000 0000 0000 000A B0CB 3806 445C" /* €........°Ë8.D\ */ - $"7110 4CDE 3651 AC94 777C 8AB0 5382 04AF" /* q.LÞ6Q¬”w|аS‚.¯ */ - $"32E5 68C2 122F 8A5B 12A8 FF39 CF5E 72FB" /* 2åhÂ./Š[.¨ÿ9Ï^rû */ - $"EFD4 1669 47C6 525E 88EF 0AAC 1EE1 98B6" /* ïÔ.iGÆR^ˆï¬.ᘶ */ - $"0BFF 7FAF 8A4B 7158 F7D7 1707 DE93 841E" /* .ÿ.¯ŠKqX÷×..Þ“„. */ - $"3C82 3260 1FFF 1C8B 6A6E 8C66 0000 0000" /* <‚2`.ÿ.‹jnŒf.... */ - $"0000 0000 0000 0121 EF03 234C 3124 0000" /* .......!ï.#L1$.. */ - $"0000 0000 0000 0000 077C 5957 204B A2ED" /* .........|YW K¢í */ - $"59B8 F3C4 CC60 8A58 7E23 0B9F A0FD 1DC8" /* Y¸óÄÌ`ŠX~#.Ÿ ý.È */ - $"8E0F FE2B 5F9F 12D8 09B3 57BB 7818 3CF5" /* Ž.þ+_Ÿ.ØÆ³W»x.<õ */ - $"D579 D427 5198 BD86 E2FC 8775 915B 37A5" /* ÕyÔ'Q˜½†âü‡u‘[7¥ */ - $"B2E6 6BD8 8404 31D9 4C54 3621 6561 5C3E" /* ²ækØ„.1ÙLT6!ea\> */ - $"4A80 0000 0000 0000 0000 0014 D22D 6758" /* J€..........Ò-gX */ - $"336C 63A1 C13F 3E94 9877 8E90 4E5D 0C70" /* 3lc¡Á?>”˜wŽN].p */ - $"F80A 4262 C2CC C7E4 DAE8 526F 393F 4558" /* øÂBbÂÌÇäÚèRo9?EX */ - $"5CC9 5DDA B2FF 7ED5 F809 3A02 F1EE 2760" /* \É]Ú²ÿ~ÕøÆ:.ñî'` */ - $"FF7E 5037 F054 4A1B 9602 92EA 8D26 A198" /* ÿ~P7ðTJ.–.’ê&¡˜ */ - $"9C4F 8238 A60E 7734 20F8 18FE 478F 5403" /* œO‚8¦.w4 ø.þGT. */ - $"1658 618B A80F 879F 4A98 E809 DEB2 7CE9" /* .Xa‹¨.‡ŸJ˜èÆÞ²|é */ - $"9724 407B B8C8 A48D 4F33 9126 751B 9FC2" /* —$@{¸È¤O3‘&u.ŸÂ */ - $"0283 44C3 5AFD 9546 FCE2 4212 4F5B 01D4" /* .ƒDÃZý•FüâB.O[.Ô */ - $"6E53 A032 DA91 40F4 4BDE 0C23 FF1E D5DE" /* nS 2Ú‘@ôKÞ.#ÿ.ÕÞ */ - $"B543 59DC C0DC 759A 6043 5883 A5FE C785" /* µCYÜÀÜuš`CXƒ¥þÇ… */ - $"BA68 9F46 C21A 4C50 20E3 0488 FB34 1043" /* ºhŸFÂ.LP ã.ˆû4.C */ - $"FC68 562B 635A EE8D E334 0C6F 25A9 E4C9" /* ühV+cZîã4.o%©äÉ */ - $"3484 2AC2 6188 7242 E3F6 AEAC 6F86 2DE2" /* 4„*ÂaˆrBãö®¬o†-â */ - $"C377 BD02 CB1C 9553 5485 6A5B E118 9BBD" /* Ãw½.Ë.•ST…j[á.›½ */ - $"DC6B 2C92 C6CC C866 6E7F FE63 AB01 FE7D" /* Ük,’ÆÌÈfn.þc«.þ} */ - $"FF7F BB81 EA94 87BE B101 F468 0E30 F111" /* ÿ.»ê”‡¾±.ôh.0ñ. */ - $"7BC9 FA0D F87F BDD0 811B 8588 1AE7 8387" /* {Éú.ø.½Ð.…ˆ.烇 */ - $"5C06 B3A9 E2ED 6E5B B524 35AA CBFF 50D6" /* \.³©âín[µ$5ªËÿPÖ */ - $"49D9 6918 3837 59BD E7CC 8796 B0AF 2729" /* IÙi.87Y½ç̇–°¯') */ - $"0512 5A97 66FF 1A85 E004 1882 0108 EA41" /* ..Z—fÿ.…à..‚..êA */ - $"BBCC 15E0 254C 59AF 877D 0722 15FB ADA1" /* »Ì.à%LY¯‡}.".û­¡ */ - $"84C2 9B83 DD5B C6B1 EE29 084C 08F7 06C8" /* „›ƒÝ[Ʊî).L.÷.È */ - $"4F07 9818 6BF2 66E2 582B 2F7D 29AD BAFA" /* O.˜.kòfâX+/})­ºú */ - $"8F9E 0AC8 60AE D10E 3E49 17BF E015 0C5E" /* žÂÈ`®Ñ.>I.¿à..^ */ - $"5C51 5D5B 5BC1 6C83 C428 4505 E9BB 61CB" /* \Q][[ÁlƒÄ(E.é»aË */ - $"D7C2 F3C6 C102 73F5 409E D0CF B43E E497" /* ×ÂóÆÁ.sõ@žÐÏ´>ä— */ - $"C1E0 707B 3F6F EAA8 2F10 9285 7D9D 9F81" /* Áàp{?oê¨/.’…}Ÿ */ - $"303D 3A70 2B3F 4A45 558D 63F6 EEB9 CF21" /* 0=:p+?JEUcöî¹Ï! */ - $"52C1 27C2 8439 0BE2 BE1F A553 A1C7 E44C" /* RÁ'„9.â¾.¥S¡ÇäL */ - $"5422 9BC0 356D 1B40 E53B 3064 AA69 F464" /* T"›À5m.@å;0dªiôd */ - $"7AA7 4E56 F7E2 7AE5 CB6E E538 8582 1927" /* z§NV÷âzåËnå8…‚.' */ - $"019D B4B0 E6D9 0F0E 9670 7723 62CF C422" /* .´°æÙ..–pw#bÏÄ" */ - $"DD53 ED12 92AE 20B0 6B63 6CB3 C596 4F4E" /* ÝSí.’® °kcl³Å–ON */ - $"18B6 FD06 93B2 6F73 A740 770D C39F B873" /* .¶ý.“²os§@w.߸s */ - $"598F 3667 6F7A 29E9 9E6F 9D04 48DD A175" /* Y6goz)éžo.HÝ¡u */ - $"2AFC 61BD D706 2A8E 9789 F513 B8AF B8EA" /* *üa½×.*Ž—‰õ.¸¯¸ê */ - $"2426 7EDF 1EFA 1D19 7A50 D22F D15E 76FE" /* $&~ß.ú..zPÒ/Ñ^vþ */ - $"CD34 19AD 8126 775C A5FB B209 9658 F850" /* Í4.­&w\¥û²Æ–XøP */ - $"F2FD A65F B487 9F50 7FF0 12FD BA8B FB6E" /* òý¦_´‡ŸP.ð.ýº‹ûn */ - $"49F5 50DF C349 B4F9 F4D7 EDEB 53BE DEB0" /* IõPßÃI´ùô×íëS¾Þ° */ - $"7F85 29FB 5DFF 36B9 BEDA 9BF8 3CF2 FDAE" /* .…)û]ÿ6¹¾Ú›ø<òý® */ - $"DFB5 ABBE D3DB ED2B FDBA CFFB 7606 FB74" /* ßµ«¾ÓÛí+ýºÏûv.ût */ - $"D3F8 6B96 83BA F7ED EB3F 7EDE AFE0 EECD" /* Óøk–ƒº÷íë?~Þ¯àîÍ */ - $"FB5E 7F6E 807E DB9B F6BD F0FE D32B EA21" /* û^.n€~Û›ö½ðþÓ+ê! */ - $"EFA8 1EFA 823F 6DCF FB6C 8BEA 6CFD B5AF" /* ï¨.ú‚?mÏûl‹êlýµ¯ */ - $"0774 CFDB D337 FB7A 3F83 BA5D F51F DF55" /* .tÏÛÓ7ûz?ƒº]õ.ßU */ - $"47FB 690F DA86 F791 DDD6 2CCB E6B8 C536" /* Gûi.Ú†÷‘ÝÖ,Ëæ¸Å6 */ - $"D512 AD5E 1B08 0B8A 8D03 2F75 60E5 6BF8" /* Õ.­^...Š./u`åkø */ - $"447B C66A 7EC2 7912 B45F 8E48 277C D8E1" /* D{Æj~Ây.´_ŽH'|Øá */ - $"809C 5755 D718 BAAC F891 2AE5 F97C 3F5E" /* €œWU×.º¬ø‘*åù|?^ */ - $"0116 3A00 99F4 5896 E0EA B189 F5A5 7929" /* ..:.™ôX–à걉õ¥y) */ - $"C491 B57F 2232 B0C2 52F8 89B1 DB2F B284" /* Ä‘µ."2°ÂRø‰±Û/²„ */ - $"C1EE 0C43 EF76 FD94 F871 4077 7E19 EC36" /* Áî.Cïvý”øq@w~.ì6 */ - $"BBFA 6DFF 3C0B 5A98 89B4 84BB 56DB 5FC2" /* »úmÿ<.Z˜‰´„»VÛ_ */ - $"16C2 351A B46E AF45 AAC7 DD2E 97ED 970C" /* .Â5.´n¯EªÇÝ.—í—. */ - $"76D8 F8D0 42EB E639 28E8 BE33 A530 3B58" /* vØøÐBëæ9(è¾3¥0;X */ - $"2374 6B1C 97B0 1CD5 ACD5 615F FD30 62C6" /* #tk.—°.Õ¬Õa_ý0bÆ */ - $"899A 977D 4B74 CAB1 E9EE 6588 4E67 8733" /* ‰š—}KtʱéîeˆNg‡3 */ - $"B359 BCC7 DC7B 9884 E4A8 78CB 77E7 675D" /* ³Y¼ÇÜ{˜„ä¨xËwçg] */ - $"FF2D FCE4 7744 BDD1 A833 6BEC C481 2DA8" /* ÿ-üäwD½Ñ¨3kìÄ-¨ */ - $"3D1C 5D57 7595 1DEB 2278 31AE 4188 B1F2" /* =.]Wu•.ë"x1®Aˆ±ò */ - $"54E1 113D DA75 96ED 71FF 1577 7820 4D22" /* Tá.=Úu–íqÿ.wx M" */ - $"2BD9 3841 A416 96A4 2549 1A9D 3A55 8E39" /* +Ù8A¤.–¤%I.:UŽ9 */ - $"A929 4B4E E11F 0F88 8BB6 7E08 2210 9D21" /* ©)KNá..ˆ‹¶~.".! */ - $"92BF 623B B974 D371 0208 1489 5713 0F66" /* ’¿b;¹tÓq...‰W..f */ - $"3C4C 8394 72A6 08A1 3D86 BA0C 198B CE8B" /* 8.ʦ!m1ÂpW */ - $"0B3D 429A 6CFB 0819 EB4D B9D2 549F 6601" /* .=Bšlû..ëM¹ÒTŸf. */ - $"2436 5BEA 9DAC BBDA AB3A AB4F ABFF 768D" /* $6[ꬻګ:«O«ÿv */ - $"E220 E451 7E45 49C5 21FD B2E6 DEFD 2505" /* â äQ~EIÅ!ý²æÞý%. */ - $"836B 3500 54D8 50B8 7538 C5BF B951 7FB2" /* ƒk5.TØP¸u8Å¿¹Q.² */ - $"F927 CBB1 7AA1 D0BD 51E2 D7F7 C440 5DA0" /* ù'˱z¡Ð½Qâ×÷Ä@]  */ - $"89EF FEEE BF2E A5E4 F98A B652 F25A D1DC" /* ‰ïþî¿.¥äùжRòZÑÜ */ - $"482A 40CB A288 250A 22CA BCB4 815D 077E" /* H*@Ë¢ˆ%Â"ʼ´].~ */ - $"229E 59B2 8249 D336 A3C1 5D5B FAE5 483C" /* "žY²‚IÓ6£Á][úåH< */ - $"67F3 255E 1530 AFB1 D900 48FE 254B C54E" /* gó%^.0¯±Ù.Hþ%KÅN */ - $"42DC EE54 066B CE83 B1C9 F021 2031 8DF1" /* BÜîT.k΃±Éð! 1ñ */ - $"FE58 9315 B761 79CA 409A 6CD6 337A 14A9" /* þX“.·ayÊ@šlÖ3z.© */ - $"8622 90BC 3474 727C 66CE 09C5 61B4 A386" /* †"¼4tr|fÎÆÅa´£† */ - $"7509 819F 6EEB 5FCC C0A7 084A 7742 A6E3" /* uÆŸnë_ÌÀ§.JwB¦ã */ - $"F69A 90CA 24AD EB53 60AB 5FD0 FD6F 3DE6" /* öšÊ$­ëS`«_Ðýo=æ */ - $"44CF 80FB A400 B71F 1DD4 C690 A3DB 54CF" /* DÏ€û¤.·..ÔÆ£ÛTÏ */ - $"F492 7EC7 540C 048F 3D35 FD63 7593 751B" /* ô’~ÇT..=5ýcu“u. */ - $"F88F 4B7D E355 6685 FD5F 2743 8DF3 D839" /* øK}ãUf…ý_'CóØ9 */ - $"0894 99DB 1FAA 22B2 8800 8C9F D91F E60B" /* .”™Û.ª"²ˆ.ŒŸÙ.æ. */ - $"0EEE 2870 2932 2AE5 F401 11F0 8B2B 53DB" /* .î(p)2*åô..ð‹+SÛ */ - $"8028 E39D 744F E70B 11F3 A220 ABF4 FCD5" /* €(ãtOç..ó¢ «ôüÕ */ - $"37C9 0AC8 8749 215E 1D89 4022 96D0 04FF" /* 7ÉÂȇI!^.‰@"–Ð.ÿ */ - $"0C57 AC3D 351A 8582 EBA4 EA2B B65B A14B" /* .W¬=5.…‚ë¤ê+¶[¡K */ - $"048B E031 DE15 251C 669F 8457 FF38 D131" /* .‹à1Þ.%.fŸ„Wÿ8Ñ1 */ - $"0027 BB20 9721 6636 A375 AFBA AF7B BDBA" /* .'» —!f6£u¯º¯{½º */ - $"05F3 3114 E55E DAA9 219F 9516 F3DF 12B4" /* .ó1.å^Ú©!Ÿ•.óß.´ */ - $"DA3F 83DF 13A0 9900 3FA6 17E9 B014 E404" /* Ú?ƒß. ™.?¦.é°.ä. */ - $"434D 02D4 4283 D73D F4D1 5D95 8B25 6A6A" /* CM.ÔBƒ×=ôÑ]•‹%jj */ - $"CD5E BA93 82DF 1A30 4B0D 0E21 65A1 0001" /* Í^º“‚ß.0K..!e¡.. */ - $"2869 F06A 8949 311F DB03 39EB E8E1 5BFB" /* (iðj‰I1.Û.9ëèá[û */ - $"F11C 05C6 2469 BAEA 4516 4CC4 DAF5 927A" /* ñ..Æ$iºêE.LÄÚõ’z */ - $"2CEB 3150 DB6F 4DE2 8EED 59C0 604F 9AE5" /* ,ë1PÛoMâŽíYÀ`Ošå */ - $"E136 83B0 F348 3D1A B44D 3A8E D77A B0DE" /* á6ƒ°óH=.´M:Ž×z°Þ */ - $"5267 1055 24F7 3C3D EB3E 08EF 97F9 4B29" /* Rg.U$÷<=ë>.ï—ùK) */ - $"454F 1B5D 4A6E 56E1 0F90 00A1 4467 7454" /* EO.]JnVá..¡DgtT */ - $"B556 362A 9A19 9E35 19E9 BFDF E2AD 91D6" /* µV6*š.ž5.é¿ßâ­‘Ö */ - $"7FB6 95B9 F19D 8D07 2FAF 3162 D880 0AA7" /* .¶•¹ñ./¯1b؀§ */ - $"C9C4 94AD C49A 1231 2D9F 780F 6E3E 57D2" /* ÉÄ”­Äš.1-Ÿx.n>WÒ */ - $"8C1C 582C 179A 721C 7063 F056 F938 4EA1" /* Œ.X,.šr.pcðVù8N¡ */ - $"F3E4 E458 D254 280F 92CA ABDC 4ECF 3EB7" /* óääXÒT(.’Ê«ÜNÏ>· */ - $"95DF A3B8 45C0 1427 BA54 B2E2 D1BC B67D" /* •ߣ¸EÀ.'ºT²âѼ¶} */ - $"5A0F EE12 37D4 BE1C 5785 A90D 2E62 B301" /* Z.î.7Ô¾.W…©..b³. */ - $"F66D A637 374B 17DA 7446 C318 3B11 4F50" /* öm¦77K.ÚtFÃ.;.OP */ - $"ED27 AEB2 D8F6 C3E4 AB48 5E7C 1D46 9463" /* í'®²ØöÃä«H^|.F”c */ - $"E7BA 9296 7BFA FDBB 39F2 7E86 1A5D 8FFA" /* 纒–{úý»9ò~†.]ú */ - $"7E06 FC92 3472 7950 8B67 8329 FA9F 47AA" /* ~.ü’4ryP‹gƒ)úŸGª */ - $"51F3 01AD A6DA 224F E711 AF6F BA8F FA86" /* Qó.­¦Ú"Oç.¯oºú† */ - $"FF61 EBD1 5613 B076 3543 3515 FF1B 1E9C" /* ÿaëÑV.°v5C5.ÿ..œ */ - $"CE78 6A36 7CCF FD63 E9E3 00E6 EA60 1DBE" /* Îxj6|Ïýcéã.æê`.¾ */ - $"42FB 3E66 D69D 8BA6 A0E6 13E1 2087 20D7" /* Bû>fÖ‹¦ æ.á ‡ × */ - $"7941 E3C4 C7C6 67FF 2C9C A486 253A C206" /* yAãÄÇÆgÿ,œ¤†%:Â. */ - $"F961 4A0E D9DD D32A 6D67 A012 B1A2 B549" /* ùaJ.ÙÝÓ*mg .±¢µI */ - $"3F58 8BA1 CA98 94EB 6099 570C D139 09AA" /* ?X‹¡Ê˜”ë`™W.Ñ9ƪ */ - $"8DEB C31A 0812 5DAD 2926 6846 D789 4430" /* ëÃ...]­)&hF׉D0 */ - $"4931 16B5 0804 52F1 040D B0A7 DDD7 7052" /* I1.µ..Rñ..°§Ý×pR */ - $"4269 C765 98AA 3941 F9EE 987A 2EAD 46BE" /* BiÇe˜ª9Aùî˜z.­F¾ */ - $"AA2B DD79 D9F9 7AF7 9318 B633 97CC DB93" /* ª+ÝyÙùz÷“.¶3—ÌÛ“ */ - $"5AF7 23D4 08E5 1FD7 EA45 85E9 4C98 77B6" /* Z÷#Ô.å.×êE…éL˜w¶ */ - $"0038 8756 6C8F 1A76 8D36 D67C 0BBD 248F" /* .8‡Vl.v6Ö|.½$ */ - $"8465 4CC4 7B7A C1B7 6348 F763 66A7 F04E" /* „eLÄ{zÁ·cH÷cf§ðN */ - $"FF4E 1C72 1053 323F 9E55 F75D 4097 9C24" /* ÿN.r.S2?žU÷]@—œ$ */ - $"AD5D 3C1B 766A 50A8 7252 6563 2687 8251" /* ­]<.vjP¨rRec&‡‚Q */ - $"8AE2 2EAE 6AA9 6439 2831 281E 034D 7999" /* Šâ.®j©d9(1(..My™ */ - $"F46F 47C1 911D 553A D887 0E8F 6E83 1B48" /* ôoGÁ‘.U:؇.nƒ.H */ - $"F0D9 C566 C0FF 0F02 5E68 EA76 7381 25B1" /* ðÙÅfÀÿ..^hêvs%± */ - $"D388 A375 370B A655 625B B71A 191C CD9D" /* Óˆ£u7.¦Ub[·...Í */ - $"F3CA 83B2 88D6 3712 B3E3 6CEA 19DC 3295" /* óʃ²ˆÖ7.³ãlê.Ü2• */ - $"3398 DF4F 1279 B346 1DD8 ED24 186F BEE1" /* 3˜ßO.y³F.Øí$.o¾á */ - $"8FD4 5FAD EAFF 6960 DE17 A0A4 B89E 7CF3" /* Ô_­êÿi`Þ. ¤¸ž|ó */ - $"C360 9DA8 91BF 470F ECC0 C0AA E260 3430" /* Ã`¨‘¿G.ìÀÀªâ`40 */ - $"EF4E CAD6 F964 05B0 8E27 C1F6 7516 4350" /* ïNÊÖùd.°Ž'Áöu.CP */ - $"B87D 7D16 703E 7972 1232 2E0F 6577 664C" /* ¸}}.p>yr.2..ewfL */ - $"8FA6 1414 7FB2 A33D A69E FD2F CF21 FC8F" /* ¦...²£=¦žý/Ï!ü */ - $"23A5 6AED 3E28 34A0 F73F F7D6 7F7C 5B6B" /* #¥jí>(4 ÷?÷Ö.|[k */ - $"0596 8B6D BACA 52DF 8E72 CDBA E221 7092" /* .–‹mºÊRߎrͺâ!p’ */ - $"A3AB B99D 1EE3 3F21 1AD2 0F0B DC5A 8BE1" /* £«¹.ã?!.Ò..ÜZ‹á */ - $"9E35 D891 9A60 EF28 5934 FA3B 8009 DC42" /* ž5Ø‘š`ï(Y4ú;€ÆÜB */ - $"11BE 487F D776 AF26 0EBD BF3E 8DCC B940" /* .¾H.×v¯&.½¿>̹@ */ - $"2523 D6E1 447F EA8A 5F66 DE0B 0962 249E" /* %#ÖáD.êŠ_fÞ.Æb$ž */ - $"165D BB6D 1EBD 1237 021B F903 DEEF 78FE" /* .]»m.½.7..ù.Þïxþ */ - $"B3F3 76B7 429F 336D 0EFA FF47 5CBC E3DF" /* ³óv·BŸ3m.úÿG\¼ãß */ - $"FC44 41BA BC9D 67AE 0B43 D817 FBCE 4F36" /* üDAº¼g®.CØ.ûÎO6 */ - $"8209 CCB5 38F6 712E 7DEA 4E9E 4B38 3B80" /* ‚ÆÌµ8öq.}êNžK8;€ */ - $"7B16 28E3 AB59 340E 93F0 4C65 C281 A4F1" /* {.(ã«Y4.“ðLe¤ñ */ - $"08E4 26A6 31AA B6A4 F784 BA8E C7FA 8919" /* .ä&¦1ª¶¤÷„ºŽÇú‰. */ - $"4B19 FA98 09C8 3C79 27DA CB39 881C 3B0E" /* K.ú˜ÆÈoâN¯sÛ^·)¤¿‰J */ - $"782D E8F2 91C9 E628 322C F20C 2D0C 73DD" /* x-èò‘Éæ(2,ò.-.sÝ */ - $"F093 4ED7 63DF E121 E7B9 DB7E 530D E3BD" /* ð“N×cßá!ç¹Û~S.ã½ */ - $"3469 29CE 5768 BE0F 1E91 46B7 00A0 CC2E" /* 4i)ÎWh¾..‘F·. Ì. */ - $"183D 7D57 762C 062D 0707 EBA4 177D 73E8" /* .=}Wv,.-..ë¤.}sè */ - $"FA30 83A6 479B AA9A 702E B8FD 9B54 0FF3" /* ú0ƒ¦G›ªšp.¸ý›T.ó */ - $"8222 1EB0 4CDD 4CF7 F0AB 8972 B655 9426" /* ‚".°LÝL÷ð«‰r¶U”& */ - $"4EEE 3B88 A6D2 F8B9 6845 0467 D606 9DDD" /* Nî;ˆ¦Òø¹hE.gÖ.Ý */ - $"C547 A61F 71E7 5A8E 6B83 51FD B2C1 A732" /* ÅG¦.qçZŽkƒQý²Á§2 */ - $"A6EA A0AA 6D13 E80B 0EC4 5DF4 348F FF6E" /* ¦ê ªm.è..Ä]ô4ÿn */ - $"2289 CFB4 1AE2 18D1 340F B29B E1FF 16B1" /* "‰Ï´.â.Ñ4.²›áÿ.± */ - $"0F0F B5AD 260A 7FD9 B1F2 3D0C 404F 75A8" /* ..µ­&Â.Ù±ò=.@Ou¨ */ - $"E4DB 52EE 259B D762 E5E5 4FFD 22AC 4856" /* äÛRî%›×bååOý"¬HV */ - $"9C62 8DDB F5D8 58F8 4EC7 1110 30EC E0D8" /* œbÛõØXøNÇ..0ìàØ */ - $"7FED 0176 FEF2 53B3 75C6 34E1 A3A7 79DA" /* .í.vþòS³uÆ4ᣧyÚ */ - $"1FDC 42EC 83B2 F3EB 056C E41B 4E65 3699" /* .ÜB샲óë.lä.Ne6™ */ - $"4BD6 1AE3 85A9 DBF6 89D4 39B0 79F9 8877" /* KÖ.ã…©Ûö‰Ô9°yùˆw */ - $"161C 2CB5 3F3C 294B 8CA3 A6F6 556C 4CAD" /* ..,µ?<)KŒ£¦öUlL­ */ - $"A752 918D 7E61 BA54 02D2 CF5C AEBE 1A0B" /* §R‘~aºT.ÒÏ\®¾.. */ - $"B75C A9CA 9876 AB0B 6028 4D8E D46C E479" /* ·\©Ê˜v«.`(MŽÔläy */ - $"A186 EA09 496E 0935 04E2 4C25 FA18 270B" /* ¡†êÆInÆ5.âL%ú.'. */ - $"A054 DE1C 1BD8 A089 9D95 1335 E93C 7C21" /*  TÞ..Ø ‰•.5é<|! */ - $"435E A570 3C42 AA88 0075 BB20 20AF 90EC" /* C^¥pÝÙøFF|ïÆS.+F */ - $"5BD9 2BFF 5F26 72DB 523D D0FC CE49 47B0" /* [Ù+ÿ_&rÛR=ÐüÎIG° */ - $"D98B 4D36 1B60 7C3A 0707 F46A 8565 4CCB" /* Ù‹M6.`|:..ôj…eLË */ - $"5DC1 A50D C039 BF24 7418 78A7 6D4F DE55" /* ]Á¥.À9¿$t.x§mOÞU */ - $"1CB8 B787 158C 6C4D D840 920F 3130 7A92" /* .¸·‡.ŒlMØ@’.10z’ */ - $"1CF4 1B74 BC2B 8954 0A80 9636 BFC3 6330" /* .ô.t¼+‰T€–6¿Ãc0 */ - $"3E7F 7E4E A811 39F2 3D56 10D3 6A76 4E20" /* >.~N¨.9ò=V.ÓjvN */ - $"F646 5CD3 9166 D2D6 046F E398 A934 2D04" /* öF\Ó‘fÒÖ.o㘩4-. */ - $"2E01 C602 1332 8274 6AE2 D5C9 6226 30B3" /* ..Æ..2‚tjâÕÉb&0³ */ - $"07DB FDF3 B3BB 6C31 B162 FF63 0639 8E6F" /* .Ûýó³»l1±bÿc.9Žo */ - $"3501 A54C 1AA6 42EB EDE7 885E EE2F A6D9" /* 5.¥L.¦Bëíçˆ^î/¦Ù */ - $"B74A AE20 8FFB 6FCF A537 642D F17F A45E" /* ·J® ûoÏ¥7d-ñ.¤^ */ - $"EE37 DE05 7569 A81E F464 A35B 603B 4F40" /* î7Þ.ui¨.ôd£[`;O@ */ - $"D00F C3D2 D04A F943 AC3C 37E2 1B2B A1D3" /* Ð.ÃÒÐJùC¬<7â.+¡Ó */ - $"09D6 A92B F7CB B2FA 9FF7 97F2 83F9 BABC" /* ÆÖ©+÷˲úŸ÷—òƒùº¼ */ - $"E4BE F015 E804 97FC A16F 6E8B 9004 8424" /* ä¾ð.è.—ü¡on‹.„$ */ - $"04F7 1295 0A15 3C1A AA5D 6A75 372A 0BB4" /* .÷.•Â.<.ª]ju7*.´ */ - $"4849 DD4A 012F D969 23A9 FBA7 C3EB D29F" /* HIÝJ./Ùi#©û§ÃëÒŸ */ - $"5CE0 BD6F 8436 26BB 1B52 3BCB DCAA 0791" /* \à½o„6&».R;Ëܪ.‘ */ - $"02B3 8EC7 5A89 D402 C9FF 058E E2C8 AD72" /* .³ŽÇZ‰Ô.Éÿ.ŽâÈ­r */ - $"01BF D9B3 FA52 B000 0000 3090 8B4E 8809" /* .¿Ù³úR°...0‹NˆÆ */ - $"9E4F 59A7 8021 D030 169B 78E6 55B4 9FB8" /* žOY§€!Ð0.›xæU´Ÿ¸ */ - $"48A1 D2F4 BE8E A948 A89E 5E3E BE56 AE8C" /* H¡Òô¾Ž©H¨ž^>¾V®Œ */ - $"BF6C 6485 F435 4906 BE37 4D88 589A 85C0" /* ¿ld…ô5I.¾7MˆXš…À */ - $"5278 59EC 1FED 3652 3FE0 5229 0524 D686" /* RxYì.í6R?àR).$Ö† */ - $"1E5E 14D9 8C56 8742 9625 36BB 4674 0391" /* .^.ÙŒV‡B–%6»Ft.‘ */ - $"9647 FCC9 30C4 6D0D 5812 1271 E9C8 E89D" /* –GüÉ0Äm.X..qéÈè */ - $"7F9B 3420 0269 5F58 4554 F964 BDDA E9F3" /* .›4 .i_XETùd½Úéó */ - $"973A 5B5F 4C59 107B 2D9E 87CB D896 1F13" /* —:[_LY.{-ž‡ËØ–.. */ - $"AC52 F00D 3600 9104 3FF2 399A 0158 5153" /* ¬Rð.6.‘.?ò9š.XQS */ - $"139A A5C2 51CC D2C7 D082 C2A0 E35B FE05" /* .š¥ÂQÌÒÇЂ ã[þ. */ - $"06C9 DBB4 7036 39DB 80AF 4642 9F53 170C" /* .ÉÛ´p69Û€¯FBŸS.. */ - $"2856 38D5 0FA7 B562 4ED8 3BB5 B48A B1C8" /* (V8Õ.§µbNØ;µ´Š±È */ - $"B20B 4B42 4499 C5C1 242B A1BA CB74 D8F1" /* ².KBD™ÅÁ$+¡ºËtØñ */ - $"1CF1 241E 7A2A B847 111D 13DC CD3C 05A3" /* .ñ$.z*¸G...ÜÍ<.£ */ - $"024F 25B5 41E2 0A15 E1C4 1A0E A5D8 0742" /* .O%µAâÂ.áÄ..¥Ø.B */ - $"A359 2372 FD88 7447 1DB7 F766 5B7F E63E" /* £Y#rýˆtG.·÷f[.æ> */ - $"26B8 BC6E 7B72 E331 2BE1 73BD 04A0 E941" /* &¸¼n{rã1+ás½. éA */ - $"45EC 9039 8769 8BFF 1624 8D43 CA24 9D0D" /* Eì9‡i‹ÿ.$CÊ$. */ - $"A05B F467 7401 E777 0608 C4A6 A698 9A9B" /*  [ôgt.çw..Ħ¦˜š› */ - $"7066 11D3 606F 857E 18D8 D9D3 E226 38C0" /* pf.Ó`o…~.ØÙÓâ&8À */ - $"D89B 09D9 A2F1 0171 BAC9 D7BF AB2E BD58" /* Ø›ÆÙ¢ñ.qºÉ׿«.½X */ - $"7178 6CC2 608D 447D D92A 621C 1A82 B764" /* qxlÂ`D}Ù*b..‚·d */ - $"2ABE CBE8 07C0 E2A6 9B83 46A8 1109 FC87" /* *¾Ëè.À⦛ƒF¨.Æü‡ */ - $"F083 9598 26AE 8847 7E22 278D 9311 59FC" /* ðƒ•˜&®ˆG~"'“.Yü */ - $"2995 1D44 BA58 24BC 2A99 3946 0E00 9144" /* )•.DºX$¼*™9F..‘D */ - $"9113 0297 29E3 A7B5 B937 2D23 8405 86ED" /* ‘..—)ã§µ¹7-#„.†í */ - $"29F1 5254 6A8C 0FB8 4B13 F6C3 6028 2C14" /* )ñRTjŒ.¸K.öÃ`(,. */ - $"3B80 E317 225C 7A9B 405C 7E95 A2E4 311B" /* ;€ã."\z›@\~•¢ä1. */ - $"076A D7B8 A4B5 225A 1F29 FAA2 8239 D98F" /* .j׸¤µ"Z.)ú¢‚9Ù */ - $"071A F302 DA24 AE80 2AC0 D108 035D EA76" /* ..ó.Ú$®€*ÀÑ..]êv */ - $"2F7E 850F 9E87 6B19 B2F1 F1E5 F5B3 A5AF" /* /~….ž‡k.²ññåõ³¥¯ */ - $"35BB D867 8257 8A48 5E4F 6983 E22E 6DAD" /* 5»Øg‚WŠH^Oiƒâ.m­ */ - $"D361 1505 ECF2 3F3C DB84 1861 E5AB 6793" /* Óa..ìò?<Û„.aå«g“ */ - $"910D 8F56 6BB5 FD17 29DB 242A 6946 8022" /* ‘.Vkµý.)Û$*iF€" */ - $"7DAF 8120 02EB C840 3765 69EC BB8B F2FF" /* }¯ .ëÈ@7ei컋òÿ */ - $"6031 7BE4 EFC4 BECD 7BD7 CB0A 8B8C 75C2" /* `1{äïľÍ{×Ë‹Œu */ - $"E63A F4E4 B05B 1442 0CB1 BEBD E078 84F5" /* æ:ôä°[.B.±¾½àx„õ */ - $"3D95 24FA 952F 949B AD72 01B7 1CC7 4CA6" /* =•$ú•/”›­r.·.ÇL¦ */ - $"78C2 BA05 B757 517A 5CB1 A380 0C23 0680" /* xº.·WQz\±£€.#.€ */ - $"3113 0CBA 23B8 AA48 F832 B74F 997E 6E03" /* 1..º#¸ªHø2·O™~n. */ - $"D16C 577F 968F E9A4 73CA DA79 07B3 A5F1" /* ÑlW.–é¤sÊÚy.³¥ñ */ - $"2D20 C13D F821 62F9 41A0 A7AA 472A 368A" /* - Á=ø!bùA §ªG*6Š */ - $"28EE 7686 F7B4 D5CF 225E 004E 709F C4E8" /* (îv†÷´ÕÏ"^.NpŸÄè */ - $"FCBC B778 C976 A1E0 1968 1EF9 E998 2DC2" /* ü¼·xÉv¡à.h.ùé˜- */ - $"1693 C645 A4F5 787A 5B10 45C0 F010 8596" /* .“ÆE¤õxz[.EÀð.…– */ - $"A0F6 E8AA 1BAC C958 C0F6 101E 0C4D 2E61" /*  öèª.¬ÉXÀö...M.a */ - $"B76E 4019 58DD 3058 000C 2375 6EBC 6599" /* ·n@.XÝ0X..#un¼e™ */ - $"BEA3 9ADC 0002 F98F 24B3 B036 EA0D F2FD" /* ¾£šÜ..ù$³°6ê.òý */ - $"6823 E10A 59D7 5D0B F6C0 EFB2 7D9D A684" /* h#áÂY×].öÀï²}¦„ */ - $"3084 4AD6 92F2 BFB2 57CA 7294 FF2D 53C8" /* 0„JÖ’ò¿²WÊr”ÿ-SÈ */ - $"8D05 254E 2360 582F CE0C E209 240D FAB4" /* .%N#`X/Î.âÆ$.ú´ */ - $"C638 2103 7462 2AF1 5461 2036 09B4 294F" /* Æ8!.tb*ñTa 6Æ´)O */ - $"52A6 6553 F6B7 85F6 E77F A8B7 058C F201" /* R¦eSö·…öç.¨·.Œò. */ - $"19BA D75B 6612 0013 CFA6 F54F 8855 C000" /* .º×[f...ϦõOˆUÀ. */ - $"00BE 57DE C13B 77B0 AF81 F95D 8E88 7224" /* .¾WÞÁ;w°¯ù]Žˆr$ */ - $"002F C7BE 1D06 F540 58EF 1909 1D8F 037F" /* ./Ǿ..õ@Xï.Æ... */ - $"E973 290F 641E 8849 F996 EA66 D15C CA23" /* és).d.ˆIù–êfÑ\Ê# */ - $"C620 3090 94D8 F95F C58C 720B 7FFE 206C" /* Æ 0”Øù_ÅŒr..þ l */ - $"A3E0 EE49 AE89 4586 6617 FE87 4D7B D300" /* £àîI®‰E†f.þ‡M{Ó. */ - $"4CF6 E77F A882 E041 362F 710E AC03 D573" /* Löç.¨‚àA6/q.¬.Õs */ - $"69FF 7480 0018 484B 0D10 C800 0000 0C24" /* iÿt€..HK..È....$ */ - $"183F ADBF D900 0184 8481 E82C C758 1848" /* .?­¿Ù..„„è,ÇX.H */ - $"4840 6806 1212 B020 EA50 0818 484B F6E7" /* H@h...° êP..HKöç */ - $"7FA5 E774 6249 2F3D 5FF9 2FC0 0C24 1656" /* .¥çtbI/=_ù/À.$.V */ - $"1B91 8000 1846 D5F4 CA01 40C2 3F26 3D84" /* .‘€..FÕôÊ.@Â?&=„ */ - $"7B4A 811F 08D6 B47D 05C2 4402 D57B C1FC" /* {J..Ö´}.ÂD.Õ{Áü */ - $"7D32 E6FE 8125 F24E 514B 2820 7323 F96F" /* }2æþ%òNQK( s#ùo */ - $"B1F9 CDBD 94E4 C9BF 81D6 5A26 1C08 2131" /* ±ùͽ”äÉ¿ÖZ&..!1 */ - $"FF58 608E A4BB BEFD 703F C3EA B596 2AEA" /* ÿX`ޤ»¾ýp?Ãêµ–*ê */ - $"48B2 2319 2F7A B9BC A14D EAB4 49CF 89E9" /* H²#./z¹¼¡Mê´Iωé */ - $"D312 5979 1910 6519 C45E 4B88 F709 D65D" /* Ó.Yy..e.Ä^Kˆ÷ÆÖ] */ - $"BF0F 86DC C883 8469 9757 7FC7 FB91 A851" /* ¿.†Üȃ„i—W.Çû‘¨Q */ - $"7834 0232 03F5 F552 B022 E799 431E 3FE8" /* x4.2.õõR°"ç™C.?è */ - $"BE7C A37B AAE1 D04F 9795 EA98 CAB0 6816" /* ¾|£{ªáÐO—•ê˜Ê°h. */ - $"047F 244A 2BD3 E0CF B862 B172 B1B3 F027" /* ..$J+Óàϸb±r±³ð' */ - $"6505 A5AA 6AB2 5F8E B98F 85CB D487 2603" /* e.¥ªj²_޹…ËÔ‡&. */ - $"BDA4 4C6D 4B74 0A12 117F 6137 6A30 37CE" /* ½¤LmKtÂ...a7j07Î */ - $"0441 188C 63FC 46ED 5C9A B6A0 9012 6450" /* .A.ŒcüFí\š¶ .dP */ - $"A042 C4D3 8E69 8930 0797 25B3 B70D 5C62" /*  BÄÓŽi‰0.—%³·.\b */ - $"6A83 3964 5EF1 4A28 508D FF7F E847 17D0" /* jƒ9d^ñJ(Pÿ.èG.Ð */ - $"7C91 F4BC AA82 5462 99EF FF79 5A7A E45E" /* |‘ô¼ª‚Tb™ïÿyZzä^ */ - $"98FF 5B1E 90FE 7F80 9453 7AD1 4A63 8FFC" /* ˜ÿ[.þ.€”SzÑJcü */ - $"1B61 796C 4B90 7FE9 1959 752B 8579 95F8" /* .aylK.é.Yu+…y•ø */ - $"C5B9 7EC6 2D24 5185 1BCE 12D6 B418 B42C" /* Ź~Æ-$Q….Î.Ö´.´, */ - $"D40F 7AF7 657E 5184 9CAA 8834 B65C 4785" /* Ô.z÷e~Q„œªˆ4¶\G… */ - $"B934 7C3A 8000 0000 99F5 3F06 3790 6AF7" /* ¹4|:€...™õ?.7j÷ */ - $"0769 9D8E F19F 4FF3 EDE6 D059 B97C A1F0" /* .iŽñŸOóíæÐY¹|¡ð */ - $"0CE2 4FAF B846 8CCE 52E4 E898 D2E0 00A3" /* .âO¯¸FŒÎRäè˜Òà.£ */ - $"CB3D F2B1 E7F7 0C30 FF13 DB29 474C C00D" /* Ë=ò±ç÷.0ÿ.Û)GLÀ. */ - $"C6B7 6A2D 2F89 8E2F BDE7 F2BA C3DD 591B" /* Æ·j-/‰Ž/½çòºÃÝY. */ - $"CEDE C7DD 35BA 492C BB53 2AF6 7315 AC30" /* ÎÞÇÝ5ºI,»S*ös.¬0 */ - $"17D7 1C05 3AE4 4AB3 8D31 0DC9 7A9F 0A76" /* .×..:äJ³1.ÉzŸÂv */ - $"B4EE 95EE 6CB5 1C6A FE4F D27E 0966 CE51" /* ´î•îlµ.jþOÒ~ÆfÎQ */ - $"8607 E144 F4AD E999 5480 05FF 7FC2 C645" /* †.áDô­é™T€.ÿ.ÂÆE */ - $"D136 BB6E 89FA 9A2D F827 338F FEB9 B248" /* Ñ6»n‰úš-ø'3þ¹²H */ - $"23A6 377D 0E53 BBF3 D290 3AD8 F58B CE4C" /* #¦7}.S»óÒ:Øõ‹ÎL */ - $"24CA 8E49 76ED DA48 8856 904D C31F 305F" /* $ÊŽIvíÚHˆVMÃ.0_ */ - $"C441 7DAA 86D8 3FE1 5EA7 E20A CDBC 5F2A" /* ÄA}ª†Ø?á^§âÂͼ_* */ - $"35DC 107F DDE2 D88C 7B38 D700 4C54 9C81" /* 5Ü..ÝâØŒ{8×.LTœ */ - $"B8FD F39D 0F47 DE2B 6E17 7D4F E30F F60C" /* ¸ýó.GÞ+n.}Oã.ö. */ - $"0895 5694 3006 1211 EFEC D7F8 F743 3D43" /* .•V”0...ïì×ø÷C=C */ - $"6BA5 7C06 9025 9188 E369 0FC8 94CB F38E" /* k¥|.%‘ˆãi.È”ËóŽ */ - $"DF76 CA67 91C4 D786 F34F 1E56 332B 1404" /* ßvÊg‘Ä׆óO.V3+.. */ - $"B66B 2702 B13D 47B8 1FBD 38D7 A2DF 54EF" /* ¶k'.±=G¸.½8×¢ßTï */ - $"FD1C 00CC 5D05 5B28 3EBF 2FC7 7263 5880" /* ý..Ì].[(>¿/ÇrcX€ */ - $"0364 4A0B 982F 4A13 A55F 5D64 61D2 110C" /* .dJ.˜/J.¥_]daÒ.. */ - $"4319 318A 5BD6 94B7 DBA9 92F0 379B 0E87" /* C.1Š[Ö”·Û©’ð7›.‡ */ - $"4561 92A0 0000 0000 0000 12FE B897 0ABD" /* Ea’ .......þ¸—½ */ - $"B3C7 FEA8 AE43 B177 DA3F 2BA3 2D59 3358" /* ³Çþ¨®C±wÚ?+£-Y3X */ - $"9FAE 567F E53B 2877 9FFF 7FFF 7FFB 4B90" /* Ÿ®V.å;(wŸÿ.ÿ.ûK */ - $"C00D FEA3 7DF6 39C4 C825 2952 2C65 8FFF" /* À.þ£}ö9ÄÈ%)R,eÿ */ - $"7E91 DB49 1333 7DEC 6471 1E2E 394E A080" /* ~‘ÛI.3}ìdq..9N € */ - $"C1C9 0DD4 62C4 4FC9 E332 BC0D F9DD FEAB" /* ÁÉ.ÔbÄOÉã2¼.ùÝþ« */ - $"9D33 8271 2A01 8484 B009 6058 624E 2736" /* 3‚q*.„„°Æ`XbN'6 */ - $"529C A0F4 BCBB 846D 32FD 407C FA84 2D52" /* Rœ ô¼»„m2ý@|ú„-R */ - $"21DC 1623 210B 0410 4061 212D 0386 04FF" /* !Ü.#!...@a!-.†.ÿ */ - $"7F72 1DFF 6F83 6A31 2B6E 0A6B D1F1 9A43" /* .r.ÿoƒj1+nÂkÑñšC */ - $"F340 2C47 D413 DFAC FF76 46AC 4BDD 55F0" /* ó@,GÔ.߬ÿvF¬KÝUð */ - $"2F9A 3BC6 613E 2F69 F45C 08F3 3FCB F83F" /* /š;Æa>/iô\.ó?Ëø? */ - $"F7D8 DC38 0F99 4764 0309 0948 41C6 1212" /* ÷ØÜ8.™Gd.ÆÆHAÆ.. */ - $"293B 5EA3 BE56 F760 BAEF 61FF 43D4 2891" /* );^£¾V÷`ºïaÿCÔ(‘ */ - $"A380 672E FF7E 4B98 FBFB 1ACD 90F6 4A7E" /* £€g.ÿ~K˜ûû.ÍöJ~ */ - $"3B14 E9F4 B1B4 4120 E600 AF42 0056 B131" /* ;.éô±´A æ.¯B.V±1 */ - $"0310 EF4F EA97 E030 9090 A298 F514 CEFA" /* ..ïOê—à0¢˜õ.Îú */ - $"B200 0061 211A A495 FD76 5850 B8F7 1CF1" /* ²..a!.¤•ývXP¸÷.ñ */ - $"A979 F478 5BFF 7FFB E6D6 F6D8 03FF 7FFD" /* ©yôx[ÿ.ûæÖöØ.ÿ.ý */ - $"2A36 38D4 BA43 6280 D508 C4BD 735D 1C6F" /* *68ÔºCb€Õ.Ľs].o */ - $"2444 63E9 1C9A 969F 90A6 F34E D24D 94F2" /* $Dcé.š–Ÿ¦óNÒM”ò */ - $"1A09 F86A 2762 886F FBA0 96EA 1DC7 0364" /* .Æøj'bˆoû –ê.Ç.d */ - $"6192 A000 0000 0000 0000 0000 0061 BE9F" /* a’ ..........a¾Ÿ */ - $"2C25 5C25 4958 1428 AA60 5ABF 5551 6084" /* ,%\%IX.(ª`Z¿UQ`„ */ - $"D319 B739 1DC3 F92F 03A7 CF66 39CC 13BE" /* Ó.·9.Ãù/.§Ïf9Ì.¾ */ - $"100A 204E 9A06 CBD9 A8ED 9E4D CEED AE53" /* . Nš.ËÙ¨ížMÎí®S */ - $"023D B3BF AC07 F70E F7DD 2601 E2B4 B214" /* .=³¿¬.÷.÷Ý&.â´². */ - $"3B1D 74CD 0F60 7063 EFC5 24B8 3B0F DF21" /* ;.tÍ.`pcïÅ$¸;.ß! */ - $"2929 3755 A800 7D09 63D9 1548 5D89 6D22" /* ))7U¨.}ÆcÙ.H]‰m" */ - $"FAEF 37DC EB96 FF52 0018 EBDF 464C 8B34" /* úï7Üë–ÿR..ëßFL‹4 */ - $"DF85 2990 1CF1 7C84 CEDC D384 5003 D5A1" /* ß…).ñ|„ÎÜÓ„P.Õ¡ */ - $"2797 DBDC FDFB 0E8C 3703 470D 1FD5 B974" /* '—ÛÜýû.Œ7.G..Õ¹t */ - $"5A32 CF32 3D2A 0213 FDC8 8A0C B595 4840" /* Z2Ï2=*..ýÈŠ.µ•H@ */ - $"C240 6E40 D585 AF4C 004A F98F FC90 E5BB" /* Â@n@Õ…¯L.Jùüå» */ - $"D6AD 2A34 0A6E 1D4D 933D 2221 80B7 C8EF" /* Ö­*4Ân.M“="!€·Èï */ - $"7C61 2953 2991 F91A 61A3 B54E 56D2 77E1" /* |a)S)‘ù.a£µNVÒwá */ - $"1DB8 8B5F 5E9C 7D32 80A0 C23F BBE6 A2B2" /* .¸‹_^œ}2€ Â?»æ¢² */ - $"D49F C777 4BE6 FDA6 7B0F 2983 E19B 84FF" /* ÔŸÇwKæý¦{.)ƒá›„ÿ */ - $"4B7B 0DD6 A35E 60AD 632D D6D7 7030 0A9F" /* K{.Ö£^`­c-Ö×p0Ÿ */ - $"0FA2 0820 8451 9624 D0FF 1FB4 9B81 61CC" /* .¢. „Q–$Ðÿ.´›aÌ */ - $"591F 6D98 E1AF 16E4 AF42 1FE0 B7C7 30DF" /* Y.m˜á¯.ä¯B.à·Ç0ß */ - $"CFFC EC14 15A1 B07A 4E11 ED5F BDB3 FD2A" /* Ïüì..¡°zN.í_½³ý* */ - $"84B1 6901 4333 27BB 2E8C 3329 2064 A800" /* „±i.C3'».Œ3) d¨. */ - $"0001 2FDE 803E 817B C369 A30F FCF0 FF1D" /* ../Þ€>{Ãi£.üðÿ. */ - $"89A1 2FD7 FF71 B63D 19EC 98DE DFE2 D9B8" /* ‰¡/×ÿq¶=.ì˜ÞßâÙ¸ */ - $"9D39 1737 4722 2A89 D291 623B 279F BF0B" /* 9.7G"*‰Ò‘b;'Ÿ¿. */ - $"E8C0 8AF8 CBE4 0011 5D58 29AB 34B0 335C" /* èÀŠøËä..]X)«4°3\ */ - $"36B2 1383 D820 11B8 22DF 56E1 27EF 932D" /* 6².ƒØ .¸"ßVá'ï“- */ - $"30DE CC72 58E3 9BDD A88C 229A CBC8 A466" /* 0ÞÌrXã›Ý¨Œ"šËȤf */ - $"7C29 FDE8 E789 F28F 3258 A2DD 897B 1C6A" /* |)ýèç‰ò2X¢Ý‰{.j */ - $"C048 306A EEA7 3DF0 F8D4 BECC CDBD 9E43" /* ÀH0jî§=ðøÔ¾ÌͽžC */ - $"A29D 8052 478B 6470 79B7 B38A 5743 CAE7" /* ¢€RG‹dpy·³ŠWCÊç */ - $"0BD4 0F4A 23E1 4C85 39C9 DEB0 75AF 151E" /* .Ô.J#áL…9ÉÞ°u¯.. */ - $"45D5 1681 2BA4 74C9 13B5 746A E399 9467" /* EÕ.+¤tÉ.µtjã™”g */ - $"E6B9 D503 7F7C D57D 4D5F 7FC8 DD43 7D9B" /* æ¹Õ..|Õ}M_.ÈÝC}› */ - $"3CDC F9AD 167C 162B 4E6C 2110 DB2C DF34" /* <Üù­.|.+Nl!.Û,ß4 */ - $"AEED CCE4 05AC 4057 9829 B161 9CA0 8159" /* ®íÌä.¬@W˜)±aœ Y */ - $"A64F FD15 EC5A 4A51 CA6C FD10 9A25 4291" /* ¦Oý.ìZJQÊlý.š%B‘ */ - $"1E90 1FC2 3530 E0DB E4E6 232E CB64 AF95" /* ..Â50àÛäæ#.Ëd¯• */ - $"9494 656D D395 3D62 9EDA 2EC1 DB02 1FAA" /* ””emÓ•=bžÚ.ÁÛ..ª */ - $"6778 0FC0 C4A2 CCA8 EDC0 4DA8 F889 162F" /* gx.ÀĢ̨íÀM¨ø‰./ */ - $"03F9 A9C1 C635 1DAD 2E22 580B 0B2B 83E3" /* .ù©ÁÆ5.­."X..+ƒã */ - $"EC02 5552 3AA8 91BA 45AF 5439 4265 71F6" /* ì.UR:¨‘ºE¯T9Beqö */ - $"3E7A 4412 5DE5 1863 50E6 C0ED C470 3ED9" /* >zD.]å.cPæÀíÄp>Ù */ - $"0E3F 48BA 54C5 915E 03F0 D836 6429 2A67" /* .?HºTÅ‘^.ðØ6d)*g */ - $"B7FA 6AF9 069E 8E67 2848 B570 C3AC 7746" /* ·újù.žŽg(HµpìwF */ - $"EB48 0A2F 4BE4 8EB3 3F8F 791F 0646 DEDF" /* ëHÂ/K䎳?y..FÞß */ - $"316B EFDF 6FD8 C0B9 7319 CE94 8930 C6F6" /* 1kïßoØÀ¹s.Δ‰0Æö */ - $"6399 C4A9 79AD E967 4783 3F8D C538 3C15" /* c™Ä©y­égGƒ?Å8<. */ - $"E5B7 CE98 22B7 5333 A938 B26F 0E1E EF2E" /* å·Î˜"·S3©8²o..ï. */ - $"74B9 72EF 9D8A 80B7 FDC1 8334 A5F9 DCFB" /* t¹r·ýÁƒ4¥ùÜû */ - $"B891 BB38 373C 9BE8 59F4 6018 6E63 DA65" /* ¸‘»87<›èYô`.ncÚe */ - $"9B13 9DC8 28DB 3C15 0D2C 11FC 0E2D 7A0A" /* ›.È(Û<..,.ü.-z */ - $"F8FF 671F C3FF 7F8E 1210 C212 EA5A 5F0B" /* øÿg.Ãÿ.Ž..Â.êZ_. */ - $"9727 F770 25A5 236D 9789 75C7 4089 11DD" /* —'÷p%¥#m—‰uÇ@‰.Ý */ - $"E472 3865 B217 B946 CF22 5225 27DE 566D" /* är8e².¹FÏ"R%'ÞVm */ - $"6799 4F82 0D46 59F5 E466 F9E7 71C3 FA80" /* g™O‚.FYõäfùçqÃú€ */ - $"7826 E598 FF48 E181 6CA8 5A7E C354 0CAA" /* x&å˜ÿHál¨Z~ÃT.ª */ - $"B01C 9EC4 181F 849B 6A13 FB8D C477 70BD" /* °.žÄ..„›j.ûÄwp½ */ - $"F46B 278C 4467 B0CF 3E21 805E EF97 9696" /* ôk'ŒDg°Ï>!€^ï—–– */ - $"CBB9 E3F6 B62E DC26 001A 408F D7E2 07C3" /* ˹ãö¶.Ü&..@×â.à */ - $"C1A4 AD97 4235 8863 A088 1980 C505 6E1F" /* Á¤­—B5ˆc ˆ.€Å.n. */ - $"F392 0B24 B500 20DC 8295 5703 F9B9 FF70" /* ó’.$µ. Ü‚•W.ù¹ÿp */ - $"355C 9B8D BB49 898F 1AAB F65F 7D7E E28F" /* 5\›»I‰.«ö_}~â */ - $"4300 BDCC FB20 4F67 CA07 0CAE 3BAD AA36" /* C.½Ìû OgÊ..®;­ª6 */ - $"A4D8 3358 4176 1AD6 01FA 0450 0000 0042" /* ¤Ø3XAv.Ö.ú.P...B */ - $"7B49 E0E8 A7D8 4EA9 E1A5 597B DB80 BA6D" /* {Iàè§ØN©á¥Y{Û€ºm */ - $"8010 25EA 0A26 833F DE77 DBF7 78B9 564B" /* €.%êÂ&ƒ?ÞwÛ÷x¹VK */ - $"57B2 AF8C BC92 97D7 46A1 23C1 B595 A2EE" /* W²¯Œ¼’—×F¡#Áµ•¢î */ - $"F8A9 29FA 42C2 3557 6345 80B1 FCFD F322" /* ø©)úBÂ5WcE€±üýó" */ - $"E992 9262 A83F E43D B059 CB12 D425 FEF2" /* é’’b¨?ä=°YË.Ô%þò */ - $"9932 1BD8 C65C ED82 D05E E15C 5E9C 76B7" /* ™2.ØÆ\í‚Ð^á\^œv· */ - $"7C64 FCDB A247 D388 3CCB 86B5 C486 2261" /* |düÛ¢GÓˆ<ˆµÄ†"a */ - $"BFD1 7213 39C3 0D69 6AF0 2476 B711 7E91" /* ¿Ñr.9Ã.ijð$v·.~‘ */ - $"6B53 6A04 4F3C 2781 A090 3118 6C3F 49BA" /* kSj.O<' 1.l?Iº */ - $"B81A 3FEB D686 EFCE F487 8315 E33F 84DB" /* ¸.?ëÖ†ïÎô‡ƒ.ã?„Û */ - $"E2C9 F35F 28C5 10C4 FF7F FA4F E953 89FC" /* âÉó_(Å.Äÿ.úOéS‰ü */ - $"8B32 23C6 0D04 5E49 DADA F0FE BCA7 D2C9" /* ‹2#Æ..^IÚÚðþ¼§ÒÉ */ - $"5869 EAD4 F153 9BF5 A5EA 3298 CC8B 8721" /* XiêÔñS›õ¥ê2˜Ì‹‡! */ - $"F919 680B 3F8C 304A 2849 4970 41CF 0F60" /* ù.h.?Œ0J(IIpAÏ.` */ - $"76D9 5820 EF21 CD4A 205A 632F 7CC4 EFDF" /* vÙX ï!ÍJ Zc/|Äïß */ - $"33F3 CCA8 EDAF 405B 78E1 8F79 0F66 6573" /* 3ǫ́í¯@[xáy.fes */ - $"35A2 AD75 1E18 6018 AF23 7C9D A008 1A01" /* 5¢­u..`.¯#| ... */ - $"C5FE 69AA 2C8E D97E 244D D075 F213 0CC6" /* Åþiª,ŽÙ~$MÐuò..Æ */ - $"738F 4395 BBC0 5CB6 3ADC 3DA8 ACB8 E018" /* sC•»À\¶:Ü=¨¬¸à. */ - $"BA5B 13DB 0F6A CB18 DEAC 9749 F5B5 361D" /* º[.Û.jË.Þ¬—Iõµ6. */ - $"CF3A C107 9606 179F F4C7 F3DE CB0B 1F53" /* Ï:Á.–..ŸôÇóÞË..S */ - $"F27E 5D3C 11AB 66B4 8037 0644 AE98 19BF" /* ò~]<.«f´€7.D®˜.¿ */ - $"D564 973A 0CF2 C96F 56D4 5CB8 666F C68C" /* Õd—:.òÉoVÔ\¸foÆŒ */ - $"1E73 E515 8B33 75D2 D3B4 B3A3 8CDE DE0C" /* .så.‹3uÒÓ´³£ŒÞÞ. */ - $"DA37 A3DF 44D2 B57E 2DB2 E891 D36F CC23" /* Ú7£ßDÒµ~-²è‘ÓoÌ# */ - $"ADE8 45BC BB30 78D7 77BD D4A8 087F C83F" /* ­èE¼»0x×w½Ô¨..È? */ - $"E49A 6873 FAC4 C12B 0056 5E18 C3CB C2E9" /* äšhsúÄÁ+.V^.ÃËÂé */ - $"DCAE F0E8 A75F 18DD B8DD 1DCD B0F5 3A1C" /* Ü®ðè§_.ݸÝ.Ͱõ:. */ - $"3816 51A8 0D93 00D0 6FF6 8F07 E4BE EDF9" /* 8.Q¨.“.Ðoö.ä¾íù */ - $"BF0E 6CAA 5384 5DF0 DF12 4CF4 E3B3 5D6C" /* ¿.lªS„]ðß.Lôã³]l */ - $"602A B6F1 C0E0 E520 B0D6 71FB 7996 4930" /* `*¶ñÀàå °Öqûy–I0 */ - $"23DD 3601 3653 C40D 1A64 DC2B D5C2 01C9" /* #Ý6.6SÄ..dÜ+ÕÂ.É */ - $"5002 6BBE 7338 81EE F87D 7687 0FE6 7CF9" /* P.k¾s8îø}v‡.æ|ù */ - $"BAB6 5B35 1A25 421C 5BBA 4D82 4E1F B1D4" /* º¶[5.%B.[ºM‚N.±Ô */ - $"1907 FF78 F534 4A16 7BB6 B598 51F6 E4D3" /* ..ÿxõ4J.{¶µ˜QöäÓ */ - $"A04B 1198 B926 CFAE FC03 22E3 8360 E696" /*  K.˜¹&Ï®ü."ãƒ`æ– */ - $"F546 62F9 7178 F327 E245 4520 8D17 41C4" /* õFbùqxó'âEE .AÄ */ - $"9EC6 EF8D 0924 9416 7901 CE87 5EBB 286D" /* žÆïÆ$”.y.·^»(m */ - $"53BF 09FA 41F6 5FBA 8F4C 79A8 75BA 277A" /* S¿ÆúAö_ºLy¨uº'z */ - $"7D42 642B 38EE 9A49 DEDB F1B3 80D0 E5D0" /* }Bd+8îšIÞÛñ³€ÐåÐ */ - $"2980 F797 E7D0 F90D 4B2F AFDD 4A69 3389" /* )€÷—çÐù.K/¯ÝJi3‰ */ - $"1418 EBD0 6DF0 E38D 6E2F D546 C1A8 C8DD" /* ..ëÐmðãn/ÕFÁ¨ÈÝ */ - $"8977 E053 9C26 053A CF69 97F9 7FB4 9000" /* ‰wàSœ&.:Ïi—ù.´. */ - $"0000 0115 0E67 B64C 0015 DD82 643D 6476" /* .....g¶L..Ý‚d=dv */ - $"ED28 6324 AD72 8124 1AF6 FB1B 21C9 0605" /* í(c$­r$.öû.!É.. */ - $"FAE6 04A6 31BF 6D67 FF7B B889 831A 4FFD" /* úæ.¦1¿mgÿ{¸‰ƒ.Oý */ - $"6BF5 F098 23AB A490 39F7 6AFC 3832 E2E1" /* kõð˜#«¤9÷jü82âá */ - $"11B2 ADB0 ECCA 83DE B4FF 3685 5106 75DE" /* .²­°ìʃ޴ÿ6…Q.uÞ */ - $"3047 28A0 EDBE AD29 17CD DA62 698B CE64" /* 0G( í¾­).ÍÚbi‹Îd */ - $"5999 2B8E BB7D C74F F009 A25D B2B5 BDD9" /* Y™+Ž»}ÇOðÆ¢]²µ½Ù */ - $"B852 BFFE 0B74 9C05 22D7 B0A3 2139 0979" /* ¸R¿þ.tœ."×°£!9Æy */ - $"5C29 BAE8 43DA F9E5 5383 AFD2 14EC 64AA" /* \)ºèCÚùåSƒ¯Ò.ìdª */ - $"442C CE71 74ED 5C27 4331 9374 AC77 47EE" /* D,Îqtí\'C1“t¬wGî */ - $"31AC 4C74 97BC 753C D5DC 3D8B F7D2 C612" /* 1¬Lt—¼u<ÕÜ=‹÷ÒÆ. */ - $"2399 F431 07A1 76CA DAE6 772B 309A C800" /* #™ô1.¡vÊÚæw+0šÈ. */ - $"9F2F D6DF A44C 48EB 853E 4140 A123 BCA3" /* Ÿ/ÖߤLHë…>A@¡#¼£ */ - $"D096 00DA 0822 DFB3 6887 B31F A18F 59BE" /* Ж.Ú."ß³h‡³.¡Y¾ */ - $"6B25 B5CF CFA3 8806 85B7 ED84 B20B CDA2" /* k%µÏÏ£ˆ.…·í„².Í¢ */ - $"A0C8 404B 3FFF 7FF3 3816 5BF0 A16B 85D0" /*  È@K?ÿ.ó8.[ð¡k…Ð */ - $"B87F E4BB 21F9 A3BB 9103 2944 434A 5789" /* ¸.ä»!ù£»‘.)DCJW‰ */ - $"E3EC B1E3 6F3E 154A 37E4 ACA6 4B02 6C5B" /* ãì±ão>.J7䬦K.l[ */ - $"D23A D4D4 83CE F291 CD7F 114F 5935 8EE0" /* Ò:ÔÔƒÎò‘Í..OY5Žà */ - $"17EA F0B3 1D93 BC5F 2CF8 511C E99F 21D8" /* .êð³.“¼_,øQ.éŸ!Ø */ - $"E286 EB17 6FC2 C34B 1110 6398 03BF CB08" /* â†ë.oÂÃK..c˜.¿Ë. */ - $"0018 4848 E24D 90A5 63F9 B1F8 6E20 EF6E" /* ..HHâM¥cù±øn ïn */ - $"25D5 858B 0AE4 2235 581B D4DA E01C B006" /* %Õ…‹Âä"5X.ÔÚà.°. */ - $"E5EB DE78 855B 19E7 4D80 DAC2 1E8F CB2B" /* åëÞx…[.çM€ÚÂ.Ë+ */ - $"0EC8 3FFF 7759 B569 0861 20CC 1D71 2121" /* .È?ÿwYµi.a Ì.q!! */ - $"71A7 FA20 B34B EAB3 4260 A827 6E91 2B3C" /* q§ú ³Kê³B`¨'n‘+< */ - $"5479 449A 3161 D24E 8489 C00A 18A6 3FEC" /* TyDš1aÒN„‰ÀÂ.¦?ì */ - $"61F2 4C86 23C1 85DB 6ECA 221D BCC2 C25F" /* aòL†#Á…ÛnÊ".¼ÂÂ_ */ - $"EFFF 7891 F475 0E20 DC0A 8F85 8208 4541" /* ïÿx‘ôu. ÜÂ…‚.EA */ - $"579B 5EE2 24C4 5C60 39B7 D9F1 ECFD 0F0C" /* W›^â$Ä\`9·Ùñìý.. */ - $"3719 72A8 A543 8BF5 94BF BF6C E6F7 E45A" /* 7.r¨¥C‹õ”¿¿læ÷äZ */ - $"C5CF 1FD7 32F5 2D70 041E 3641 2C46 E23D" /* ÅÏ.×2õ-p..6A,Fâ= */ - $"E072 6889 A892 A27F 44A8 564A 74A3 B421" /* àrh‰¨’¢.D¨VJt£´! */ - $"E1CC A0F3 50E2 2711 6919 76BE D84B D2FE" /* áÌ óPâ'.i.v¾ØKÒþ */ - $"AAED 2D64 7C8F 4C55 7FFF 7EFC 2CBF 05DE" /* ªí-d|LU.ÿ~ü,¿.Þ */ - $"25B2 001C 00EC 6D17 ED17 E559 9DFA F731" /* %²...ìm.í.åYú÷1 */ - $"B21A 7394 8B35 5948 BA4F 5858 020F FF7C" /* ².s”‹5YHºOXX..ÿ| */ - $"C89D 1CFA F89B 9F9C 841F 19EF D626 E6DE" /* È.úø›Ÿœ„..ïÖ&æÞ */ - $"DCC3 3148 38A0 C32F 898F BEC3 0AF3 318C" /* ÜÃ1H8 Ã/‰¾ÃÂó1Œ */ - $"5E09 119B 43C8 9FE6 73B2 F4B9 9789 4BFC" /* ^Æ.›CÈŸæs²ô¹—‰Kü */ - $"99A2 FF7F FF7A 4FD0 8C64 F459 410C 013C" /* ™¢ÿ.ÿzOÐŒdôYA..< */ - $"1C6C 85B5 1C8F D078 995D 714E 1C60 3090" /* .l…µ.Ðx™]qN.`0 */ - $"9058 77C4 BB80 5F57 1871 CA72 B2FD 0016" /* XwÄ»€_W.qÊr²ý.. */ - $"BAA7 F84F F4E9 ACDF F766 8CB4 475D 2F0B" /* º§øOôé¬ß÷fŒ´G]/. */ - $"37BC 18C8 6162 79C2 BDD7 8753 204B A536" /* 7¼.Èaby½ׇS K¥6 */ - $"9CBE 4972 316A BCB1 9442 4238 B88F 2F48" /* œ¾Ir1j¼±”BB8¸/H */ - $"7A45 5CD1 A306 3A23 5A78 354F CDB6 C0A5" /* zE\Ñ£.:#Zx5OͶÀ¥ */ - $"2A5C 19DA 0B0C CD84 8D85 D2B8 1DC9 059C" /* *\.Ú..Í„…Ò¸.É.œ */ - $"A8C4 8118 4848 9372 9372 566C 21E5 2665" /* ¨Ä.HH“r“rVl!å&e */ - $"D16C 6601 48A8 35CE 7FFF 7F19 B54E 7F04" /* Ñlf.H¨5Î.ÿ..µN.. */ - $"10EC 1AA3 13FF 4588 9722 A7AA B011 863C" /* .ì.£.ÿEˆ—"§ª°.†< */ - $"E4B1 717B 7C2D 21E6 267B 4B48 E790 FF76" /* ä±q{|-!æ&{KHçÿv */ - $"40CC F425 41CB 289F 809D 8170 A529 2EDA" /* @Ìô%AË(Ÿ€p¥).Ú */ - $"A105 B3AF FB44 7951 B87A 0091 5B53 5979" /* ¡.³¯ûDyQ¸z.‘[SYy */ - $"CDC6 5976 6393 34F2 21FF 7FFF 7FFF 7D43" /* ÍÆYvc“4ò!ÿ.ÿ.ÿ}C */ - $"4F4B C77F 73C7 0454 BE9C BE9C 282E 440E" /* OKÇ.sÇ.T¾œ¾œ(.D. */ - $"0608 A380 6121 2103 DBD2 250B 5D57 9159" /* ..£€a!!.ÛÒ%.]W‘Y */ - $"B69A 28CF E66A 154F F84F F4E9 99ED 48C4" /* ¶š(Ïæj.OøOôé™íHÄ */ - $"CA7E BE76 FC67 A7CD DC26 1C00 0184 8463" /* Ê~¾vüg§ÍÜ&...„„c */ - $"69A8 C0A9 127C 5830 CC3A 380A C742 E4DE" /* i¨À©.|X0Ì:8ÂÇBäÞ */ - $"06F5 7999 556D FD9F 268B 895F FF4B 7BB9" /* .õy™UmýŸ&‹‰_ÿK{¹ */ - $"C201 52B7 B483 0906 65EC 1848 4750 6F27" /* Â.R·´ƒÆ.eì.HGPo' */ - $"C86C 1F27 9108 6253 0416 4CD3 30E4 7F77" /* Èl.'‘.bS..LÓ0ä.w */ - $"0705 8420 83B6 BCB6 29DE B71E 8DC5 851A" /* ..„ ƒ¶¼¶)Þ·.Å…. */ - $"ABB0 83D8 F2E2 5113 55D2 AAF6 B3AB 7679" /* «°ƒØòâQ.UÒªö³«vy */ - $"49FE A1F8 6F30 0EC0 7D91 534C C78C DC5D" /* Iþ¡øo0.À}‘SLÇŒÜ] */ - $"5A42 CA06 37D8 E0ED 27FA 3E31 C849 D2BE" /* ZBÊ.7Øàí'ú>1ÈIÒ¾ */ - $"847C 0CCF 676F ACFE 91A3 0F62 B711 1897" /* „|.Ïgo¬þ‘£.b·..— */ - $"9DC3 8E37 3AF8 907E 0B69 1577 2856 AA36" /* ÃŽ7:ø~.i.w(Vª6 */ - $"FAC0 D56C 6686 0443 CA96 FDCD 051B 23A7" /* úÀÕlf†.CÊ–ýÍ..#§ */ - $"7DAC 8229 C5FC F840 103A 6407 49F7 6B32" /* }¬‚)Åüø@.:d.I÷k2 */ - $"254F 2B32 7FC1 F460 D5C0 5EE1 3046 612A" /* %O+2.Áô`ÕÀ^á0Fa* */ - $"1BC1 C143 7B76 B9EF ECCB 5EE9 8F0C 3F71" /* .ÁÁC{v¹ïìË^é.?q */ - $"E805 8B9B 17B7 9ECE C237 AF5C 0062 E61E" /* è.‹›.·žÎÂ7¯\.bæ. */ - $"DF6C C1F7 904E 4379 2A9C 92FC 1B04 00A8" /* ßlÁ÷NCy*œ’ü...¨ */ - $"F9D5 DB1B C4C6 9485 ABC2 1199 CCF2 0A47" /* ùÕÛ.ÄÆ”…«Â.™ÌòÂG */ - $"9693 C097 7AD0 449A FC53 DEC5 6EE8 6BF7" /* –“À—zÐDšüSÞÅnèk÷ */ - $"0D7D 4ED8 3426 DA7E ECF9 57ED 9252 9A6A" /* .}NØ4&Ú~ìùWí’Ršj */ - $"2B94 2614 1B6E A495 8261 4D5E DAEF 03FA" /* +”&..n¤•‚aM^Úï.ú */ - $"8A63 9496 E8AB A1A6 5B5C B03E E73E 2889" /* Šc”–è«¡¦[\°>ç>(‰ */ - $"D257 6C28 080A 68DC 226C 950F F55B E7CC" /* ÒWl(.ÂhÜ"l•.õ[çÌ */ - $"95AD FDA7 43EA 7489 A545 C0FC E9B0 2A25" /* •­ý§Cêt‰¥EÀüé°*% */ - $"719C EE06 9E5A 8FC0 D3B0 0C81 1EB0 C8C6" /* qœî.žZÀÓ°..°ÈÆ */ - $"25BD B383 33BD B80D D9A9 48F3 7539 D7D5" /* %½³ƒ3½¸.Ù©Hóu9×Õ */ - $"8021 5EBA 94A7 83A3 69FE 8179 9106 BC56" /* €!^º”§ƒ£iþy‘.¼V */ - $"14A4 427B 8C09 BACB 2FC9 B8F3 CAFA E51C" /* .¤B{ŒÆºË/ɸóÊúå. */ - $"9C07 9A69 033C 6159 163E 6ED8 259D 7AAB" /* œ.ši.nØ%z« */ - $"D316 475C F6C7 BD0E 7972 4C59 DF3A D5B4" /* Ó.G\öǽ.yrLYß:Õ´ */ - $"44ED 7D01 B0FB 34D4 4C9C BC2D B8A6 5B65" /* Dí}.°û4ÔLœ¼-¸¦[e */ - $"134F 0C96 5CA1 21CC A249 F17D 4660 9835" /* .O.–\¡!Ì¢Iñ}F`˜5 */ - $"957C 7392 53A9 DE42 E650 604B 10E2 FF12" /* •|s’S©ÞBæP`K.âÿ. */ - $"B47A 044A 524A B8D3 60B5 A258 CEAB 55E8" /* ´z.JRJ¸Ó`µ¢XΫUè */ - $"5219 EC3E A9F6 0813 A2B4 930C EDE4 3BBE" /* R.ì>©ö..¢´“.íä;¾ */ - $"C0E3 7F93 1A3F 38EB 2DE3 492D A3BD FD00" /* Àã.“.?8ë-ãI-£½ý. */ - $"811C 530E 2FB8 9D68 2466 D288 EC29 9094" /* .S./¸h$fÒˆì)” */ - $"A3C7 2D32 0A25 BA73 2023 08CA C360 2C72" /* £Ç-2Â%ºs #.ÊÃ`,r */ - $"8BA9 516A 7081 F2FF 1E84 E1C2 F841 77CE" /* ‹©Qjpòÿ.„áÂøAwÎ */ - $"ABDF 6476 30A4 3018 F7F4 F3EE 1A5E 5DF0" /* «ßdv0¤0.÷ôóî.^]ð */ - $"CAAA AA77 C90D 52C4 6AA9 5755 33B9 1814" /* ʪªwÉ.RÄj©WU3¹.. */ - $"3528 E205 C379 648A E627 A23E D5DB 1CAE" /* 5(â.ÃydŠæ'¢>ÕÛ.® */ - $"4868 B7D4 F381 2534 1F48 2BCC 5211 3B0F" /* Hh·Ôó%4.H+ÌR.;. */ - $"9692 B002 4CFB 1F83 3628 D1EB 5416 0648" /* –’°.Lû.ƒ6(ÑëT..H */ - $"F0F0 B0F8 C7C7 6E92 8C54 6859 791B 7890" /* ðð°øÇÇn’ŒThYy.x */ - $"EBA3 BC74 5F3F C4AD 7C9D 6954 2D0C 15BF" /* 룼t_?Ä­|iT-..¿ */ - $"F699 82A6 4170 D2F1 02A5 7EF3 6061 C9CF" /* ö™‚¦ApÒñ.¥~ó`aÉÏ */ - $"C370 E129 F805 8CC8 C670 CBDC 2D44 D349" /* Ãpá)ø.ŒÈÆpËÜ-DÓI */ - $"F3E5 C5F9 357E 3DF2 CDF3 DC8A 1F13 5B2D" /* óåÅù5~=òÍóÜŠ..[- */ - $"C544 448D 1038 8293 4EEA 75A4 0738 7D9F" /* ÅDD.8‚“Nêu¤.8}Ÿ */ - $"C002 3D68 26D8 7B06 FB10 CCDF C4F3 5364" /* À.=h&Ø{.û.ÌßÄóSd */ - $"2342 154B F8FB 01ED 8893 9160 A3A0 B81D" /* #B.Køû.툓‘`£ ¸. */ - $"47A0 6C82 1CBA FAED 931D E025 BDFF 1535" /* G l‚.ºúí“.à%½ÿ.5 */ - $"CADF 68C5 41FD 3896 1AC9 F979 A885 F5AE" /* ÊßhÅAý8–.Éùy¨…õ® */ - $"EFBE C674 ED92 5FE9 E9AF FF52 D573 A6DD" /* ï¾Ætí’_éé¯ÿRÕs¦Ý */ - $"631B 27E4 62CB B76E 7020 EC65 75E2 DB6F" /* c.'äbË·np ìeuâÛo */ - $"0E10 980A 0EA3 2287 4CF8 D402 52B8 1491" /* ..˜Â.£"‡LøÔ.R¸.‘ */ - $"21C9 BC2B 48BC CBD4 464A C539 6CD5 28F1" /* !ɼ+H¼ËÔFJÅ9lÕ(ñ */ - $"CAE4 CA43 9CB8 B181 BF06 522B 4D19 8295" /* ÊäÊCœ¸±¿.R+M.‚• */ - $"05C8 D7CD 8CFA D3E7 7BC9 630C DCDD 7C7E" /* .È×ÍŒúÓç{Éc.ÜÝ|~ */ - $"E4C6 D7DC 5E38 67CC 5934 9E8D 9552 B837" /* äÆ×Ü^8gÌY4ž•R¸7 */ - $"53AE 6D39 FAB1 2EB6 886C 1855 26ED AD08" /* S®m9ú±.¶ˆl.U&í­. */ - $"1EBE 9570 EA2F DFFF 06F4 ABF3 4534 2831" /* .¾•pê/ßÿ.ô«óE4(1 */ - $"1AE2 0A99 2956 2A90 C2A4 58AC E49E F047" /* .â™)V*¤X¬äžðG */ - $"A9BA C394 E8F4 6427 7966 A79C 4269 9ADD" /* ©ºÃ”èôd'yf§œBišÝ */ - $"AD1D 1A7E 375C D3FB 8C25 0B6B 0460 5EB9" /* ­..~7\ÓûŒ%.k.`^¹ */ - $"416C AE82 DFC3 09DA 1F69 8796 6897 8CD0" /* Al®‚ßÃÆÚ.i‡–h—ŒÐ */ - $"3E1B FF7D 9AE9 7F6D 4E84 967C 674F CA41" /* >.ÿ}šé.mN„–|gOÊA */ - $"44C1 0575 93A9 2599 66D0 AB7B 6260 D32C" /* DÁ.u“©%™fЫ{b`Ó, */ - $"94AF 7FC8 82FD F692 92FE B6ED A660 750F" /* ”¯.È‚ýö’’þ¶í¦`u. */ - $"80A2 A8AA E6F6 7B9F E894 ED71 D223 6F4B" /* €¢¨ªæö{Ÿè”íqÒ#oK */ - $"A203 F64C 7560 DBB1 6F9E EE9F 2945 C994" /* ¢.öLu`Û±ožîŸ)EÉ” */ - $"BA00 D3D1 6414 A300 4296 670B 2350 CDD1" /* º.ÓÑd.£.B–g.#PÍÑ */ - $"DF61 29E8 EC17 87B6 BC62 B6BD 5F31 13B2" /* ßa)èì.‡¶¼b¶½_1.² */ - $"48A2 F723 53C7 6955 969B ED83 6A9B 1B06" /* H¢÷#SÇiU–›íƒj›.. */ - $"C7D0 2584 430B 8C52 D00A 736B D6FB AEDB" /* ÇÐ%„C.ŒRÐÂskÖû®Û */ - $"2BA1 5095 759B 0AFF 5138 58EF 3DC2 B14D" /* +¡P•u›ÂÿQ8Xï=±M */ - $"3B7D 62D0 DE12 CFEF 17A3 32C4 C79A C2DA" /* ;}bÐÞ.Ïï.£2ÄÇšÂÚ */ - $"6BA1 6478 B1D3 2278 3787 6C30 08FD 6095" /* k¡dx±Ó"x7‡l0.ý`• */ - $"FF65 1DF4 7606 34C3 B4EE E609 A3BF 7085" /* ÿe.ôv.4Ã´îæÆ£¿p… */ - $"8B3B 2C80 D860 6043 10A4 24B1 2D80 880D" /* ‹;,€Ø``C.¤$±-€ˆ. */ - $"671A 9A76 E1D4 2304 B4E0 9E47 129D 6316" /* g.šváÔ#.´àžG.c. */ - $"33DF C88C 3BB6 5232 475C D19D FA9B 3303" /* 3ßÈŒ;¶R2G\Ñú›3. */ - $"2956 D8B1 08A5 2735 CD4D F130 C700 DA0D" /* )Vر.¥'5ÍMñ0Ç.Ú. */ - $"7BAE 21FA FB1B 35A5 957E 0211 955B 25D0" /* {®!úû.5¥•~..•[%Ð */ - $"A3DD B72F 5BCD 8792 418E BCB6 C727 DD0F" /* £Ý·/[͇’A޼¶Ç'Ý. */ - $"2D42 F031 2A73 C1F9 7964 B937 1E77 A757" /* -Bð1*sÁùyd¹7.w§W */ - $"D158 CB02 80D3 C310 E1C5 709C 5C69 7F04" /* ÑXË.€ÓÃ.áÅpœ\i.. */ - $"4476 F017 3FF2 B891 0160 D681 AEBC F8C9" /* Dvð.?ò¸‘.`Ö®¼øÉ */ - $"8F46 7922 4414 5CEE 0CA8 417B 33BB 5926" /* Fy"D.\î.¨A{3»Y& */ - $"B7A6 7094 6363 C5F2 9AD7 1751 2456 3B83" /* ·¦p”ccÅòš×.Q$V;ƒ */ - $"9BB0 0ECD 1420 6141 A097 DBF4 802A 2377" /* ›°.Í. aA —Ûô€*#w */ - $"CDAC EFE9 4A16 4B3C 5058 A5DC 1C40 169E" /* ͬïéJ.K.K */ - $"89CE 81FD AC96 C691 FDE5 F993 B9CB 6302" /* ‰Îý¬–Æ‘ýåù“¹Ëc. */ - $"B8EE 86B4 A2F7 19EA DAFD D511 B59F BBD2" /* ¸î†´¢÷.êÚýÕ.µŸ»Ò */ - $"5D4E F6A3 BC58 51D5 273F 2E2E 2B6A 2755" /* ]Nö£¼XQÕ'?..+j'U */ - $"38A3 CA29 BFAB D31D CD53 B29C 7418 40DB" /* 8£Ê)¿«Ó.ÍS²œt.@Û */ - $"FD56 1BF6 9350 5411 CF5C 8D26 B1FA 754F" /* ýV.ö“PT.Ï\&±úuO */ - $"E584 8277 6221 6866 257C 9FC9 65A5 6D93" /* å„‚wb!hf%|ŸÉe¥m“ */ - $"C524 B971 3F1D 34A0 BBF4 6B83 9722 CFAD" /* Å$¹q?.4 »ôkƒ—"Ï­ */ - $"8296 103F 53BB 1B22 8A84 2FAC 94DE 4994" /* ‚–.?S»."Š„/¬”ÞI” */ - $"2D31 56A5 DBCD B661 81D7 B360 4958 8FF5" /* -1V¥ÛͶa׳`IXõ */ - $"EB02 25A9 6386 8241 D936 A3CB AA88 9936" /* ë.%©c†‚AÙ6£Ëªˆ™6 */ - $"1698 4F59 765B 34EA 3741 D2D3 2DAC 854D" /* .˜OYv[4ê7AÒÓ-¬…M */ - $"366B C9A0 15F8 D2E6 7CCF 99EF A794 460C" /* 6kÉ .øÒæ|ϙ倫F. */ - $"934E C88B 2BF5 91F7 7BD1 3DC9 6ED3 91FE" /* “NÈ‹+õ‘÷{Ñ=ÉnÓ‘þ */ - $"E63B EDCC 3D4A CC1B AE5D 88D0 B241 20D1" /* æ;íÌ=JÌ.®]ˆÐ²A Ñ */ - $"AB6C 9FE2 E494 395E 8E3C 0EB0 1796 58CC" /* «lŸâä”9^Ž<.°.–XÌ */ - $"9791 D931 DB33 473E 003E 10CD B736 7295" /* —‘Ù1Û3G>.>.Í·6r• */ - $"DD81 B481 9A0A ED27 3C1E 6298 FD0D BDE0" /* Ý´šÂí'<.b˜ý.½à */ - $"11D6 8A21 79C1 DBB7 FEDC 6E48 8080 5ADB" /* .ÖŠ!yÁÛ·þÜnH€€ZÛ */ - $"E61D 9E0E E6A3 6D38 A028 4016 464D F534" /* æ.ž.æ£m8 (@.FMõ4 */ - $"D764 3AD7 55DF 3CAB 7B3D 12F5 9A8D DDCF" /* ×d:×Uß<«{=.õšÝÏ */ - $"6CCD 0387 C982 0FE9 D431 0FE3 E064 1700" /* lÍ.‡É‚.éÔ1.ãàd.. */ - $"1AAD F49E D6DE A939 8010 C91B 605B 4E0A" /* .­ôžÖÞ©9€.É.`[N */ - $"FCBE ADE9 C17A EC1F 3990 9EB2 E6BF 92AA" /* ü¾­éÁzì.9ž²æ¿’ª */ - $"951C D27F A984 10A9 22DC 996E FF6E 12AE" /* •.Ò.©„.©"Ü™nÿn.® */ - $"DC03 5AB3 2CA0 8291 4174 C69E AE28 DBA8" /* Ü.Z³, ‚‘AtÆž®(Û¨ */ - $"38A8 FF12 67D3 F8A3 00D6 2A2E A564 CEFA" /* 8¨ÿ.gÓø£.Ö*.¥dÎú */ - $"0F00 4B44 62A7 CA9F F072 2821 DD3C 6A34" /* ..KDb§ÊŸðr(!ÝC€e.²O1Ú Ÿ */ - $"F51A 9108 7912 32B0 52A6 A901 CADB A758" /* õ.‘.y.2°R¦©.ÊÛ§X */ - $"C00A D516 E462 35B4 C071 131A 0F01 9A95" /* ÀÂÕ.äb5´Àq....š• */ - $"9739 F131 0E5F 7FBA D8AD 925F 992C 0187" /* —9ñ1._.ºØ­’_™,.‡ */ - $"D97C 832B 847E 1148 0402 0449 FB25 D0F1" /* Ù|ƒ+„~.H...Iû%Ðñ */ - $"C1F8 2B8E CE97 D5A4 BEFE 7F0D E420 E43E" /* Áø+ŽÎ—Õ¤¾þ..ä ä> */ - $"801A 448D 9D61 D23C 5956 3DEB A1A6 0858" /* €.DaÒ */ - $"A177 C3EA 4FE4 AFFE 1BFF 61D3 2F87 4BFC" /* ¡wÃêOä¯þ.ÿaÓ/‡Kü */ - $"946E 03F8 6CFF 06A3 FC28 FE13 BF0F 6B7E" /* ”n.ølÿ.£ü(þ.¿.k~ */ - $"1EB8 FC3B 47E1 ECEE EEDF F87D 51FF 07D5" /* .¸ü;Gáìîîßø}Qÿ.Õ */ - $"0BBB 87E1 D3FF 0779 FC3B 6FE1 D378 0DF0" /* .»‡áÓÿ.yü;oáÓx.ð */ - $"BD7C 29EB A2DD 17F2 6ADB E1DB 7F0D 97E1" /* ½|)ë¢Ý.òjÛáÛ..—á */ - $"E84D 7750 FC3E 906F C3E8 35DD 42ED AFE1" /* èMwPü>oÃè5ÝBí¯á */ - $"D33F 0E8D F86E 00F7 91DD 3D8B A94D D83C" /* Ó?.øn.÷‘Ý=‹©MØ< */ - $"B51B 129C 103F 899D B929 4724 C188 2C29" /* µ..œ.?‰¹)G$Áˆ,) */ - $"CE89 11F8 9065 1C37 E234 DFEF 60D7 3221" /* Ή.øe.7â4ßï`×2! */ - $"5343 F889 DCDB AFB3 6F20 F76A 31D9 986E" /* SCø‰ÜÛ¯³o ÷j1Ù˜n */ - $"A745 547E 6F18 076D A675 BA1A 1AAF 6558" /* §ET~o..m¦uº..¯eX */ - $"338A FF71 4707 0776 1B62 BCCC 89E5 4726" /* 3ŠÿqG..v.b¼Ì‰åG& */ - $"A7CB 8885 E07C DADC D741 3B1D D81F AB03" /* §Ëˆ…à|ÚÜ×A;.Ø.«. */ - $"2F84 F52D DFD5 7384 4649 7BA2 5AB1 14C8" /* /„õ-ßÕs„FI{¢Z±.È */ - $"3D8D B951 8183 C33A B08E 82CC EF1A F046" /* =¹QƒÃ:°Ž‚Ìï.ðF */ - $"5B62 C9E0 A926 F330 0A61 A30C 6194 7E1E" /* [bÉà©&ó0Âa£.a”~. */ - $"1EE9 3D0D 1ABE 5536 A026 8B32 830F C02F" /* .é=..¾U6 &‹2ƒ.À/ */ - $"3041 04B7 2C65 024D AC81 D2CC 03CA A08A" /* 0A.·,e.M¬ÒÌ.Ê Š */ - $"B105 F3F1 C365 6BCE 9876 A867 7DBA 63AF" /* ±.óñÃekΘv¨g}ºc¯ */ - $"0973 495F DCC1 3552 54BA 5BDB 618D C6C0" /* ÆsI_ÜÁ5RTº[ÛaÆÀ */ - $"91B8 4489 141B A7D3 F188 8A97 DAB0 8942" /* ‘¸D‰..§ÓñˆŠ—Ú°‰B */ - $"EA67 F235 E18A 871B 4B0C DAC6 9050 BA9C" /* êgò5ኇ.K.ÚÆPºœ */ - $"C432 95CE 13CA 93ED 4FD5 9495 377D C920" /* Ä2•Î.Ê“íOÕ”•7}É */ - $"C8A2 F997 5348 8890 91D5 0A23 50BF 3C37" /* È¢ù—SHˆ‘ÕÂ#P¿<7 */ - $"8372 7C96 32AA 1CD2 46BE 8220 C983 2A71" /* ƒr|–2ª.ÒF¾‚ Ƀ*q */ - $"7961 BF33 9590 C086 CCE9 578B 322E FB50" /* ya¿3•À†ÌéW‹2.ûP */ - $"CB68 6459 C127 EB9B E974 EF02 59F4 FF4D" /* ËhdYÁ'ë›étï.YôÿM */ - $"4525 1874 6A9F 99EB DFCC C1B1 72EA 9FA0" /* E%.tjŸ™ëßÌÁ±r꟠ */ - $"DE00 BBB9 D95F 36B9 406E 3CE0 3BCF 32B6" /* Þ.»¹Ù_6¹@n<à;Ï2¶ */ - $"8DC0 55D6 C6DA 3622 8A6E 63F6 28AE 08AC" /* ÀUÖÆÚ6"Šncö(®.¬ */ - $"03AC 288D 069A 750E CBBD 97D9 E42D BA93" /* .¬(.šu.˽—Ùä-º“ */ - $"E82A 4EB3 C008 CC7C B6A7 6F70 F1BC FDAA" /* è*N³À.Ì|¶§opñ¼ýª */ - $"1DF4 D2E4 3ECB 9702 444E 278F 6B50 F00E" /* .ôÒä>Ë—.DN'kPð. */ - $"C228 C132 E5E0 B4DE 93BF DBBD 2C85 ABF9" /* Â(Á2åà´Þ“¿Û½,…«ù */ - $"7FAD EC28 1D40 D390 5A2F 9B14 D348 8C76" /* .­ì(.@ÓZ/›.ÓHŒv */ - $"C04B 1173 BF19 8F50 7E3D 8311 BB79 FDA8" /* ÀK.s¿.P~=ƒ.»yý¨ */ - $"1FD4 24A9 5F59 8B76 709E 5C84 1902 8690" /* .Ô$©_Y‹vpž\„..† */ - $"AD49 334F 5AE8 E376 288C BDE7 EE13 FBDE" /* ­I3OZèãv(Œ½çî.ûÞ */ - $"7606 0135 6DB2 DCD9 F5B3 E7E2 B2B8 8BE1" /* v..5m²ÜÙõ³çⲸ‹á */ - $"1985 85D2 0EC1 5CCD BC74 D88B 7206 5075" /* .……Ò.Á\ͼtØ‹r.Pu */ - $"FB92 BF92 C5CB B6E3 024D EB71 D909 AF79" /* û’¿’Å˶ã.MëqÙÆ¯y */ - $"DD82 BBF2 37F1 1193 74D0 373D 4043 C292" /* Ý‚»ò7ñ.“tÐ7=@CÂ’ */ - $"0B1D 4E8F 04F4 A035 451A 7DCB 02DB D77E" /* ..N.ô 5E.}Ë.Û×~ */ - $"DD1C 3667 1BA7 2584 C128 3835 4454 5C15" /* Ý.6g.§%„Á(85DT\. */ - $"5846 C7D1 4689 3D2A 1172 9BA8 9830 F037" /* XFÇÑF‰=*.r›¨˜0ð7 */ - $"0053 8FD6 4023 68C6 7122 CAC6 0325 5AF3" /* .SÖ@#hÆq"ÊÆ.%Zó */ - $"E104 A423 C5AE F551 6DF6 7B11 D5EB FD34" /* á.¤#Å®õQmö{.Õëý4 */ - $"DF67 C50C 737D 74D5 D5EC 7027 A2D8 C79A" /* ßgÅ.s}tÕÕìp'¢ØÇš */ - $"200D A972 A30A 509A C3DE 483F 8B53 D69C" /* .©r£ÂPšÃÞH?‹SÖœ */ - $"001F 47E9 BD2C 84EC DB83 B493 0326 DE6E" /* ..Gé½,„ìÛƒ´“.&Þn */ - $"336A 7C76 3225 8351 7B2D 37B5 D645 9866" /* 3j|v2%ƒQ{-7µÖE˜f */ - $"019E 6472 40C4 5853 3376 9D90 D3EA A727" /* .ždr@ÄXS3vÓê§' */ - $"07A1 A4B8 A32F 475A 22A2 059C AB5B F13E" /* .¡¤¸£/GZ"¢.œ«[ñ> */ - $"E2DF 5B3E E6B5 B27F 28AF A15F 400C 7D9F" /* âß[>æµ².(¯¡_@.}Ÿ */ - $"43ED 33D4 9B4D CB64 E550 5FED FC2F E485" /* Cí3Ô›MËdåP_íü/ä… */ - $"271E 2DB1 6AE5 6793 EFE8 FCC5 A784 4C95" /* '.-±jåg“ïèüŧ„L• */ - $"E488 B5AC A528 BACB 10FF 4ABD D554 E56B" /* 䈵¬¥(ºË.ÿJ½ÕTåk */ - $"F72E 8ED7 5E48 60A4 82D0 381F A2D4 625C" /* ÷.Ž×^H`¤‚Ð8.¢Ôb\ */ - $"9F80 2A63 5FD3 DD0C EDA8 3DE3 281E A65C" /* Ÿ€*c_ÓÝ.í¨=ã(.¦\ */ - $"88EA 1A96 626D DC03 79BE C4ED EA60 4FC5" /* ˆê.–bmÜ.y¾Äíê`OÅ */ - $"BB10 D9D5 99AF 0534 65C2 05AE 8D23 82B0" /* ».ÙÕ™¯.4eÂ.®#‚° */ - $"6FB7 881A 7BC5 0316 7A28 4B27 2763 A6C3" /* o·ˆ.{Å..z(K''c¦Ã */ - $"8FC7 073A 1391 81BB 707F 625D 355F B1DF" /* Ç.:.‘»p.b]5_±ß */ - $"A749 C3EE A157 EC1F 0F6C 70AB 1A36 5711" /* §IÃî¡Wì..lp«.6W. */ - $"C49B 1CA8 54A0 0FB9 6A2E 0F86 2E57 BC2F" /* Ä›.¨T .¹j..†.W¼/ */ - $"8CDD B76A F6DB 83F9 EEFF 4BF1 DE60 660E" /* ŒÝ·jöÛƒùîÿKñÞ`f. */ - $"BCBA 7D68 D5DE 8663 DF06 3F65 A981 38D7" /* ¼º}hÕÞ†cß.?e©8× */ - $"CC20 EBAE 6143 C79E D2F3 DCF4 FA0F 433E" /* Ì ë®aCÇžÒóÜôú.C> */ - $"6DFE 4C5F 032A F6DD DD11 F85F 5003 22CD" /* mþL_.*öÝÝ.ø_P."Í */ - $"C07E F1CC 40B9 8D61 825D 77C7 91A6 BD49" /* À~ñÌ@¹a‚]wÇ‘¦½I */ - $"2590 4BCD EB13 37A2 D5FA 2931 F311 9028" /* %KÍë.7¢Õú)1ó.( */ - $"6C02 96FC ACF5 1EA4 8E51 4BC9 FDE8 DFEF" /* l.–ü¬õ.¤ŽQKÉýèßï */ - $"C5A0 8082 7E0D C127 3A80 A65B 7989 CCEE" /* Å €‚~.Á':€¦[y‰Ìî */ - $"6F6A 8DDF FB5B 46A5 3757 7FC3 3EFD BC0A" /* ojßû[F¥7W.Ã>ý¼Â */ - $"8567 1CB0 3BE7 A153 D7CE 8F63 D2DC 8840" /* …g.°;ç¡S×ÎcÒ܈@ */ - $"D993 E028 0E86 AA99 3ADE CC55 A789 CFC8" /* Ù“à(.†ª™:ÞÌU§‰ÏÈ */ - $"D92B 9613 3850 B7B3 467A FA09 7D45 E174" /* Ù+–.8P·³FzúÆ}Eát */ - $"D351 3254 64A3 7FC5 0D8D 1EDB FEC9 3F05" /* ÓQ2Td£.Å..ÛþÉ?. */ - $"C3C2 264B ACB8 F3C3 1BFF 04A5 12CF C191" /* ÃÂ&K¬¸óÃ.ÿ.¥.ÏÁ‘ */ - $"8CA0 5985 E34C E583 A230 CD43 8602 BAAF" /* Œ Y…ãL僢0ÍC†.º¯ */ - $"1475 FCA7 B274 1314 051F AF06 089D 13B1" /* .uü§²t....¯...± */ - $"5C06 815E FAA5 6864 CECE D56A 127C 058B" /* \.^ú¥hdÎÎÕj.|.‹ */ - $"1859 E9E8 7A98 4299 3CFF 70CE C2DD 8676" /* .Yéèz˜B™<ÿpÎÂ݆v */ - $"1798 5F8E 9960 922E 9226 3F9B 5657 890F" /* .˜_Ž™`’.’&?›VW‰. */ - $"75BC FECF 6919 6701 D086 0EA5 26BA 8B78" /* u¼þÏi.g.І.¥&º‹x */ - $"7381 41FC 19AD 7201 BFD9 B3D3 2F00 1A1C" /* sAü.­r.¿Ù³Ó/... */ - $"E689 F3BC 5FC7 0418 66A2 5AEE 0374 DE30" /* æ‰ó¼_Ç..f¢Zî.tÞ0 */ - $"DC4B 70F1 ACC6 2BC6 06E9 461F E71B CD5E" /* ÜKpñ¬Æ+Æ.éF.ç.Í^ */ - $"2766 D533 884B A37F 7820 5CCA 3D60 1C3A" /* 'fÕ3ˆK£.x \Ê=`.: */ - $"8865 509F C1F0 86B6 9A91 0A52 426E CF1D" /* ˆePŸÁð†¶š‘ÂRBnÏ. */ - $"4B52 7AFE 9519 ECDB 9DD3 BFA1 80F7 50BD" /* KRzþ•.ìÛÓ¿¡€÷P½ */ - $"D2DD 6FAB F00D 3600 9104 37AC 81AA F9C3" /* ÒÝo«ð.6.‘.7¬ªùà */ - $"3933 A702 AC9C 42F1 4579 C5F2 CD99 165F" /* 93§.¬œBñEyÅòÍ™._ */ - $"2D84 FE8B D02C 055F F99C 1729 45C7 6B56" /* -„þ‹Ð,._ùœ.)EÇkV */ - $"EE73 818A 9940 BB46 1408 639B 9779 C805" /* îsŠ™@»F..c›—yÈ. */ - $"1B0B CC86 D42E E9BB 046D 0E93 7273 E00F" /* ..̆Ô.é».m.“rsà. */ - $"B7D5 D377 E0ED 2494 4623 5BDF C83C 54A5" /* ·ÕÓwàí$”F#[ßÈQ.G€Næ‰.ø=ÿ}Ñà */ - $"818F 28A2 2AC0 AD00 7F03 5781 2882 A44A" /* (¢*À­...W(‚¤J */ - $"6728 D9F6 E77F A883 C794 71AC 55E9 8112" /* g(Ùöç.¨ƒÇ”q¬Ué. */ - $"BF6F ECDA 9BD1 96B8 79AA A397 A6F2 C93F" /* ¿oìڛі¸yª£—¦òÉ? */ - $"3792 B8C4 8667 AAF4 659D 59F6 E77F A870" /* 7’¸Ä†gªôeYöç.¨p */ - $"24F1 5461 DB69 0F4C F8B3 F02A F6E7 7FA6" /* $ñTaÛi.Lø³ð*öç.¦ */ - $"26C9 5EDE 9BB6 A1C6 9467 854A 5327 BA38" /* &É^Þ›¶¡Æ”g…JS'º8 */ - $"F535 A01A B90A 9580 95A0 FE5C A623 DE0D" /* õ5 .¹Â•€• þ\¦#Þ. */ - $"6C3E BF23 66F2 9312 9490 EB88 1D63 7AF4" /* l>¿#fò“.”ëˆ.czô */ - $"9F5B 7F45 9078 3A5F CC36 7702 EAD5 FA4D" /* Ÿ[.Ex:_Ì6w.êÕúM */ - $"5F9D 258B 14A8 A235 6490 6B7D 2B05 42C3" /* _%‹.¨¢5dk}+.Bà */ - $"2A5A 791E 92C3 B1E8 B323 FF74 81FC B063" /* *Zy.’ñè³#ÿtü°c */ - $"4A31 CBBC 91E2 A64A F935 FE79 4C07 1376" /* J1˼‘â¦Jù5þyL..v */ - $"002A 4795 5221 70B2 005C 41F9 D631 126F" /* .*G•R!p².\AùÖ1.o */ - $"FF7F DF03 06BD 7214 71AB 4EF3 8EEA 0261" /* ÿ.ß..½r.q«NóŽê.a */ - $"D054 C087 EA15 CBD2 4645 2F9F 3600 4144" /* ÐTÀ‡ê.ËÒFE/Ÿ6.AD */ - $"5671 C61E D3CB 8B84 A60D B58E FB69 C71F" /* VqÆ.ÓË‹„¦.µŽûiÇ. */ - $"B09A EDD9 AAC0 6FBA D7FE 8C4D 8262 6C73" /* °šíÙªÀoº×þŒM‚bls */ - $"9F69 0E81 7581 1D52 FB27 C979 1597 69EA" /* Ÿi.u.Rû'Éy.—iê */ - $"F1DF E906 0B77 2E21 D31A 5CCD 9474 95A2" /* ñßé..w.!Ó.\Í”t•¢ */ - $"CB48 AB27 5F53 B82F 1638 16A4 87CD ED1F" /* ËH«'_S¸/.8.¤‡Íí. */ - $"20BC 2894 5EE1 C84C 1AC1 1158 0293 024E" /* ¼(”^áÈL.Á.X.“.N */ - $"1023 0E4F 9BD8 FA73 6E62 FF7F FD08 5797" /* .#.O›Øúsnbÿ.ý.W— */ - $"0788 A951 6DDA 2448 21D2 7FCA 20B4 E1BF" /* .ˆ©QmÚ$H!Ò.Ê ´á¿ */ - $"3262 89C7 5386 ACB1 8B89 6AC3 F907 1355" /* 2b‰ÇS†¬±‹‰jÃù..U */ - $"66D9 1E5A 5B54 19E9 2737 FF7C B8DF 1F5E" /* fÙ.Z[T.é'7ÿ|¸ß.^ */ - $"3592 B16D 6089 DE73 8F19 479D 626B 977D" /* 5’±m`‰Þs.Gbk—} */ - $"185E F7A3 AF62 AD92 E5AC 2F74 B991 F96F" /* .^÷£¯b­’å¬/t¹‘ùo */ - $"211F 5AE0 4C27 344F A9E1 C731 DB20 A0FF" /* !.ZàL'4O©áÇ1Û  ÿ */ - $"7FFF 7F2E 356F CC55 C6B8 C2C9 2AEF 2D31" /* .ÿ..5oÌUƸÂÉ*ï-1 */ - $"EFEB D878 C16F B1B1 3D47 240C 489C 7153" /* ïëØxÁo±±=G$.HœqS */ - $"E5F8 A5C8 6E2C 7650 AED0 C4B7 43EA 67B6" /* åø¥Èn,vP®ÐÄ·Cêg¶ */ - $"94E4 7274 CFEB 4CF3 FD3E 8065 B9CC 35A5" /* ”ärtÏëLóý>€e¹Ì5¥ */ - $"21B1 3804 AD98 4F8A 6FFC 50DA 014C 442B" /* !±8.­˜OŠoüPÚ.LD+ */ - $"AA41 1455 BD94 B366 A37D CA82 7FFC DE57" /* ªA.U½”³f£}Ê‚.üÞW */ - $"2EA9 98C2 5510 E51E 24CC 0428 4C83 1BBE" /* .©˜ÂU.å.$Ì.(Lƒ.¾ */ - $"0A46 A6DD 6963 D4CB 24E8 748B ED10 7B6D" /* ÂF¦ÝicÔË$èt‹í.{m */ - $"E61C 86C3 C80E 3030 FCE9 2263 C956 95A1" /* æ.†ÃÈ.00üé"cÉV•¡ */ - $"AED0 C4B1 D07C F701 9DA0 ED2C C401 BC1A" /* ®ÐıÐ|÷. í,Ä.¼. */ - $"9421 2D43 EF12 7494 8D46 CB82 3FE2 6439" /* ”!-Cï.t”FË‚?âd9 */ - $"6BDE C8CE 23B7 9D2E B6F9 DF4B C1A9 A145" /* kÞÈÎ#·.¶ùßKÁ©¡E */ - $"1512 85E6 30E6 98D1 AC22 EEBC 459C D841" /* ..…æ0æ˜Ñ¬"î¼EœØA */ - $"0A0F 1F31 2F75 7937 220F 7271 FE79 44A6" /* Â..1/uy7".rqþyD¦ */ - $"777E 1645 E0BA D980 0FFF 7D9F EC83 A930" /* w~.EàºÙ€.ÿ}Ÿìƒ©0 */ - $"D12B 216D 4D3F 4AD0 5EE9 DBC7 53D7 0A21" /* Ñ+!mM?JÐ^éÛÇS×Â! */ - $"2372 C608 6701 8AFA 8E33 4125 2B7E 38DA" /* #rÆ.g.ŠúŽ3A%+~8Ú */ - $"5990 99EE B1D0 B07C 9F9D 97DD D658 2C2A" /* Y™î±Ð°|Ÿ—ÝÖX,* */ - $"C7D6 4556 2AA7 297F ACBE 4802 B472 E76F" /* ÇÖEV*§).¬¾H.´rço */ - $"644F 2F11 17FF 7F9D CE1C 2989 7199 03B1" /* dO/..ÿ.Î.)‰q™.± */ - $"E719 2B3B 1131 C4CC 808B BC7A 26A4 479F" /* ç.+;.1ÄÌ€‹¼z&¤GŸ */ - $"4824 6486 E338 DB65 A502 454C C415 B8D0" /* H$d†ã8Ûe¥.ELÄ.¸Ð */ - $"7C77 7323 E381 5958 F415 95B9 142E 85F8" /* |ws#ãYXô.•¹..…ø */ - $"1742 E22F FF17 567B A195 DFF1 7EE0 8E40" /* .Bâ/ÿ.V{¡•ßñ~àŽ@ */ - $"431A B629 DDCE AED1 A925 9FCD 56B5 7945" /* C.¶)Ýήѩ%ŸÍVµyE */ - $"B8B9 77DF 732C CD1E 8137 2645 1135 9593" /* ¸¹wßs,Í.7&E.5•“ */ - $"E31C 333B 30E2 518D E202 A1E0 FEA6 C40E" /* ã.3;0âQâ.¡àþ¦Ä. */ - $"BB50 0174 C21D 0BFB 34C1 1A8D 8E5D FF77" /* »P.tÂ..û4Á.Ž]ÿw */ - $"909A 8111 3123 8200 AFC2 0525 13A1 C383" /* š.1#‚.¯Â.%.¡Ãƒ */ - $"5472 BA45 8D58 8818 E5CD 6FEA D858 47C5" /* TrºEXˆ.åÍoêØXGÅ */ - $"F5A0 7773 3C86 1CE8 9A67 FAA7 5726 643B" /* õ ws<†.èšgú§W&d; */ - $"1BF8 C2C1 E7AD D3CE E89B 97C4 0210 1FAE" /* .øÂÁç­ÓÎè›—Ä...® */ - $"9319 1F1F 7F89 0B76 5918 7EF8 9947 CF44" /* “....‰.vY.~ø™GÏD */ - $"6B5C 4B5D 5067 58A7 F35E CF39 7D01 C555" /* k\K]PgX§ó^Ï9}.ÅU */ - $"FCD3 E0F6 C1A4 9C8A 0B34 2D33 A20D F664" /* üÓàöÁ¤œŠ.4-3¢.öd */ - $"C174 CCE8 CAA1 C45F 2974 101B 86E7 68FD" /* ÁtÌèÊ¡Ä_)t..†çhý */ - $"D6FE 8FE9 AC95 5D3D DE38 1829 E3B9 37FE" /* Öþ鬕]=Þ8.)ã¹7þ */ - $"5008 F383 21C4 4D57 AE92 9F94 A9BB 3A76" /* P.óƒ!ÄMW®’Ÿ”©»:v */ - $"705F 8D2D 889C EB93 FD2B 05C5 89F2 500E" /* p_-ˆœë“ý+.ʼnòP. */ - $"4220 A486 F348 D466 4D62 E368 540A 1D25" /* B ¤†óHÔfMbãhTÂ.% */ - $"AF7C A9EF 43CC E423 16FC 6EE5 C407 DDAE" /* ¯|©ïCÌä#.ünåÄ.Ý® */ - $"EB28 23D2 3FDE 40EF 2ED1 D53A B87B 9C40" /* ë(#Ò?Þ@ï.ÑÕ:¸{œ@ */ - $"80A2 77EF CC8F D34E C33F 7BB4 4748 E4A6" /* €¢wïÌÓNÃ?{´GHä¦ */ - $"B177 05FF 085F CBF9 F1A0 8CA7 4200 32AC" /* ±w.ÿ._Ëùñ Œ§B.2¬ */ - $"7B87 A517 EA04 C96C F9A3 C6ED 5FFF 7FED" /* {‡¥.ê.Élù£Æí_ÿ.í */ - $"D5EB F835 3E15 6882 AED1 72BF B42C 87DE" /* Õëø5>.h‚®Ñr¿´,‡Þ */ - $"8111 0F7A 5DA6 CFEA 79A7 9174 89E8 E637" /* ..z]¦Ïêy§‘t‰èæ7 */ - $"7E56 B53E 9987 2013 8F1A 06A5 07A2 1856" /* ~Vµ>™‡ ...¥.¢.V */ - $"FE30 E259 128A 968B 881F E88D 8566 98D7" /* þ0âY.Š–‹ˆ.è…f˜× */ - $"C815 C397 64E8 9FAC 059A 5922 C863 F220" /* È.×d蟬.šY"Ècò */ - $"EC2A 4AF8 5DB2 A77D FC6A 3AC1 357E D5CC" /* ì*Jø]²§}üj:Á5~ÕÌ */ - $"142B 85B0 FEE0 2579 D845 CDFD F507 4C58" /* .+…°þà%yØEÍýõ.LX */ - $"D86A F299 0BBC A0A8 39A4 03D9 2144 6B3E" /* Øjò™.¼ ¨9¤.Ù!Dk> */ - $"6D67 242B 0FEB B6F4 79CB 58ED 2338 DB9F" /* mg$+.ë¶ôyËXí#8ÛŸ */ - $"6EC7 1626 0FDD 0C77 1E00 2AE4 8B46 F39C" /* nÇ.&.Ý.w..*ä‹Fóœ */ - $"6268 EE5F FF49 B5C8 30E7 9859 E163 A9D4" /* bhî_ÿIµÈ0ç˜Yác©Ô */ - $"C50F BC0C 46BB BBC7 9FFF 7D54 E81B 8936" /* Å.¼.F»»ÇŸÿ}Tè.‰6 */ - $"A032 72E8 6576 5FEA 9A3F A5A9 9E58 B9C2" /*  2rèev_êš?¥©žX¹Â */ - $"A089 A039 5695 766F 3295 A1FF 7F5F FBDB" /*  ‰ 9V•vo2•¡ÿ._ûÛ */ - $"A3FD 1F1F 76AD 6787 B4D0 D1A5 E4EA 72F8" /* £ý..v­g‡´ÐÑ¥äêrø */ - $"0276 0C35 EC34 65A8 000A CA35 6AAE 1800" /* .v.5ì4e¨.ÂÊ5j®.. */ - $"99CA 1B65 F56D 6C3B DF33 AB08 94A3 15CF" /* ™Ê.eõml;ß3«.”£.Ï */ - $"C9B8 D32E 35D7 D32D 57E6 86D2 A5BE 2B3A" /* ɸÓ.5×Ó-Wæ†Ò¥¾+: */ - $"4535 2C10 41FE FDA9 E202 3927 BC4F 5F90" /* E5,.Aþý©â.9'¼O_ */ - $"E637 311C DB00 E394 09F3 005B 7DB3 0DFE" /* æ71.Û.ã”Æó.[}³.þ */ - $"9F1F CAA4 DD03 B381 8330 AB38 E13B 2F9C" /* Ÿ.ʤÝ.³ƒ0«8á;/œ */ - $"3DB5 01C5 100A 5D16 5C8D 792C FA0E 1A85" /* =µ.Å.Â].\y,ú..… */ - $"E3FF 467A 6333 E4F1 F27C 9E2B 161E 18F0" /* ãÿFzc3äñò|ž+...ð */ - $"3F30 9C2C 631D BE74 4B7F 6E21 3FBC 404E" /* ?0œ,c.¾tK.n!?¼@N */ - $"E063 4152 D02D 68E4 869C E7E9 E4E6 4E95" /* àcARÐ-h䆜çéäæN• */ - $"3A66 1FDA 1145 DFB4 0796 9F97 503C E2C9" /* :f.Ú.Eß´.–Ÿ—P<âÉ */ - $"7F49 D644 1290 98BD 8EA0 2FA1 CF00 E383" /* .IÖD.˜½Ž /¡Ï.ム*/ - $"C003 7BFE D79B FF62 A38E 2C39 A64D 19FF" /* À.{þ×›ÿb£Ž,9¦M.ÿ */ - $"6A9D 976A 994B 6626 4F4D 7DC8 F0CA EDB7" /* j—j™Kf&OM}ÈðÊí· */ - $"F99E 21E2 36B4 3AAB E787 C6A2 1783 F623" /* ùž!â6´:«ç‡Æ¢.ƒö# */ - $"8755 1F66 AFBC 2959 6E6E 2E61 AC85 2198" /* ‡U.f¯¼)Ynn.a¬…!˜ */ - $"9978 EDFD 334C F0D6 7F76 9AF2 47AF 5E4B" /* ™xíý3LðÖ.všòG¯^K */ - $"805C 54D3 5F2A 16C5 6675 C288 B44F F851" /* €\TÓ_*.Åfuˆ´OøQ */ - $"1CE9 9F21 BF10 92B9 2366 5D69 AE8E 9989" /* .éŸ!¿.’¹#f]i®Ž™‰ */ - $"36A6 F9E6 75A7 0D47 C8B5 8727 0138 2BFA" /* 6¦ùæu§.Gȵ‡'.8+ú */ - $"5C4A 649C 123C 225E 2CEC 2007 5016 3F11" /* \Jdœ.<"^,ì .P.?. */ - $"B8FF 60CB 7150 EBFD DFED 147E 0A98 E096" /* ¸ÿ`ËqPëýßí.~Â˜à– */ - $"6B76 3AF0 39A5 5BF2 880C E857 174C 8735" /* kv:ð9¥[òˆ.èW.L‡5 */ - $"ACF6 E4B7 3477 6293 FF7C 8515 A8DE 4E73" /* ¬öä·4wb“ÿ|….¨ÞNs */ - $"8E37 8A0C 4384 0CF3 FA01 15F5 9639 ED05" /* Ž7Š.C„.óú..õ–9í. */ - $"C86B 28A0 C331 14BC 2817 FE9B F96A D60D" /* Èk( Ã1.¼(.þ›ùjÖ. */ - $"EBCB 14DA FF7F FF47 8A61 A2C7 F01F 10B7" /* ëË.Úÿ.ÿGŠa¢Çð..· */ - $"3DAF B01C B484 F55D 457E E3EC CC41 95DE" /* =¯°.´„õ]E~ãìÌA•Þ */ - $"097E 8117 F77F FEFB A490 8B96 1300 2B37" /* Æ~.÷.þû¤‹–..+7 */ - $"19FA E04C 4188 E9F6 8950 0668 B082 8FD8" /* .úàLAˆéö‰P.h°‚Ø */ - $"0B7D 6C32 4DBF F84F F4E9 ACAF 719A DC43" /* .}l2M¿øOô鬯qšÜC */ - $"9F8D A53E DF1A BDB0 AAA7 3267 9C2D 357A" /* Ÿ¥>ß.½°ª§2gœ-5z */ - $"9CA7 1AE1 59C4 F467 83D3 308B 004A 42C2" /* œ§.áYÄôgƒÓ0‹.JB */ - $"909B F979 41CE AB25 C6D1 9FE9 46E1 E837" /* ›ùyAΫ%ÆÑŸéFáè7 */ - $"7ADF FF72 225E 4472 D323 F55C BE19 1E50" /* zßÿr"^DrÓ#õ\¾..P */ - $"BF94 6787 CADB F576 300A 054B 0A2D E9B2" /* ¿”g‡ÊÛõv0Â.KÂ-é² */ - $"5C15 DB84 E735 F76D 5477 D8A7 28AF FF7A" /* \.Û„ç5÷mTwا(¯ÿz */ - $"7EB8 06F8 4FF4 E999 ED48 02C4 F111 F61D" /* ~¸.øOôé™íH.Äñ.ö. */ - $"8A6C 1CC6 AE54 94E4 8C5D 7655 4ECC 205F" /* Šl.Æ®T”äŒ]vUNÌ _ */ - $"DBF9 1BA7 83CC 52E9 E9C9 52A4 1151 7DE4" /* Ûù.§ƒÌRééÉR¤.Q}ä */ - $"051B E140 3FC0 D60B 0C11 663F 98A9 8B53" /* ..á@?ÀÖ...f?˜©‹S */ - $"776E BD8D 7678 AD62 ACEE 033F D134 B61E" /* wn½vx­b¬î.?Ñ4¶. */ - $"F86D 3384 AAE7 9074 F7CF 4509 F9B3 4F30" /* øm3„ªçt÷ÏEÆù³O0 */ - $"F32D 840F 1DDA E6B1 BDD4 951F 2379 F890" /* ó-„..Úæ±½Ô•.#yø */ - $"530A E915 A228 D3D8 B188 C692 2767 D628" /* SÂé.¢(ÓØ±ˆÆ’'gÖ( */ - $"12F8 3FFA BA23 F76B 1D92 1FC1 EA73 30FC" /* .ø?úº#÷k.’.Áês0ü */ - $"CE72 0CA5 6695 6326 F93B B52F B9D4 F6F0" /* Îr.¥f•c&ù;µ/¹Ôöð */ - $"FF07 727B 80F9 EBFC 2176 788C 333F 4137" /* ÿ.r{€ùëü!vxŒ3?A7 */ - $"E82C D066 6088 A8EA 168F 40EA F1EE BDE8" /* è,Ðf`ˆ¨ê.@êñî½è */ - $"C023 75BA 66F2 335A 98C0 31A8 2137 7A7B" /* À#uºfò3Z˜À1¨!7z{ */ - $"DA0F 3962 D4B3 3E6E A5A1 3A19 5EED 48A7" /* Ú.9bÔ³>n¥¡:.^íH§ */ - $"7617 DE46 D178 BC48 D85D 7821 DFEC B30D" /* v.ÞFÑx¼HØ]x!ßì³. */ - $"F84F B7CD 80ED 55C7 9E1A F58D 7085 F625" /* øO·Í€íUÇž.õp…ö% */ - $"F564 3BF5 A09E B353 4E45 2F0B FC02 ECFD" /* õd;õ ž³SNE/.ü.ìý */ - $"539F 529C A652 34F1 C0CC BC04 FCE0 2C7D" /* SŸRœ¦R4ñÀ̼.üà,} */ - $"A8A9 9E67 79E9 ADE4 ABEE BFF6 4793 1B91" /* ¨©žgyé­ä«î¿öG“.‘ */ - $"413A 4302 7FB5 190C CB09 0DC9 3B33 E18D" /* A:C..µ..ËÆ.É;3á */ - $"DDAB 23C5 FABA 5DC1 554F C940 B964 7F6A" /* Ý«#Åúº]ÁUOÉ@¹d.j */ - $"A781 2032 BF9E 0262 7C99 CD96 9251 9FB6" /* § 2¿ž.b|™Í–’QŸ¶ */ - $"1C69 9141 7A13 3022 DE48 DA68 C959 A0B5" /* .i‘Az.0"ÞHÚhÉY µ */ - $"0F3A F19A 9301 5051 5855 9D7B 5173 EE47" /* .:ñš“.PQXU{QsîG */ - $"2B0D DB30 28CC 5E41 46F1 E79F 90B3 AB2A" /* +.Û0(Ì^AFñ石«* */ - $"CAEA 6128 10E1 2CC0 DDC2 EBF1 26F1 E1DC" /* Êêa(.á,ÀÝÂëñ&ñáÜ */ - $"EB87 87ED 55F3 827C A066 D932 FCF7 B134" /* 뇇íUó‚| fÙ2ü÷±4 */ - $"8BC9 CC70 B38C B019 8372 EA60 7C36 4D38" /* ‹ÉÌp³Œ°.ƒrê`|6M8 */ - $"F82F 16C2 2390 A91B 203A 8EBE D0EC E278" /* ø/.Â#©. :޾Ðìâx */ - $"7AC4 8493 A217 6AC3 B85A 470D D74A B91D" /* zÄ„“¢.jøZG.×J¹. */ - $"0180 7BAB 4088 5671 6268 5B4A 54FE C179" /* .€{«@ˆVqbh[JTþÁy */ - $"1600 7677 830B 0E81 EEB2 6124 33F8 DBBD" /* ..vwƒ..î²a$3øÛ½ */ - $"1B35 D1F9 0568 3891 0ECB A836 5A86 9636" /* .5Ñù.h8‘.˨6Z†–6 */ - $"9F87 052F 0D66 8AA3 3362 1651 9B33 9057" /* Ÿ‡./.fŠ£3b.Q›3W */ - $"5B98 05EB 23CE 099F 2358 444E 0D64 A9F9" /* [˜.ë#ÎÆŸ#XDN.d©ù */ - $"A569 7D56 A50D 6256 69AF BDD9 7847 D651" /* ¥i}V¥.bVi¯½ÙxGÖQ */ - $"73E2 F76E F277 58DC BFB9 7B8E 593C 0E97" /* sâ÷nòwXÜ¿¹{ŽY<.— */ - $"3C4E 507D FA6C 7984 FAC8 6C42 6882 78AC" /* ÄÀ’ÜjXLª¯.Ÿ¢.Τ */ - $"884B 2DB6 09F4 F51B 546F CD71 F4D3 6452" /* ˆK-¶Æôõ.ToÍqôÓdR */ - $"B6E5 3EFF 66F8 0D60 D916 F755 1348 E250" /* ¶å>ÿfø.`Ù.÷U.HâP */ - $"D8E2 6858 B424 B84B D59A 6885 24D3 D845" /* ØâhX´$¸KÕšh…$ÓØE */ - $"692F 4313 B616 584F 7419 0661 0064 C281" /* i/C.¶.XOt..a.d */ - $"A873 131C 5296 042B 1FD5 3EED BFC2 659E" /* ¨s..R–.+.Õ>í¿Âež */ - $"C4C7 2720 8002 28DD 141A BBE7 99F8 028F" /* ÄÇ' €.(Ý..»ç™ø. */ - $"8262 0577 5240 EB9A F866 2901 B75B 3FED" /* ‚b.wR@ëšøf).·[?í */ - $"9E78 9071 83FD 02BC FCDE 2135 42D1 F184" /* žxqƒý.¼üÞ!5BÑñ„ */ - $"309D F47E DF10 F797 4268 120A D377 04A4" /* 0ô~ß.÷—Bh.ÂÓw.¤ */ - $"2998 099E CA35 66AD FB20 8C14 1E0E 714E" /* )˜ÆžÊ5f­û Œ...qN */ - $"B9A7 70EE 5BA0 7A18 FC16 97EB 1A98 CB6C" /* ¹§pî[ z.ü.—ë.˜Ël */ - $"4B5D AC5B 3DC2 2062 E74A 18F2 0A76 6085" /* K]¬[= bçJ.òÂv`… */ - $"EF50 1C2F FE23 117A ED22 7BE8 0231 BC71" /* ïP./þ#.zí"{è.1¼q */ - $"707C 6736 BC3C 38AA 81C2 66B6 DCE5 13E9" /* p|g6¼<8ªÂf¶Üå.é */ - $"3076 C7AD 8C4B A962 C37E 4605 CDC0 8247" /* 0vÇ­ŒK©bÃ~F.ÍÀ‚G */ - $"190C 41CD 6923 8D00 BC94 5B5F E2AB 443B" /* ..AÍi#.¼”[_â«D; */ - $"3C5A 7FF6 213C 9E2D 9224 70B1 EA9B 7D36" /* .[ä.j,×Þf */ - $"BE8E C996 696D 58EC 6CFE 40AD 3C95 EAF1" /* ¾ŽÉ–imXìlþ@­<•êñ */ - $"4591 1D62 836E D2E3 4CD8 E4A6 F4F4 C456" /* E‘.bƒnÒãLØä¦ôôÄV */ - $"A70C B3BE AA22 A188 DAB5 D3F7 4B7B 865D" /* §.³¾ª"¡ˆÚµÓ÷K{†] */ - $"4D89 77E6 99A6 46C9 14BA 25E1 55C5 ADBD" /* M‰w晦FÉ.º%áUÅ­½ */ - $"4379 96AF 26DA A399 F009 AE75 248B 0285" /* Cy–¯&Ú£™ðÆ®u$‹.… */ - $"B370 5704 6429 C8AF 0BD3 A332 90B2 8351" /* ³pW.d)ȯ.Ó£2²ƒQ */ - $"F715 32C9 347B EADE 2EBB 9D97 BF95 0C5A" /* ÷.2É4{êÞ.»—¿•.Z */ - $"9203 1EC5 7A8E CF46 C28C 39A2 DE74 C656" /* ’..ÅzŽÏFÂŒ9¢ÞtÆV */ - $"F0BF 3ABF CE5F BE71 B7CE 2FF3 F41B F3EA" /* ð¿:¿Î_¾q·Î/óô.óê */ - $"8BE7 B07E AB17 4F87 74FC FDE8 EF9F BF3F" /* ‹ç°~«.O‡tüýè? */ - $"A9EB F3D5 3F3E 83BE 7BAF EA5F E0FE 7ADF" /* ©ëóÕ?>ƒ¾{¯ê_àþzß */ - $"E7A7 7F9D 3FE7 3BF9 FA77 F9FA 3FF9 F7C7" /* ç§.?ç;ùúwùú?ù÷Ç */ - $"E7E9 871D E84F CFE8 83FC FE85 E3BB E7E7" /* çé‡.èOÏèƒüþ…ã»çç */ - $"AFFE 7D7F F9F5 57E7 AF70 6F9D 2DF3 9ED7" /* ¯þ}.ùõWç¯po-óž× */ - $"C81E F903 FEAB 8EF9 F50D F254 3F3E A4D1" /* È.ù.þ«Žùõ.òT?>¤Ñ */ - $"DD53 F3F6 F37E 7EC9 4775 1BE4 77F9 EEBF" /* ÝSóöó~~ÉGu.äwùî¿ */ - $"9ED1 F9DC 00F7 91DD 3D8B A94D D83C 797F" /* žÑùÜ.÷‘Ý=‹©MØ.iùó.ÆäÓè»L§..à */ - $"F1D0 53DE 91D8 6723 A047 11C7 57B3 C46C" /* ñÐSÞ‘Øg# G.ÇW³Äl */ - $"84A7 C2E1 C7CC 185C 9F21 7E2B 0F2E 64B1" /* „§ÂáÇÌ.\Ÿ!~+..d± */ - $"D734 4142 C65E A2FB 9ABE B62D 076B 2B65" /* ×4ABÆ^¢ûš¾¶-.k+e */ - $"9D6E 63F1 4825 79A9 3936 C7A7 531F EF6A" /* ncñH%y©96ǧS.ïj */ - $"F859 3084 0421 88A9 A648 8641 ACEB 95DE" /* øY0„.!ˆ©¦H†A¬ë•Þ */ - $"2E94 E3C9 442C 13AF CF63 0404 C5C6 5CE2" /* .”ãÉD,.¯Ïc..ÅÆ\â */ - $"CE90 F9CC A1B6 5713 031E C239 174F CC40" /* ÎùÌ¡¶W...Â9.OÌ@ */ - $"BCA4 EA9A EB6A 1D24 7962 F735 AF5A B937" /* ¼¤êšëj.$yb÷5¯Z¹7 */ - $"AC3B A12E 10A8 D332 6FE3 8ED1 6F01 B198" /* ¬;¡..¨Ó2oãŽÑo.±˜ */ - $"1543 A6A1 367E E226 5D76 B860 E0E1 8963" /* .C¦¡6~â&]v¸`àá‰c */ - $"AA7A F9EE DABF DB52 28F6 69F9 273F 8729" /* ªzùîÚ¿ÛR(öiù'?‡) */ - $"1D00 C7D2 20B9 3483 2125 88FC 94C0 54A6" /* ..ÇÒ ¹4ƒ!%ˆü”ÀT¦ */ - $"42FE F4E5 DA50 F495 F88B 5986 21CB 22E8" /* BþôåÚPô•ø‹Y†!Ë"è */ - $"EE5E 0622 2CB0 BCC8 0C6B 2B2B 23EB 0506" /* î^.",°¼È.k++#ë.. */ - $"A40F 09C2 726F 0C1F B8D4 55D3 2FE4 D629" /* ¤.ÆÂro..¸ÔUÓ/äÖ) */ - $"94C2 C913 BB28 4394 A9D2 8684 9E47 0445" /* ”ÂÉ.»(C”©Ò†„žG.E */ - $"B6CF 3E21 7072 B435 310C D7A3 063D 942B" /* ¶Ï>!pr´51.×£.=”+ */ - $"6AE9 350C 9442 C76E 1E6B A8C1 18A3 4309" /* jé5.”BÇn.k¨Á.£CÆ */ - $"6D55 E62F FC4E C4E9 6CF8 241D FAC5 2CC9" /* mUæ/üNÄélø$.úÅ,É */ - $"E020 6B12 31A6 9B11 710B 8850 FABE 5D63" /* à k.1¦›.q.ˆPú¾]c */ - $"068A 4018 2A90 93A5 9715 531E 8E7B AD7A" /* .Š@.*“¥—.S.Ž{­z */ - $"2921 115F 19CE 2B6A F643 DE89 2E76 890B" /* )!._.Î+jöCÞ‰.v‰. */ - $"5A69 1668 6A02 061F 4832 24EB FC82 6B4D" /* Zi.hj...H2$ëü‚kM */ - $"9B08 D22F CBBF D348 D18F 8B0C C684 6851" /* ›.Ò/Ë¿ÓHÑ‹.Æ„hQ */ - $"6CA9 E2FA 43CE 8A9A 7A58 FB28 0208 A6E0" /* l©âúCΊšzXû(..¦à */ - $"1ACF CE23 C624 5A38 C640 72C0 26F1 2818" /* .ÏÎ#Æ$Z8Æ@rÀ&ñ(. */ - $"07FD 74D9 F3D6 ED38 CA01 6485 CE8C 41A3" /* .ýtÙóÖí8Ê.d…ÎŒA£ */ - $"02C6 18E5 E4D2 2043 FA62 8768 3E14 7E80" /* .Æ.åäÒ Cúb‡h>.~€ */ - $"F2EB 67AD F743 75A0 2DDF 8724 1468 F88D" /* òëg­÷Cu -߇$.hø */ - $"9BF3 11EB 4D4C B372 D210 9B58 BAA0 646A" /* ›ó.ëML³rÒ.›Xº dj */ - $"222F 5E5A C781 1D86 5652 1B57 07AF C8FA" /* "/^ZÇ.†VR.W.¯Èú */ - $"9E77 DD7B FCB9 1D4C 8573 7B03 95AC D2DA" /* žwÝ{ü¹.L…s{.•¬ÒÚ */ - $"3314 4FFC CAF4 39B5 EAF4 9617 2CC5 9258" /* 3.OüÊô9µêô–.,Å’X */ - $"8F99 8C44 8D44 DA10 F1A5 51F7 5533 F13B" /* ™ŒDDÚ.ñ¥Q÷U3ñ; */ - $"CDDC B6D6 BE71 3C92 2628 3B69 DC32 C623" /* Íܶ־q<’&(;iÜ2Æ# */ - $"F497 3959 034A 67C3 10A8 26E2 572F B4B1" /* ô—9Y.JgÃ.¨&âW/´± */ - $"6C5C 3E47 FB9F AA7D D9A4 7A08 4BBA E854" /* l\>GûŸª}Ù¤z.KºèT */ - $"4370 CE77 C69A 11EB 1BD8 B9AF 8225 BC8E" /* CpÎwÆš.ë.ع¯‚%¼Ž */ - $"A261 1CAA A74D B531 A0B9 D462 35DF 9C21" /* ¢a.ª§Mµ1 ¹Ôb5ßœ! */ - $"73F1 EAC1 A13C E0BC AF6C 8111 03DF AF1F" /* sñêÁ¡<༯l..߯. */ - $"4748 1866 322C 535A 7C5E D2BC 4304 3541" /* GH.f2,SZ|^Ò¼C.5A */ - $"F14E 8412 296B 2C37 B642 9B4A 6417 EABB" /* ñN„.)k,7¶B›Jd.ê» */ - $"9034 1260 1B81 AFCC F903 4FAA A3F2 339E" /* 4.`.¯Ìù.Oª£ò3ž */ - $"F332 B080 8C32 31D7 4DEA B260 F190 43F1" /* ó2°€Œ21×Mê²`ñCñ */ - $"CCD5 A584 5C1C 343F FB87 CEA5 F246 8EAC" /* ÌÕ¥„\.4?û‡Î¥òFެ */ - $"C407 302C FEE7 3F59 F4B8 74ED ED62 D373" /* Ä.0,þç?Yô¸tííbÓs */ - $"A4BA B53A 0554 5403 9C2C E745 1087 5546" /* ¤ºµ:.TT.œ,çE.‡UF */ - $"2671 7BA6 3A33 703E BEF5 CD28 10A5 462B" /* &q{¦:3p>¾õÍ(.¥F+ */ - $"D902 9493 B2FC 176F 34BA 5A2D D2BC 0CBB" /* Ù.”“²ü.o4ºZ-Ò¼.» */ - $"5AB7 B854 08D3 CD79 3C71 1A89 E643 2FBC" /* Z·¸T.ÓÍy©¶éó¯ */ - $"6757 09A3 C49E A9AD 7201 BFD9 B3FA 52B0" /* gWƣĞ©­r.¿Ù³úR° */ - $"0000 0030 908B 4E52 45F1 3CBE F04A D2E4" /* ...0‹NREñ<¾ðJÒä */ - $"83AF 6AEA 78E9 A438 C877 BAAD 65CB C703" /* ƒ¯jêxé¤8Èwº­eËÇ. */ - $"70B2 B9DD E19B 6B8C 0CE9 E402 0C9F 94F0" /* p²¹Ýá›kŒ.éä..Ÿ”ð */ - $"21BC 4E05 C03C 012A 66EF D0BC 2B72 292E" /* !¼N.À<.*fïм+r). */ - $"3592 1FDB 2A5C 8D2D C2FF 5C5B 6AB8 F695" /* 5’.Û*\-Âÿ\[j¸ö• */ - $"F279 2C54 0529 555A 6ACA 22A4 C28B D693" /* òy,T.)UZjÊ"¤Â‹Ö“ */ - $"1FC9 4492 43F3 A323 F990 0A31 9356 30D3" /* .ÉD’Có£#ùÂ1“V0Ó */ - $"D6F0 0D36 0091 043F F239 9D1E 114E 3693" /* Öð.6.‘.?ò9..N6“ */ - $"DF1C 23DF A27A 5B11 A44D 9199 07D1 AF2C" /* ß.#ߢz[.¤M‘™.ѯ, */ - $"63EB 21C5 D29F 8644 8C6A 129A 9CB9 ED72" /* cë!ÅÒŸ†DŒj.šœ¹ír */ - $"9286 3E0E B604 539A F262 B727 9284 01F9" /* ’†>.¶.Sšòb·'’„.ù */ - $"5AE1 DA5A 8A02 140E 5275 5433 BCDF 8038" /* ZáÚZŠ...RuT3¼ß€8 */ - $"0050 856F A747 857B 8376 255A 9185 28CC" /* .P…o§G…{ƒv%Z‘…(Ì */ - $"301A EC7C B5D3 89CC A695 1C87 8266 7CA8" /* 0.ì|µÓ‰Ì¦•.‡‚f|¨ */ - $"A203 7467 426E 9507 3DB3 1F90 F66B DC9F" /* ¢.tgBn•.=³.ökÜŸ */ - $"ACF6 CDB2 4FCC 5AE4 2F94 F555 CB9E D8AC" /* ¬öͲOÌZä/”õU˞ج */ - $"950B FF38 0FE4 5056 E5E8 F371 9A98 5697" /* •.ÿ8.äPVåèóqš˜V— */ - $"6319 5197 B545 E594 AADD B2F2 CA27 260D" /* c.Q—µE唪ݲòÊ'&. */ - $"9BAF 0E45 0846 5573 F96B 7AC1 CC89 E86E" /* ›¯.E.FUsùkzÁ̉èn */ - $"61E6 72E2 05E3 9F8D 26D8 F178 BCC0 0B18" /* aærâ.ãŸ&Øñx¼À.. */ - $"967C EA80 F7C1 45AE 8FAE A41C 41B6 438E" /* –|ê€÷ÁE®®¤.A¶CŽ */ - $"46EF 1094 D558 01A8 BBAD 7380 DA27 2772" /* Fï.”ÕX.¨»­s€Ú''r */ - $"9D67 1330 A48C 62EA 0643 14EC 3E22 A055" /* g.0¤Œbê.C.ì>" U */ - $"4E39 4E23 853D C587 99C8 CFD2 AEBB 9843" /* N9N#…=Ň™ÈÏÒ®»˜C */ - $"ECC9 0241 3253 8CF1 E068 1936 3BB2 56D3" /* ìÉ.A2SŒñàh.6;²VÓ */ - $"46F7 6A71 98D1 A300 1337 B3B0 7ABB 5752" /* F÷jq˜Ñ£..7³°z»WR */ - $"DB7A 7F85 5CFE 59DE A852 6987 DC11 C6B5" /* Ûz.…\þYÞ¨Ri‡Ü.Ƶ */ - $"E45B 7DD1 1F3A D566 C16D 3FBF 7BAD 7201" /* ä[}Ñ.:ÕfÁm?¿{­r. */ - $"B71C C74C A678 C2BB 10FD 534A 5E5D 79C0" /* ·.ÇL¦x».ýSJ^]yÀ */ - $"000C 2336 9113 B9C5 5D4A 1756 1C8B 0CD6" /* ..#6‘.¹Å]J.V.‹.Ö */ - $"AA8B DFF5 6CE3 CDAB B9B4 D85C 93FF 76AA" /* ª‹ßõlãÍ«¹´Ø\“ÿvª */ - $"15CF CF39 A864 B236 A172 03A1 65A1 9F76" /* .ÏÏ9¨d²6¡r.¡e¡Ÿv */ - $"FF55 00DE C7D0 C767 2787 9EB3 7CE5 C5BC" /* ÿU.ÞÇÐÇg'‡ž³|åż */ - $"8E08 6085 37A2 229C 73D3 2CC5 F6E8 AA1B" /* Ž.`…7¢"œsÓ,Åöèª. */ - $"AF13 15FD EB95 2609 6006 23C6 7910 8FFE" /* ¯..ýë•&Æ`.#Æy.þ */ - $"8C5E 60A6 A558 E899 0A05 0F37 EC94 8E51" /* Œ^`¦¥Xè™Â..7씎Q */ - $"7838 9A11 8483 88B0 E284 B88D CDEA 9D56" /* x8š.„ƒˆ°â„¸ÍêV */ - $"5C7E CFA2 8001 847E ABC9 360E 17EA 2D34" /* \~Ï¢€.„~«É6..ê-4 */ - $"8314 96C0 3810 D88F A54E 6E7C 6030 76FA" /* ƒ.–À8.Ø¥Nn|`0vú */ - $"18A4 A549 37FC 11F6 E77F A883 C794 71AC" /* .¤¥I7ü.öç.¨ƒÇ”q¬ */ - $"55F1 7F88 664A FEE4 01C4 5576 1BE6 9C41" /* Uñ.ˆfJþä.ÄUv.æœA */ - $"D800 6121 2FC0 E681 A16E 21AF D5FE 0E80" /* Ø.a!/Àæ¡n!¯Õþ.€ */ - $"A800 0000 3090 8C40 9184 82DA 7187 51C6" /* ¨...0Œ@‘„‚Úq‡QÆ */ - $"44DC C420 FF13 98AD D100 2C07 132C 8D6C" /* DÜÄ ÿ.˜­Ñ.,..,l */ - $"5D16 A089 D8F6 E77F A870 24F1 5461 DB69" /* ]. ‰Øöç.¨p$ñTaÛi */ - $"0F41 5029 7A41 B55F 0000 0184 846A 850C" /* .AP)zAµ_...„„j…. */ - $"241E E628 EDA6 4000 3090 6AA2 F6E7 7FA6" /* $.æ(í¦@.0j¢öç.¦ */ - $"26C9 5EDE 9BB6 A1B1 51E6 8D5D F800 0061" /* &É^Þ›¶¡±Qæ]ø..a */ - $"19B3 E47D 6F6F DB03 0885 4A53 27BA 38F5" /* .³ä}ooÛ..…JS'º8õ */ - $"35A0 1AB9 0A95 8FAE 85E3 F528 5A8B E645" /* 5 .¹Â•®…ãõ(Z‹æE */ - $"8419 0456 6A38 D0DA 4948 8987 2323 1216" /* „..Vj8ÐÚIH‰‡##.. */ - $"A4F8 FD1A C374 D30C BF43 CD86 B984 F23C" /* ¤øý.ÃtÓ.¿C͆¹„ò< */ - $"5487 B47F E217 F15A D8CF A66A 96A9 EAF3" /* T‡´.â.ñZØÏ¦j–©êó */ - $"F966 0205 D320 1556 5C3C 073A 8E66 1E3F" /* ùf..Ó .V\<.:Žf.? */ - $"A74E FF2C BC45 E9DB 3B25 FF7F 46AD 13A9" /* §Nÿ,¼EéÛ;%ÿ.F­.© */ - $"5C21 458B 6AD4 829C 1DFB 54BA E5F2 3C76" /* \!E‹jÔ‚œ.ûTºåò’F...! */ - $"2CFF 4F5F FD2E 999E B77D A47D 61B4 2C01" /* ,ÿO_ý.™ž·}¤}a´,. */ - $"D397 493D CB48 AB27 EB4A 13A7 8C89 7F64" /* Ó—I=ËH«'ëJ.§Œ‰.d */ - $"6C08 FF21 9696 98C7 6248 1615 541F EC81" /* l.ÿ!––˜ÇbH..T.ì */ - $"8E18 FAED 5257 3D01 2CBB 74C1 DA64 81A0" /* Ž.úíRW=.,»tÁÚd  */ - $"39BF B272 4068 15E8 A44A 007C 732C D9DC" /* 9¿²r@h.è¤J.|s,ÙÜ */ - $"1CF8 4612 8611 A36D 67BC 6E6A EA14 9D87" /* .øF.†.£mg¼njê.‡ */ - $"2962 C4B4 5442 9564 BFAA D0FB 991F 4288" /* )bÄ´TB•d¿ªÐû™.Bˆ */ - $"7CB2 2A41 333E 7827 5070 F3A6 67FF 7FFF" /* |²*A3>x'Ppó¦gÿ.ÿ */ - $"7601 CFFE E44B 4413 809B 3877 B59D BC19" /* v.ÏþäKD.€›8wµ¼. */ - $"548F 0A5B C1E9 A8D7 6B5D 8EC8 8A1A BB3D" /* TÂ[Áé¨×k]ŽÈŠ.»= */ - $"3CD1 3139 57CF 9E94 00E9 CF6E 3830 3561" /* <Ñ19WÏž”.éÏn805a */ - $"8DE4 A59F FD1B 45CF C608 D0FD 5D48 485E" /* 䥟ý.EÏÆ.Ðý]HH^ */ - $"D5A3 30A5 F9EE 5D55 B9C2 E552 3A9F B087" /* Õ£0¥ùî]U¹ÂåR:Ÿ°‡ */ - $"FE87 5DBC 5E73 0F16 9221 2B0D F399 AB6F" /* þ‡]¼^s..’!+.ó™«o */ - $"9950 0000 0000 0000 0008 2444 88CE 3BBD" /* ™P........$DˆÎ;½ */ - $"CC78 4932 9C47 DEFA 74E7 91BF 9827 FF7B" /* ÌxI2œGÞútç‘¿˜'ÿ{ */ - $"77EB 9B1B 9F7F FDAB 6552 35A1 0C22 E9C6" /* wë›.Ÿ.ý«eR5¡."éÆ */ - $"42E3 FF7F FF7F E9FD A23B 2F7D 3ADD FC90" /* Bãÿ.ÿ.éý¢;/}:Ýü */ - $"E4A1 F8B9 0560 0F86 D7FE 3F46 C953 2A03" /* 䡸¹.`.†×þ?FÉS*. */ - $"F1C7 F5AE D0C4 B743 EA67 B694 E47D 45CD" /* ñÇõ®ÐÄ·Cêg¶”ä}EÍ */ - $"6F92 178A E383 8B71 800E D9AF A55A F149" /* o’.Šãƒ‹q€.Ù¯¥ZñI */ - $"A838 5671 4C9A 8915 447A CDA9 C6B7 DD68" /* ¨8VqLš‰.DzͩƷÝh */ - $"A5FB F404 CF63 A62E CC5E 89D3 FDB2 C841" /* ¥ûô.Ïc¦.Ì^‰Óý²ÈA */ - $"7A37 5B5D 5958 4B46 20B1 D389 5188 F9FE" /* z7[]YXKF ±Ó‰Qˆùþ */ - $"8FF1 D718 6C8C 3254 0000 0000 0000 0000" /* ñ×.lŒ2T........ */ - $"0000 00A1 EBEC C33A 8622 D0FF 7FFF 7FFF" /* ...¡ëìÃ:†"Ðÿ.ÿ.ÿ */ - $"705D C7FE 49E7 01B7 A65D D5BC 2041 80B0" /* p]ÇþIç.·¦]Õ¼ A€° */ - $"89ED F68A A000 F438 EBD0 C908 0B67 414F" /* ‰íöŠ .ô8ëÐÉ..gAO */ - $"C8F1 4312 2EC8 05E6 CA19 184F FF5B BA24" /* ÈñC..È.æÊ..Oÿ[º$ */ - $"57E8 A6B4 FBD3 FF79 4D8E FF44 BC50 6938" /* W覴ûÓÿyMŽÿD¼Pi8 */ - $"137F FF7D 6251 8D1A 9B33 CF7E 0BCB EAD7" /* ..ÿ}bQ.›3Ï~.Ëê× */ - $"2E0D EAE0 0003 0906 AA2B 66A8 C950 0000" /* ..êà..Æ.ª+f¨ÉP.. */ - $"0000 0000 0000 0000 0001 1E1F F600 1848" /* ............ö..H */ - $"4BF6 7A7C F92D 3E7A 437E 2254 51EB 4AF5" /* Köz|ù->zC~"TQëJõ */ - $"C6BF 442A 12CD 51FF 7FFE B8AE D0C4 B1D0" /* Æ¿D*.ÍQÿ.þ¸®ÐıР*/ - $"7CF7 019D A0ED 2CC4 01BC 1A94 212D 43EF" /* |÷. í,Ä.¼.”!-Cï */ - $"1274 9B67 94D5 062D 5FCC E23C 4816 416B" /* .t›g”Õ.-_Ìâ•Þ0Ð1ˆ*uO5Ë.ÝÕ */ - $"7FFD A983 95A9 71E7 A7A3 7D3F F944 0A7E" /* .ý©ƒ•©qç§£}?ùDÂ~ */ - $"24D9 966F 6B6A 0FD0 23AC 7000 0000 0000" /* $Ù–okj.Ð#¬p..... */ - $"0009 D4AF 9196 E5A4 B8AC 407F F9EE C709" /* .ÆÔ¯‘–夸¬@.ùîÇÆ */ - $"F927 08C3 CA6C 3A3A D90F E306 BCC4 6D6C" /* ù'.ÃÊl::Ù.ã.¼Äml */ - $"C7A9 F042 6F4C FDC9 60AB A087 6338 8F12" /* Ç©ðBoLýÉ`« ‡c8. */ - $"4D29 D00C C575 C7B5 9FA4 E96C 1FA0 AAFB" /* M)Ð.ÅuǵŸ¤él. ªû */ - $"09E9 8DF9 1BE0 C62D 3C1D F55B DD77 A0FD" /* Æéù.àÆ-<.õ[Ýw ý */ - $"5C16 D959 BA08 0000 0000 0000 0145 AE01" /* \.ÙYº........E®. */ - $"712A 0E06 1212 70CD 94A8 0A2C 18F5 1E3B" /* q*....pÍ”¨Â,.õ.; */ - $"52FA C8F6 56F3 F7E4 69E6 54A0 3FF6 2487" /* RúÈöVó÷äiæT ?ö$‡ */ - $"C65F 0EFF 7F4F 8D07 C817 FE78 727D 3C75" /* Æ_.ÿ.O.È.þxr}~bR.ÀJƒP× */ - $"DADA 8602 5949 900F D2B6 D10D 2661 3014" /* ÚÚ†.YI.Ò¶Ñ.&a0. */ - $"4541 17FF 2106 00DF AC82 0046 09BB A5AF" /* EA.ÿ!..߬‚.FÆ»¥¯ */ - $"CE51 0EBF F9AD 787A 907F 9F9A 628F E16B" /* ÎQ.¿ù­xz.Ÿšbák */ - $"C015 137E 9C68 FCFA A817 FF7F DD6B FDB6" /* À..~œhüú¨.ÿ.Ýký¶ */ - $"3DA3 7C9D 3309 0B8A B551 C370 4401 CD7F" /* =£|3Æ.еQÃpD.Í. */ - $"7503 8425 E297 1B3F FF49 4FF8 3583 685A" /* u.„%â—.?ÿIOø5ƒhZ */ - $"B273 A7F7 CEBF F27E D78C 3E35 5332 152B" /* ²s§÷οò~׌>5S2.+ */ - $"033C C7FF 7B97 1AF0 F2A4 3C88 CC7B B96E" /* .<Çÿ{—.ðò¤<ˆÌ{¹n */ - $"65B3 533C F2F8 5E4B 6DBF 7D78 A316 310F" /* e³S<òø^Km¿}x£.1. */ - $"6B09 FD62 88D7 77FF 7447 524E C235 00A3" /* kÆýbˆ×wÿtGRNÂ5.£ */ - $"8F5A 4BEE D240 6154 C17C 2CC2 68F0 A959" /* ZKîÒ@aTÁ|,Âhð©Y */ - $"2F12 9B74 7E8E 423F BB1D BC9A C75B C618" /* /.›t~ŽB?».¼šÇ[Æ. */ - $"19D1 C6CB 0A15 BD77 99BD 96D3 CC07 F5AC" /* .ÑÆËÂ.½w™½–ÓÌ.õ¬ */ - $"D2ED DE5E F19D 5CFC B2B0 5407 0386 32C6" /* ÒíÞ^ñ\ü²°T..†2Æ */ - $"5F49 7BAD 3270 BF81 CF97 C934 7E23 7237" /* _I{­2p¿Ï—É4~#r7 */ - $"727B 0FA2 6DB0 D717 8C73 B109 E089 AAC5" /* r{.¢m°×.Œs±Æà‰ªÅ */ - $"7D98 9061 2956 EA75 0135 E870 3430 4E9B" /* }˜a)Vêu.5èp40N› */ - $"C76C D3D6 7EEB 83DB 9EEB C9A0 983D 1327" /* ÇlÓÖ~ëƒÛžëÉ ˜=.' */ - $"62D8 FD62 CA51 7135 80B0 ABFF 431B 9843" /* bØýbÊQq5€°«ÿC.˜C */ - $"68B4 A929 44E4 1F3E E3A1 22AA 5E87 579C" /* h´©)Dä.>ã¡"ª^‡Wœ */ - $"745B 9CA4 438C BFC2 9A1B 17BE BA75 06E4" /* t[œ¤CŒ¿Âš..¾ºu.ä */ - $"0108 698C E4F2 341C 24CC 7913 6237 ED48" /* ..iŒäò4.$Ìy.b7íH */ - $"E797 4D7A 0D5A D1EA ACDF F974 4F9F 9139" /* ç—Mz.ZÑê¬ßùtOŸ‘9 */ - $"6A87 3972 A1C8 0A2B 1E8B 6DB7 B811 4AB0" /* j‡9r¡ÈÂ+.‹m·¸.J° */ - $"EEE8 BB23 959C 239D 4165 DBED ACE4 F133" /* îè»#•œ#AeÛí¬äñ3 */ - $"8276 40BB C447 29FE 3EB6 5BA4 A6D0 2441" /* ‚v@»ÄG)þ>¶[¤¦Ð$A */ - $"1431 8B2D 8BFD 96B7 C8C2 9F9B DFB9 2B06" /* .1‹-‹ý–·ÈŸ›ß¹+. */ - $"E191 00FF 7E4B 8281 D609 D163 B8CB AF9A" /* á‘.ÿ~K‚ÖÆÑc¸Ë¯š */ - $"0995 7385 27FC 3C6A 5310 024D BAD1 8013" /* Æ•s…'ü—âx.(.“õeø> */ - $"4161 0037 E0AA D0CC 3AED 4E56 04E8 4456" /* Aa.7àªÐÌ:íNV.èDV */ - $"6E50 4626 C7E0 0790 014E 329B 0DDB D87D" /* nPF&Çà..N2›.ÛØ} */ - $"4532 6482 3F51 D651 3F62 D6EB 3BCA 75EB" /* E2d‚?QÖQ?bÖë;Êuë */ - $"5444 A42F 3CFB 4146 19FB 5376 876F 6BC1" /* TD¤/<ûAF.ûSv‡okÁ */ - $"B80B 7787 71DF 4CAA D70A 98BC 98E1 15A1" /* ¸.w‡qßLª×˜¼˜á.¡ */ - $"7996 F17F FF7A 91CF 350C FA04 5753 7ECB" /* y–ñ.ÿz‘Ï5.ú.WS~Ë */ - $"29F1 A4AD F335 59DB A580 EAA3 98AD FEB0" /* )ñ¤­ó5YÛ¥€ê£˜­þ° */ - $"275E BABE 6679 9AD4 B246 75F2 ECAA B042" /* '^º¾fyšÔ²Fuò쪰B */ - $"92C9 745E 1C58 58FF 2570 9228 4EAF 6F65" /* ’Ét^.XXÿ%p’(N¯oe */ - $"56F3 1D0C 85AA 9468 8000 0000 0101 3082" /* Vó..…ª”h€.....0‚ */ - $"08FD E30F FF75 70BF FCCA 2225 E5FC 3464" /* .ýã.ÿup¿üÊ"%åü4d */ - $"00CA 6C43 E833 80DE 2895 5F84 4B08 CEFA" /* .ÊlCè3€Þ(•_„K.Îú */ - $"AA94 EE33 24E7 CA20 A668 4717 FD5F F7F2" /* ª”î3$çÊ ¦hG.ý_÷ò */ - $"59E7 D6C6 6D0D 8E0F 1AC3 BBFA 3890 8ACB" /* YçÖÆm.Ž..ûú8ŠË */ - $"9250 6D82 E892 D4B9 1F14 D987 9818 877A" /* ’Pm‚è’Ô¹..Ù‡˜.‡z */ - $"66F0 905A B088 D761 B529 F02A 6964 6C65" /* fðZ°ˆ×aµ)ð*idle */ - $"8FB8 9A87 7771 9A12 C8A6 7F9C 9905 D643" /* ¸š‡wqš.Ȧ.œ™.ÖC */ - $"E554 91F5 0C26 4299 30C6 BC87 B38C 86FB" /* åT‘õ.&B™0Ƽ‡³Œ†û */ - $"ED50 C019 3822 52A8 97C6 1F49 176D FB8C" /* íPÀ.8"R¨—Æ.I.mûŒ */ - $"87B7 E37C 196E 3695 357A E2B8 FDE5 736E" /* ‡·ã|.n6•5zâ¸ýåsn */ - $"DF11 6026 3CD9 51CF 2A50 6F8A 53B0 0F16" /* ß.`&<ÙQÏ*PoŠS°.. */ - $"938B 745A F84D 571C A582 9723 90B4 49D7" /* “‹tZøMW.¥‚—#´I× */ - $"B11D 7BA6 45C1 2AFA D519 A471 60A3 17A9" /* ±.{¦EÁ*úÕ.¤q`£.© */ - $"2C13 6E04 D58E 3F37 0115 E4AE F51C 1BA8" /* ,.n.ÕŽ?7..ä®õ..¨ */ - $"EF7F 4C9F 7B47 8C5A D1D6 CAC7 D416 D6D4" /* ï.LŸ{GŒZÑÖÊÇÔ.ÖÔ */ - $"7F05 9504 5685 0D6D E0E8 6809 9307 7864" /* ..•.V….màèhÆ“.xd */ - $"1A86 1BA6 A321 D08C 1B0C 0981 9395 6DC0" /* .†.¦£!ÐŒ..Æ“•mÀ */ - $"C74F ECF7 CA1B FF4B 1896 BDBE 4876 8A4B" /* ÇOì÷Ê.ÿK.–½¾HvŠK */ - $"519F CC3C 7813 BE21 C40C B001 30F4 4FC7" /* QŸÌüU»œ³@¤Ê.¡. */ - $"3E83 51D4 9D13 DE0D F86D 3384 AAE7 9074" /* >ƒQÔ.Þ.øm3„ªçt */ - $"F7CF 4509 F99A 70B2 2E74 43C3 1363 021F" /* ÷ÏEÆùšp².tCÃ.c.. */ - $"6482 E471 22FA 6265 2DF9 C302 43F8 9053" /* d‚äq"úbe-ùÃ.CøS */ - $"0AE9 15A2 28D4 FD7C 05AF C7B8 26D5 7C0F" /* Âé.¢(Ôý|.¯Ç¸&Õ|. */ - $"22E0 4735 518D BE4B 4E83 1EF8 3FFA BA23" /* "àG5Q¾KNƒ.ø?úº# */ - $"3AE8 F76B 1D92 2038 64C1 EA73 30FC CE72" /* :è÷k.’ 8dÁês0üÎr */ - $"0CA5 6697 157E 55C4 8BAE E703 6FF5 F743" /* .¥f—.~UÄ‹®ç.oõ÷C */ - $"B456 C85F 3BFF 2629 95B7 02F4 F580 A49B" /* ´VÈ_;ÿ&)•·.ôõ€¤› */ - $"1587 2316 D131 66C1 C6DB F3DC C409 D801" /* .‡#.Ñ1fÁÆÛóÜÄÆØ. */ - $"E2DA 30B6 73FD 99EF AA26 25D7 DF07 FBEB" /* âÚ0¶sý™ïª&%×ß.ûë */ - $"094E 2E8E BD11 3C49 81BA E6BE 7666 ECBE" /* ÆN.޽.sÄW.6ÿ<%‚1 */ - $"2C25 ACE4 F084 E842 60E8 355D 22BE 6FEE" /* ,%¬äð„èB`è5]"¾oî */ - $"93F9 DDE6 DAED 4E44 545A FE4E 5EA4 0487" /* “ùÝæÚíNDTZþN^¤.‡ */ - $"36F1 52AF 8683 2DE8 F30B 72DE E807 2068" /* 6ñR¯†ƒ-èó.rÞè. h */ - $"742B 7262 BF7E 516C D41F CA56 9DE1 E3B8" /* t+rb¿~QlÔ.ÊVá㸠*/ - $"8D72 2993 C073 516D A343 DDE0 984D F06A" /* r)“ÀsQm£CÝà˜Mðj */ - $"CD83 D22D C161 30D7 2E9A FED4 4E85 5D2E" /* ̓Ò-Áa0×.šþÔN…]. */ - $"CF72 2181 7F23 BC37 FF83 C30D 43E0 DBC7" /* Ïr!.#¼7ÿƒÃ.CàÛÇ */ - $"A277 B4D9 4E68 1FB1 AF7B 6D8B 8F43 2A1B" /* ¢w´ÙNh.±¯{m‹C*. */ - $"9FE4 6CCC E826 C4AA 96C9 98A9 4D3B 981F" /* ŸälÌè&Ī–ɘ©M;˜. */ - $"8786 8633 89B0 2B42 4266 BC27 0098 D2B3" /* ‡††3‰°+BBf¼'.˜Ò³ */ - $"E8E4 0D2C 6E14 D34D 3613 4568 4A1E 8E5E" /* èä.,n.ÓM6.EhJ.Ž^ */ - $"E328 D89C 85D3 D8C2 C15B 3533 989F F015" /* ã(Øœ…ÓØÂÁ[53˜Ÿð. */ - $"1B49 871D 031B 2DBE D49E 880D A557 0694" /* .I‡...-¾Ôžˆ.¥W.” */ - $"60C3 47A1 CD2A 961B F73C 94A3 6B17 4268" /* `ÃG¡Í*–.÷<”£k.Bh */ - $"F766 81DC 33BC 8C1D 5571 D2D7 FB1C 9378" /* ÷fÜ3¼Œ.UqÒ×û.“x */ - $"01B7 BDCC 5DD0 9171 5FA1 50DA 7EBF 1586" /* .·½Ì]Бq_¡PÚ~¿.† */ - $"FA82 9E6F CBE4 0977 9C9C 2373 E789 5A3E" /* ú‚žoËäÆwœœ#sç‰Z> */ - $"8743 EB0E ED13 7955 DB28 2874 8065 2078" /* ‡Cë.í.yUÛ((t€e x */ - $"97A7 6C13 2283 729A CCF9 E449 A627 7652" /* —§l."ƒršÌùäI¦'vR */ - $"E821 2F1F 574E 6887 1830 6E01 5A8D 02FB" /* è!/.WNh‡.0n.Z.û */ - $"DB61 8EEF 4E08 B607 26FA 2B4C FF47 38FE" /* ÛaŽïN.¶.&ú+LÿG8þ */ - $"9B7C A3E4 DB46 F898 CFE9 8F3C 8717 2975" /* ›|£äÛFø˜Ïé<‡.)u */ - $"9BA2 582E 86D1 D882 C127 EFD7 E71A B5DD" /* ›¢X.†ÑØ‚Á'ï×ç.µÝ */ - $"7772 6391 2722 2884 AA0F 9C72 9A96 F4F8" /* wrc‘'"(„ª.œrš–ôø */ - $"BFF8 869A FD00 3B41 A8C7 DCD0 2834 270C" /* ¿ø†šý.;A¨ÇÜÐ(4'. */ - $"B93C 8702 5B16 8A32 0289 979B 0A35 3A7B" /* ¹<‡.[.Š2.‰—›Â5:{ */ - $"5870 6189 03C2 DD00 FAB2 B137 AB93 3EF5" /* Xpa‰.ÂÝ.ú²±7«“>õ */ - $"24E3 1FE1 A206 963E 1344 FE12 285A 5C52" /* $ã.á¢.–>.Dþ.(Z\R */ - $"692E D315 6C73 2CBE 7ADC 81BC EBC8 13EA" /* i.Ó.ls,¾zܼëÈ.ê */ - $"796B 6056 E9E7 D971 6E09 7086 252C 6A19" /* yk`VéçÙqnÆp†%,j. */ - $"7351 153D F4C4 FE01 6235 917F B203 171A" /* sQ.=ôÄþ.b5‘.²... */ - $"1822 B42B 9226 D163 5572 7E7E C508 BEBA" /* ."´+’&ÑcUr~~Å.¾º */ - $"D0D2 1C24 8D62 565D C183 F78D 4726 0541" /* ÐÒ.$bV]Áƒ÷G&.A */ - $"F829 10C7 1B21 E59C C4E5 7688 6268 FABC" /* ø).Ç.!åœÄåvˆbhú¼ */ - $"C0B9 6C02 8820 3F44 54A7 8C83 F14F 61B8" /* À¹l.ˆ ?DT§ŒƒñOa¸ */ - $"707C AB32 9D59 F01E D18A 37FC 40F9 5C59" /* p|«2Yð.ÑŠ7ü@ù\Y */ - $"EEA8 E442 FDC8 CA73 970F 6EE0 1348 AC8E" /* î¨äBýÈÊs—.nà.H¬Ž */ - $"9D65 4DA9 2820 AEDB A7F3 C1B4 8E3F 8780" /* eM©( ®Û§óÁ´Ž?‡€ */ - $"8DA9 F7D9 F116 DD30 778E 4FB6 49D3 AFE8" /* ©÷Ùñ.Ý0wŽO¶IÓ¯è */ - $"74B1 EB63 92B8 4210 3B22 3613 6784 41A2" /* t±ëc’¸B.;"6.g„A¢ */ - $"5953 1EFF 16A9 1769 9852 73D0 B6C2 3523" /* YS.ÿ.©.i˜RsжÂ5# */ - $"854B 1247 531D 47C5 7AFC 1B6B F0C4 2E2F" /* …K.GS.GÅzü.kðÄ./ */ - $"6C60 82C9 9C4D 2FAD 25A5 BEC6 8590 7388" /* l`‚ÉœM/­%¥¾Æ…sˆ */ - $"5D15 9A65 E013 D48B 7D9C 34B2 A617 75A8" /* ].šeà.Ô‹}œ4²¦.u¨ */ - $"8E8E 2D91 1AEC 26D5 8B9C D03C A02A A829" /* ŽŽ-‘.ì&Õ‹œÐ< *¨) */ - $"738D 9A4E 8F31 82A9 39B7 7CFE D412 810E" /* sšN1‚©9·|þÔ.. */ - $"1372 6D79 8D49 BAC1 9FFB 5D52 56AD 488F" /* .rmyIºÁŸû]RV­H */ - $"4E1D A232 7348 1FE2 483F AB9F A23C 0997" /* N.¢2sH.âH?«Ÿ¢<Æ— */ - $"678D 1AB7 7F66 8927 7DED 2A66 E03B 05C9" /* g.·.f‰'}í*fà;.É */ - $"0420 66A2 E0AE E1B9 259E 64C9 FF0E A7C7" /* . f¢à®á¹%ždÉÿ.§Ç */ - $"5E9D 69F4 DD50 394C 344E 9DA9 6BCA 3D9F" /* ^iôÝP9L4N©kÊ=Ÿ */ - $"8FA9 C156 3248 2310 8AB9 6131 B94F FF36" /* ©ÁV2H#.йa1¹Oÿ6 */ - $"DF00 9E80 5713 E9AD 3B07 879E C876 E063" /* ß.ž€W.é­;.‡žÈvàc */ - $"38D8 2776 3081 5810 1760 927C D93C EE88" /* 8Ø'v0X..`’|Ù<îˆ */ - $"518B 755A EBF1 B276 C65B 98DD 1421 8AA1" /* Q‹uZëñ²vÆ[˜Ý.!Š¡ */ - $"27D2 A8B2 5E3E B7B7 8F73 CDCB 9896 D80F" /* 'Ò¨²^>··s͢–Ø. */ - $"1D50 2E28 4F54 26A9 E68F 822C 3031 0A5B" /* .P.(OT&©æ‚,01Â[ */ - $"213A 8ED8 B1B8 C32C F5EF 6784 3641 A888" /* !:ŽØ±¸Ã,õïg„6A¨ˆ */ - $"1AF9 941B E9B2 42C0 D9BE AAD7 2727 9E13" /* .ù”.é²BÀÙ¾ª×''ž. */ - $"284F A530 1F62 679B 7860 E677 9E24 3663" /* (O¥0.bg›x`æwž$6c */ - $"E7D1 E4B5 D37B C274 9ECB CFA2 CC95 8A75" /* çÑäµÓ{ÂtžËϢ̕Šu */ - $"0C3A FB7D F074 1433 5EC7 1FC4 330E F221" /* .:û}ðt.3^Ç.Ä3.ò! */ - $"AE39 4A04 097F 4B21 27CD C193 39CB 3AB2" /* ®9J.Æ.K!'ÍÁ“9Ë:² */ - $"0B6E D8E0 54EA 0F75 15F9 D75D 0D82 624D" /* .nØàTê.u.ù×].‚bM */ - $"7D19 8E11 1AD0 764F CEA8 F0FE 2913 6841" /* }.Ž..ÐvOΨðþ).hA */ - $"89B8 CA62 C997 34B9 5950 4842 4F13 1ACD" /* ‰¸ÊbÉ—4¹YPHBO..Í */ - $"39AD 30CA 4ED2 A17D 0B09 206B 9426 EF50" /* 9­0ÊNÒ¡}.Æ k”&ïP */ - $"63C6 386E 74BB BDE0 420F 6154 5260 E1A2" /* cÆ8nt»½àB.aTR`ᢠ*/ - $"8546 3192 76D1 1F38 268E 7AC6 049F 321D" /* …F1’vÑ.8&ŽzÆ.Ÿ2. */ - $"CB51 35C7 067C 961B DA2F 4BCB E065 A8DB" /* ËQ5Ç.|–.Ú/KËàe¨Û */ - $"16C9 1F05 ABAF 93FF 333A F049 3161 6838" /* .É..«¯“ÿ3:ðI1ah8 */ - $"6E1A FEF2 564C 3F48 3800 BC9C F009 AF34" /* n.þòVL?H8.¼œðƯ4 */ - $"2241 15D4 764F 4764 CEDF 6D7D 2E9C 8141" /* "A.ÔvOGdÎßm}.œA */ - $"1E00 E109 D827 DDAA A47C 2854 9229 8998" /* ..áÆØ'ݪ¤|(T’)‰˜ */ - $"9175 1FFB 496B 36C7 3695 3631 390B 06E6" /* ‘u.ûIk6Ç6•619..æ */ - $"EB0D 3BA7 F1BE A2FF 6D3A 9FB6 FCFD ADEF" /* ë.;§ñ¾¢ÿm:Ÿ¶üý­ï */ - $"EDBA 3FDB 632F EDB1 BF6D BE7E DB9F 97ED" /* íº?Ûc/í±¿m¾~ÛŸ—í */ - $"45FD AB93 F6E8 7FED A7F7 DAC3 FC34 6F43" /* Eý«“öè.í§÷ÚÃü4oC */ - $"E1DB 5507 762F DB7E 5F51 DDF5 1DFE DD07" /* áÛU.v/Û~_QÝõ.þÝ. */ - $"E1FD A67F B4E6 7EDB 8BF6 AE3F B6BC D3E4" /* áý¦.´æ~Û‹ö®?¶¼Óä */ - $"D00B 0F87 A0FF 2AC3 3F6D 84F8 7475 99F2" /* Ð..‡ ÿ*Ã?m„øtu™ò */ - $"F382 BE95 100F 8FEE C1C8 D086 E345 E973" /* 󂾕..îÁÈІãEés */ - $"0FE4 06B6 7813 7115 B8D0 D91B C698 D10D" /* .ä.¶x.q.¸ÐÙ.ƘÑ. */ - $"A370 844F 9330 E047 0201 F880 D146 6522" /* £p„O“0àG..ø€ÑFe" */ - $"8E52 12DE 3D1A 9231 5315 682E 4706 8685" /* ŽR.Þ=.’1S.h.G.†… */ - $"DA39 C538 9828 7ED0 714F 3E27 532A 3840" /* Ú9Å8˜(~ÐqO>'S*8@ */ - $"C912 3E46 8205 3243 7835 7284 12D6 CCF5" /* É.>F‚.2Cx5r„.ÖÌõ */ - $"36AF 0975 8A27 4F44 3857 B5A3 160D 1391" /* 6¯ÆuŠ'OD8Wµ£...‘ */ - $"8005 2453 86CB 51B3 E493 EA9C 707F 7047" /* €.$S†ËQ³ä“êœp.pG */ - $"1DA8 1386 91D1 6105 7D84 1563 FC52 D5D3" /* .¨.†‘Ña.}„.cüRÕÓ */ - $"EDA7 D4A0 4AC1 BB4E 49D6 62F4 CA92 CE8E" /* í§Ô JÁ»NIÖbôÊ’ÎŽ */ - $"8DE0 84DC 418D ACE2 71AD 9206 3C98 3281" /* à„ÜA¬âq­’.<˜2 */ - $"104E A1F2 8982 6ED6 223E B67B BE6A C51F" /* .N¡ò‰‚nÖ">¶{¾jÅ. */ - $"4BF8 6C35 B6A4 5EC8 87BB 4834 7CF3 16AC" /* Køl5¶¤^ȇ»H4|ó.¬ */ - $"2453 B3DA 3503 94D6 2E70 2B6F 975E 21DB" /* $S³Ú5.”Ö.p+o—^!Û */ - $"F409 0368 9A2E DFB2 7A4B 9A6F 4165 1173" /* ôÆ.hš.ß²zKšoAe.s */ - $"A53E 329A 7925 FB80 9664 2C09 A9E5 715C" /* ¥>2šy%û€–d,Æ©åq\ */ - $"E42F 8E14 EC68 05A8 D565 53C2 9C98 86A2" /* ä/Ž.ìh.¨ÕeSœ˜†¢ */ - $"2C2D 6443 A1D0 A619 2320 6CD3 FE48 8006" /* ,-dC¡Ð¦.# lÓþH€. */ - $"FC0F 3690 DF76 1FD8 2E16 0705 D91F EEBE" /* ü.6ßv.Ø....Ù.î¾ */ - $"E961 32B9 E252 4F0E EE4A 6F73 AEBB 014A" /* éa2¹âRO.îJos®».J */ - $"8F45 1551 9123 7C3A 13F8 1B57 EB6A 0AFB" /* E.Q‘#|:.ø.WëjÂû */ - $"9AE9 65F5 9FDE 5F1C 7C23 84F1 6DCD CC52" /* šéeõŸÞ_.|#„ñmÍÌR */ - $"97DD 03E6 C571 0C23 F06B 9F21 2E2C 79D5" /* —Ý.æÅq.#ðkŸ!.,yÕ */ - $"1827 1436 E6FB C5FB BA11 617B 9B32 3DCD" /* .'.6æûÅûº.a{›2=Í */ - $"B0AD AA8F 53D0 2F20 849C D667 9436 A677" /* °­ªSÐ/ „œÖg”6¦w */ - $"38C9 1B5A 26E2 B4D4 29BB 2D9E 56D4 652D" /* 8É.Z&â´Ô)»-žVÔe- */ - $"9A12 FC7E FBD5 0075 3EC9 64FE D0CE 06A2" /* š.ü~ûÕ.u>ÉdþÐÎ.¢ */ - $"B63F 8731 DB8A 6917 26EA CCFC C1E6 10AA" /* ¶?‡1ÛŠi.&êÌüÁæ.ª */ - $"704E 20EA 7518 0416 6BBE 2867 9470 9FE6" /* pN êu...k¾(g”pŸæ */ - $"3D2A D178 6CD1 0B7D E518 4682 FC48 EA03" /* =*ÑxlÑ.}å.F‚üHê. */ - $"EFA0 ADEE B643 CDFD 796D C309 E13B 9DD3" /* ï ­î¶CÍýymÃÆá;Ó */ - $"82CC 1237 8D6B 9CB9 0438 AF1A 6190 136E" /* ‚Ì.7kœ¹.8¯.a.n */ - $"A170 6109 4BA8 FD0B 4C10 DE61 71A9 A5FF" /* ¡paÆK¨ý.L.Þaq©¥ÿ */ - $"5AD1 3895 15D0 912A BC62 5344 A7FD 7B9B" /* ZÑ8•.Б*¼bSD§ý{› */ - $"0360 8C71 DD04 20C7 4685 E6B7 7941 7BD7" /* .`ŒqÝ. ÇF…æ·yA{× */ - $"DBBB 3F61 742B D692 AD3D B778 6442 3DD1" /* Û»?at+Ö’­=·xdB=Ñ */ - $"A97E 1312 9AF4 05C1 7B33 9FE2 B3F5 D16C" /* ©~..šô.Á{3Ÿâ³õÑl */ - $"875D 7109 13EC BB96 0664 DF60 1958 8DE5" /* ‡]qÆ.ì»–.dß`.Xå */ - $"5B3F 3E75 9D21 0415 CE9C 3172 87C7 FF05" /* [?>u!..Μ1r‡Çÿ. */ - $"F787 4F14 E63B 4DCE 247D B3A3 475C 5336" /* ÷‡O.æ;MÎ$}³£G\S6 */ - $"C794 AF23 6415 68C6 B893 1B16 8C81 3F43" /* Ç”¯#d.hƸ“..Œ?C */ - $"C455 6EB8 8D5A 6919 4C3A D980 BFB1 3699" /* ÄUn¸Zi.L:Ù€¿±6™ */ - $"C790 C7D1 7B05 12AA 803A 172B DEF2 00CC" /* ÇÇÑ{..ª€:.+Þò.Ì */ - $"FF38 62C8 1815 1D3A F60D 2B9B 87A0 05C5" /* ÿ8bÈ...:ö.+›‡ .Å */ - $"3587 0181 8754 06D7 2CFC 78B8 0C65 D5BC" /* 5‡.‡T.×,üx¸.eÕ¼ */ - $"2903 C07C 0631 A0B9 E94E 192F DE4B 4924" /* ).À|.1 ¹éN./ÞKI$ */ - $"A4F0 BB9A 49C5 B751 38EB 7289 9806 FC5C" /* ¤ð»šIÅ·Q8ër‰˜.ü\ */ - $"D822 ED93 CA92 14B6 5056 017F 7826 CDE1" /* Ø"í“Ê’.¶PV..x&Íá */ - $"8401 9F6C A7F7 4AD5 E86F FDC3 05AF 6AE3" /* „.Ÿl§÷JÕèoýÃ.¯jã */ - $"5EED 07E3 E5ED 7EE7 FB97 0B99 E191 605B" /* ^í.ãåí~çû—.™á‘`[ */ - $"955A 6A3C 33C6 2BB8 9562 0E38 09C1 1ED9" /* •Zj<3Æ+¸•b.8ÆÁ.Ù */ - $"8914 73AF E9AA 7B2F 214E 7EEA 98E8 B976" /* ‰.s¯éª{/!N~ê˜è¹v */ - $"E058 E0B5 6DB4 5B1C F212 2C8E 0AE5 7100" /* àXàµm´[.ò.,ŽÂåq. */ - $"BC1E 84CD 0598 7CF9 EA4E 1E96 2B4A DE9E" /* ¼.„Í.˜|ùêN.–+JÞž */ - $"6CE9 E79B 0336 9059 E109 DF83 A2AE 9E74" /* léç›.6YáÆßƒ¢®žt */ - $"5BB1 0236 590C 66CD 0658 ECE5 50A2 EDDD" /* [±.6Y.fÍ.XìåP¢íÝ */ - $"D7BB DAF7 548B 7F21 2A40 7821 FDA2 62B6" /* ×»Ú÷T‹.!*@x!ý¢b¶ */ - $"C862 B0B2 96CF 27D5 EC9D F5C8 42D8 F42A" /* Èb°²–Ï'ÕìõÈBØô* */ - $"5962 F21A D191 6744 1AE2 64B4 6744 A1B2" /* Ybò.Ñ‘gD.âd´gD¡² */ - $"7625 FF0D F0CF A1F8 3273 C4B8 FCCE C2BC" /* v%ÿ.ðÏ¡ø2sĸüμ */ - $"EDD5 F0C6 765F 2446 5EF5 2195 04EE C94B" /* íÕðÆv_$F^õ!•.îÉK */ - $"C9C2 4F82 0D0F 6034 3560 64A8 C372 4E17" /* ÉÂO‚..`45`d¨ÃrN. */ - $"D4F6 B2DC 2162 A6DC 9B35 5F36 628E EA58" /* Ôö²Ü!b¦Ü›5_6bŽêX */ - $"B2EF D0B8 79FF 3F60 39DC 34C9 8DD1 C7DA" /* ²ïиyÿ?`9Ü4ÉÑÇÚ */ - $"BFFD 9220 B977 42CD 1F4E 00C7 1A7B F29F" /* ¿ý’ ¹wBÍ.N.Ç.{òŸ */ - $"9738 8D5E 3E5F BA1F D4BD 0592 2006 1216" /* —8^>_º.Ô½.’ ... */ - $"D478 DE72 171A A49D 9C4A 0691 CD59 6FB3" /* ÔxÞr..¤œJ.‘ÍYo³ */ - $"F3C5 B3CD DCC8 5794 133C 85B3 176A 0C6A" /* óųÍÜÈW”.<…³.j.j */ - $"323E C74F 7CE3 4042 38AB E9CA 5700 E39B" /* 2>ÇO|ã@B8«éÊW.ã› */ - $"26D3 62B7 59F8 966D A789 35AA C72D 9943" /* &Ób·Yø–m§‰5ªÇ-™C */ - $"C884 2E53 30B3 D351 EFCC 6BF8 9889 8AB6" /* È„.S0³ÓQïÌkø˜‰Š¶ */ - $"E284 F5A4 64BD F89F 98A4 8082 6292 48EB" /* â„õ¤d½øŸ˜¤€‚b’Hë */ - $"2039 4A80 D5D7 BEFC 2DC1 69A9 F484 9B4E" /* 9J€Õ×¾ü-Ái©ô„›N */ - $"94C9 6E87 31A6 6D4E 23DB 77A9 37D5 CEE9" /* ”Én‡1¦mN#Ûw©7ÕÎé */ - $"10B5 22DB 58B2 3DFB 973A E321 F02A 2985" /* .µ"ÛX²=û—:ã!ð*)… */ - $"AE7E F964 9A23 4B8D 90FD 75F4 9944 3CEB" /* ®~ùdš#Kýuô™D<ë */ - $"C5C5 B0BA DA1C AA0A B59A EFCA 903A 972B" /* ÅŰºÚ.ªÂµšïÊ:—+ */ - $"10E9 2A66 2BAB 3E63 8312 E494 A82C AEE8" /* .é*f+«>cƒ.䔨,®è */ - $"DE3B 902F 4DE5 A934 7FA5 59D8 B355 75C7" /* Þ;/Må©4.¥YسUuÇ */ - $"DC51 6208 6D60 DE89 F04A F698 FC35 5341" /* ÜQb.m`Þ‰ðJö˜ü5SA */ - $"A8C7 894B 5E8F 0638 0F21 36AB 23FF 37BF" /* ¨Ç‰K^.8.!6«#ÿ7¿ */ - $"CA6E C0CE 1C93 9BB1 FEA7 49E8 9BA5 7F32" /* ÊnÀÎ.“›±þ§I蛥.2 */ - $"4C9D C8BA 821C 1E07 F277 BE63 241C D5F6" /* LȺ‚...òw¾c$.Õö */ - $"07CB 7A98 E51E B0FC B312 223C 21BF 5DEE" /* .Ëz˜å.°ü³."Î.5" */ - $"1088 A628 490C 5F8D 64C4 7E17 CBD3 290D" /* .ˆ¦(I._dÄ~.ËÓ). */ - $"91B1 B073 AD4A BF5B A1E9 6306 3E9A F87E" /* ‘±°s­J¿[¡éc.>šø~ */ - $"2DEC 7390 2CF5 3305 93C2 15DA 7FFF 7FC6" /* -ìs,õ3.“Â.Ú.ÿ.Æ */ - $"0578 C93E BF93 5B69 25D4 E0F9 5726 0D7E" /* .xÉ>¿“[i%ÔàùW&.~ */ - $"9C06 C76B 1BF5 3206 F26C 4F57 6A13 7488" /* œ.Çk.õ2.òlOWj.tˆ */ - $"07F4 1787 316E 19B5 2CB4 D7B8 23EE BF15" /* .ô.‡1n.µ,´×¸#î¿. */ - $"84F7 C141 CE7E 358F F83B 081D 2680 C5CB" /* „÷ÁAÎ~5ø;..&€ÅË */ - $"2002 0FFB D329 10E3 1880 E0F6 29FF 14F6" /* ..ûÓ).ã.€àö)ÿ.ö */ - $"1447 24FF 4BDD 371B 00F3 0334 6FE5 D217" /* .G$ÿKÝ7..ó.4oåÒ. */ - $"8E7D 3CCB EC04 D019 0583 0792 D4F4 59E5" /* Ž}<Ëì.Ð..ƒ.’ÔôYå */ - $"0914 52FB CE7A 2EFD B899 ED16 38FB E1D4" /* Æ.RûÎz.ý¸™í.8ûáÔ */ - $"3312 BAAE 3EF3 45B7 2A77 62F3 4787 8900" /* 3.º®>óE·*wbóG‡‰. */ - $"050D 5A64 92D3 64E7 7950 4234 FCC0 0EC6" /* ..Zd’ÓdçyPB4üÀ.Æ */ - $"004C 8652 616B B5FF 87F6 72D0 400B 9574" /* .L†Rakµÿ‡örÐ@.•t */ - $"7ADD 2EE6 F979 EE70 393F 5E65 09EC 561B" /* zÝ.æùyîp9?^eÆìV. */ - $"2FF4 F6FA 9226 2AA7 C2D2 4517 2258 15C7" /* /ôöú’&*§ÂÒE."X.Ç */ - $"D27E DE80 0000 0009 BB69 0154 3C66 FD24" /* Ò~Þ€...Æ»i.TÃEijÀfŠ'ÃÓ */ - $"7A8A 6368 2F2C 3F2F 5D43 59ED 5E40 9E4F" /* zŠch/,?/]CYí^@žO */ - $"59BB 6A03 B7F8 083A 021D F8F0 79AF 43B0" /* Y»j.·ø.:..øðy¯C° */ - $"2270 F775 B8D8 FB59 371A 8B22 9F0B 55FA" /* "p÷u¸ØûY7.‹"Ÿ.Uú */ - $"C9B1 5565 0914 AA67 2D9E 81B2 60FC 1333" /* ɱUeÆ.ªg-ž²`ü.3 */ - $"318F 21E9 97E4 1400 F69E F709 7AE3 82A5" /* 1!é—ä..öž÷Æzã‚¥ */ - $"C9DE 7D16 1DF8 EDF8 FC5E DB3E FC2A F822" /* ÉÞ}..øíøü^Û>ü*ø" */ - $"886E F247 9BC1 250E 905C 4AF7 4B22 3595" /* ˆnòG›Á%.\J÷K"5• */ - $"0835 2567 EEC1 C4C8 B70D D782 6A22 C9DA" /* .5%gîÁÄÈ·.ׂj"ÉÚ */ - $"ADA3 0370 EED9 E428 E163 963A E6F0 5D4A" /* ­£.pîÙä(ác–:æð]J */ - $"F42A D11F B46D 7FBC 2D87 4274 4756 896E" /* ô*Ñ.´m.¼-‡BtGV‰n */ - $"C489 80C0 62F6 88A8 184A 79BE 3068 A9AF" /* ĉ€Àböˆ¨.Jy¾0h©¯ */ - $"D703 390B 1A76 3136 B799 726A AAA8 C23D" /* ×.9..v16·™rjª¨Â= */ - $"EEB0 E0F1 49E1 A6B7 204F 7BF3 6E44 F25E" /* î°àñIᦷ O{ónDò^ */ - $"7E0A 5125 CA89 B477 15CD 83CC CD21 C6BE" /* ~ÂQ%ʉ´w.̓ÌÍ!ƾ */ - $"F20B 99F3 C30C 5113 2E0A FF7E 1034 1BFF" /* ò.™óÃ.Q..Âÿ~.4.ÿ */ - $"0378 72CF B0EE D132 2A2D 14A9 E37F 6B10" /* .xrϰîÑ2*-.©ã.k. */ - $"B5CE 0500 0000 0000 0000 0160 A7E3 A715" /* µÎ.........`§ã§. */ - $"0C13 DE44 025B 9720 0000 0000 0000 0001" /* ..ÞD.[— ........ */ - $"E0F5 5A21 77FB C1F6 EAF0 244A EE78 B6FA" /* àõZ!wûÁöêð$Jîx¶ú */ - $"1769 3D98 AA28 2EB6 9826 A16B D6B8 BA89" /* .i=˜ª(.¶˜&¡kÖ¸º‰ */ - $"26C6 25C9 9E66 FD9C 6D2D FCDA FCB9 6AB2" /* &Æ%Éžfýœm-üÚü¹j² */ - $"B42A 7008 5069 CB61 D530 B47A FCFF 7F95" /* ´*p.PiËaÕ0´züÿ.• */ - $"FA58 2D11 111A 53BF FB17 59E1 63E7 0FAD" /* úX-...S¿û.Yácç.­ */ - $"B016 A862 3107 8DF0 7112 DD6A B6E3 2477" /* °.¨b1.ðq.Ýj¶ã$w */ - $"3162 94F0 6826 75B0 D0B8 4C13 21C7 E4BC" /* 1b”ðh&u°Ð¸L.!Çä¼ */ - $"FB86 7A83 DF1C A4D9 C3B4 E3DE C334 1633" /* û†zƒß.¤ÙôãÞÃ4.3 */ - $"DC27 76B9 7ADF 50CA F95E C7C9 D5EB 402C" /* Ü'v¹zßPÊù^ÇÉÕë@, */ - $"276F A0B0 D88B CF4A 0FD2 380A E3E7 2BA5" /* 'o °Ø‹ÏJ.Ò8Âãç+¥ */ - $"DD24 A247 B631 75B1 6D3A 4C60 9BAB E4C5" /* Ý$¢G¶1u±m:L`›«äÅ */ - $"BBCB 2972 36B9 AC74 5FF5 B5DB 231B 95F3" /* »Ë)r6¹¬t_õµÛ#.•ó */ - $"7CFF 8E5F 86E9 1906 B3DF 75C7 0364 6192" /* |ÿŽ_†é..³ßuÇ.da’ */ - $"A000 0000 0000 0000 0000 003B B1A0 0000" /*  ..........;± .. */ - $"0000 0000 0000 0000 0000 0016 D51B CEEA" /* ............Õ.Îê */ - $"0406 C003 4E50 C0B8 8DB2 F37C FF8E 5F86" /* ..À.NPÀ¸²ó|ÿŽ_† */ - $"E919 06B3 DF75 C703 6461 92A0 0000 0000" /* é..³ßuÇ.da’ .... */ - $"0000 0000 0000 3BB1 A000 0000 0000 0000" /* ......;± ....... */ - $"0000 0000 0000 16D5 1BCE EA04 06C0 034E" /* .......Õ.Îê..À.N */ - $"50C0 B88D B2F4 4BED 0C57 2F64 38E7 DFE6" /* PÀ¸²ôKí.W/d8çßæ */ - $"95DB 93EF B9ED 1250 6A6A A6E3 4478 1E7E" /* •Û“ï¹í.Pjj¦ãDx.~ */ - $"F105 8E1B 961B 230C 9500 0000 0000 0C18" /* ñ.Ž.–.#.•....... */ - $"0EA3 5F13 6306 E1B5 4B22 3D26 79A1 06E4" /* .£_.c.áµK"=&y¡.ä */ - $"228F F320 0B74 8820 0000 0000 0000 0007" /* "ó .tˆ ........ */ - $"9F62 443B 9A51 EAB0 7C1A A374 E7F1 52F3" /* ŸbD;šQê°|.£tçñRó */ - $"3BB8 C1E0 5919 6C04 A2E2 1032 6917 1394" /* ;¸ÁàY.l.¢â.2i..” */ - $"CCBE 472A 0652 C144 6D1E 755C ECF9 9725" /* ̾G*.RÁDm.u\ìù—% */ - $"A84A 55AE 7A0E 6730 FCA7 B6E0 FF31 08C0" /* ¨JU®z.g0ü§¶àÿ1.À */ - $"3E76 4DDC 9E24 A60B C4A7 4CDD C221 1941" /* >vMÜž$¦.ħLÝÂ!.A */ - $"0810 2DE3 206F C551 4910 77AA 762A 1FF2" /* ..-ã oÅQI.wªv*.ò */ - $"D39A 0ADC 1089 90F8 D098 1E77 BDD1 AF74" /* ÓšÂÜ.‰øÐ˜.w½Ñ¯t */ - $"4DEF D00D 0B2C CA2F 9EDC 27C4 35F9 F924" /* MïÐ..,Ê/žÜ'Ä5ùù$ */ - $"67FF 74E5 A746 B627 6267 F6D0 9B94 22D4" /* gÿtå§F¶'bgöЛ”"Ô */ - $"5FFE DF67 A7A9 E3CA 02A5 44D1 E926 DCA4" /* _þßg§©ãÊ.¥DÑé&ܤ */ - $"7490 4AB8 E094 7037 FF7C 8CF7 2A9B B784" /* tJ¸à”p7ÿ|Œ÷*›·„ */ - $"794E 9026 D48F FF7F F013 AABF F874 63DA" /* yN&Ôÿ.ð.ª¿øtcÚ */ - $"0302 FBFA AA6A 31D5 E2DF 85F7 2ACD D98C" /* ..ûúªj1Õâß…÷*ÍÙŒ */ - $"175D 1243 F1C0 CEA2 344C B6FC ADCF C6AA" /* .].CñÀ΢4L¶ü­Ïƪ */ - $"5CAE FA82 783F 58DD 754D 5C63 A018 19F8" /* \®ú‚x?XÝuM\c ..ø */ - $"7EFE 8953 AE16 22B9 4ED7 43D2 8A0B FA52" /* ~þ‰S®."¹N×CÒŠ.úR */ - $"5703 08CA 555B E51E 307B 0565 E165 22F3" /* W..ÊU[å.0{.eáe"ó */ - $"7130 0CEC CA23 576D 8D58 BED1 FEB6 9A2F" /* q0.ìÊ#WmX¾Ñþ¶š/ */ - $"DCEA 3288 3EEC B12A D43C B191 2627 7723" /* Üê2ˆ>ì±*Ô<±‘&'w# */ - $"F40F 1B7A F1E3 9A7E 366D 7490 EE80 3570" /* ô..zñãš~6mtî€5p */ - $"CB59 D05D F384 AA96 71FE 68E8 4D32 F9D2" /* ËYÐ]󄪖qþhèM2ùÒ */ - $"48BC 7B03 EA3B 879E 2E96 671F 8098 CE76" /* H¼{.ê;‡ž.–g.€˜Îv */ - $"87D8 0336 5C88 91F4 3C69 D76B 4DEF 29DA" /* ‡Ø.6\ˆ‘ô`H ‰{. */ - $"BCA8 E157 DFD5 E879 C14C 1B1A 3431 2856" /* ¼¨áWßÕèyÁL..41(V */ - $"0E74 D87F 7691 A923 632A 5EBC 6E95 6A46" /* .tØ.v‘©#c*^¼n•jF */ - $"8E68 7118 3704 6E41 37CB C9AC 7F84 1005" /* Žhq.7.nA7Ëɬ.„.. */ - $"C308 7C90 C6E0 B56C 8CF8 3C33 A97E C46C" /* Ã.|ÆàµlŒø<3©~Äl */ - $"E373 91A9 4A3F 7331 481D 843F 0472 59DC" /* ãs‘©J?s1H.„?.rYÜ */ - $"0837 85BA 4867 C202 6BFC 7433 F093 530F" /* .7…ºHgÂ.küt3ð“S. */ - $"D721 8927 26CF AA6B B4E1 7981 FCE4 9F4E" /* ×!‰'&Ϫk´áyüäŸN */ - $"1105 9E7B 7F68 1CE7 D811 E270 FCA3 9CDE" /* ..ž{.h.çØ.âpü£œÞ */ - $"BFE6 48BA AC07 B55E 4E7F 5946 115B B1DC" /* ¿æHº¬.µ^N.YF.[±Ü */ - $"F694 3A9B EADD 7971 E0F1 B6E1 C6FF 4337" /* ö”:›êÝyqàñ¶áÆÿC7 */ - $"F543 A074 FC74 AD1F 45BF 7867 C472 7605" /* õC tüt­.E¿xgÄrv. */ - $"1786 E496 2D22 22BE 5760 9ACE A5C9 22B9" /* .†ä–-""¾W`šÎ¥É"¹ */ - $"9A14 4136 93E4 3E4A 715C 6F69 8447 5764" /* š.A6“ä>Jq\oi„GWd */ - $"D761 77A8 2C3F E200 ACAD 8331 11D0 ABE6" /* ×aw¨,?â.¬­ƒ1.Ыæ */ - $"EA7B 5A22 58CF 097E 732F 894B E99C 6BAF" /* ê{Z"XÏÆ~s/‰Kéœk¯ */ - $"B36C 68AA 5668 EF92 66E9 DDF9 FF78 DB89" /* ³lhªVhï’féÝùÿxÛ‰ */ - $"FC78 2032 99D9 62F0 1380 3FE8 41DF F341" /* üx 2™Ùbð.€?èAßóA */ - $"F1FD 7F08 CE2E F09A 9335 6735 0FAD 8093" /* ñý..Î.ðš“5g5.­€“ */ - $"B6B1 53A2 964F EA7E 72A2 9A29 794D 98F0" /* ¶±S¢–Oê~r¢š)yM˜ð */ - $"DD57 AE65 C61E DDEC BDB4 35C2 D050 E063" /* ÝW®eÆ.Ýì½´5ÂÐPàc */ - $"5F54 BCA5 928D 786D CAE3 8F96 BFEB 027E" /* _T¼¥’xmÊã–¿ë.~ */ - $"6BBC 8795 7C88 1A2C 9908 36A1 6CAB 9268" /* k¼‡•|ˆ.,™.6¡l«’h */ - $"EB0D 816F F34D 55F5 B562 BCFF 4190 EE42" /* ë.oóMUõµb¼ÿAîB */ - $"F195 E7F3 E220 7E51 74A2 FA23 23F7 20F0" /* ñ•çóâ ~Qt¢ú##÷ ð */ - $"985F 011C 34B8 C988 C519 C623 81BC D026" /* ˜_..4¸ÉˆÅ.Æ#¼Ð& */ - $"A8C5 B82C 7A7F 86F7 E60E 44F2 CD53 6FAB" /* ¨Å¸,z.†÷æ.DòÍSo« */ - $"2D69 1FD4 75B7 A011 80E7 09B3 B9CF 4503" /* -i.Ôu· .€çƳ¹ÏE. */ - $"F4A5 1DE3 AE8A 96F7 E245 0DF9 3859 24FA" /* ô¥.㮊–÷âE.ù8Y$ú */ - $"7B43 665F B15E D4D3 FB2A 666E FB6A 6CA8" /* {Cf_±^ÔÓû*fnûjl¨ */ - $"9CAF C052 D658 6DC3 BDD1 C752 21FA 6426" /* œ¯ÀRÖXmýÑÇR!úd& */ - $"857C D05D 41C2 0241 306C 6FD4 81E3 69F7" /* …|Ð]AÂ.A0loÔãi÷ */ - $"A6F5 227F 39F9 780E 829A 17A9 C649 2BF5" /* ¦õ".9ùx.‚š.©ÆI+õ */ - $"01DD E500 A973 E599 890C A548 CE34 2877" /* .Ýå.©s噉.¥HÎ4(w */ - $"D160 A2EE 4B3B CC7A 0C87 6723 51FD C222" /* Ñ`¢îK;Ìz.‡g#QýÂ" */ - $"9BFB E72D 2769 6250 2054 22C9 ABB2 3125" /* ›ûç-'ibP T"É«²1% */ - $"7DA0 73A3 C083 1AAD 90F2 F0A8 C22D 9DF5" /* } s£Àƒ.­òð¨Â-õ */ - $"3FFB 6B56 18BE 61A6 B198 F1BC 1E4E 0CFE" /* ?ûkV.¾a¦±˜ñ¼.N.þ */ - $"B323 8275 A644 CAC4 D36B 9AF9 FCC8 5DEC" /* ³#‚u¦DÊÄÓkšùüÈ]ì */ - $"292B CC9B A0B6 9148 09DF E46D 1B2C 4EDF" /* )+Ì› ¶‘HÆßäm.,Nß */ - $"EDB9 2DB4 BAD5 C50B 2115 C476 E09A F407" /* í¹-´ºÕÅ.!.Ävàšô. */ - $"5EE8 2E9F 870F A319 32D4 EBEC CB7B FDE9" /* ^è.Ÿ‡.£.2ÔëìË{ýé */ - $"FB5C 0D41 61F3 BA97 0F9E 558F 6E39 C213" /* û\.Aaóº—.žUn9Â. */ - $"3101 A5E8 ECEC 15E5 4F29 F69A 58CD D82D" /* 1.¥èìì.åO)öšXÍØ- */ - $"986E E8E0 6898 17CC 98C4 C851 AC75 9306" /* ˜nèàh˜.̘ÄÈQ¬u“. */ - $"5241 0350 E2EB 38CA 1682 6132 FF45 578A" /* RA.Pâë8Ê.‚a2ÿEWŠ */ - $"FA7F 7557 AC2C 9A18 3835 A62B 7D09 0992" /* ú.uW¬,š.85¦+}ÆÆ’ */ - $"EF78 BD49 5317 373A B07D 6420 DC30 5067" /* ïx½IS.7:°}d Ü0Pg */ - $"A659 F316 4436 8E8E 9786 1163 A6A5 B841" /* ¦Yó.D6ŽŽ—†.c¦¥¸A */ - $"99AA 4E1C 6163 309A 3C23 0208 FF4B 2967" /* ™ªN.ac0š<#..ÿK)g */ - $"B7F7 37E4 A337 D0DC C48A A742 FB2D C529" /* ·÷7ä£7ÐÜÄŠ§Bû-Å) */ - $"BC6C 5BBE BC5C 03B1 F87F D7EA F5AC B94B" /* ¼l[¾¼\.±ø.×êõ¬¹K */ - $"5A88 84AB E44E BE6A F337 96B0 7CB6 1140" /* Zˆ„«äN¾jó7–°|¶.@ */ - $"25CB 45D6 BE02 A9D4 7868 1EDD F660 7963" /* %ËEÖ¾.©Ôxh.Ýö`yc */ - $"B438 C030 3EA5 51FA F451 FA84 A6FF 2E5A" /* ´8À0>¥QúôQú„¦ÿ.Z */ - $"EA95 2300 C0F4 39AA 42BA 4120 4EEC AFDD" /* ê•#.Àô9ªBºA Nì¯Ý */ - $"20B4 6C42 0552 1177 6F1A AC6D FE8B 98E1" /* ´lB.R.wo.¬mþ‹˜á */ - $"D3FB F52E BCE3 5BB1 7235 F597 3E0D 8C46" /* Óûõ.¼ã[±r5õ—>.ŒF */ - $"7361 1E2A C081 CA97 C8EA CD3F E91D 823F" /* sa.*ÀÊ—ÈêÍ?é.‚? */ - $"73A7 5EA1 F641 9CBD 219D D7E4 EE0D 270E" /* s§^¡öAœ½!×äî.'. */ - $"14DF F756 B4E5 062C 8251 4AD0 B090 A0AF" /* .ß÷V´å.,‚QJа ¯ */ - $"CD2A 3C80 6068 C9CD C3D7 3D7F 258B 365A" /* Í*<€`hÉÍÃ×=.%‹6Z */ - $"5E1A 90DC D058 4ED9 DF50 6F40 07A9 2BDE" /* ^.ÜÐXNÙßPo@.©+Þ */ - $"8486 5404 AB9C E323 0C4E D3DB 8352 0C0F" /* „†T.«œã#.NÓÛƒR.. */ - $"CD59 A5F5 56CC 0BB2 B603 85C3 C709 7D6E" /* ÍY¥õVÌ.²¶.…ÃÇÆ}n */ - $"A10E 33C2 AE0F D52F 5AD7 2279 E6EB 7E6C" /* ¡.3®.Õ/Z×"yæë~l */ - $"1757 589D C6DC B4FD 470C FFD9" /* .WXÆÜ´ýG.ÿÙ */ -}; - diff --git a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store b/indra/newview/installers/darwin/firstlook-dmg/_DS_Store deleted file mode 100644 index 495ec37f53..0000000000 Binary files a/indra/newview/installers/darwin/firstlook-dmg/_DS_Store and /dev/null differ diff --git a/indra/newview/installers/darwin/firstlook-dmg/_VolumeIcon.icns b/indra/newview/installers/darwin/firstlook-dmg/_VolumeIcon.icns deleted file mode 100644 index da5307e389..0000000000 Binary files a/indra/newview/installers/darwin/firstlook-dmg/_VolumeIcon.icns and /dev/null differ diff --git a/indra/newview/installers/darwin/firstlook-dmg/background.jpg b/indra/newview/installers/darwin/firstlook-dmg/background.jpg deleted file mode 100644 index 55294dcc9a..0000000000 Binary files a/indra/newview/installers/darwin/firstlook-dmg/background.jpg and /dev/null differ diff --git a/indra/newview/installers/darwin/publicnightly-dmg/Applications-alias.r b/indra/newview/installers/darwin/publicnightly-dmg/Applications-alias.r deleted file mode 100644 index aa3cfb87d8..0000000000 --- a/indra/newview/installers/darwin/publicnightly-dmg/Applications-alias.r +++ /dev/null @@ -1,6996 +0,0 @@ -data 'alis' (0) { - $"0000 0000 0112 0002 0001 036D 6277 0000" /* ...........mbw.. */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 C135 A717 482B 0000 0000" /* ......Á5§.H+.... */ - $"0002 0C41 7070 6C69 6361 7469 6F6E 7300" /* ...Applications. */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 00E2 4F18 C2E8 9FB0 0000 0000 0000" /* ...âO.Â蟰...... */ - $"0000 FFFF FFFF 0000 0920 0000 0000 0000" /* ..ÿÿÿÿ..Æ ...... */ - $"0000 0000 0000 0000 0003 6D62 7700 0010" /* ..........mbw... */ - $"0008 0000 C136 0987 0000 0011 0008 0000" /* ....Á6Ƈ........ */ - $"C2E9 0220 0000 0001 0000 0002 0010 6D62" /* Âé. ..........mb */ - $"773A 4170 706C 6963 6174 696F 6E73 000E" /* w:Applications.. */ - $"001A 000C 0041 0070 0070 006C 0069 0063" /* .....A.p.p.l.i.c */ - $"0061 0074 0069 006F 006E 0073 000F 0008" /* .a.t.i.o.n.s.... */ - $"0003 006D 0062 0077 0012 000C 4170 706C" /* ...m.b.w....Appl */ - $"6963 6174 696F 6E73 0013 0001 2F00 FFFF" /* ications..../.ÿÿ */ - $"0000" /* .. */ -}; - - -data 'icns' (-16455) { - $"6963 6E73 0001 B3AC 6973 3332 0000 0224" /* icns..³¬is32...$ */ - $"9F00 005F 8061 005D 8700 055D 9AA2 A0A4" /* Ÿ.._€a.]‡..]𢠤 */ - $"8986 0008 557D B3B2 B1B3 A881 8081 8104" /* ‰†..U}³²±³¨€. */ - $"826F 577E AF82 A801 B3AE 82AD 03AF 7B7A" /* ‚oW~¯‚¨.³®‚­.¯{z */ - $"A781 A203 9EB7 C89D 81A2 03A6 776E 9A80" /* §¢.ž·È¢.¦wnš€ */ - $"9705 959F D3DC A295 8097 5899 6C67 8F8D" /* —.•ŸÓÜ¢•€—X™lg */ - $"8E89 85C9 BCA9 C883 898D 8D8E 6561 8585" /* މ…ɼ©Èƒ‰Žea…… */ - $"83A8 B7F3 BAB4 DFB6 AA84 8585 605E 7B7D" /* ƒ¨·óº´ß¶ª„……`^{} */ - $"79D0 F9E0 F0F2 DAE1 D87C 7D7B 5D5B 7476" /* yÐùàðòÚáØ|}{][tv */ - $"7099 D876 7373 76CA 8A72 7673 5B5A 6D70" /* p™ØvssvÊŠrvs[Zmp */ - $"6B9B 816C 6F6F 67B3 C567 706C 5A59 686B" /* k›loog³ÅgplZYhk */ - $"6B67 686B 806A 056B 6F6A 6B67 5A88 5900" /* kghk€j.kojkgZˆY. */ - $"5882 598A 5801 0059 9F00 0482 8383 8480" /* X‚YŠX..YŸ..‚ƒƒ„€ */ - $"8700 057F B7BE BDC0 A786 0008 799E D0CE" /* ‡...·¾½À§†..yžÐÎ */ - $"CECF C5A1 A081 A105 A390 7AA0 D0CA 80C9" /* ÎÏÅ¡ ¡.£z ÐÊ€É */ - $"01CA D183 CE03 D09C 9ECD 81C9 03C7 D4DE" /* .ÊуÎ.МžÍÉ.ÇÔÞ */ - $"C681 C903 CD9A 94C5 80C2 05C1 C6E3 E9C8" /* ÆÉ.Íš”Å€Â.ÁÆãéÈ */ - $"C180 C20D C491 8DBD BBBC B9B6 DDD7 CCDD" /* Á€Â.Ä‘½»¼¹¶Ý×ÌÝ */ - $"B5B9 80BC 468B 87B4 B4B3 C8D1 F7D3 CFEA" /* µ¹€¼F‹‡´´³ÈÑ÷ÓÏê */ - $"D0C9 B4B4 B385 83AA ABA9 E0FB EAF5 F6E5" /* ÐÉ´´³…ƒª«©àûêõöå */ - $"EAE5 AAAB A981 80A0 A39E BAE4 A2A0 A1A2" /* ê媫©€ £žºä¢ ¡¢ */ - $"DAAF 9FA3 9F7F 7E97 9B97 B8A6 979A 9A94" /* Ú¯Ÿ£Ÿ.~—›—¸¦—šš” */ - $"CAD6 949B 977D 7D90 9493 9091 8293 0496" /* ÊÖ”›—}}”“‘‚“.– */ - $"9294 907D 8E7C 8A7B 0100 7C9F 0000 7A80" /* ’”}Ž|Š{..|Ÿ..z€ */ - $"7C00 7887 0005 77B1 B8B7 BBA0 8600 0871" /* |.x‡..w±¸·» †..q */ - $"97CB C9C8 CAC0 9B99 819A 049C 8972 99CA" /* —ËÉÈÊÀ›™š.œ‰r™Ê */ - $"82C3 00CB 83C8 03CA 9596 C681 C203 BFCF" /* ‚Ã.˃È.Ê•–ÆÂ.¿Ï */ - $"DABF 81C2 03C6 938C BD80 BA05 B9BF E0E7" /* Ú¿Â.Æ“Œ½€º.¹¿àç */ - $"C1B9 80BA 57BC 8985 B5B3 B3B0 ADD9 D2C6" /* Á¹€ºW¼‰…µ³³°­ÙÒÆ */ - $"D9AC B0B3 B3B4 827F ACAB AAC2 CCF6 CECA" /* Ù¬°³³´‚.¬«ªÂÌöÎÊ */ - $"E8CB C3AB ACAA 7D7B A1A3 A0DD FAE9 F4F5" /* èË묪}{¡£ Ýúéôõ */ - $"E3E8 E3A2 A3A0 7A78 989B 96B3 E29A 9898" /* ãè㢣 zx˜›–³âš˜˜ */ - $"9AD7 A897 9B97 7776 8F93 8FB2 9F8F 9292" /* š×¨—›—wv“²Ÿ’’ */ - $"8BC5 D28C 938F 7575 888C 8B89 8982 8B04" /* ‹ÅÒŒ“uuˆŒ‹‰‰‚‹. */ - $"8F8A 8C88 758E 748A 7301 0074 7338 6D6B" /* ŠŒˆuŽtŠs..ts8mk */ - $"0000 0108 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 1E24 2424 1600 0000 0000" /* .......$$$...... */ - $"0000 0000 0011 BDC8 C8C8 9600 0000 0000" /* ......½ÈÈÈ–..... */ - $"0000 0000 048C FFFF FFFF F5A7 9C9E 9E9E" /* .....Œÿÿÿÿõ§œžžž */ - $"9E9E 6003 8AFF FCFC FCFC FEFF FFFF FFFF" /* žž`.Šÿüüüüþÿÿÿÿÿ */ - $"FFFF FF7A 89FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿz‰ÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF7A 73FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿzsÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF64 62FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿdbÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF53 53FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿSSÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF45 48FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿEHÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF3C 41FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿdçYJ¢ý */ - $"5CF9 2D3F 6F47 4854 7085 62C1 C65D C07C" /* \ù-?oGHTp…bÁÆ]À| */ - $"86A0 3E43 500F 90D0 4787 8CE8 726C 5109" /* † >CP.ÐG‡ŒèrlQÆ */ - $"FD68 8099 E8FE 2A66 2F02 78F5 C78B 6A34" /* ýh€™èþ*f/.xõÇ‹j4 */ - $"0A9E 25FE 0DE3 E3C8 BD7B 3530 98D5 CF03" /* ž%þ.ããȽ{50˜ÕÏ. */ - $"CE64 A57D 620C 87C5 65B4 7BE1 34BC 3058" /* Îd¥}b.‡Åe´{á4¼0X */ - $"572A 9EBF 5E0C 5A01 80A3 B334 DF5A E1B8" /* W*ž¿^.Z.€£³4ßZḠ*/ - $"08C3 5C30 2CC4 C1F5 1341 F516 40FA 8A00" /* .Ã\0,ÄÁõ.Aõ.@úŠ. */ - $"477D B516 AD2F 4DD3 BE8C 58F0 7C77 A236" /* G}µ.­/MÓ¾ŒXð|w¢6 */ - $"DD43 6611 D582 F050 DC31 59D0 194D A6FD" /* ÝCf.Õ‚ðPÜ1YÐ.M¦ý */ - $"652E FA16 4BA7 25FE 0DE3 E3D9 B950 06E2" /* e.ú.K§%þ.ããÙ¹P.â */ - $"3A8A DA86 827A 4C68 5798 55FC FD46 A583" /* :ŠÚ†‚zLhW˜UüýF¥ƒ */ - $"064D 8FB0 29D9 8DAD 53CC 5229 B675 ACAB" /* .M°)Ù­SÌR)¶u¬« */ - $"8EED 34BC 2F12 142E 446C 0DF7 0BC3 D6E7" /* Ží4¼/...Dl.÷.ÃÖç */ - $"A086 8D72 6AE7 9270 B97C D981 C7F1 C38A" /*  †rjç’p¹|ÙÇñÊ */ - $"47EE E585 FC19 FCE3 668C C7E0 471F 813C" /* Gîå…ü.üãfŒÇàG.< */ - $"3F02 0005 B422 0345 FC66 9A91 446D DDCA" /* ?...´".Eüfš‘DmÝÊ */ - $"449B CCDB 8E8F A0B8 3942 A8FC 6409 F7F3" /* D›ÌÛŽ ¸9B¨üdÆ÷ó */ - $"ED01 353A 2B01 1B0C 2939 619B 9890 94E7" /* í.5:+...)9a›˜”ç */ - $"5FDA 75F2 7323 BF3A 7AED 757E 42D6 C336" /* _Úuòs#¿:zíu~BÖÃ6 */ - $"E74E 6B5F 2D43 4780 CA1C C462 6507 4801" /* çNk_-CG€Ê.Äbe.H. */ - $"EDEF 5B2A 7297 8FC6 1E13 E7FA 56B5 4279" /* íï[*r—Æ..çúVµBy */ - $"5BB4 B307 F4DE E273 4FC3 E9B1 72C3 EDA2" /* [´³.ôÞâsOÃé±rÃí¢ */ - $"A3F0 A9E0 FB5D C018 B35C 8B45 CD63 99FE" /* £ð©àû]À.³\‹EÍc™þ */ - $"11FB 8993 21D1 BA8B 69EB 5CB9 F258 468F" /* .û‰“!Ѻ‹ië\¹òXF */ - $"73D4 6804 C6E6 045E AE54 954C D0E5 D836" /* sÔh.Ææ.^®T•LÐåØ6 */ - $"EA0D DB9A 2806 36FA B3E9 5973 789D 6591" /* ê.Ûš(.6ú³éYsxe‘ */ - $"1EC2 F271 E9E2 5681 C542 A2FC F4EF 8111" /* .ÂòqéâVÅB¢üôï. */ - $"59D5 FC91 9749 52A3 EA37 B239 4939 8625" /* YÕü‘—IR£ê7²9I9†% */ - $"F248 18D2 075A 80A1 8005 9ED2 437F C705" /* òH.Ò.Z€¡€.žÒC.Ç. */ - $"2BFD 308C F1F0 E1BC 8FDA F5D5 50D9 9770" /* +ý0Œñðá¼ÚõÕPÙ—p */ - $"7EF5 213F 91F6 5B8B 189D EE67 70EF F40A" /* ~õ!?‘ö[‹.îgpïô */ - $"2E24 C54B F37D 4941 FCD2 7779 5C8B 59CC" /* .$ÅKó}IAüÒwy\‹YÌ */ - $"F284 3377 A496 0399 6F17 47AC B5EA 3A84" /* ò„3w¤–.™o.G¬µê:„ */ - $"844E DC13 D058 BE9F 1BBE 8CE0 E615 D2E1" /* „NÜ.ÐX¾Ÿ.¾Œàæ.Òá */ - $"88A5 9DA6 9FB4 4EDE B804 ED14 A7EA 54E0" /* ˆ¥¦Ÿ´NÞ¸.í.§êTà */ - $"5A87 311B 5E69 70F5 EDA3 2E78 8862 7603" /* Z‡1.^ipõí£.xˆbv. */ - $"7761 094D 4A69 5AB0 A9BB 3F4F 92BE 205B" /* waÆMJiZ°©»?O’¾ [ */ - $"A226 24D5 C8B2 CCF7 E064 31C7 E727 6E2C" /* ¢&$ÕȲÌ÷àd1Çç'n, */ - $"D6A1 347F 41CD 5F70 E1C0 1AFC 4FBC 81A9" /* Ö¡4.AÍ_páÀ.üO¼© */ - $"A884 F03A CD84 B581 1F03 A523 838B 8038" /* ¨„ð:Í„µ..¥#ƒ‹€8 */ - $"02F4 6DE8 98FC EDD6 B331 21F7 4AC5 A31E" /* .ômè˜üíÖ³1!÷JÅ£. */ - $"9EB4 E770 D465 386E 18A6 D1BE EF6D B008" /* ž´çpÔe8n.¦Ñ¾ïm°. */ - $"63E6 1066 1374 4D10 3270 8C7F F297 F91D" /* cæ.f.tM.2pŒ.ò—ù. */ - $"DA61 677B 29FD A878 B122 E33C 17E3 8ED1" /* Úag{)ý¨x±"ã<.ãŽÑ */ - $"FB8E 4407 8B82 32AD 1B50 09DF BDA8 C80E" /* ûŽD.‹‚2­.PÆß½¨È. */ - $"7E28 ED9D A005 4297 B9C1 8D66 CA77 C41D" /* ~(í .B—¹ÁfÊwÄ. */ - $"41C5 E3B3 F94D 96E5 1308 7C59 1EB8 0871" /* AÅã³ùM–å..|Y.¸.q */ - $"C7A4 FED7 47F2 F800 6889 A21D 1FF4 9E93" /* Ǥþ×Gòø.h‰¢..ôž“ */ - $"1321 7377 D96E 86F5 A0CB EB17 C77A 81C0" /* .!swÙn†õ Ëë.ÇzÀ */ - $"7C8D A01F 0E91 00F9 1D00 94FD 4D32 E5DB" /* | ..‘.ù..”ýM2åÛ */ - $"0482 DEB8 CF1C 792A EA3B DECA 4470 4898" /* .‚Þ¸Ï.y*ê;ÞÊDpH˜ */ - $"81C0 5457 FE66 63DD CAF3 0B98 08E1 DC3F" /* ÀTWþfcÝÊó.˜.áÜ? */ - $"CF68 7F31 9BEE 73EF A3A5 8D57 8969 EEC3" /* Ïh.1›îsW‰iîà */ - $"0F13 3ED9 390D FC4C B37F C4F7 01E4 B115" /* ..>Ù9.üL³.Ä÷.ä±. */ - $"E9F9 9526 00FA 10D0 0D64 4CC5 8481 D231" /* éù•&.ú.Ð.dLÅ„Ò1 */ - $"DE6D 483E 8046 7F58 5BD3 1FFC CF82 297A" /* ÞmH>€F.X[Ó.üÏ‚)z */ - $"88A1 7E78 0668 3222 9E8B A287 30A3 DB10" /* ˆ¡~x.h2"ž‹¢‡0£Û. */ - $"A77F A842 87FC 164E 92B8 96DF 4920 EEC2" /* §.¨B‡ü.N’¸–ßI î */ - $"47B6 83F1 F68F 9309 63CE FAAC 3C8F 9FCF" /* G¶ƒñö“ÆcÎú¬<ŸÏ */ - $"A166 9621 ADC0 0ABB 7F1A 7E3C A4AD 3755" /* ¡f–!­À»..~<¤­7U */ - $"E2D8 E26D CAD1 6F24 F808 BC0D E94B EEBC" /* âØâmÊÑo$ø.¼.éKî¼ */ - $"D601 C1F5 30C1 F53B C0FA 97C0 90E6 901B" /* Ö.Áõ0Áõ;Àú—Àæ. */ - $"71C2 1EAB 8A4C 52A4 4431 058C DFB9 4148" /* qÂ.«ŠLR¤D1.Œß¹AH */ - $"185C 1E93 01C6 82D3 C81B 6398 8173 189D" /* .\.“.Æ‚ÓÈ.c˜s. */ - $"F73C 4887 5155 0C95 0088 4C69 0A27 3F39" /* ÷«×j */ - $"A227 4F09 072C 4682 9B0F 995C 7551 94E7" /* ¢'OÆ.,F‚›.™\uQ”ç */ - $"419A 0098 0283 19E8 0489 687B 4F66 B74C" /* Aš.˜.ƒ.è.‰h{Of·L */ - $"7F59 C07A A552 B04D 628F E401 E55C A4ED" /* .YÀz¥R°Mbä.å\¤í */ - $"390F C34D 81BB 9F88 0C50 F50F 9FBD A377" /* 9.ÃM»Ÿˆ.Põ.Ÿ½£w */ - $"F538 3F9C E243 FF47 D346 87F2 444B C479" /* õ8?œâCÿGÓF‡òDKÄy */ - $"F6B3 1C76 5125 F487 0FAF 294A DA20 EC56" /* ö³.vQ%ô‡.¯)JÚ ìV */ - $"07AB DE07 14C2 1721 F3E0 D687 1F67 039D" /* .«Þ..Â.!óàÖ‡.g. */ - $"461F 0D82 9CAA B2D4 DFC6 6AA5 D31E 4D01" /* F..‚œª²Ô߯j¥Ó.M. */ - $"5AC2 B2BD FD97 7D6E 00D1 7ADF 377C 15A7" /* Z²½ý—}n.Ñzß7|.§ */ - $"9681 C7B2 8168 D706 425B 35EF 7298 C053" /* –Dzh×.B[5ïr˜ÀS */ - $"E198 B5E2 B835 712B 1AD8 BA77 CF86 83A3" /* ᘵâ¸5q+.غwφƒ£ */ - $"B0B9 C5E6 F37A A3DE D93B 8EC8 132F A52A" /* °¹Åæóz£ÞÙ;ŽÈ./¥* */ - $"AB20 E166 F719 7130 6482 5BE2 605B D78E" /* « áf÷.q0d‚[â`[׎ */ - $"672D 7AE6 3906 DA75 0E3D 1962 8A60 9294" /* g-zæ9.Úu.=.bŠ`’” */ - $"1FC8 C0F3 216D 815D 4DDE 5DDE D8AB 3F9C" /* .ÈÀó!m]MÞ]ÞØ«?œ */ - $"7F9F 24B3 7BBF CCB9 2F80 19B6 70AE 1B3D" /* .Ÿ$³{¿Ì¹/€.¶p®.= */ - $"C71A 1F7C 81D2 639F 0D03 24EA D4B1 D351" /* Ç..|ÒcŸ..$êÔ±ÓQ */ - $"DD10 FBD5 EA3F 4957 A7ED 04C6 384D C10F" /* Ý.ûÕê?IW§í.Æ8MÁ. */ - $"8A55 0C03 694F 0D18 70D8 0AC3 33C0 17D1" /* ŠU..iO..pØÂÃ3À.Ñ */ - $"73BB E85F 5204 090F FDFE 8AC5 9AD6 22D5" /* s»è_R.Æ.ýþŠÅšÖ"Õ */ - $"CA31 A6DE EF44 D910 B34A 0E59 7866 536F" /* Ê1¦ÞïDÙ.³J.YxfSo */ - $"9B0B A341 3AB8 C06C C64F 3F86 8160 DFB9" /* ›.£A:¸ÀlÆO?†`ß¹ */ - $"A709 59D8 88C3 3316 9FFA F83F 5120 E40E" /* §ÆY؈Ã3.Ÿúø?Q ä. */ - $"4DEA C88F C418 37F6 4C0B 7606 9632 EEC5" /* MêÈÄ.7öL.v.–2îÅ */ - $"6380 FB25 A69F AAE2 0888 B722 008F 35CB" /* c€û%¦Ÿªâ.ˆ·".5Ë */ - $"F6A7 90BF D0DB 6367 A14B 5A86 EE98 FD18" /* ö§¿ÐÛcg¡KZ†î˜ý. */ - $"A629 1BAB 3BE2 920D E99D BEC2 88B4 F909" /* ¦).«;â’.é¾Âˆ´ùÆ */ - $"66B1 535D 3940 AF78 8200 0C46 142A EA2A" /* f±S]9@¯x‚..F.*ê* */ - $"A991 95E8 FD2B D30B 0E4A 76E2 A97B FAA7" /* ©‘•èý+Ó..Jvâ©{ú§ */ - $"97E2 9B30 54FA 5E97 962A 7E83 5711 A707" /* —â›0Tú^—–*~ƒW.§. */ - $"2A21 3729 2046 9C41 8282 A161 E5F6 AB24" /* *!7) FœA‚‚¡aåö«$ */ - $"3324 74CF 1AF6 C935 D884 0008 DC18 663C" /* 3$tÏ.öÉ5Ø„..Ü.f< */ - $"3A00 25E4 92D7 8F23 4C07 3C63 DB6E 4924" /* :.%ä’×#L.X>q.㣷«* */ - $"A998 FE5A 74DB 537A CE3D CD46 49B6 DB6D" /* ©˜þZtÛSzÎ=ÍFI¶Ûm */ - $"B6DB 6DB2 8EE9 1D6F 6480 8613 D8D2 7D8F" /* ¶Ûm²Žé.od€†.ØÒ} */ - $"5615 3EAB B25B 722D ECB8 ED12 70F2 BA06" /* V.>«²[r-ì¸í.pòº. */ - $"E5A2 45C1 547C F861 A7D5 8E1C 08BC 346B" /* å¢EÁT|øa§ÕŽ..¼4k */ - $"2730 C670 2FD8 F159 6ABE 2092 ED98 AC34" /* '0Æp/ØñYj¾ ’혬4 */ - $"B4CA 8565 90CF 0034 6E68 F777 9672 F29D" /* ´Ê…eÏ.4nh÷w–rò */ - $"4621 6E73 9C90 5C3D A8DB F5B0 CACF A63E" /* F!nsœ\=¨Ûõ°ÊϦ> */ - $"861E 8B9E F490 8E15 69BC A01D EF59 E898" /* †.‹žôŽ.i¼ .ïYè˜ */ - $"7040 B817 5AA9 BFB1 09A0 FE74 D2F7 BEA8" /* p@¸.Z©¿±Æ þtÒ÷¾¨ */ - $"A4F3 FEAC 38A4 409E B504 9CC9 EAA3 533B" /* ¤óþ¬8¤@žµ.œÉê£S; */ - $"153D F710 FC9E 2055 A395 C374 2AF9 E7C5" /* .=÷.üž U£•Ãt*ùçÅ */ - $"E1E8 7F74 3CDB D568 B606 A9D5 B7AE E207" /* áè.t<ÛÕh¶.©Õ·®â. */ - $"947E 2E65 1C27 336D 927A 4F86 5422 0E04" /* ”~.e.'3m’zO†T".. */ - $"42C7 668A 9403 EAB7 21A3 C9F1 18BC 5380" /* BÇfŠ”.ê·!£Éñ.¼S€ */ - $"BED7 07B5 F9B1 B798 8727 D54A 7A6E E493" /* ¾×.µù±·˜‡'ÕJznä“ */ - $"5271 F27D 7C35 DCEE D0BC CB31 C1FB 879F" /* Rqò}|5ÜîмË1Áû‡Ÿ */ - $"E074 9EB9 D7BE C9ED D2C8 BD00 C7FC D05B" /* àtž¹×¾ÉíÒȽ.ÇüÐ[ */ - $"2B2C 9647 A924 9F22 A06D 62B4 A946 77B7" /* +,–G©$Ÿ" mb´©Fw· */ - $"AD6D 60EE C841 997D A7E8 7AD2 AFA8 EEC4" /* ­m`îÈA™}§èzÒ¯¨îÄ */ - $"D61F FC06 FD7A E761 AA33 0F74 A08F 8E5B" /* Ö.ü.ýzçaª3.t Ž[ */ - $"B7C0 7C9A 1201 F0F5 6403 E4D0 60D8 92D9" /* ·À|š..ðõd.äÐ`Ø’Ù */ - $"84ED 064F 1B29 D7A7 1D77 F4B3 61D6 2651" /* „í.O.)×§.wô³aÖ&Q */ - $"329E 2CA5 53B4 956D 1061 3A3A A73B FC8E" /* 2ž,¥S´•m.a::§;üŽ */ - $"DD3C 60C9 F855 32FB 3C04 6287 50F7 6BB3" /* Ý<`ÉøU2û<.b‡P÷k³ */ - $"B84A 05A6 3145 A832 3BBC CA56 115B 9D7F" /* ¸J.¦1E¨2;¼ÊV.[. */ - $"8ADB 5660 429D 1FF6 4E6D 4899 EFDA 592F" /* ŠÛV`B.öNmH™ïÚY/ */ - $"19DC 9790 802A 1C17 2250 ADEC 0312 2C23" /* .Ü—€*.."P­ì..,# */ - $"223B 1EC8 482C 6E26 DD67 528F 7CDC 1841" /* ";.ÈH,n&ÝgR|Ü.A */ - $"DBCB CF9E 6D26 B564 4FD4 0AB5 DA0B ADE2" /* ÛËÏžm&µdOÔµÚ.­â */ - $"C129 D895 00FF 105B 0D0B F4DB 286A B347" /* Á)Ø•.ÿ.[..ôÛ(j³G */ - $"A261 30A9 0A9B 7A0D 585B 3991 3217 6FF7" /* ¢a0©Â›z.X[9‘2.o÷ */ - $"A368 D6A8 E862 161A 3584 613E 04D9 DBCB" /* £hÖ¨èb..5„a>.ÙÛË */ - $"4D96 66A3 B736 F802 D67A 309F 04E6 AFD8" /* M–f£·6ø.Öz0Ÿ.æ¯Ø */ - $"888E A8A5 4461 F1F0 1B6B 2DC4 0DFE C676" /* ˆŽ¨¥Dañð.k-Ä.þÆv */ - $"8D4E 3750 C3E6 C233 EFC5 368B 6113 5B53" /* N7PÃæÂ3ïÅ6‹a.[S */ - $"08E0 C259 1B88 AA0C 74B0 862E 1024 BB3F" /* .àÂY.ˆª.t°†..$»? */ - $"2816 B320 715C 5DFA 9FF0 CBC3 6A85 777A" /* (.³ q\]úŸðËÃj…wz */ - $"23CB F89B D813 6706 313E 2CF5 A163 0848" /* #Ëø›Ø.g.1>,õ¡c.H */ - $"94C9 3288 B556 53DD 2A45 2302 F28E 7ED1" /* ”É2ˆµVSÝ*E#.òŽ~Ñ */ - $"B5A0 67C8 53BB 4CE4 45D9 317F 92AB B13B" /* µ gÈS»LäEÙ1.’«±; */ - $"7246 F6DE 5348 49C9 42A1 CA62 64B0 209E" /* rFöÞSHIÉB¡Êbd° ž */ - $"43F2 DF7C 9BBC 097F C94A EA52 8D01 ADEF" /* Còß|›¼Æ.ÉJêR.­ï */ - $"5241 7C9B 2876 75F4 D748 AF9D 6FBB 3306" /* RA|›(vuô×H¯o»3. */ - $"0AD1 3953 6C99 5BB7 F1F5 1C1F BCE7 CA83" /* ÂÑ9Sl™[·ñõ..¼çʃ */ - $"08C1 6811 FBC5 AE18 343C C6F5 E515 F9CF" /* .Áh.ûÅ®.4<Æõå.ùÏ */ - $"FE48 C6E9 956E 6712 DDCA D62C 7F37 6DFE" /* þHÆé•ng.ÝÊÖ,.7mþ */ - $"2465 A8EE 1BAF E106 CA62 101F 0144 31DC" /* $e¨î.¯á.Êb...D1Ü */ - $"029E ED0F 9E47 F22E 0C17 0D31 E60B 1662" /* .ží.žGò....1æ..b */ - $"C1F5 5C90 7D5A 6D03 EAB6 C0C8 1653 E821" /* Áõ\}Zm.ê¶ÀÈ.Sè! */ - $"5860 ED0B C711 39E5 E5C8 268D 2246 E3FB" /* X`í.Ç.9ååÈ&"Fãû */ - $"68A4 3B12 A487 350D FE94 3722 65AC 949B" /* h¤;.¤‡5.þ”7"e¬”› */ - $"2526 7CD5 0E28 E093 CFE8 314C BE18 5B60" /* %&|Õ.(à“Ïè1L¾.[` */ - $"827E 154B 9609 2536 F890 A361 BA29 8211" /* ‚~.K–Æ%6ø£aº)‚. */ - $"AF42 BEC6 1BCB CE6D 2910 8083 C890 D7FF" /* ¯B¾Æ.ËÎm).€ƒÈ×ÿ */ - $"6F04 CEF4 F47C 0D92 00BD D90F 4095 0A48" /* o.Îôô|.’.½Ù.@•ÂH */ - $"4DC6 210C 351D 34A5 5FDA E576 1E1B 1684" /* MÆ!.5.4¥_Úåv...„ */ - $"F2A0 B30A 589C 1DBC 4831 E906 0D67 0CDD" /* ò ³ÂXœ.¼H1é..g.Ý */ - $"876B 994F 6D66 47DD AF40 7158 4385 738E" /* ‡k™OmfGݯ@qXC…sŽ */ - $"82F8 E637 9B5C 7389 0AA5 2A04 D105 5E88" /* ‚øæ7›\s‰Â¥*.Ñ.^ˆ */ - $"C2A2 2943 E125 6C2F 0AD1 1E5C AF1F CFF6" /* ¢)Cá%l/ÂÑ.\¯.Ïö */ - $"B39B C799 0F39 6151 6625 BB66 C3C3 418B" /* ³›Ç™.9aQf%»fÃÃA‹ */ - $"90A4 F6F7 BD30 7A04 88E6 0F8A 3F0B FF2C" /* ¤ö÷½0z.ˆæ.Š?.ÿ, */ - $"D18B 1D88 1442 EB54 A6FC D226 251A 015D" /* Ñ‹.ˆ.BëT¦üÒ&%..] */ - $"4DA8 32CA 371B 86EB 4E89 1415 9A41 6AD2" /* M¨2Ê7.†ëN‰..šAjÒ */ - $"1F0F 7656 41E5 B874 72E7 5F88 ABDA 28D7" /* ..vVAå¸trç_ˆ«Ú(× */ - $"37D5 EE40 567F F751 2591 01A3 03B9 EFCD" /* 7Õî@V.÷Q%‘.£.¹ïÍ */ - $"E0A8 8CC8 8C8E 0945 3036 453A 1787 59C4" /* à¨ŒÈŒŽÆE06E:.‡YÄ */ - $"B99C 02D2 D5F6 1B5E E34C 551E 8C43 9A20" /* ¹œ.ÒÕö.^ãLU.ŒCš */ - $"981D 0B44 C6D1 E6AA 2B92 5F33 8016 C4F1" /* ˜..DÆÑæª+’_3€.Äñ */ - $"7AA6 E605 4676 A533 1D38 6ADA 9BC6 2C13" /* z¦æ.Fv¥3.8jÚ›Æ,. */ - $"385A 3DCE 7E2E B9A1 81BB 27C6 AFF8 FF5D" /* 8Z=Î~.¹¡»'Ưøÿ] */ - $"A511 4C25 DC70 082C B597 3EC4 004C D4B8" /* ¥.L%Üp.,µ—>Ä.LÔ¸ */ - $"BE6A B79D EF70 2610 B57B FEFE 6ACC 9EEE" /* ¾j·ïp&.µ{þþjÌžî */ - $"B94A 73A8 4B30 C207 7391 789E C0FE 6992" /* ¹Js¨K0Â.s‘xžÀþi’ */ - $"AB13 E2AA FF53 4B22 A338 0EA3 B476 D732" /* «.âªÿSK"£8.£´v×2 */ - $"EDA3 2009 3422 B4AA 64DE 26C3 5894 D6DD" /* í£ Æ4"´ªdÞ&ÃX”ÖÝ */ - $"F7A9 5A3B 6F31 5D2C EC22 1FAC 928B 647F" /* ÷©Z;o1],ì".¬’‹d. */ - $"1600 A961 11C3 FD11 E594 81F9 E0AC 20D4" /* ..©a.Ãý.å”ùà¬ Ô */ - $"0DCA 9CE0 FF14 3BE3 3010 00E1 9DFE F0C8" /* .Êœàÿ.;ã0..áþðÈ */ - $"70E7 D3A5 A7F9 884E 6941 CBCB FEBE 0C27" /* pçÓ¥§ùˆNiAËËþ¾.' */ - $"B3F5 BAA4 3068 BFC1 DB20 1E5F 9E83 BF7D" /* ³õº¤0h¿ÁÛ ._žƒ¿} */ - $"8EA3 8FB0 F355 FF02 DED2 5CC8 2B4D 4DA5" /* Ž£°óUÿ.ÞÒ\È+MM¥ */ - $"8122 C96A CDAB B130 2D35 B73E 2EE9 0AA9" /* "ÉjÍ«±0-5·>.é© */ - $"7DB8 B81D 7B0A 776B DFF3 2B02 1F6A EF5B" /* }¸¸.{Âwkßó+..jï[ */ - $"E6A6 177F D8C0 1C3B A88C 2154 18F3 BFB3" /* æ¦..ØÀ.;¨Œ!T.ó¿³ */ - $"F7EF 1249 860B F87F 60D6 AE06 B5B2 7824" /* ÷ï.I†.ø.`Ö®.µ²x$ */ - $"E601 91D7 1436 80CF 054C 9691 1321 B299" /* æ.‘×.6€Ï.L–‘.!²™ */ - $"11F3 2BA3 51F6 447E 1BC0 28CB 666B 9BA0" /* .ó+£QöD~.À(Ëfk›  */ - $"425A E39B 066C 1B7C 340B 950A BDCC E05D" /* BZã›.l.|4.•½Ìà] */ - $"C8DC 568C BDC6 54E9 0AA2 2D89 6E22 37E4" /* ÈÜVŒ½ÆTé¢-‰n"7ä */ - $"3508 39CC EE8F 8EE6 F926 626B E33F 4A06" /* 5.9ÌîŽæù&bkã?J. */ - $"4CD1 AE16 9063 3119 5554 58CA BB53 4A73" /* LÑ®.c1.UTXÊ»SJs */ - $"AA2B 2A71 B86B 3E95 BED6 D9D2 9D59 3E60" /* ª+*q¸k>•¾ÖÙÒY>` */ - $"C5D1 FA4C E6A7 880F 30D8 A679 6467 697E" /* ÅÑúL槈.0ئydgi~ */ - $"F327 EAA4 E0D1 01F9 9B74 AAA1 6CDD 7DA7" /* ó'ê¤àÑ.ù›tª¡lÝ}§ */ - $"D2AB C9CB 63D6 D3DF C778 C6ED 71A5 0571" /* Ò«ÉËcÖÓßÇxÆíq¥.q */ - $"C7E1 4EC7 E16C 43F0 75B1 3C9E 91EA AAAC" /* ÇáNÇálCðu±<ž‘ꪬ */ - $"9A2E A47E 8DF0 873E 2275 3F71 F986 DF3D" /* š.¤~ð‡>"u?qù†ß= */ - $"DBE5 1F4C 0D83 C3F5 F2D4 5A7C 0BFB E4FC" /* Ûå.L.ƒÃõòÔZ|.ûäü */ - $"C83E D8A4 FAF4 F589 09F2 4909 40AA 2AA8" /* È>ؤúôõ‰ÆòIÆ@ª*¨ */ - $"C190 BE4D D484 1408 6EAD 722F 6BA6 7502" /* Á¾MÔ„..n­r/k¦u. */ - $"A53F 1B9A BE86 841A FC60 53F3 8AE9 2E4C" /* ¥?.𾆄.ü`SóŠé.L */ - $"4B8E 1D09 F47C 3BAA CFB7 80DE 6A41 F007" /* KŽ.Æô|;ªÏ·€ÞjAð. */ - $"80A3 413A C568 5C02 6166 E8AF 9B6C EF86" /* €£A:Åh\.af诛lï† */ - $"F178 273B A803 89E9 520A ACFC 0E98 6198" /* ñx';¨.‰éR¬ü.˜a˜ */ - $"6ECE D094 76D1 8AF8 1035 D0C8 B9E5 ECC9" /* nÎДvÑŠø.5ÐȹåìÉ */ - $"08E6 748A F28B B0E0 F9AB 71B4 7971 9626" /* .ætŠò‹°àù«q´yq–& */ - $"5397 5D5A 31CB 5F9E 7C98 8300 72B1 2C67" /* S—]Z1Ë_ž|˜ƒ.r±,g */ - $"A38D 0C02 C603 C0C2 2000 E528 0CAA 9472" /* £..Æ.À .å(.ª”r */ - $"3115 8C05 0EE6 3F33 3F6D B6DB 64C7 AAB2" /* 1.Œ..æ?3?m¶ÛdǪ² */ - $"94EA DD85 D3DF F14E FF3F D3A2 778B 3749" /* ”êÝ…ÓßñNÿ?Ó¢w‹7I */ - $"B31B 6DB6 C5B6 5311 C782 3FCF 2880 6695" /* ³.m¶Å¶S.Ç‚?Ï(€f• */ - $"085A 35C2 3938 420E 8705 50BD 51C3 BD21" /* .Z5Â98B.‡.P½Qý! */ - $"41B9 C3ED 3A76 367F 40F5 DA53 3618 DF7A" /* A¹Ãí:v6.@õÚS6.ßz */ - $"EE11 B2D6 D9AD 4351 7D8F BC5A 7217 9352" /* î.²ÖÙ­CQ}¼Zr.“R */ - $"D43F 54B9 F618 3E0E 5FF8 1599 CD00 5489" /* Ô?T¹ö.>._ø.™Í.T‰ */ - $"459D 1B65 0538 7A92 D8EC 6AD5 E756 776E" /* E.e.8z’ØìjÕçVwn */ - $"5B66 A07C 36D6 A4B0 2E00 21E0 ABFC 2AB8" /* [f |6Ö¤°..!à«ü*¸ */ - $"F387 5784 0DB9 1978 67FE DEFF 0CCC CCCC" /* ó‡W„.¹.xgþÞÿ.ÌÌÌ */ - $"CCCC CCCC CCCC CCD3 5F84 850A F245 C370" /* ÌÌÌÌÌÌÌÓ_„…ÂòEÃp */ - $"786E 76C5 56A5 8C9B FC7F 6869 3085 EB26" /* xnvÅV¥Œ›ü.hi0…ë& */ - $"6162 A234 8BF4 868D 0BA5 77FA 56D2 31FD" /* ab¢4‹ô†.¥wúVÒ1ý */ - $"7436 0147 944C 2AAE C8C1 DE46 2A3A 2449" /* t6.G”L*®ÈÁÞF*:$I */ - $"EAD0 8E9E FF0B 129F 7F9C 1436 A6BC 10E6" /* êÐŽžÿ..Ÿ.œ.6¦¼.æ */ - $"3116 7A98 5FF6 97E9 FC84 7136 FEA5 C122" /* 1.z˜_ö—éü„q6þ¥Á" */ - $"E58F 44D6 D7A4 0AD3 E9B4 7C91 B833 1F91" /* åDÖפÂÓé´|‘¸3.‘ */ - $"5F0F D8F7 8A80 6560 B332 081A C68D 0FF9" /* _.Ø÷Š€e`³2..Æ.ù */ - $"899F 2CC7 E1D6 FC7E 1DEB C3ED EA04 F55D" /* ‰Ÿ,ÇáÖü~.ëÃíê.õ] */ - $"017D B775 48A1 A844 EAB2 8E3A 5FF2 20AF" /* .}·uH¡¨D겎:_ò ¯ */ - $"6231 D1B0 D4D9 D308 999B 09F2 95B1 7071" /* b1ѰÔÙÓ.™›Æò•±pq */ - $"F57C 1F1E 7960 4639 6A62 5BC6 9E5A D45D" /* õ|..y`F9jb[ÆžZÔ] */ - $"F339 9597 BF1B 62EB D128 B3D8 9BD3 52BF" /* ó9•—¿.bëÑ(³Ø›ÓR¿ */ - $"0703 43F9 E1C7 940E EA41 F4B1 75E4 891F" /* ..CùáÇ”.êAô±uä‰. */ - $"09A4 D439 7DFF 6AB7 EB4F 1253 A9C0 8BBE" /* ƤÔ9}ÿj·ëO.S©À‹¾ */ - $"40A0 3CE6 965D F886 A9EF 7E69 712D 41C2" /* @ <æ–]ø†©ï~iq-A */ - $"0062 6917 5D06 6548 9FD6 1470 4A0C 8545" /* .bi.].eHŸÖ.pJ.…E */ - $"8417 6C73 0C2D DF44 0E4A D5F9 7443 D629" /* „.ls.-ßD.JÕùtCÖ) */ - $"E62D DE53 CCFA EAEA E08A F0E1 9D37 9616" /* æ-ÞSÌúêêàŠðá7–. */ - $"C0DA 1FD4 6A42 6CE6 1D10 AB6A 911A 19D2" /* ÀÚ.ÔjBlæ..«j‘..Ò */ - $"47A0 4AC5 6A3C 12FF 0FE8 3AFB 7DFD 3D27" /* G JÅj<.ÿ.è:û}ý=' */ - $"42C6 E2BA 6DDE D1ED 21CE 1EA0 F444 055B" /* BÆâºmÞÑí!Î. ôD.[ */ - $"122A 41EE D8C1 144C B39C 0EEA 014E 7448" /* .*AîØÁ.L³œ.ê.NtH */ - $"0B72 7C2C 92B6 0CAC 3CB5 ADA7 8BF8 0C56" /* .r|,’¶.¬<µ­§‹ø.V */ - $"1DD5 B763 907F 6B60 8A85 ED4A F87D FBDC" /* .Õ·c.k`Š…íJø}ûÜ */ - $"391D 822B CBF5 7266 0E6B B2D4 32DE 606C" /* 9.‚+Ëõrf.k²Ô2Þ`l */ - $"014E 64BF F969 E3A5 C8E4 09EC B205 6391" /* .Nd¿ùiã¥ÈäÆì².c‘ */ - $"3081 96F5 9A80 0599 50D2 38FF 635B 9C35" /* 0–õš€.™PÒ8ÿc[œ5 */ - $"97CF A325 D94F B8E1 A794 EABC DA8A 7CC3" /* —Ï£%ÙO¸á§”ê¼ÚŠ|à */ - $"8713 2EBB 1EA6 69B0 9A72 A93D 874A 1F30" /* ‡..».¦i°šr©=‡J.0 */ - $"4C7B B341 B8CF F61E 7CEE 60CC E9B0 6D85" /* L{³A¸Ïö.|î`Ìé°m… */ - $"4F96 977D F85D F85A 08AF 46EF F259 FD70" /* O–—}ø]øZ.¯FïòYýp */ - $"E364 C54D 1F3D C951 B1DD 2CB4 8B94 9350" /* ãdÅM.=ÉQ±Ý,´‹”“P */ - $"8FFC CD4E D39E 2FF5 DC65 9DB7 2133 6E97" /* üÍNÓž/õÜe·!3n— */ - $"9705 2AA6 2625 534E B2A2 D775 FCFA 60E0" /* —.*¦&%SN²¢×uüú`à */ - $"4929 3681 2E72 5087 F3CD FB3A 6386 36A2" /* I)6.rP‡óÍû:c†6¢ */ - $"5E62 8705 57E4 8441 1986 1487 E88F C834" /* ^b‡.Wä„A.†.‡èÈ4 */ - $"C59D D57C CCA2 D56F 3889 44AC 0E4D 0E88" /* ÅÕ|Ì¢Õo8‰D¬.M.ˆ */ - $"2592 A50A F98D DF1D 17F2 78BD D4AB FDB4" /* %’¥Âùß..òx½Ô«ý´ */ - $"4249 FBDE 3E56 BE58 B587 88B4 8D75 299F" /* BIûÞ>V¾Xµ‡ˆ´u)Ÿ */ - $"4C92 6D9A 6B17 6153 9A65 4770 E0EC BBEF" /* L’mšk.aSšeGpàì»ï */ - $"2F91 8C35 8FFA 04AF 880C D9B6 204A D65E" /* /‘Œ5ú.¯ˆ.Ù¶ JÖ^ */ - $"68DD DBE7 63BC E1C5 CCDD E994 3796 10EF" /* hÝÛçc¼áÅÌÝé”7–.ï */ - $"354D C0E7 7A72 E57E EFAC 7C75 E4CE F47F" /* 5MÀçzrå~ï¬|uäÎô. */ - $"2E82 A8D0 6401 3CC4 1ACC 4513 1211 DCC9" /* .‚¨Ðd.<Ä.ÌE...ÜÉ */ - $"BD7A 47CA F093 83C7 38EB 866D 1ED5 AC6C" /* ½zGÊð“ƒÇ8ë†m.Õ¬l */ - $"FF01 C348 CFA1 2532 DAD5 2BDD 8CCC 71C1" /* ÿ.ÃHÏ¡%2ÚÕ+ÝŒÌqÁ */ - $"1208 75AA 308B 4796 A89E 0EAF AB67 422A" /* ..uª0‹G–¨ž.¯«gB* */ - $"AA43 8162 68BC 9878 8578 419C AB2E 9518" /* ªCbh¼˜x…xAœ«.•. */ - $"A9E0 4298 DB46 36D7 ADD0 DE21 DC41 AEA7" /* ©àB˜ÛF6×­ÐÞ!ÜA®§ */ - $"A05D 795D AB14 E247 6750 3EA8 0A31 5A06" /*  ]y]«.âGgP>¨Â1Z. */ - $"FAEC AD07 ECF7 C636 A068 22AA E179 7613" /* úì­.ì÷Æ6 h"ªáyv. */ - $"30F9 831C 0AFA 38C0 E20B 96A9 464E B57A" /* 0ùƒ.Âú8Àâ.–©FNµz */ - $"5AF3 D612 DC70 2A8D 1D09 C7C9 967F 7F7B" /* ZóÖ.Üp*.ÆÇÉ–..{ */ - $"F47F 4017 A722 9853 37C2 DE55 34CF 104E" /* ô.@.§"˜S7ÂÞU4Ï.N */ - $"9DD3 35DF DEE2 589C FAF1 07DE 1803 86B1" /* Ó5ßÞâXœúñ.Þ..†± */ - $"2DE6 6B46 FC45 F24E 8718 3B6E D557 8008" /* -ækFüEòN‡.;nÕW€. */ - $"FF3B 8EC2 28BD 6146 3EF6 A0FB 0BCA 37C1" /* ÿ;ŽÂ(½aF>ö û.Ê7Á */ - $"749B 49F2 F419 9EC5 DC0A A6DE 0CFC 1BD2" /* t›Iòô.žÅܦÞ.ü.Ò */ - $"AAF5 4920 1AB3 842A 1813 606E 97CD 0EC2" /* ªõI .³„*..`n—Í. */ - $"50D4 84CD F427 569F 776D 940A A6F7 68D7" /* PÔ„Íô'VŸwm”¦÷h× */ - $"2A18 4C6D 2056 D254 1226 7F3C 1ED0 7AB8" /* *.Lm VÒT.&.<.Ðz¸ */ - $"BEFE 2050 50E6 C5FB 173C 1857 FF7F 86D9" /* ¾þ PPæÅû.<.Wÿ.†Ù */ - $"6CE3 E235 1AFA CBB4 D2BE 4E64 9713 B880" /* lãâ5.úË´Ò¾Nd—.¸€ */ - $"0C41 2E14 401B D14F 5BA4 AD20 7060 C05E" /* .A..@.ÑO[¤­ p`À^ */ - $"2011 000E C557 2951 009C A584 6178 50E8" /* ...ÅW)Q.œ¥„axPè */ - $"6E0D 922F BFF7 EC41 A907 0D2B EF09 3CE0" /* n.’/¿÷ìA©..+ïÆ<à */ - $"6344 B3D6 742A 0448 042D 44C3 390B 089B" /* cD³Öt*.H.-DÃ9..› */ - $"B0FF 2877 1C62 BE1E AC48 09B0 4667 19BC" /* °ÿ(w.b¾.¬HưFg.¼ */ - $"319D 1FEA ABB5 1EE9 02D8 C845 A20C 2E3F" /* 1.ꫵ.é.ØÈE¢..? */ - $"7010 FA38 E2A0 1F01 2933 0557 19BD 9DCD" /* p.ú8â ..)3.W.½Í */ - $"5486 F044 5838 C953 CC32 2DF8 6A04 30ED" /* T†ðDX8ÉSÌ2-øj.0í */ - $"2C42 0A7D 1B38 7F94 4936 5908 39F1 424F" /* ,BÂ}.8.”I6Y.9ñBO */ - $"2BFF 7F46 F53E 11D3 DA1E 41B4 67AB 296E" /* +ÿ.Fõ>.ÓÚ.A´g«)n */ - $"0B59 6213 9E16 1568 8787 ED75 8822 A102" /* .Yb.ž..h‡‡íuˆ"¡. */ - $"DAAC D7D6 FA63 ED91 52D2 E98C 6EEB ABBB" /* Ú¬×Öúcí‘RÒéŒnë«» */ - $"5465 7C7C 0CEB 3016 0CC6 5793 D7FF 7FFB" /* Te||.ë0..ÆW“×ÿ.û */ - $"34E7 7BDE 794E 6D8C 392D 051A 478B 4AD7" /* 4ç{ÞyNmŒ9-..G‹J× */ - $"028C 3119 EDCA 833C 2F1B A23A 5C69 908F" /* .Œ1.íʃ.u¬%û³–.† */ - $"5EF0 4C11 ACE0 90D2 6568 EB55 75AB FF24" /* ^ðL.¬àÒehëUu«ÿ$ */ - $"54B8 0E77 3110 5C67 3138 8369 5BEA 3458" /* T¸.w1.\g18ƒi[ê4X */ - $"7FFE 6000 9940 0044 18C6 1A34 14B6 9CD2" /* .þ`.™@.D.Æ.4.¶œÒ */ - $"C039 2A00 00CC 8F27 9EFE FF80 1CAA 8000" /* À9*..Ì'žþÿ€.ª€. */ - $"0000 0000 D9B1 C1D0 BFE1 D01D 2DD4 E3DF" /* ....Ù±ÁпáÐ.-Ôãß */ - $"949B 6DB6 DB6D B83D 6B98 82BC 446D 0CB3" /* ”›m¶Ûm¸=k˜‚¼Dm.³ */ - $"55A5 C140 D9E5 5E98 37AF 0E38 4474 B8DC" /* U¥Á@Ùå^˜7¯.8Dt¸Ü */ - $"FCFA B14E BD14 730B DAA0 4B18 1B4D 81E7" /* üú±N½.s.Ú K..Mç */ - $"B8A8 26E7 EFB0 8272 4619 2A00 0000 0000" /* ¸¨&çï°‚rF.*..... */ - $"0000 0000 0000 060D CD91 05BE 3A07 80DE" /* ........Í‘.¾:.€Þ */ - $"29D6 2680 7867 5359 9411 F430 48D9 A22D" /* )Ö&€xgSY”.ô0HÙ¢- */ - $"DF74 0855 C0C4 C5AA D3F4 FC40 5815 C5FC" /* ßt.UÀÄŪÓôü@X.Åü */ - $"B741 3001 FF7F FDC6 00B8 F1BA FEC9 B662" /* ·A0.ÿ.ýÆ.¸ñºþɶb */ - $"4973 2EE9 5029 E237 296D D4A4 04DE 4DB9" /* Is.éP)â7)mÔ¤.ÞM¹ */ - $"5305 FD42 9A82 6842 EF09 9DA2 201D C6EF" /* S.ýBš‚hBïÆ¢ .Æï */ - $"4078 4FC3 038C B201 A1C0 0791 7B09 CF18" /* @xOÃ.Œ².¡À.‘{ÆÏ. */ - $"D61B DABD 0409 372B F69D 3CF8 E2E1 31A1" /* Ö.Ú½.Æ7+ö<øâá1¡ */ - $"023B B0FD 60B3 3933 16F2 C716 9259 82F8" /* .;°ý`³93.òÇ.’Y‚ø */ - $"77BB 3A47 46D2 D998 7AA1 01E1 DF78 8000" /* w»:GFÒÙ˜z¡.áßx€. */ - $"0000 0001 D8FD 4FB2 C620 0000 005A CD78" /* ....ØýO²Æ ...ZÍx */ - $"B755 53CD E910 3B50 96A8 4000 0000 0003" /* ·USÍé.;P–¨@..... */ - $"FD6F 5DD1 31D8 A087 6BC5 09F3 E81E B49F" /* ýo]Ñ1Ø ‡kÅÆóè.´Ÿ */ - $"5A88 0DB9 2492 4924 9234 EE49 0E46 EE5B" /* Zˆ.¹$’I$’4îI.Fî[ */ - $"8D2A E866 7AD0 1F3C 936D 50EF 6EF5 FDE7" /* *èfzÐ.<“mPïnõýç */ - $"BFFE 6EFF 82AD 0EDF 556D B01D C573 CA68" /* ¿þnÿ‚­.ßUm°.ÅsÊh */ - $"985A F307 82C5 D933 4C26 B9EE EEF7 D4C6" /* ˜Zó.‚ÅÙ3L&¹îî÷ÔÆ */ - $"BFB5 4130 F610 4AFE 602E 3723 0C95 0000" /* ¿µA0ö.Jþ`.7#.•.. */ - $"0000 0000 0000 0000 0002 7F7E DE44 DDEB" /* ...........~ÞDÝë */ - $"B8B1 0AB8 BA80 7F79 D59C 851A 0244 B8D1" /* ¸±Â¸º€.yÕœ…..D¸Ñ */ - $"6B92 AB1A 4997 5556 C0C7 5935 05AD B380" /* k’«.I—UVÀÇY5.­³€ */ - $"318D A387 1E5F 1523 0170 B5DB D9FA 0E80" /* 1£‡._.#.pµÛÙú.€ */ - $"7342 6634 1E36 FB10 615A 1862 FF53 1545" /* sBf4.6û.aZ.bÿS.E */ - $"C795 B42C 8282 534C 3AFD D370 7621 820E" /* Ç•´,‚‚SL:ýÓpv!‚. */ - $"9EDA AF3A 476B 3537 E327 52DE 4A99 73D1" /* žÚ¯:Gk57ã'RÞJ™sÑ */ - $"0718 7C16 82D5 99A5 32DD 0E83 9C4F 60F8" /* ..|.‚Õ™¥2Ý.ƒœO`ø */ - $"0743 325D 2056 84FF 06BC C6BB 338C 64CF" /* .C2] V„ÿ.¼Æ»3ŒdÏ */ - $"B7B9 C4C7 9800 E4DA EE0A 6636 DEE8 B8F8" /* ·¹Äǘ.äÚîÂf6Þè¸ø */ - $"739E 1EBD 408C C620 9790 A337 E987 2E54" /* sž.½@ŒÆ —£7é‡.T */ - $"DD4A E501 C0BF 44E6 E8EF ACCF 028F 253C" /* ÝJå.À¿Dæèï¬Ï.%< */ - $"F466 FA92 BEE6 A066 F4B6 5B41 CA80 3567" /* ôfú’¾æ fô¶[AÊ€5g */ - $"A079 E31D CEE9 CD64 0AED 265D E591 B98C" /*  yã.ÎéÍdÂí&]呹Œ */ - $"DF22 C203 3C43 E1D8 5D64 CA99 E6C7 EF30" /* ß"Â.Ãɺ9ìÛâûšÅ¯.CÜ-®dÀ§ 9 */ - $"A6C9 6079 72D6 0BC7 C501 A3A4 5EF4 A060" /* ¦É`yrÖ.ÇÅ.£¤^ô ` */ - $"C46E FCB9 1958 AD83 1176 0776 81C2 13C2" /* Änü¹.X­ƒ.v.vÂ. */ - $"DF08 4A76 137F DC5C 4867 0493 EE96 8373" /* ß.Jv..Ü\Hg.“î–ƒs */ - $"4644 13A4 F789 39FF 813B D226 575A 5A18" /* FD.¤÷‰9ÿ;Ò&WZZ. */ - $"3AF5 4B88 2747 3D47 681F 9670 0069 DD02" /* :õKˆ'G=Gh.–p.iÝ. */ - $"4252 ADB0 D6FB F1F1 1432 C24B D920 7290" /* BR­°Öûññ.2ÂKÙ r */ - $"3709 3D60 15D9 0C49 23EC 77F8 F791 F132" /* 7Æ=`.Ù.I#ìwø÷‘ñ2 */ - $"046E 0D05 9AFA 210A 9992 29D9 7AA6 F18E" /* .n..šú!™’)Ùz¦ñŽ */ - $"E245 75E0 018F BCEB 8D1B C2D0 083E 985F" /* âEuà.¼ë.ÂÐ.>˜_ */ - $"B791 554D F5F5 AD71 E064 75E6 1F3A D463" /* ·‘UMõõ­qàduæ.:Ôc */ - $"9A59 0A43 3457 BD7C 44A7 5C5E 9D19 C5D8" /* šYÂC4W½|D§\^.ÅØ */ - $"5880 C2CC 5DF0 2964 C0FD ABA1 004B 008D" /* X€ÂÌ]ð)dÀý«¡.K. */ - $"5205 7F2E 0843 E484 2D37 9C34 2425 7AFF" /* R....Cä„-7œ4$%zÿ */ - $"7021 D907 B6E1 F5E5 02C3 F3DD 44C8 2252" /* p!Ù.¶áõå.ÃóÝDÈ"R */ - $"0649 3C1A 1A80 449A 64D1 1720 76D6 4987" /* .I<..€DšdÑ. vÖI‡ */ - $"B4B1 E749 E899 BF69 5B35 F925 2EE6 6CE6" /* ´±çI虿i[5ù%.ælæ */ - $"B4FD CEB3 54C0 7C9D 4380 F93B 5701 F274" /* ´ýγTÀ|C€ù;W.òt */ - $"C4F3 CC20 F972 1FD1 56B3 911D 2995 5FC9" /* ÄóÌ ùr.ÑV³‘.)•_É */ - $"1F35 BAE0 9AC7 3082 1372 C1D5 4B23 D79E" /* .5ºàšÇ0‚.rÁÕK#מ */ - $"EF63 A93F 8E74 26FB AC68 CDBE BD3E 9720" /* ïc©?Žt&û¬h;½>— */ - $"DF71 956D 5D26 559E 2795 2F1B F798 7821" /* ßq•m]&Už'•/.÷˜x! */ - $"F3CB 1E6F 2351 11BD 0EFF 19B2 40A2 1C7F" /* óË.o#Q.½.ÿ.²@¢.. */ - $"267D D302 F6AE 5410 1E96 40DC 386E CB7B" /* &}Ó.ö®T..–@Ü8nË{ */ - $"7EA3 5CF7 46BA 8758 D0EE 12B3 34DF 46FE" /* ~£\÷Fº‡XÐî.³4ßFþ */ - $"517B E0F8 7E28 83A5 E93A C06D 7C3F 254B" /* Q{àø~(ƒ¥é:Àm|?%K */ - $"53DF 91ED F6AB FD0A 53A0 5257 F9B8 E8B7" /* Sß‘íö«ýÂS RWù¸è· */ - $"5A14 6036 C6DA E3FE C29D 799F 8B43 46D6" /* Z.`6ÆÚãþÂyŸ‹CFÖ */ - $"94DF 1954 073C 7C30 40F4 A00D 93D4 AADF" /* ”ß.T.<|0@ô .“ﻧ */ - $"4839 EF36 F92A 3758 97CE 955A 3521 3CB5" /* H9ï6ù*7X—ΕZ5!<µ */ - $"8269 30A7 2A93 6A40 07BE DCC3 50B6 C86B" /* ‚i0§*“j@.¾ÜÃP¶Èk */ - $"CE9A AF28 3B80 4FE6 873C DB8E A29C 15DC" /* Κ¯(;€Oæ‡<ÛŽ¢œ.Ü */ - $"81A8 F841 4F77 6237 7267 55C4 1289 2DA1" /* ¨øAOwb7rgUÄ.‰-¡ */ - $"8392 424A 398F 9FA7 8DBE 2CC6 44E9 A005" /* ƒ’BJ9Ÿ§¾,ÆDé . */ - $"0E57 6638 ADDD 9F15 D32E 13A9 F752 67BA" /* .Wf8­ÝŸ.Ó..©÷Rgº */ - $"9F1D 753C 0023 2BC1 2C48 19AF FF28 66E6" /* Ÿ.u<.#+Á,H.¯ÿ(fæ */ - $"0A05 1D62 536F C372 7DEC 5069 B44D AFD4" /* Â..bSoÃr}ìPi´M¯Ô */ - $"BE3C 9C16 161E 95B4 89E7 B034 4524 E373" /* ¾<œ...•´‰ç°4E$ãs */ - $"D4A2 2F82 F1BB 8F20 7861 0F95 7CDF C184" /* Ô¢/‚ñ» xa.•|ßÁ„ */ - $"5B65 6015 001B F6BD 5D52 D4BC 3A42 FD56" /* [e`...ö½]RÔ¼:BýV */ - $"D48F 3358 7432 09BD FF19 625D 3A11 13DA" /* Ô3Xt2ƽÿ.b]:..Ú */ - $"F222 12E8 5A1B 12BF 9B3B A234 A367 8FB6" /* ò".èZ..¿›;¢4£g¶ */ - $"4BF2 EE99 DB11 5D13 7021 71B4 2280 A1BC" /* Kòî™Û.].p!q´"€¡¼ */ - $"2AEF ECB5 D7EC 047C 0860 9676 78B1 CA76" /* *ïìµ×ì.|.`–vx±Êv */ - $"9AFB C995 D4EB 900A AD98 6423 E572 B68C" /* šûÉ•Ôë­˜d#år¶Œ */ - $"A271 A30B D157 8E95 8250 29BB 0323 E26C" /* ¢q£.ÑWŽ•‚P)».#âl */ - $"9223 91C7 0CD4 F0B0 442E 1BD3 1473 C699" /* ’#‘Ç.Ôð°D..Ó.sÆ™ */ - $"2D1C 8791 C699 920E 72C0 0D3E F6E9 9E2B" /* -.‡‘Æ™’.rÀ.>öéž+ */ - $"60B6 A87F 6CBE 146C 1224 90FC BF7B C6A9" /* `¶¨.l¾.l.$ü¿{Æ© */ - $"090E 3EAD C89D 5065 414B 3A1C F271 9327" /* Æ.>­ÈPeAK:.òq“' */ - $"D490 CD2B FBB3 BEFF 768D 4601 635B A746" /* ÔÍ+û³¾ÿvF.c[§F */ - $"8A4B 0981 8B8F EA85 D255 2113 8792 CC76" /* ŠKÆ‹ê…ÒU!.‡’Ìv */ - $"DE84 B950 C5F4 A4C1 D4EF 7D52 CC74 CCEE" /* Þ„¹PÅô¤ÁÔï}RÌtÌî */ - $"B40E B94F 9467 15CA 1DE0 3557 BF09 D787" /* ´.¹O”g.Ê.à5W¿Æ×‡ */ - $"ED66 345A E153 B4DC EF7C 2952 3161 5A99" /* íf4ZáS´Üï|)R1aZ™ */ - $"A193 D5EB 40F5 1300 65FA 8DFD 621A AE94" /* ¡“Õë@õ..eúýb.®” */ - $"30CD 6D25 A0FC 942E 37AC 52C8 CEAD 2D1F" /* 0Ím% ü”.7¬RÈέ-. */ - $"87D5 D078 F173 F5AD 7A56 DD1B 10C3 F9BF" /* ‡ÕÐxñsõ­zVÝ..Ãù¿ */ - $"69C1 9E6B E021 A0C7 84BF D87A 8AA8 327C" /* iÁžkà! Ç„¿ØzЍ2| */ - $"7D48 0D97 E584 FF7F AE07 2001 BF6C 2691" /* }H.—å„ÿ.®. .¿l&‘ */ - $"3032 E118 8741 42AD 7709 3086 8488 F9D3" /* 02á.‡AB­wÆ0†„ˆùÓ */ - $"0353 D79E 2E21 8F21 46CC 005C DA8A 0229" /* .Sמ.!!FÌ.\ÚŠ.) */ - $"A56B A72A C69E FCF7 7558 5D72 0050 2BDE" /* ¥k§*Æžü÷uX]r.P+Þ */ - $"0F36 E4F0 C744 89FC 37F0 7ECA F488 FE8C" /* .6äðÇD‰ü7ð~ÊôˆþŒ */ - $"1B6B 0158 B34D 1EA6 9B1F 154E FF79 01D4" /* .k.X³M.¦›..Nÿy.Ô */ - $"725F D9CF D9BF CCFF 439D 8F5C A92D D20D" /* r_ÙÏÙ¿ÌÿC\©-Ò. */ - $"0613 88F8 5C1C B6BD 07B9 9078 151D 8353" /* ..ˆø\.¶½.¹x..ƒS */ - $"0E68 8495 D521 92D8 E92D CF9B 10E6 ABDC" /* .h„•Õ!’Øé-Ï›.æ«Ü */ - $"53D9 DFB2 F2AF F964 14E3 74D6 3D64 01E2" /* SÙß²ò¯ùd.ãtÖ=d.â */ - $"FAFB 2D0B D303 DCF7 7718 E6CF 30DB 3FAE" /* úû-.Ó.Ü÷w.æÏ0Û?® */ - $"2873 3339 54A3 1E48 04D2 FDF2 E863 6201" /* (s39T£.H.Òýòècb. */ - $"01D1 182C 4C2A D85D AE26 DE15 9796 494C" /* .Ñ.,L*Ø]®&Þ.—–IL */ - $"82EA B4C0 2D3C 3D3E 1732 2ACA AC27 B7DB" /* ‚ê´À-<=>.2*ʬ'·Û */ - $"5CED 6F9D 3EDB FF04 5E83 BE60 1636 AE2C" /* \ío>Ûÿ.^ƒ¾`.6®, */ - $"754D 2928 7128 ACFD 15E8 C1A0 30A5 1063" /* uM)(q(¬ý.èÁ 0¥.c */ - $"1E6F 10F7 A946 B9B4 D921 5DB3 113F 332E" /* .o.÷©F¹´Ù!]³.?3. */ - $"61B8 AB3D 2F87 E081 C9D9 32B7 1060 785A" /* a¸«=/‡àÉÙ2·.`xZ */ - $"EFDD F472 0283 E235 4D42 E903 A06B 51CB" /* ïÝôr.ƒâ5MBé. kQË */ - $"39DC A412 A492 918E 235E F57C E4CE 4E0F" /* 9ܤ.¤’‘Ž#^õ|äÎN. */ - $"6BE6 7036 FA8A 7B2C 21FE 60B1 6FCA 7654" /* kæp6úŠ{,!þ`±oÊvT */ - $"C9FD DCDF E497 B2A6 D6D5 87ED 9D3B 5B86" /* ÉýÜßä—²¦ÖÕ‡í;[† */ - $"DA51 6B5B AE3E 520B 1DB3 5A6B 2B4D A777" /* ÚQk[®>R..³Zk+M§w */ - $"4F13 A04C 7D4F 819B 1FEB 086D 5F34 6643" /* O. L}O›.ë.m_4fC */ - $"0208 693A D70C 55B2 7A07 BC27 3A41 B739" /* ..i:×.U²z.¼':A·9 */ - $"C1F5 7425 07D5 D74C 1F56 F680 F1C4 B0CB" /* Áõt%.Õ×L.Vö€ñÄ°Ë */ - $"F3E0 DE80 53FC 256D EFD0 6B64 028C EC70" /* óàÞ€Sü%mïÐkd.Œìp */ - $"4973 06D4 242C DAAA 8373 DFAC B0C9 14A1" /* Is.Ô$,Úªƒs߬°É.¡ */ - $"BFBC 0BB4 E250 919E 3D2B B388 3A89 FB02" /* ¿¼.´âP‘ž=+³ˆ:‰û. */ - $"9796 86E6 20F8 C26C 8120 349C 757A 6875" /* —–†æ øÂl 4œuzhu */ - $"F63E AE68 84C3 03A3 6F64 F9EE F892 2CF8" /* ö>®h„Ã.£odùîø’,ø */ - $"61C1 B13A E941 0D67 DA36 4C05 9565 DC85" /* aÁ±:éA.gÚ6L.•eÜ… */ - $"D7F8 6EB9 D903 D428 F59A 3EBF C73E 5E95" /* ×øn¹Ù.Ô(õš>¿Ç>^• */ - $"764D 15FB 98F2 BECE 0FC8 EA3C 4E51 E1DD" /* vM.û˜ò¾Î.Èêw' */ - $"DDEE 0A95 231F 04AC B6EF D134 C09D 1540" /* Ýî•#..¬¶ïÑ4À.@ */ - $"0E94 57E2 8418 C208 1F26 7396 96A0 D08F" /* .”Wâ„.Â..&s–– Ð */ - $"0CC0 40C8 C596 39BA 0CAE A6ED F8E8 7D6B" /* .À@ÈÅ–9º.®¦íøè}k */ - $"A76C 391B 6113 555F 62E0 6E14 5D27 E7BC" /* §l9.a.U_bàn.]'ç¼ */ - $"EDB7 D038 DED2 7BEE FC9D 6211 241E 0795" /* í·Ð8ÞÒ{îüb.$..• */ - $"9CDE 1607 B4C7 828E 24D2 4E9F FCA0 36EA" /* œÞ..´Ç‚Ž$ÒNŸü 6ê */ - $"004C C960 1680 01CE 7FF6 A201 EDAB 1ADF" /* .LÉ`.€.Î.ö¢.í«.ß */ - $"80D8 4524 390C 23DD EA8E 062C 5DDB 3C57" /* €ØE$9.#ÝêŽ.,]Û6 */ - $"00C2 0E05 134F 4802 3846 3575 1902 676D" /* .Â...OH.8F5u..gm */ - $"1006 D8AE 0D5F 1934 78F6 0721 F3C4 1000" /* ..Ø®._.4xö.!óÄ.. */ - $"8991 FA85 45B5 37A9 5A0C 54EE 014B 297B" /* ‰‘ú…Eµ7©Z.Tî.K){ */ - $"52F2 5ADD 7422 C97B EAA9 D291 45A7 A44A" /* RòZÝt"É{ê©Ò‘E§¤J */ - $"40FE AE73 5086 C7D3 85FD D734 67F2 8909" /* @þ®sP†ÇÓ…ý×4gò‰Æ */ - $"506D 36D8 2361 990C 802F A59E B603 9C94" /* Pm6Ø#a™.€/¥ž¶.œ” */ - $"F7BD AED9 8518 8651 DFFE 3D0E E920 E874" /* ÷½®Ù….†Qßþ=.é èt */ - $"FEB0 EE3C 3242 C249 4704 EEA8 9EFA DC61" /* þ°î<2BÂIG.úÜa */ - $"49C6 929E 2A9D 51CD FE0A FF02 3DDB 01EC" /* IÆ’ž*QÍþÂÿ.=Û.ì */ - $"80E8 630A B0C8 C9FC 7693 C60B 07E8 5D2F" /* €èc°ÈÉüv“Æ..è]/ */ - $"B97A 9F04 444E C836 DD68 FF12 EC9C 7E4F" /* ¹zŸ.DNÈ6Ýhÿ.ìœ~O */ - $"3CE9 83A8 191A 1E61 05F8 90FF 67E8 011A" /* <部...a.øÿgè.. */ - $"71EA 3EE8 AFBD 6328 ED84 9807 788D F3BC" /* qê>诽c(턘.xó¼ */ - $"2FA0 A210 7FFF 1D02 2519 4EC7 2A80 7FD0" /* / ¢..ÿ..%.NÇ*€.Ð */ - $"2064 A8F4 CC78 5EC8 88AF F1AB 868B 9F8D" /* d¨ôÌx^Ȉ¯ñ«†‹Ÿ */ - $"883E 3FDA D188 FBB7 3AFC 0C72 E01A CEF3" /* ˆ>?Úшû·:ü.rà.Îó */ - $"21E1 1718 4FDB 9A43 3767 424A 639B DFFE" /* !á..OÛšC7gBJc›ßþ */ - $"CA5F 7BA9 8F82 3EA6 6D4E 6986 6945 80DE" /* Ê_{©‚>¦mNi†iE€Þ */ - $"8274 4927 166A 6062 DF1D 0A72 F23B FA5A" /* ‚tI'.j`bß.Ârò;úZ */ - $"4DE4 5D19 54FC 488B 5237 FF5F 7B81 62C5" /* Mä].TüH‹R7ÿ_{bÅ */ - $"F6B7 B580 3016 11B6 22CF 63B8 428A D39A" /* ö·µ€0..¶"Ïc¸BŠÓš */ - $"5AC3 80FF 7310 8386 FF54 F361 304F 3BB5" /* ZÀÿs.ƒ†ÿTóa0O;µ */ - $"A7EB 0419 7DFB 6E56 20A8 3670 9018 9CB3" /* §ë..}ûnV ¨6p.œ³ */ - $"4B35 7082 32A7 E917 9CF8 FF7F FF80 0A6C" /* K5p‚2§é.œøÿ.ÿ€Âl */ - $"A48C 447E 3ECF 411D 89E4 F923 373B DCBE" /* ¤ŒD~>ÏA.‰äù#7;ܾ */ - $"2CE8 6580 0F87 1A23 1D93 62AE 48EF DEB8" /* ,èe€.‡.#.“b®HïÞ¸ */ - $"5DE8 DB68 1CA3 8D4B D3FE A476 7B3D ACAA" /* ]èÛh.£KÓþ¤v{=¬ª */ - $"284F 83EB 428F A201 D122 CB1A CCB2 C1FE" /* (OƒëB¢.Ñ"Ë.̲Áþ */ - $"367F 60D3 155D 8C00 22D8 ED33 D56B 1DE2" /* 6.`Ó.]Œ."Øí3Õk.â */ - $"98B0 A4A9 E041 2BF1 AA58 E78D 47E5 929F" /* ˜°¤©àA+ñªXçGå’Ÿ */ - $"85DA 699E C45A 0064 B931 CF2B 4169 44F0" /* …ÚižÄZ.d¹1Ï+AiDð */ - $"4B4F 083B 3D7C B2B2 D87B 785E 91A8 C614" /* KO.;=|²²Ø{x^‘¨Æ. */ - $"6EE6 A63C C8A7 B9E3 839D E245 4128 3BF9" /* næ¦<ȧ¹ãƒâEA(;ù */ - $"98CD 0C23 72EB E3A9 D21F 1BC2 4E13 274B" /* ˜Í.#rëã©Ò..ÂN.'K */ - $"19C8 CB39 5E7A D218 FBDB 0C42 51A1 1203" /* .ÈË9^zÒ.ûÛ.BQ¡.. */ - $"C0EB CDC2 9249 E461 1DE4 3DB6 FDFE 1334" /* ÀëÍÂ’Iäa.ä=¶ýþ.4 */ - $"1952 8231 CD71 A170 C55B 1FD0 6706 57F0" /* .R‚1Íq¡pÅ[.Ðg.Wð */ - $"282D 09A2 0893 A5BA 0314 43DD 32AF 3478" /* (-Æ¢.“¥º..CÝ2¯4x */ - $"EF6C 15F0 55C9 6A47 ECFE 3F3F 4DB4 5ED8" /* ïl.ðUÉjGìþ??M´^Ø */ - $"EFF8 8CA5 71F9 6669 078C 550C 943A 7046" /* ïøŒ¥qùfi.ŒU.”:pF */ - $"C031 6CE2 4681 4177 2913 CFE7 D857 C62A" /* À1lâFAw).ÏçØWÆ* */ - $"4652 88E2 8830 DF42 9C3D 2D76 E710 A8F1" /* FRˆâˆ0ßBœ=-vç.¨ñ */ - $"3626 45F2 55CC 008C EAB8 B891 A5F3 1AD2" /* 6&EòUÌ.Œê¸¸‘¥ó.Ò */ - $"AB11 6C48 3F18 40C0 51F0 DB88 0BD1 168C" /* «.lH?.@ÀQðÛˆ.Ñ.Œ */ - $"2E54 2DA6 CC60 BB05 4700 2C4E 179B 271B" /* .T-¦Ì`».G.,N.›'. */ - $"688C 1EE9 4D9A C781 8108 296B FE4F 028A" /* hŒ.éMšÇ.)kþO.Š */ - $"63D6 6EDF 6FEB FC17 BDFE 7A70 B48E D94E" /* cÖnßoëü.½þzp´ŽÙN */ - $"D985 3384 1BD2 B4C9 5213 B0D1 041B 876C" /* Ù…3„.Ò´ÉR.°Ñ..‡l */ - $"131C 4A9C 947B A79C A466 9779 E7C9 D2E1" /* ..Jœ”{§œ¤f—yçÉÒá */ - $"4E9F 0509 30E0 1115 E5C7 CAED 197B 818A" /* NŸ.Æ0à..åÇÊí.{Š */ - $"324D 8F8E ED44 BF44 5340 D647 1776 B983" /* 2MŽíD¿DS@ÖG.v¹ƒ */ - $"6D8C 88B1 6976 F7EB AFDB 6638 CAD3 F275" /* mŒˆ±iv÷ë¯Ûf8ÊÓòu */ - $"D93A 6CD3 9D6E C617 3969 D8E5 3059 947B" /* Ù:lÓnÆ.9iØå0Y”{ */ - $"6AFA 0E9B A19C 24C9 E1DC 089D 3545 89E4" /* jú.›¡œ$ÉáÜ.5E‰ä */ - $"E860 FB54 068C B464 EE9B 66B7 F267 34CF" /* è`ûT.Œ´dî›f·òg4Ï */ - $"1276 C6B2 47E6 8284 300B D1A9 1409 0C93" /* .vƲGæ‚„0.Ñ©.Æ.“ */ - $"E36A 8095 409A 7352 FF7A 0F50 A5E2 E678" /* ãj€•@šsRÿz.P¥âæx */ - $"C195 0898 E51E EB15 8D7A E918 29A6 D5CE" /* Á•.˜å.ë.zé.)¦ÕÎ */ - $"4DBC 978B 2CAA 9BA7 8727 EA1C 1C7A 6CC2" /* M¼—‹,ª›§‡'ê..zl */ - $"D172 DDF5 4BD4 9C69 607B 609F AEC8 FD84" /* ÑrÝõKÔœi`{`Ÿ®Èý„ */ - $"1DDA A076 C7E1 A7B1 F86C BC7E 1720 EB83" /* .Ú vÇá§±øl¼~. ëƒ */ - $"095B F1C8 7239 10FD 6A26 D10E 534B E257" /* Æ[ñÈr9.ýj&Ñ.SKâW */ - $"B691 5D92 6949 E7D8 7470 AA8C 421F F945" /* ¶‘]’iIçØtpªŒB.ùE */ - $"99F6 9492 B806 E264 47B0 4EF5 6206 734E" /* ™ö”’¸.âdG°Nõb.sN */ - $"944B 102F A688 23A4 EAB0 CCEA 0017 0156" /* ”K./¦ˆ#¤ê°Ìê...V */ - $"A8C9 2A3F FF49 4137 E23A 09D0 97BB 0E5F" /* ¨É*?ÿIA7â:ÆÐ—»._ */ - $"E2A2 2247 4980 6A20 B443 3E0B 0465 B9EF" /* â¢"GI€j ´C>..e¹ï */ - $"C490 B954 3AEA ABB7 3D53 111D 8897 551C" /* ĹT:ê«·=S..ˆ—U. */ - $"B865 1EA2 33F2 AD50 D488 1D6D 9733 27F3" /* ¸e.¢3ò­PÔˆ.m—3'ó */ - $"78AC C946 FB3C 4D2F 6580 1B3A 3368 3D54" /* x¬ÉFû1¤ ÀÌ»À²žwqOÞ */ - $"1679 23F1 DE12 5574 68E3 60A1 9C00 CBEC" /* .y#ñÞ.Uthã`¡œ.Ëì */ - $"9C44 9009 0000 08DE 28C3 2776 AAA2 829A" /* œDÆ...Þ(Ã'vª¢‚š */ - $"05E0 47E9 0001 48A9 672C 0775 EE58 F075" /* .àGé..H©g,.uîXðu */ - $"7458 B48A 5455 DB33 3524 BE73 1D7C E223" /* tX´ŠTUÛ35$¾s.|â# */ - $"4EC4 732C EC4B 128D 341C 790C 00A2 1309" /* NÄs,ìK.4.y..¢.Æ */ - $"2D0B 5EA7 B07B C82C 976B 68C2 642A F095" /* -.^§°{È,—khÂd*ð• */ - $"A1C4 010E C94E D8A9 34BB FD3E 2B2F 92EC" /* ¡Ä..ÉNØ©4»ý>+/’ì */ - $"30E1 A7B3 040B C920 3FFF 7FA1 317B 90F7" /* 0á§³..É ?ÿ.¡1{÷ */ - $"C744 40B8 8325 4036 82FB 0C6C D800 19C4" /* ÇD@¸ƒ%@6‚û.lØ..Ä */ - $"2631 C4B8 3160 8649 2492 4924 9248 A747" /* &1ĸ1`†I$’I$’H§G */ - $"3D41 A17D 23A6 9AC7 9000 0000 0000 0000" /* =A¡}#¦šÇ....... */ - $"0000 0019 1A70 8823 BB21 7C62 4556 F257" /* .....pˆ#»!|bEVòW */ - $"62C0 CF0B 72EE F37E 64EC 43C2 AE04 9F58" /* bÀÏ.rîó~dìC®.ŸX */ - $"94DC E128 91EC BAA2 DADD 57A7 D5F7 1972" /* ”Üá(‘캢ÚÝW§Õ÷.r */ - $"7543 9A9A 0DB3 C3FD 42E0 19A3 8F45 7FDF" /* uCšš.³ÃýBà.£E.ß */ - $"CEB1 A7E5 8A09 5B4A F9E6 294B C5DC 80C9" /* α§åŠÆ[Jùæ)KÅÜ€É */ - $"9AEE 0729 374F 04FD 79D6 7170 D940 14F0" /* šî.)7O.ýyÖqpÙ@.ð */ - $"830F 0B71 50E7 3C76 97AF 0F71 A32D DC5A" /* ƒ..qPçF2£• */ - $"57A3 0EC0 B3A3 969D 9DF0 6ACC 859F FF7F" /* W£.À³£–ðjÌ…Ÿÿ. */ - $"FF27 DAA0 AF8E 216C E5D8 874A 530F 555E" /* ÿ'Ú ¯Ž!l娇JS.U^ */ - $"AF3F E231 5BAF F7B6 8E73 5742 2717 4031" /* ¯?â1[¯÷¶ŽsWB'.@1 */ - $"175D 5FDA F402 B756 AEAE 7E7E BFEE CE68" /* .]_Úô.·V®®~~¿îÎh */ - $"7878 870D 01C2 C2A4 61D5 64E3 E195 B914" /* xx‡..¤aÕdãᕹ. */ - $"A45F FF52 DC14 F5E9 E037 65E3 5477 62A5" /* ¤_ÿRÜ.õéà7eãTwb¥ */ - $"3EEC CA32 6558 5965 8B6E 3F13 9DB2 1361" /* >ìÊ2eXYe‹n?.².a */ - $"8426 9FD7 B329 4E75 FF1D 9B78 9735 4B1B" /* „&Ÿ×³)Nuÿ.›x—5K. */ - $"D80E 1781 192F 6777 8F94 F6A2 5016 726D" /* Ø.../gw”ö¢P.rm */ - $"1E0D D2CB 6F87 B3C6 09A2 1FE3 915E 8943" /* ..ÒËo‡³ÆÆ¢.ã‘^‰C */ - $"FE6C 6743 4733 D5BC A9DD 5338 C9E1 AF50" /* þlgCG3Õ¼©ÝS8Éá¯P */ - $"3634 C26C 0C1F 94E7 50B2 4310 DD62 4F09" /* 64Âl..”çP²C.ÝbOÆ */ - $"ABCD 7821 8B7B 7B87 2EEA 25A1 9D3C 55CC" /* «Íx!‹{{‡.ê%¡Òúq%éø‡±‡ºÛ±... */ - $"93B3 4206 45ED 7238 3F80 1441 50CA CCBA" /* “³B.Eír8?€.APÊ̺ */ - $"EF59 3BC5 4236 2ABF 9150 7335 49C5 0216" /* ïY;ÅB6*¿‘Ps5IÅ.. */ - $"F97B D5A5 1EF5 A69D 8B34 C25B 73E1 DA52" /* ù{Õ¥.õ¦‹4Â[sáÚR */ - $"79E5 9EB1 9CB1 0952 B3F5 E221 D426 4759" /* yåž±œ±ÆR³õâ!Ô&GY */ - $"D5CF 2D18 CC2A 270A 859D F10C 8108 52FF" /* ÕÏ-.Ì*'Â…ñ..Rÿ */ - $"2A7D D39E EFFD 568C 2DB3 7BD5 62D0 2403" /* *}ÓžïýVŒ-³{ÕbÐ$. */ - $"69D1 A4B6 2D24 E485 973D F6A5 E6DC 1DB5" /* iѤ¶-$ä…—=ö¥æÜ.µ */ - $"BF0B E185 5592 E3A0 6046 E050 5151 9546" /* ¿.á…U’ã `FàPQQ•F */ - $"17F7 0CF6 222F 17E0 40E5 3EF5 74EE BAB6" /* .÷.ö"/.à@å>õt */ - $"55BD 76C1 DD80 39C8 BAE0 37B8 398A B370" /* U½vÁÝ€9Ⱥà7¸9гp */ - $"D400 0C29 5DC9 94FF 069B 36E2 CD79 195F" /* Ô..)]É”ÿ.›6âÍy._ */ - $"5B9B 1237 1F18 C560 C901 F9A4 184B 7570" /* [›.7..Å`É.ù¤.Kup */ - $"433E 75BE 0297 C641 7D9B 7092 8D64 96F5" /* C>u¾.—ÆA}›p’d–õ */ - $"D70C 9B66 71D3 09B1 F635 0FC3 0B49 7D6E" /* ×.›fqÓÆ±ö5.Ã.I}n */ - $"660C 8E1D 0257 672B 97EE C2A5 7B84 729E" /* f.Ž..Wg+—îÂ¥{„rž */ - $"6516 585E 354F 2E22 88A7 A515 B945 3745" /* e.X^5O."ˆ§¥.¹E7E */ - $"F6A5 5CB2 E212 10AD AB6F 07F5 FDA3 09EB" /* ö¥\²â..­«o.õý£Æë */ - $"A053 313B 9A8E 757D E132 D483 DC78 0882" /*  S1;šŽu}á2ÔƒÜx.‚ */ - $"A63C 95E0 036C 4626 F66B 5F6C 39A1 9401" /* ¦<•à.lF&ök_l9¡”. */ - $"7276 4DCE 4487 7D8C 12A3 B713 9139 AC0A" /* rvMÎD‡}Œ.£·.‘9¬Â */ - $"18AD 4DFD 2A3D 69E7 E76E 593C 8DAB FD56" /* .­Mý*=iççnY<«ýV */ - $"F959 BA6B FBA3 2853 D610 4DB0 7A30 3A09" /* ùYºkû£(SÖ.M°z0:Æ */ - $"916B DFF7 B3B4 F8D3 9619 0FD9 8FBC FC6B" /* ‘kß÷³´øÓ–..Ù¼ük */ - $"D73D ABD2 4C41 6AD0 6584 AF19 3074 AF6E" /* ×=«ÒLAjÐe„¯.0t¯n */ - $"369C BEB1 76D5 D311 6172 F157 D522 DDED" /* 6œ¾±vÕÓ.arñWÕ"Ýí */ - $"D4ED 0230 0BB5 E881 0E6B 9C4F 111F 4F6E" /* Ôí.0.µè.kœO..On */ - $"7CAD 4745 7BBF DA70 A9C4 051E FDEA 206C" /* |­GE{¿Úp©Ä..ýê l */ - $"9983 0E2D 4A4A A4DE 82E9 DAAF 5748 37AE" /* ™ƒ.-JJ¤Þ‚éÚ¯WH7® */ - $"4046 DCCB 0D1A 80DA 1804 20E2 F7CF AD69" /* @FÜË..€Ú.. â÷Ï­i */ - $"F9D8 5106 D02D 16E9 4437 9560 B618 1126" /* ùØQ.Ð-.éD7•`¶..& */ - $"95A2 4B23 89C4 78EE 898E D80C 8E49 5201" /* •¢K#‰ÄxØ.ŽIR. */ - $"2095 ABAF 9CA5 0F8E CB22 00D4 4289 59B3" /* •«¯œ¥.ŽË".ÔB‰Y³ */ - $"1835 1395 8AE5 3A88 7185 E7DD 57F3 4CE4" /* .5.•Šå:ˆq…çÝWóLä */ - $"1465 C878 6B72 7146 2AF1 F053 5B31 7697" /* .eÈxkrqF*ñðS[1v— */ - $"7300 A777 3919 099E BD1C 79C3 24C4 A355" /* s.§w9.Æž½.yÃ$Ä£U */ - $"0C88 C727 1831 D498 E513 47A5 F25F DDBE" /* .ˆÇ'.1Ô˜å.G¥ò_ݾ */ - $"46E7 40B5 EBCC 080F 6915 3FDF EDB9 A9B1" /* Fç@µëÌ..i.?ßí¹©± */ - $"39ED D794 60E1 A5A2 0EEC 7A09 46BF 201E" /* 9í×”`ᥢ.ìzÆF¿ . */ - $"311F EEEE 88EF C6C1 C10D E238 50C9 7F01" /* 1.îîˆïÆÁÁ.â8PÉ.. */ - $"DFF1 17BA D8F4 0017 47E7 75F2 4D82 679E" /* ßñ.ºØô..GçuòM‚gž */ - $"6867 60A4 6222 77B9 319B 186D FCB3 168A" /* hg`¤b"w¹1›.mü³.Š */ - $"EAF3 C227 1082 D7ED 2C70 E619 8676 0186" /* êóÂ'.‚×í,pæ.†v.† */ - $"8C23 5DE5 D4A0 61CB CDE4 AED5 E008 6F3C" /* Œ#]åÔ aËÍä®Õà.o< */ - $"D894 AC14 6FEC 5D4C C2FF 3A6C 512F E475" /* Ø”¬.oì]LÂÿ:lQ/äu */ - $"FCB8 DFA4 EB46 2DF4 E133 5858 364B 54E1" /* ü¸ß¤ëF-ôá3XX6KTá */ - $"A6E1 5D0C 157E D987 DF95 B1FB 3723 4F2F" /* ¦á]..~هߕ±û7#O/ */ - $"C9BF C6D4 D979 412E D0EB B285 8DFF 7CAC" /* É¿ÆÔÙyA.Ðë²…ÿ|¬ */ - $"F1BF 1825 8B89 9992 3848 C666 4184 4906" /* ñ¿.%‹‰™’8HÆfA„I. */ - $"0D61 6B58 9355 A5D9 C940 B6F2 6918 82E1" /* .akX“U¥ÙÉ@¶òi.‚á */ - $"FF7D 4F5F FE94 5208 650B B780 0D2B DD4F" /* ÿ}O_þ”R.e.·€.+ÝO */ - $"5874 3627 2353 6328 06B9 908C 6C95 D898" /* Xt6'#Sc(.¹Œl•ؘ */ - $"8C24 1D0F 641B 7763 CFBE E88A BB05 8639" /* Œ$..d.wcϾ芻.†9 */ - $"D91C 4A38 3A3F 75C6 61BD BFED CA10 2A73" /* Ù.J8:?uÆa½¿íÊ.*s */ - $"E3C5 E85C BF5B 0346 2105 4286 300D D812" /* ãÅè\¿[.F!.B†0.Ø. */ - $"8BE4 DAE4 292B A765 338E 7E42 50F1 8046" /* ‹äÚä)+§e3Ž~BPñ€F */ - $"3FDC 1A85 4616 61E5 7321 18D9 5AB9 8903" /* ?Ü.…F.aås!.ÙZ¹‰. */ - $"90BD 6F89 E7D0 35D1 0AA3 BBAE 3CF8 A7B7" /* ½o‰çÐ5Ñ£»®<ø§· */ - $"73C8 8B94 B409 16EC 60A6 E819 BCA7 BA66" /* sÈ‹”´Æ.ì`¦è.¼§ºf */ - $"2245 524C 718C 635D E4F7 ACA0 02C3 E0A7" /* "ERLqŒc]ä÷¬ .Ãà§ */ - $"B542 0FF5 7029 FF4D 1D88 E3B3 D657 802B" /* µB.õp)ÿM.ˆã³ÖW€+ */ - $"8068 9BD4 B17F 9A6B CC1C 4B53 246F 81E5" /* €h›Ô±.škÌ.KS$oå */ - $"9168 48EC 4B44 3FFF 7B8B 5777 5677 134E" /* ‘hHìKD?ÿ{‹WwVw.N */ - $"1B8E 8C91 429F CE85 86EF 62B4 71AF EAE7" /* .ŽŒ‘BŸÎ…†ïb´q¯êç */ - $"E333 7BD3 2825 7230 C950 0000 1B8D 8BA6" /* ã3{Ó(%r0ÉP...‹¦ */ - $"04C1 56DC 30F0 619E DD6C D196 C91E 1ED4" /* .ÁVÜ0ðažÝlÑ–É..Ô */ - $"1285 94A8 F775 05A9 3440 78FF 7E52 8833" /* .…”¨÷u.©4@xÿ~Rˆ3 */ - $"E8A1 A4E4 4580 38DD ADE1 3BD5 AD19 74E6" /* 衤äE€8Ý­á;Õ­.tæ */ - $"EEA1 B4B1 0B0B 9BE9 08EC DB78 E6AA 37E5" /* î¡´±..›é.ìÛxæª7å */ - $"AD06 72A6 51FC 0004 4737 BF1A 89FF 7E11" /* ­.r¦Qü..G7¿.‰ÿ~. */ - $"0A68 EAD7 BDA5 4D5B 2C8D 0C7A 952E 2190" /* Âhê×½¥M[,.z•.! */ - $"8451 1B38 CEFD 2835 5ADD BDA2 01C2 A3D6" /* „Q.8Îý(5Zݽ¢.壅 */ - $"6046 4BD8 41DF D8B6 D9B1 1F96 5FF8 CC56" /* `FKØAߨ¶Ù±.–_øÌV */ - $"A63B 6E14 5035 26D6 946D 1F59 4D17 5507" /* ¦;n.P5&Ö”m.YM.U. */ - $"85F7 2DAF A737 4E30 9097 2E2E DAF8 37D1" /* …÷-¯§7N0—..Úø7Ñ */ - $"D987 4E59 ABFD CDF3 AAC3 30D1 8616 FAB3" /* Ù‡NY«ýÍóªÃ0ц.ú³ */ - $"2914 92AA 6913 C36F 66DA 4B0B 18FE DD55" /* ).’ªi.ÃofÚK..þÝU */ - $"1D2A 3F00 D80C 2423 D923 95C6 E11D 0069" /* .*?.Ø.$#Ù#•Æá..i */ - $"B5C9 0803 0907 B950 13DF 48EC F794 3D36" /* µÉ..Æ.¹P.ßHì÷”=6 */ - $"5249 2492 4924 9249 2489 9EF6 DC36 9A6B" /* RI$’I$’I$‰žöÜ6šk */ - $"1751 415E A37F 47EC A4EA 67AC A222 733C" /* .QA^£.Gì¤êg¬¢"s< */ - $"467D 1FFE C727 E6AA 6E99 C584 A87E DFFF" /* F}.þÇ'æªn™Å„¨~ßÿ */ - $"7FC3 7592 8204 71A2 6088 C38B 6E65 868E" /* .Ãu’‚.q¢`ˆÃ‹ne†Ž */ - $"5A3F FF7F F919 4069 CF10 A302 5125 525C" /* Z?ÿ.ù.@iÏ.£.Q%R\ */ - $"A443 88AF 4104 7807 1410 84BA E955 76E8" /* ¤Cˆ¯A.x...„ºéUvè */ - $"5F35 B612 A668 5694 9249 2492 4924 9249" /* _5¶.¦hV”’I$’I$’I */ - $"2492 4924 4C25 1941 A4EB 1996 7A28 19C1" /* $’I$L%.A¤ë.–z(.Á */ - $"A1B0 01D7 ACB2 3F83 42DC D154 27C9 F11F" /* ¡°.׬²?ƒBÜÑT'Éñ. */ - $"FC46 90B1 89C4 F78A 4C6F 5C2A 833D 8425" /* üF±‰Ä÷ŠLo\*ƒ=„% */ - $"D837 CA14 E4C7 7F8A 9833 99B7 E589 1376" /* Ø7Ê.äÇ.Š˜3™·å‰.v */ - $"C867 FF1D 200A 4C9B 624E 68E3 11AE C8AF" /* Ègÿ. ÂL›bNhã.®È¯ */ - $"1723 C741 CEAC 16CE C548 72FF 15CD 3E67" /* .#ÇAά.ÎÅHrÿ.Í>g */ - $"AF2C 323F 0FD0 6752 4973 55BD CC10 05B4" /* ¯,2?.ÐgRIsU½Ì..´ */ - $"AB3F 9302 00C3 EE70 1BA4 B650 FAB2 5821" /* «?“..Ãîp.¤¶Pú²X! */ - $"3856 3872 1B02 7D70 F1F9 0B28 A9DC CAE7" /* 8V8r..}pñù.(©ÜÊç */ - $"D9E7 6252 A768 A7DE 0FB1 FCB1 F54B 98C4" /* ÙçbR§h§Þ.±ü±õK˜Ä */ - $"7B6E 5E24 BC53 F945 741F 66A0 A51E EE5A" /* {n^$¼SùEt.f ¥.îZ */ - $"2A0D B951 4EEE A88B 4F2F C326 F326 1D12" /* *.¹QNO/Ã&ó&.. */ - $"524A 9E48 CC53 44EF C54F 1737 8505 46CF" /* RJžHÌSDïÅO.7….FÏ */ - $"351E 4354 05C7 C832 2A7D 8899 D009 E617" /* 5.CT.ÇÈ2*}ˆ™ÐÆæ. */ - $"0334 305D 9497 D845 E6D3 2CD2 178F 1316" /* .40]”—ØEæÓ,Ò... */ - $"65AD 239E 2ED5 ECCB 402A E728 09B5 E847" /* e­#ž.ÕìË@*ç(ƵèG */ - $"65BD 3F31 CAC5 F9D8 6606 B8AF 4F84 89FE" /* e½?1ÊÅùØf.¸¯O„‰þ */ - $"9004 4730 30BC E58F 5FB3 38CF 36B9 38FC" /* .G00¼å_³8Ï6¹8ü */ - $"FB9D 07EA D13F 9DB9 7185 0E88 0E3B 06E5" /* û.êÑ?¹q….ˆ.;.å */ - $"D476 CFCA 1587 3067 9257 B5DF 1E83 E7FF" /* ÔvÏÊ.‡0g’Wµß.ƒçÿ */ - $"7FFF 7FFF 0E68 E181 AC15 B980 2AFB 1D80" /* .ÿ.ÿ.há¬.¹€*û.€ */ - $"C5BB A88D E36A 4DC5 94CF 6DB2 0694 F977" /* Å»¨ãjMÅ”Ïm².”ùw */ - $"D708 02D1 F380 6773 016A CA84 3B1C 6A33" /* ×..Ñó€gs.jÊ„;.j3 */ - $"5AAC BA2D FEC5 7542 51FC 68D0 CDDD EA44" /* Z¬º-þÅuBQühÐÍÝêD */ - $"788E 2F96 D80C F159 FF45 3316 1494 A7F5" /* xŽ/–Ø.ñYÿE3..”§õ */ - $"98B4 FC39 0062 D59B 52A6 32CB F97C ABD6" /* ˜´ü9.bÕ›R¦2Ëù|«Ö */ - $"42AE AE46 6AA7 D986 0A4E DCDD 717E 8B7C" /* B®®Fj§Ù†ÂNÜÝq~‹| */ - $"8FB8 B396 65A6 83FF 6A4A A5C1 597F 70AF" /* ¸³–e¦ƒÿjJ¥ÁY.p¯ */ - $"DC96 E2EC 0C1D 7A00 3428 2C60 DE32 8DB8" /* Ü–âì..z.4(,`Þ2¸ */ - $"1604 C249 5E82 1F5B 6C23 E562 B2D4 754E" /* ..ÂI^‚.[l#åb²ÔuN */ - $"7F73 442A 25D3 C42A 6A6D 5D09 0E8C 2E67" /* .sD*%ÓÄ*jm]Æ.Œ.g */ - $"95EC 08FE B505 8B5A A4A8 0000 0000 0000" /* •ì.þµ.‹Z¤¨...... */ - $"0000 0000 6121 26B3 27C3 AEC0 FF52 2FEE" /* ....a!&³'îÀÿR/î */ - $"D4F3 92BB 06E2 ABE4 35DC A278 9084 B2F0" /* Ôó’».â«ä5Ü¢x„²ð */ - $"EE1A ADB2 F770 3D4E 120A FD01 B042 CD00" /* î.­²÷p=N.Âý.°BÍ. */ - $"B9C2 B661 40B0 E5FC DC59 59F0 61C5 53A7" /* ¹Â¶a@°åüÜYYðaÅS§ */ - $"7AC1 7EDC 77B7 1C84 0F9A E321 389C E693" /* zÁ~Üw·.„.šã!8œæ“ */ - $"AC98 5160 DDD0 C9A9 BE17 ED52 A10A 300C" /* ¬˜Q`ÝÐÉ©¾.íR¡Â0. */ - $"88ED BB5A 80DA C23B 1196 0C7C 6BA8 D4EA" /* ˆí»Z€ÚÂ;.–.|k¨Ôê */ - $"4FAB 08A9 EBE3 1CC9 6782 F6A9 85A4 1829" /* O«.©ëã.Ég‚ö©…¤.) */ - $"48BB D188 41E8 65BA 28BB 8AC1 8368 DC2F" /* H»ÑˆAèeº(»ŠÁƒhÜ/ */ - $"B2DE 61FE 95C0 BD88 C027 9CD9 3819 8A81" /* ²Þaþ•À½ˆÀ'œÙ8.Š */ - $"20FF 616C DEAE C6EA 15A3 D12F 764A B4E2" /* ÿalÞ®Æê.£Ñ/vJ´â */ - $"ECA3 AF32 36FF 29B0 E3CD 5046 527E 39B7" /* 죯26ÿ)°ãÍPFR~9· */ - $"921A ABF8 F0CB 7040 5FCD A182 4C57 986D" /* ’.«øðËp@_Í¡‚LW˜m */ - $"1115 DD94 687C 3663 7CFB 6C40 642D C8CA" /* ..Ý”h|6c|ûl@d-ÈÊ */ - $"1117 B5A9 8025 123D 9406 58F9 96B5 321E" /* ..µ©€%.=”.Xù–µ2. */ - $"7646 4BFD 48DE 0B9B DBEF B79F B6C7 031E" /* vFKýHÞ.›Ûï·Ÿ¶Ç.. */ - $"1D3B 1D18 B35D 2813 5601 3924 6AE1 FC21" /* .;..³](.V.9$jáü! */ - $"60B9 0B9F 6B4B AFB9 15D8 C57A 5345 7461" /* `¹.ŸkK¯¹.ØÅzSEta */ - $"0EF9 4B6B 88D1 7833 02DF 4FB8 DBEC 836A" /* .ùKkˆÑx3.ßO¸Ûìƒj */ - $"BEA7 3972 93C0 F973 37B5 C84F 1655 031C" /* ¾§9r“Àùs7µÈO.U.. */ - $"674D 741E 308E E3BA 6684 5BB0 4506 AB40" /* gMt.0Žãºf„[°E.«@ */ - $"14DE BFF2 9B38 4026 C5C2 3A44 FDFF 25CB" /* .Þ¿ò›8@&ÅÂ:Dýÿ%Ë */ - $"072E 1D99 62E3 22B8 DE8D 9CF1 79FA 1D38" /* ...™bã"¸Þœñyú.8 */ - $"8900 17CB A72B 8124 7EAF CF2F FC8D 34D6" /* ‰..˧+$~¯Ï/ü4Ö */ - $"E0AC 58ED 8BC1 0DAA 7964 FB91 BF08 EFA6" /* à¬Xí‹Á.ªydû‘¿.ï¦ */ - $"42FF 7FFF 7FE3 AF13 7C4B 1CF4 D643 3CD3" /* Bÿ.ÿ.ã¯.|K.ôÖC<Ó */ - $"5F1A 08BB 7C56 5CFB 6D27 04DE C66A 9AF1" /* _..»|V\ûm'.ÞÆjšñ */ - $"2053 D4B2 EE60 44FF 2A89 1FFC DFCC 57C1" /* SÔ²î`Dÿ*‰.üßÌWÁ */ - $"3800 1290 7854 7902 FF7A 9A36 D71E F8D1" /* 8..xTy.ÿzš6×.øÑ */ - $"D439 471B D02F 4A39 E5BC D25F FDF0 8B54" /* Ô9G.Ð/J9å¼Ò_ýð‹T */ - $"AE0A 3677 2625 B286 7DEC 8FF7 2457 2B25" /* ®Â6w&%²†}ì÷$W+% */ - $"C066 2A4E A605 EE16 7244 CCFD D3D3 FDA1" /* Àf*N¦.î.rDÌýÓÓý¡ */ - $"F3B8 76C3 1C5F 491C 0165 8735 D71D 19AD" /* ó¸vÃ._I..e‡5×..­ */ - $"9BB1 A40D E5BA 9D1C E34B B71C 9CF0 EC7A" /* ›±¤.åº.ãK·.œðìz */ - $"5E87 C4F0 A326 0913 9E2C 6517 50A3 E72B" /* ^‡Äð£&Æ.ž,e.P£ç+ */ - $"87FE D348 2E5D 0A00 0000 0000 0000 0000" /* ‡þÓH.]Â......... */ - $"0002 2C86 A73D 4030 2FE4 D32C 2B56 C74C" /* ..,†§=@0/äÓ,+VÇL */ - $"0869 A5C9 151A 69B9 9390 DA50 4411 8FFF" /* .i¥É..i¹“ÚPD.ÿ */ - $"4938 4E36 F9DD 09FB E4A0 C339 2431 ED8B" /* I8N6ùÝÆûä Ã9$1í‹ */ - $"793D 6354 12C0 97F9 C379 ADA9 7DEE E5EF" /* y=cT.À—ùÃy­©}îåï */ - $"2366 FF4F E2A2 F01A C90F 02E3 51CD B477" /* #fÿOâ¢ð.É..ãQÍ´w */ - $"2230 690A B47C E28B 463C 2E88 7579 7943" /* "0i´|â‹F<.ˆuyyC */ - $"5055 6D0A EEC5 F3BF 2404 37D8 EFE1 71AC" /* PUmÂîÅó¿$.7Øïáq¬ */ - $"6AFE A3E4 A7EB 28BF BFFE 4373 E5FF 7E4A" /* jþ£ä§ë(¿¿þCsåÿ~J */ - $"2D5D 1ED3 6D78 1657 9914 A061 7958 972C" /* -].Ómx.W™. ayX—, */ - $"56FB D5B0 1FFD A18B 7A29 0C81 295B DF7C" /* VûÕ°.ý¡‹z).)[ß| */ - $"83E3 CD36 0E66 7E2B D8FA 3096 AA44 7F9B" /* ƒãÍ6.f~+Øú0–ªD.› */ - $"F0B9 EA48 8CC7 0FFF 7E1C F394 CC5B 6A25" /* ð¹êHŒÇ.ÿ~.ó”Ì[j% */ - $"FD4C CECC 630B 38B7 D621 F081 73EE 9D40" /* ýLÎÌc.8·Ö!ðsî@ */ - $"7FAD FADD 8111 6492 599E DD2C 3600 FF6C" /* .­úÝ.d’YžÝ,6.ÿl */ - $"5A8D B0B8 2AE7 668D C5A0 826B FA0D C5B1" /* Z°¸*çfÅ ‚kú.ű */ - $"6873 D749 B533 9627 C2F6 4922 63F7 8944" /* hs×Iµ3–'ÂöI"c÷‰D */ - $"15C5 A1F9 8539 A21A 1CEB 1C2D 7D1B 0516" /* .Å¡ù…9¢..ë.-}... */ - $"FD6C 5D4F 92A3 14D9 126F C5FC 4116 B499" /* ýl]O’£.Ù.oÅüA.´™ */ - $"D878 D889 9123 D3C8 4637 36E3 8644 6F0B" /* Øx؉‘#ÓÈF76ã†Do. */ - $"D2C6 A599 B793 1367 B548 23BD 8836 11E5" /* ÒÆ¥™·“.gµH#½ˆ6.å */ - $"C323 7AD5 0534 3D05 A4E6 70B3 0376 2B0C" /* Ã#zÕ.4=.¤æp³.v+. */ - $"A964 173B F0BC 2A52 7FE4 2A53 85C2 22B2" /* ©d.;ð¼*R.ä*S…Â"² */ - $"B83F 7185 FB4C 3769 5B3E 4A24 E7E1 D0FD" /* ¸?q…ûL7i[>J$çáÐý */ - $"9B17 8737 FE8B E4C7 9FC1 0E30 D904 D0C5" /* ›.‡7þ‹äÇŸÁ.0Ù.ÐÅ */ - $"D2F5 05E4 3CD6 5FA7 B9AF FB98 755E 0BAF" /* Òõ.ä<Ö_§¹¯û˜u^.¯ */ - $"E4EE 408D A8BE 5E58 07A6 059D 1B33 37F3" /* äî@¨¾^X.¦..37ó */ - $"8D14 871A 7FC6 43ED 6A6F 8F41 9681 095E" /* .‡..ÆCíjoA–Æ^ */ - $"EE46 5BA4 1E15 F5F2 3063 E524 A62A 7C7F" /* îF[¤..õò0cå$¦*|. */ - $"0E38 5D00 A378 8F6D 3861 2088 EDD7 AC24" /* .8].£xm8a ˆí׬$ */ - $"D3B6 B052 DE10 357D B65A 1414 4596 8E3D" /* Ó¶°RÞ.5}¶Z..E–Ž= */ - $"97E3 D838 9ACC 3C84 AF82 EA8D 8BD3 0180" /* —ãØ8šÌ<„¯‚ê‹Ó.€ */ - $"1582 0654 BB61 1047 ACA1 29D3 7CFA 00C8" /* .‚.T»a.G¬¡)Ó|ú.È */ - $"BABC 146B 250C 8D19 8A4E A8B3 50D6 B986" /* º¼.k%..ŠN¨³PÖ¹† */ - $"2AD6 CEFA 02D6 AE11 FF7C B0A2 E6E0 30E9" /* *ÖÎú.Ö®.ÿ|°¢æà0é */ - $"D904 4C03 3BC1 8B68 5892 30B8 7D69 C2D6" /* Ù.L.;Á‹hX’0¸}iÂÖ */ - $"A9F8 56A2 7417 1E31 186F 09A1 4C11 6DCA" /* ©øV¢t..1.oÆ¡L.mÊ */ - $"A62E 5FCC F59A CCE8 6A29 B0DF E2BC E8BF" /* ¦._ÌõšÌèj)°ßâ¼è¿ */ - $"92DF 70C1 8B09 21DF 1440 1684 4413 2A60" /* ’ßpÁ‹Æ!ß.@.„D.*` */ - $"E033 6D92 8573 E63C 2746 6F40 D8F0 D0C9" /* à3m’…sæ<'Fo@ØðÐÉ */ - $"10AF 85A2 CFBF 373B B250 85E4 C1D3 85D2" /* .¯…¢Ï¿7;²P…äÁÓ…Ò */ - $"E167 1222 DF4A 67D9 B3D6 55B4 B047 8675" /* ág."ßJgÙ³ÖU´°G†u */ - $"C803 6AE5 E5AE AF92 C4B7 591A A040 98AC" /* È.jå宯’Ä·Y. @˜¬ */ - $"4412 45F8 BBC8 6482 F7BD 81B2 98FE 9D0B" /* D.Eø»Èd‚÷½²˜þ. */ - $"DAB1 2959 952C 9115 3504 9A24 BBA4 A04C" /* Ú±)Y•,‘.5.š$»¤ L */ - $"4125 5810 54F5 C268 63C2 1DB9 11CF 85BB" /* A%X.TõÂhcÂ.¹.Ï…» */ - $"D941 F5A1 0239 DED3 856D BBE5 7CF3 49C3" /* ÙAõ¡.9ÞÓ…m»å|óIà */ - $"C9CF 1BD1 A953 F58A F9AF E704 E70E 43B7" /* ÉÏ.Ñ©SõŠù¯ç.ç.C· */ - $"2B51 BE14 4FF3 262C 914B 90AF F2A9 E060" /* +Q¾.Oó&,‘K¯ò©à` */ - $"6A24 6553 B776 C48D 19AD ECD3 2DD3 8ECF" /* j$eS·vÄ.­ìÓ-ÓŽÏ */ - $"9EC7 8A0D 97F4 3C69 6E56 0881 1136 C147" /* žÇŠ.—ôù.yzSº¤ôz */ - $"6926 DAD2 72F9 5D4B 1014 8BD5 A4FA 68EA" /* i&ÚÒrù]K..‹Õ¤úhê */ - $"D9F9 F684 BFD5 F2ED FB9E 4C18 91C3 FF17" /* Ùùö„¿ÕòíûžL.‘Ãÿ. */ - $"2D17 D99A DE29 FE6E 63A4 C901 8642 9357" /* -.ÙšÞ)þnc¤É.†B“W */ - $"3120 4386 1938 E7D2 572D 0C59 E3C9 7FED" /* 1 C†.8çÒW-.YãÉ.í */ - $"30FA E54A CEF8 A94C F92D AF19 76EA 3372" /* 0úåJÎø©Lù-¯.vê3r */ - $"B4E1 E7C5 8239 A4AC A247 4838 55E8 EB9B" /* ´áçÅ‚9¤¬¢GH8Uèë› */ - $"DE7D 94E9 DBD7 07FB D488 1672 E61D 9E4C" /* Þ}”éÛ×.ûÔˆ.ræ.žL */ - $"6DF2 97D5 4936 F89A 5CBC D37A 8C2C F7ED" /* mò—ÕI6øš\¼ÓzŒ,÷í */ - $"9755 19F2 0350 AB2E D851 F0B7 78B5 9770" /* —U.ò.P«.ØQð·xµ—p */ - $"4DF3 4212 9C9C CA3B 403A BA7B D497 9410" /* MóB.œœÊ;@:º{Ô—”. */ - $"04C6 288B 5058 5DC9 EB79 AB85 622C 9A55" /* .Æ(‹PX]Éëy«…b,šU */ - $"2DA7 C113 9315 7CAE D84E 6B50 4062 AE94" /* -§Á.“.|®ØNkP@b®” */ - $"8F5E 7969 4BA5 56B2 E881 8C02 ED3B 5259" /* ^yiK¥V²èŒ.í;RY */ - $"24CE C98A 4348 12B1 314F E3E3 B6A3 4E61" /* $ÎÉŠCH.±1Oãã¶£Na */ - $"A426 6350 E380 B0B5 DEFF 64CF 72D6 D4B9" /* ¤&cP〰µÞÿdÏrÖÔ¹ */ - $"907C 9BE0 7E4D 39F9 2BB7 C3DE D7C3 DCD8" /* |›à~M9ù+·ÃÞ×ÃÜØ */ - $"1F93 775F 0F44 DF0F A717 C3E9 D603 F269" /* .“w_.Dß.§.ÃéÖ.òi */ - $"FBE1 D36F 87B3 6F87 B280 E8AB DECC AF0D" /* ûáÓo‡³o‡²€è«Þ̯. */ - $"6C8A C695 8734 87EB A75F 5130 05EC 9BA8" /* lŠÆ•‡4‡ë§_Q0.웨 */ - $"78DB 85A2 680C 75A0 EDD1 4AA2 7E1B BAFF" /* xÛ…¢h.u íÑJ¢~.ºÿ */ - $"5AFC FD6C 3E36 A6D9 923A 2DCE 24BC 35EF" /* Züýl>6¦Ù’:-Î$¼5ï */ - $"27F4 8813 7CC4 0141 3CD9 9568 BFE6 BBB3" /* 'ôˆ.|Ä.A<Ù•h¿æ»³ */ - $"219B 0442 5227 3796 635D 0DE7 499A A701" /* !›.BR'7–c].çIš§. */ - $"7F74 FB13 F9DF E737 08AB 0A91 3D9E B77D" /* .tû.ùßç7.«Â‘=ž·} */ - $"E616 57BB 8BAF 7A0D 1B28 42E6 D653 6BD3" /* æ.W»‹¯z..(BæÖSkÓ */ - $"D7A8 9A2B 0905 6198 8809 E5D0 D0A4 F589" /* רš+Æ.a˜ˆÆåÐФõ‰ */ - $"3D04 8161 C4CB 7BC9 96E2 9DA4 1C59 C982" /* =.aÄË{É–â¤.YÉ‚ */ - $"4705 B1BE 1E05 E391 5E89 43FE 6C67 4342" /* G.±¾..ã‘^‰CþlgCB */ - $"636F 80C5 6A98 16E6 6B80 27C8 D0D9 B28C" /* co€Åj˜.æk€'ÈÐÙ²Œ */ - $"6FD4 E109 61AB 8FCB D4CB 19ED 2BE7 B510" /* oÔáÆa«ËÔË.í+çµ. */ - $"C0E8 5883 0642 92A1 6094 7E45 5D3F 819A" /* ÀèXƒ.B’¡`”~E]?š */ - $"4B6F AE8E ED0B 4B30 ABB1 2789 5C58 EEFD" /* Ko®Ží.K0«±'‰\Xîý */ - $"06C9 EF2B 2A12 1731 7581 4428 C72D 2501" /* .Éï+*..1uD(Ç-%. */ - $"2C14 0DA4 2C98 035F FEA8 51A2 0E61 4C50" /* ,..¤,˜._þ¨Q¢.aLP */ - $"4A65 60DE FA1C F36C 62D9 A3FA 93A6 4CAC" /* Je`Þú.ólbÙ£ú“¦L¬ */ - $"C1D0 079D 912F A133 724B 13CC AFF4 1382" /* ÁÐ.‘/¡3rK.̯ô.‚ */ - $"D61F 8AF2 A48B CCA6 5D66 4F61 E6BE 657B" /* Ö.Šò¤‹Ì¦]fOaæ¾e{ */ - $"7F5B 6F20 397A BBC2 3F23 86DF 2355 4A18" /* .[o 9z»Â?#†ß#UJ. */ - $"15DB CB3E 201F FF7C 4AC9 C764 B098 CA46" /* .ÛË> .ÿ|JÉÇd°˜ÊF */ - $"C2CF 44C6 42E7 D30A FD05 380F 6BD3 24C1" /* ÂÏDÆBçÓÂý.8.kÓ$Á */ - $"3998 C5C1 E7D5 0E2C 8D50 7FBB 7A11 6CB7" /* 9˜ÅÁçÕ.,P.»z.l· */ - $"B80F 5A84 44BE E746 C43C 6B5D F055 7A3B" /* ¸.Z„D¾çFÄ=.Èý.‡'Ç */ - $"F936 55E0 D0CE BF1A 50D8 51CE 6253 0293" /* ù6UàÐο.PØQÎbS.“ */ - $"1958 3FA2 BF6C 54A5 B158 4236 7F88 7DE4" /* .X?¢¿lT¥±XB6.ˆ}ä */ - $"C231 6D0B 62F1 2C6C 1A1D F8AA 0317 C52D" /* Â1m.bñ,l..øª..Å- */ - $"D9D5 0B61 312B A074 B2B8 1905 FCF9 A102" /* ÙÕ.a1+ t²¸..üù¡. */ - $"6188 616D 74E6 8232 245D 9C8A 4FD8 E2FD" /* aˆamtæ‚2$]œŠOØâý */ - $"0C6C 8F2E 5C82 5724 C542 3AE5 BA0A EE0B" /* .l.\‚W$ÅB:åºÂî. */ - $"2A14 BCDE 8005 4446 25B1 CF8A 6744 9F5C" /* *.¼Þ€.DF%±ÏŠgDŸ\ */ - $"9B09 6571 3003 9F52 A42A 7669 CCAA 7A75" /* ›Æeq0.ŸR¤*vi̪zu */ - $"F807 2530 7BA9 1474 F318 5A7B E64A 5DD7" /* ø.%0{©.tó.Z{æJ]× */ - $"A6F2 13B0 AFA5 7BF8 46DC CABF 4D80 CC26" /* ¦ò.°¯¥{øFÜÊ¿M€Ì& */ - $"5838 4016 3C05 4550 C62F 1504 5B79 0816" /* X8@.<.EPÆ/..[y.. */ - $"556C 8524 5DDA E914 92F1 3124 5C5B 3213" /* Ul…$]Úé.’ñ1$\[2. */ - $"7851 D9B8 EE79 46CF 3F06 1EAB 662A FD9E" /* xQÙ¸îyFÏ?..«f*ýž */ - $"E7D8 2E8C 938F 43FA B1B1 34B0 9207 34EC" /* çØ.Œ“Cú±±4°’.4ì */ - $"7A09 46BF 201E 311F EEEE 88EF C6C1 C10D" /* zÆF¿ .1.îîˆïÆÁÁ. */ - $"E238 50C9 7F01 DFF0 2170 EDD1 7471 8C14" /* â8PÉ..ßð!píÑtqŒ. */ - $"FB17 6678 A8B9 6611 9713 D8BB 8840 427C" /* û.fx¨¹f.—.Ø»ˆ@B| */ - $"8E5E 1608 D5E6 79B6 0BD7 3592 5D97 3864" /* Ž^..Õæy¶.×5’]—8d */ - $"71DF 6137 C0E6 2EB0 F71D 466C CFFF 50EF" /* qßa7Àæ.°÷.FlÏÿPï */ - $"FE99 2E4D 0DBB 537F 32F1 DECB D5D4 39DF" /* þ™.M.»S.2ñÞËÕÔ9ß */ - $"4FCC 2FC2 C399 8EB9 FC8B 2806 3FB7 F227" /* OÌ/ÂÃ™Ž¹ü‹(.?·ò' */ - $"BA12 A288 9858 9159 B6ED 0DBF 3DCC 8FA1" /* º.¢ˆ˜X‘Y¶í.¿=Ì¡ */ - $"9CF5 836D 499F B9E7 DB4E 497F D3A4 57BF" /* œõƒmIŸ¹çÛNI.Ó¤W¿ */ - $"9F0A EECE 8E29 127A 82FF 4222 75AC 32D4" /* ŸÂîÎŽ).z‚ÿB"u¬2Ô */ - $"6540 8040 4137 9EB4 EFFF 7FEC 9D37 60B4" /* e@€@A7ž´ïÿ.ì7`´ */ - $"184A 9567 71E4 F5FE 1C55 BB95 9FD8 BE6D" /* .J•gqäõþ.U»•ŸØ¾m */ - $"037F 052C 035B 91D7 903B 6EEC 1642 3D18" /* ...,.[‘×;nì.B=. */ - $"0B05 FEC5 4C0C 9ED3 BFA5 94AF CBB1 E725" /* ..þÅL.žÓ¿¥”¯Ë±ç% */ - $"DFC3 AF74 2485 D5A2 7F79 1275 C7DD ADE1" /* ßït$…Õ¢.y.uÇÝ­á */ - $"3BD5 AD19 74E6 EE9F 6846 7900 C09D 090B" /* ;Õ­.tæîŸhFy.ÀÆ. */ - $"C17C FB0F 2C9F 4DEB B9FE 7152 A47E B1CB" /* Á|û.,ŸMë¹þqR¤~±Ë */ - $"FB0E 7108 21C7 EFAB 8FA3 8AF0 2FDC 17A9" /* û.q.!Çï«£Šð/Ü.© */ - $"2565 5082 BEBF 4DDD 0699 3265 82AE D421" /* %eP‚¾¿MÝ.™2e‚®Ô! */ - $"3776 341F C56C ECDA B302 0306 AE5F 37FF" /* 7v4.ÅlìÚ³...®_7ÿ */ - $"7FB7 1192 8D68 5475 EE0B 4D80 6149 DEBB" /* .·.’hTuî.M€aIÞ» */ - $"F9A7 D7E7 A35D 9515 8000 4F04 C4D6 670C" /* ù§×ç£]•.€.O.ÄÖg. */ - $"54B7 93BB D264 43E0 E8D4 2D4D D3E2 AEB0" /* T·“»ÒdCàèÔ-MÓâ®° */ - $"FBAE F5BD A155 A8F2 07B4 AAA6 CE0A 84CC" /* û®õ½¡U¨ò.´ª¦ÎÂ„Ì */ - $"907F D5C4 9900 8FE2 0E0D F385 55A0 CDFF" /* .ÕÄ™.â..ó…U Íÿ */ - $"7FFE D776 193F A5C4 0334 DD15 7A6A 0890" /* .þ×v.?¥Ä.4Ý.zj. */ - $"DE98 5707 7799 9A5B D638 31B9 982B 5623" /* Þ˜W.w™š[Ö81¹˜+V# */ - $"3AFA A84A 20E7 417C F56E 7776 0C54 0765" /* :ú¨J çA|õnwv.T.e */ - $"91DE A19E 3DD2 4D8B F9F9 0D61 6343 0746" /* ‘Þ¡ž=ÒM‹ùù.acC.F */ - $"7D72 600B 4E15 FC8F 60FA A273 4348 A86E" /* }r`.N.ü`ú¢sCH¨n */ - $"E11A CD6B 3FFF 7ED1 E486 AAAA A380 045A" /* á.Ík?ÿ~Ñ䆪ª£€.Z */ - $"70E5 3753 4FFF 7FC6 ADBE 8E71 66FF 8165" /* på7SOÿ.Æ­¾Žqfÿe */ - $"D782 24E8 7399 0C15 03BF 29B5 5685 FDA1" /* ׂ$ès™...¿)µV…ý¡ */ - $"5BAD 5751 6D53 799A A7C6 572E 6A37 B46A" /* [­WQmSyš§ÆW.j7´j */ - $"B9BF 05BF 3131 F7DB E3B8 8F11 EE2F 13D6" /* ¹¿.¿11÷Ûã¸.î/.Ö */ - $"7DE9 D552 0B25 FEAF AEFE F0A7 FBE9 487F" /* }éÕR.%þ¯®þð§ûéH. */ - $"9085 0FFA 23FE A9DB 0494 B0E1 FEFD 1D50" /* ….ú#þ©Û.”°áþý.P */ - $"15B4 6548 AAA0 0182 C5FF 7D24 05C8 B15E" /* .´eHª .‚Åÿ}$.ȱ^ */ - $"E45F A508 3C68 CA73 3A57 A35E 462D 9213" /* ä_¥.^¥Fl¾.³äÞH.©}Æn. */ - $"05B3 2AD0 EF87 EFB1 6D03 06E4 85AB 36C6" /* .³*Ðï‡ï±m..ä…«6Æ */ - $"9BF6 8382 74F2 F321 62DF 269C 8D95 8FBD" /* ›öƒ‚tòó!bß&œ•½ */ - $"C4CA 7278 FDBA C51B A4FC C224 BD43 5F76" /* ÄÊrxýºÅ.¤üÂ$½C_v */ - $"F9D9 0970 5EAA 5F05 FDCB 50DE 35E7 A82E" /* ùÙÆp^ª_.ýËPÞ5ç¨. */ - $"1E7E 584D 33D8 EF90 B221 622F 778E 460D" /* .~XM3Øï²!b/wŽF. */ - $"6DC9 383F CF41 7B89 7414 97EF EFE2 CC75" /* mÉ8?ÏA{‰t.—ïïâÌu */ - $"8895 6AFD C6E8 610E 5E29 7AE1 FAAF 9FD5" /* ˆ•jýÆèa.^)záú¯ŸÕ */ - $"435F 3F61 6F9F AC78 7EAD 62BE 7DF7 7CFD" /* C_?aoŸ¬x~­b¾}÷|ý */ - $"D3FD 5BAF 83F5 5B37 CF6D BE7E 9DDF 3F4D" /* Óý[¯ƒõ[7Ïm¾~ß?M */ - $"80E8 ABDE CCAF 0D6C 8AC6 9587 348A 7A5A" /* €è«Þ̯.lŠÆ•‡4ŠzZ */ - $"21F6 5D05 F6A4 1727 AC99 8E36 4607 A805" /* !ö].ö¤.'¬™Ž6F.¨. */ - $"1CA8 FB12 6979 4216 6FCF DF65 6135 AFF9" /* .¨û.iyB.oÏßea5¯ù */ - $"5A1E 01C1 15A0 4F38 E547 6F65 858D 0788" /* Z..Á. O8åGoe….ˆ */ - $"49E3 07A2 D476 B767 EC21 FF65 559D 3B3F" /* Iã.¢Ôv·gì!ÿeU;? */ - $"B8A5 C1A8 6496 5183 24E6 93A6 DF2F 52F1" /* ¸¥Á¨d–Qƒ$擦ß/Rñ */ - $"19CA BFD7 1479 8040 2F9C 0DB9 00F0 49C5" /* .Ê¿×.y€@/œ.¹.ðIÅ */ - $"3D32 5B0C 9453 8D1F 452F D9E7 75FD CD61" /* =2[.”S.E/ÙçuýÍa */ - $"44A9 62C3 F0C8 BAF0 6A66 A4D4 AA8B 73B0" /* D©bÃðȺðjf¤Ôª‹s° */ - $"C942 686A 4A1E E3A7 2343 A0ED D595 9AFC" /* ÉBhjJ.ã§#C íÕ•šü */ - $"5546 0ACB FD23 6F2E DCEE ABBD 70E7 FA93" /* UFÂËý#o.Üpçú“ */ - $"3FFF 7FC5 7D31 FA1C D910 1C70 6CDC 3362" /* ?ÿ.Å}1ú.Ù..plÜ3b */ - $"B0A1 C6F3 16D1 BE51 73D2 4697 37CA 8197" /* °¡Æó.ѾQsÒF—7Ê— */ - $"A8C6 89C1 FF78 99EB 31B8 5F88 7B08 C557" /* ¨Æ‰Áÿx™ë1¸_ˆ{.ÅW */ - $"5483 A35C 0713 94D5 D2DF B84C 36CA D9EC" /* Tƒ£\..”ÕÒ߸L6ÊÙì */ - $"8FC7 A305 814F 8B04 07D2 E391 5E89 43FE" /* Ç£.O‹..Òã‘^‰Cþ */ - $"6C67 4343 91DB DD56 C1D2 FEA6 9F1F 346F" /* lgCC‘ÛÝVÁÒþ¦Ÿ.4o */ - $"714B 79E1 7AC7 53A1 9934 69F4 E886 5A9C" /* qKyázÇS¡™4iôè†Zœ */ - $"6F9A D26F DD48 5F60 A72A 7E20 77F8 1BE8" /* ošÒoÝH_`§*~ wø.è */ - $"91B9 9018 8124 7694 3664 4202 7B94 1007" /* ‘¹.$v”6dB.{”.. */ - $"4234 15FC 04A2 6DE0 DC6B 5EDE 4332 F592" /* B4.ü.¢màÜk^ÞC2õ’ */ - $"779A A3BD 8E84 5464 DE08 6BAE AE2F 6EEF" /* wš£½Ž„TdÞ.k®®/nï */ - $"CB75 5862 59D8 1362 5D60 79D2 137C 7606" /* ËuXbYØ.b]`yÒ.|v. */ - $"F2B1 06DE 8A2F B76A A7D9 84DB 8F52 1107" /* ò±.ÞŠ/·j§Ù„ÛR.. */ - $"A42C 9803 2476 0448 42C9 A9E5 D0F5 9110" /* ¤,˜.$v.HBÉ©åÐõ‘. */ - $"2FAB AAF4 0752 81C9 6064 B8F7 6CEB 438E" /* /«ªô.RÉ`d¸÷lëCŽ */ - $"DC4B 916C 21F0 1C8F 2A6A 1919 9E26 2B36" /* ÜK‘l!ð.*j..ž&+6 */ - $"3E51 F543 F7C5 2549 66D0 2F14 D18F 42F1" /* >QõC÷Å%IfÐ/.ÑBñ */ - $"397B BA52 99ED 853C E07D 629B 92A1 2589" /* 9{ºR™í…<à}b›’¡%‰ */ - $"B3A9 B812 DC8D A368 3204 F8AA 7549 AF2B" /* ³©¸.Ü£h2.øªuI¯+ */ - $"2DE7 529C 1ECB 9747 A4B8 F6EC 8DDC 0AC4" /* -çRœ.Ë—G¤¸öìÜÂÄ */ - $"2C31 F042 C407 3F18 FD32 9280 60E4 60D8" /* ,1ðBÄ.?.ý2’€`ä`Ø */ - $"77B5 C019 A5FF 6E0D 8E35 A78E C7AA E95B" /* wµÀ.¥ÿn.Ž5§ŽÇªé[ */ - $"D37C D883 5DD2 756B 385A 08BB 7708 AA5E" /* Ó|؃]Òuk8Z.»w.ª^ */ - $"5B89 0628 F831 7775 3555 A523 BF2F 721A" /* [‰.(ø1wu5U¥#¿/r. */ - $"099B E6B4 5128 9EA6 41E1 9B8B 18C1 928C" /* Æ›æ´Q(ž¦Aᛋ.Á’Œ */ - $"72A0 BD1E 84D6 836A C947 0982 284A 9238" /* r ½.„ÖƒjÉGÆ‚(J’8 */ - $"A06F E390 1BD5 BBFD 323F BA86 2091 BAD5" /*  oã.Õ»ý2?º† ‘ºÕ */ - $"351D 16C5 1D44 E8C7 66C7 D469 047D 5548" /* 5..Å.DèÇfÇÔi.}UH */ - $"7049 7B42 B682 DF4C 68DE B5D2 2EDC C105" /* pI{B¶‚ßLhÞµÒ.ÜÁ. */ - $"4047 9A7E 0403 F48B 6215 C3ED 8DBA 12E9" /* @Gš~..ô‹b.Ãíº.é */ - $"EEFB B61B 906E F6F6 DDFD D030 CD1C 47FD" /* îû¶.nööÝýÐ0Í.Gý */ - $"7C37 E7C7 DC08 213E 3C33 08E6 74A0 F400" /* |7çÇÜ.!><3.æt ô. */ - $"7CFC 3B85 1A2E 5ACA 573F F24C 7D2C 0E3B" /* |ü;…..ZÊW?òL},.; */ - $"2A6D CEDC 6C9C 6E97 A572 915F A892 3833" /* *mÎÜlœn—¥r‘_¨’83 */ - $"A08F 0070 A602 FB49 0EA6 62FC 4237 C568" /*  .p¦.ûI.¦büB7Åh */ - $"E937 1DC1 1FC2 C3F1 AA30 AC4D DDB8 E747" /* é7.Á.ÂÃñª0¬MݸçG */ - $"5EE4 FD73 8124 56EB ADBE 6DB3 F27B 80C0" /* ^äýs$Vë­¾m³ò{€À */ - $"E536 971B 511B C76B AB20 8BA4 4DCD BFCB" /* å6—.Q.Çk« ‹¤MÍ¿Ë */ - $"4A0C 34DC 3DDC 9BEF 5122 89D0 99D1 9BE7" /* J.4Ü=Ü›ïQ"‰Ð™Ñ›ç */ - $"8840 002A A77A 25E2 9C2C F9BC 78F9 FB0E" /* ˆ@.*§z%âœ,ù¼xùû. */ - $"0DB7 4F14 B07A 12F6 65D3 ABE1 660D A84A" /* .·O.°z.öeÓ«áf.¨J */ - $"EFF9 A799 1852 8ED0 9582 B79A D812 1BE6" /* ïù§™.RŽÐ•‚·šØ..æ */ - $"F3D0 D5FA 9C76 5EBD DBFD 42A9 F7B3 885E" /* óÐÕúœv^½ÛýB©÷³ˆ^ */ - $"4A68 DBE7 9663 FB7F 1AC4 5004 197F 97F0" /* JhÛç–cû..ÄP...—ð */ - $"F57B 135D 19ED E0E0 1C84 139C BA3B 2493" /* õ{.].íàà.„.œº;$“ */ - $"D997 333D B6A7 9E83 619C FCE9 9875 134D" /* Ù—3=¶§žƒaœüé˜u.M */ - $"4B31 FCB3 5808 B917 C8BB 0B67 4564 488E" /* K1ü³X.¹.È».gEdHŽ */ - $"3554 8125 C3A4 DB4A 0BB2 E501 244C 1F49" /* 5T%äÛJ.²å.$L.I */ - $"C6A7 51E4 6C51 A134 3DF4 CE21 2993 FF3B" /* ƧQälQ¡4=ôÎ!)“ÿ; */ - $"80F6 AE0B B9F8 D1D5 8853 4531 6806 4F3E" /* €ö®.¹øÑÕˆSE1h.O> */ - $"D2B6 5F62 796A 683C D3C9 A22B 6D56 C497" /* Ò¶_byjh<ÓÉ¢+mVÄ— */ - $"D854 2E14 C281 0F94 0220 BEE7 3754 D077" /* ØT..Â.”. ¾ç7TÐw */ - $"EDB0 0F0E 95C1 A40B 55C9 B5AE 4DA8 A8A6" /* í°..•Á¤.Uɵ®M¨¨¦ */ - $"ADD6 4A11 DE81 B148 70D3 FA4F 795C 9171" /* ­ÖJ.Þ±HpÓúOy\‘q */ - $"C72E 7EF2 454C 0336 BE4A EE68 960E 25BA" /* Ç.~òEL.6¾Jîh–.%º */ - $"E686 01F4 6FF5 3C7C 8B33 60D8 24D3 70A1" /* æ†.ôoõ<|‹3`Ø$Óp¡ */ - $"06C6 E616 29D4 63D6 3334 379F 743E 745D" /* .Ææ.)ÔcÖ347Ÿt>t] */ - $"4EF5 ECB5 072E 9F62 0750 F7BA 6FDE B6B0" /* Nõìµ..Ÿb.P÷ºoÞ¶° */ - $"0BD0 4FCC 8F59 9B13 0C77 0A30 9BAE DF36" /* .ÐOÌY›..wÂ0›®ß6 */ - $"B13D D861 E92A 12C7 EC7A 0946 BF20 1E31" /* ±=Øaé*.ÇìzÆF¿ .1 */ - $"1FEE EE88 EFC6 C1C1 0DE2 3850 C97F 01DF" /* .îîˆïÆÁÁ.â8PÉ..ß */ - $"F021 605A D52A 570D 7089 0C1B B3FE 8B4D" /* ð!`ZÕ*W.p‰..³þ‹M */ - $"E441 70AC 5F71 3FCE 527F EBF4 048A A307" /* äAp¬_q?ÎR.ëô.Š£. */ - $"CEFD 4EB0 87ED BFE2 A36C 51B9 EAD3 37C6" /* ÎýN°‡í¿â£lQ¹êÓ7Æ */ - $"E8F0 9A3D 8F78 8747 81D4 33F0 9EEB 5EA0" /* èðš=x‡GÔ3ðžë^  */ - $"6FE0 A580 6B6B C126 1CE3 F1B2 DC9C CFCE" /* oीkkÁ&.ãñ²ÜœÏÎ */ - $"42EE 7E91 EF2F 0DDF CFDE 75EB 554D 6941" /* Bî~‘ï/.ßÏÞuëUMiA */ - $"07A5 21BE AD52 7CC1 49B5 FE74 AE40 F70F" /* .¥!¾­R|ÁIµþt®@÷. */ - $"AB3B 0C16 98F5 7742 3DCE 842D 0B2B 2FEB" /* «;..˜õwB=΄-.+/ë */ - $"5E90 DEBC 8BA9 81AC 40CC 0030 2853 FE9C" /* ^Þ¼‹©¬@Ì.0(Sþœ */ - $"6FC2 569B 2CD1 6200 2881 802D 7697 8442" /* oÂV›,Ñb.(€-v—„B */ - $"92C8 666B BC90 3252 F4D3 9BD2 AD14 0027" /* ’Èfk¼2RôÓ›Ò­..' */ - $"CE11 F5A4 437B 3F80 B250 AA4C 23B6 AD83" /* Î.õ¤C{?€²PªL#¶­ƒ */ - $"277E 5EF0 8132 6331 9325 D1A3 CFB6 6F73" /* '~^ð2c1“%ѣ϶os */ - $"D37D 780F 91CC CD40 6234 2FE2 F097 1681" /* Ó}x.‘ÌÍ@b4/âð—. */ - $"6097 88BD BFFF 18F5 2CBB FF67 FDBC 2F07" /* `—ˆ½¿ÿ.õ,»ÿgý¼/. */ - $"67FF 7FFF 1946 84C7 A551 03FF 7F52 A7C2" /* gÿ.ÿ.F„Ç¥Q.ÿ.R§Â */ - $"8AC8 1080 56FF 0C48 1804 A884 A5A2 08FF" /* ŠÈ.€Vÿ.H..¨„¥¢.ÿ */ - $"7FF5 3220 8043 9005 C25D DE15 02FB 7F2B" /* .õ2 €C.Â]Þ..û.+ */ - $"8205 5CA8 40BE EFB1 78F0 2656 2AD4 14FF" /* ‚.\¨@¾ï±xð&V*Ô.ÿ */ - $"7505 20CD 8BE2 8B15 47BB 9E26 105E 15DD" /* u. Í‹â‹.G»ž&.^.Ý */ - $"21A7 82AE E19D FE27 5D8B DDAD E13B D5AD" /* !§‚®áþ']‹Ý­á;Õ­ */ - $"1974 E6EE 9F68 4679 00C0 9D09 0BC1 7CFB" /* .tæîŸhFy.ÀÆ.Á|û */ - $"0F2C 9F4E 082C 2CB4 569B A7B0 0009 E098" /* .,ŸN.,,´V›§°.Æà˜ */ - $"9AB0 9892 B1FF 6957 1D78 2613 4289 24C6" /* š°˜’±ÿiW.x&.B‰$Æ */ - $"12BC E2EF C9AE E6D9 784F C157 77AB 3470" /* .¼âïÉ®æÙxOÁWw«4p */ - $"D8C7 C746 1978 322D D4E9 FA24 B8B2 5054" /* ØÇÇF.x2-Ôéú$¸²PT */ - $"D643 8270 9090 D6D8 0C24 16E5 1146 421C" /* ÖC‚pÖØ.$.å.FB. */ - $"D6A2 40D9 1864 A800 0000 0000 0001 4554" /* Ö¢@Ù.d¨.......ET */ - $"031E 793B 33D3 FD4A CE0A 3D8A 9D46 37B0" /* ..y;3ÓýJÎÂ=ŠF7° */ - $"4D2C 6F04 2BFF 071C 023F E153 6688 1815" /* M,o.+ÿ...?áSfˆ.. */ - $"BA20 BF61 DDDF 2979 84E3 3348 50F6 E9B8" /* º ¿aÝß)y„ã3HPöé¸ */ - $"634A 8937 FF7F F1AE E84B C95A 771F 4C9C" /* cJ‰7ÿ.ñ®èKÉZw.Lœ */ - $"3FFE 0734 7D7F 6E35 4A2E 21E0 E52F FF7E" /* ?þ.4}.n5J.!àå/ÿ~ */ - $"8532 8513 7869 A6E6 495D 3E58 F349 1EF5" /* …2….xi¦æI]>XóI.õ */ - $"886C 6441 9091 82E8 0C24 1507 0E02 A105" /* ˆldA‘‚è.$....¡. */ - $"95C5 1409 096C 9A37 F758 F13A 5ABF 149E" /* •Å.ÆÆlš7÷Xñ:Z¿.ž */ - $"DA31 52E9 0DA9 0BFF 45EB 20C7 1A1C E54C" /* Ú1Ré.©.ÿEë Ç..åL */ - $"29D1 6C8E D1EC 9D59 F945 4303 373F FF7F" /* )ÑlŽÑìYùEC.7?ÿ. */ - $"CE95 B027 88F7 AB06 28B9 92E7 D540 BC2B" /* Ε°'ˆ÷«.(¹’çÕ@¼+ */ - $"7167 8C6C C87E 32B0 C904 7D7D 278E E519" /* qgŒlÈ~2°É.}}'Žå. */ - $"707D 2C42 1714 C425 F9D0 DC01 D910 23DB" /* p},B..Ä%ùÐÜ.Ù.#Û */ - $"E7F3 391C A4E6 FAE1 C850 5A1F 456A 6690" /* çó9.¤æúáÈPZ.Ejf */ - $"3F37 F970 3841 73D3 1095 39CF 10A3 40F8" /* ?7ùp8AsÓ.•9Ï.£@ø */ - $"4CCC 4985 E3D5 127F 7CF4 92BC DCE9 2335" /* LÌI…ãÕ..|ô’¼Üé#5 */ - $"43FB 7460 8D5C C121 CFF2 1165 1CCE BBB2" /* Cût`\Á!Ïò.e.λ² */ - $"5EA8 0279 2C97 E45B A43D 328C 7A6C 5EBC" /* ^¨.y,—ä[¤=2Œzl^¼ */ - $"61DD BB2C E34E 25E4 1725 3C6B EC12 BFEF" /* aÝ»,ãN%ä.%^ÂÏvmN‰x*Åñ8uZ */ - $"CBDD 8421 F74E 9A07 A070 16ED 100C 769A" /* ËÝ„!÷Nš. p.í..vš */ - $"6571 1FA0 4D62 8ADC A3F1 0AAA 2253 1A39" /* eq. MbŠÜ£ñª"S.9 */ - $"0006 DF51 B09A 2267 BA13 3AD9 0120 8520" /* ..ßQ°š"gº.:Ù. … */ - $"7375 BB11 0715 9FFF 7FFF 276F 9A44 4D02" /* su»...Ÿÿ.ÿ'ošDM. */ - $"9DF2 BE32 729A 8C71 FBC9 4C73 FA4B 1D24" /* ò¾2ršŒqûÉLsúK.$ */ - $"4115 B69E 4FFF 7FFF 45B5 7091 9925 CEBD" /* A.¶žOÿ.ÿEµp‘™%ν */ - $"6A4E 1AA3 BFFF 7FFD AA3B 4043 EE5A 76B0" /* jN.£¿ÿ.ýª;@CîZv° */ - $"A073 CF17 7A58 3A06 649C B972 3CB8 897B" /*  sÏ.zX:.dœ¹r<¸‰{ */ - $"31E2 637A 05AC 83FA B94C 0F75 7113 FF7B" /* 1âcz.¬ƒú¹L.uq.ÿ{ */ - $"E690 225A FB16 A961 626A B7FE 22EF 864B" /* æ"Zû.©abj·þ"ï†K */ - $"F464 1D62 4127 02B3 DB08 1C01 3ECE 1326" /* ôd.bA'.³Û...>Î.& */ - $"CF03 BF05 5771 4992 75FE 29FC 5FFF 60D5" /* Ï.¿.WqI’uþ)ü_ÿ`Õ */ - $"DCC3 1B1F 40FF 6990 DC69 3E47 D09A 6E6A" /* ÜÃ..@ÿiÜi>GКnj */ - $"2866 9BA8 D74C BAAA 204E 05F9 DBFE E679" /* (f›¨×Lºª N.ùÛþæy */ - $"E76C 383D 9F92 BB32 1E14 2CA1 CBD5 E93C" /* çl8=Ÿ’»2..,¡ËÕé< */ - $"6C00 DFA2 B04F D650 3F14 60FF 7F73 29C3" /* l.ߢ°OÖP?.`ÿ.s)à */ - $"E20E 5672 C31B 6D72 FDCF 8097 B8B0 1482" /* â.VrÃ.mrýÏ€—¸°.‚ */ - $"C37E 4C4A 28FA 6E67 F061 E00C 371B 8655" /* Ã~LJ(úngðaà.7.†U */ - $"BDCB 2942 6AB1 0E31 38D3 6948 0D3F 6FEF" /* ½Ë)Bj±.18ÓiH.?oï */ - $"C2AB 669A E502 2490 C158 FC07 05F0 348A" /* «fšå.$ÁXü..ð4Š */ - $"0505 F0B2 E7E3 F934 19DA 2DB9 9686 603E" /* ..ð²çãù4.Ú-¹–†`> */ - $"C2C3 4B2F EB95 FB4E 62D2 F085 4364 9DCA" /* ÂÃK/ë•ûNbÒð…CdÊ */ - $"A6E8 94F8 CC41 2603 5BFC 4E90 C05F 068D" /* ¦è”øÌA&.[üNÀ_. */ - $"414C 618C 8860 58B1 7059 0B4C 39E8 FB58" /* ALaŒˆ`X±pY.L9èûX */ - $"C413 43C6 BF39 CC12 6E5B F65C F671 DD29" /* Ä.CÆ¿9Ì.n[ö\öqÝ) */ - $"8A03 BC15 FF06 2028 49E4 BF04 E6FC D4FD" /* Š.¼.ÿ. (Iä¿.æüÔý */ - $"401A CB9C 5F7F EFE7 8F41 E707 7803 9F1A" /* @.Ëœ_.ïçAç.x.Ÿ. */ - $"715F 951E E63A 9B4C 1404 32AA B5B7 98B0" /* q_•.æ:›L..2ªµ·˜° */ - $"D5F4 CD69 DD15 9E81 D2FD 09F7 462D AF3E" /* ÕôÍiÝ.žÒýÆ÷F-¯> */ - $"31DA 85C4 5053 8460 C06C 7018 908C 4821" /* 1Ú…ÄPS„`Àlp.ŒH! */ - $"D8AB AC44 7666 44D1 EA04 8979 3A4A A0FE" /* Ø«¬DvfDÑê.‰y:J þ */ - $"27D7 B0C3 DBAA 5233 F376 3CA8 4968 DF8A" /* '×°ÃÛªR3óv<¨Ihߊ */ - $"874C 2117 6A15 4664 03FF 7FFF 7F7C 2D12" /* ‡L!.j.Fd.ÿ.ÿ.|-. */ - $"B28B 8A4C 6D72 1106 16E0 BF7F 9822 2424" /* ²‹ŠLmr...à¿.˜"$$ */ - $"3C1B CBC8 2F76 1AC7 FF7F FF7F EB42 22AA" /* <.ËÈ/v.Çÿ.ÿ.ëB"ª */ - $"F30A 0C9D 6086 E561 E1BC C1D9 4E7F FADF" /* óÂ.`†åaá¼ÁÙN.úß */ - $"A85C B34C E2D4 FCF6 1A29 34F3 3B42 1DFC" /* ¨\³LâÔüö.)4ó;B.ü */ - $"C6BD 370B D203 B0C4 1C7D C348 1EE7 EAD9" /* ƽ7.Ò.°Ä.}ÃH.çêÙ */ - $"3145 E7FB 36CC 8E64 AB70 81DC 65E1 2C1D" /* 1Eçû6ÌŽd«pÜeá,. */ - $"9CB5 18A0 1C95 7DE2 96DF C185 7A40 50C7" /* œµ. .•}â–ßÁ…z@PÇ */ - $"E32C FCC1 FF6B 14F5 05FE 0E1C 8757 8D82" /* ã,üÁÿk.õ.þ..‡W‚ */ - $"3A41 284E 2906 8316 564F F479 4DCF FF7E" /* :A(N).ƒ.VOôyMÏÿ~ */ - $"5F11 3745 AC7F ED8D BC93 4205 7E12 E036" /* _.7E¬.í¼“B.~.à6 */ - $"0BE4 4B4F F99C F369 6B38 263E 63EC 6311" /* .äKOùœóik8&>cìc. */ - $"D577 8B5D 7957 D24D 7D64 A2B5 1107 4625" /* Õw‹]yWÒM}d¢µ..F% */ - $"E1EB 2460 41A2 E878 5967 CEAE AE16 D8D5" /* áë$`A¢èxYgή®.ØÕ */ - $"F960 B484 0B49 7253 26F2 714E 6A13 03E4" /* ù`´„.IrS&òqNj..ä */ - $"A0C3 3924 31ED 8B79 3D63 5412 C097 F9C3" /*  Ã9$1í‹y=cT.À—ùà */ - $"79AD A97D EEE5 EF23 66FF 15BD C854 5DFB" /* y­©}îåï#fÿ.½ÈT]û */ - $"5921 E05C 6A39 B68E 6444 6D55 3B7D 6DDA" /* Y!à\j9¶ŽdDmU;}mÚ */ - $"9003 8F53 5C49 D978 31CD 41C5 DD62 7DE4" /* .S\IÙx1ÍAÅÝb}ä */ - $"2F24 5932 A14F 9C9C 97B6 2652 5988 7970" /* /$Y2¡Oœœ—¶&RYˆyp */ - $"F890 8A5C 9614 EBF4 DAC8 15D1 6F3C 07E4" /* øŠ\–.ëôÚÈ.Ño<.ä */ - $"7B8B F763 6803 394F 2291 8D88 EB1B 3136" /* {‹÷ch.9O"‘ˆë.16 */ - $"10C9 5077 060A 7DB0 A890 CB7B 947F AD8B" /* .ÉPw.Â}°¨Ë{”.­‹ */ - $"0AAF 67FF 5D78 615A E459 013B 6923 5E0E" /* ¯gÿ]xaZäY.;i#^. */ - $"900D BA9C DFF2 37D0 0508 B5F3 EA48 FADE" /* .ºœßò7Ð..µóêHúÞ */ - $"D348 3F2F 8E71 E6CD B6BE 8941 8773 0E17" /* ÓH?/ŽqæÍ¶¾‰A‡s.. */ - $"E97A B699 5A4F 21C1 0766 538B B29A B8CA" /* éz¶™ZO!Á.fS‹²š¸Ê */ - $"FBAE 21FA 76A0 B197 C613 E523 B127 1FE4" /* û®!úv ±—Æ.å#±'.ä */ - $"0AA8 798D 688E 8F27 E386 446F 0BD2 C6A5" /* ¨yhŽ'ã†Do.ÒÆ¥ */ - $"99B7 9313 67B5 4823 BD88 3611 E5A8 8054" /* ™·“.gµH#½ˆ6.娀T */ - $"3C15 C120 1B02 5B2A 2195 DD25 F90A 48A6" /* <.Á ..[*!•Ý%ùÂH¦ */ - $"BF92 56B9 4639 F2BD AC5F 3350 9699 14A7" /* ¿’V¹F9ò½¬_3P–™.§ */ - $"30A2 4B91 C33D 3175 F806 15AA 4B01 558F" /* 0¢K‘Ã=1uø..ªK.U */ - $"400B 8148 DAF5 29FD 0561 1CA8 7239 51F4" /* @.HÚõ)ý.a.¨r9Qô */ - $"A169 A92B EE2F 4F3D 2F96 029B 186B 7219" /* ¡i©+î/O=/–.›.kr. */ - $"C673 0E85 6FAC 9889 C64A 90AE DBAF E8E3" /* Æs.…o¬˜‰ÆJ®Û¯èã */ - $"6607 DF2A C332 C690 840A 817A ABFF 3302" /* f.ß*Ã2Æ„Âz«ÿ3. */ - $"1464 A65F E1B3 04B0 90C6 51E5 6A2E 7EA2" /* .d¦_á³.°ÆQåj.~¢ */ - $"9222 EABA 0632 2F13 B1A3 2337 85B4 E390" /* ’"êº.2/.±£#7…´ã */ - $"766A 98DB BDDD 9813 F7BD 8AEA 1AB2 BEEC" /* vj˜Û½Ý˜.÷½Šê.²¾ì */ - $"BEE3 F4B7 EE35 6BB8 ADE1 E772 AEB0 7E66" /* ¾ãô·î5k¸­áçr®°~f */ - $"3F99 05C1 3339 69B2 C1D5 4CC7 DB0B 3C67" /* ?™.Á39i²ÁÕLÇÛ.üv¡œ®.Èh._Æ */ - $"A1BE 16D4 3BF4 91C9 6CF1 DBE0 E0CA 0DAA" /* ¡¾.Ô;ô‘ÉlñÛààÊ.ª */ - $"EFCB 2A06 908B 7BAC CCF3 4CF8 179A 615E" /* ïË*.‹{¬ÌóLø.ša^ */ - $"590D AB18 CB49 E032 B8ED 2A8E 584A ACDC" /* Y.«.ËIà2¸í*ŽXJ¬Ü */ - $"4797 F732 B8C9 24A4 0E5C 85A0 FED8 E30A" /* G—÷2¸É$¤.\… þØã */ - $"ECBF 08FB CDC1 E09D 9556 837A E086 95AC" /* ì¿.ûÍÁà•Vƒzà†•¬ */ - $"BA2C E411 756E F132 9CE6 EDC4 6C90 B09E" /* º,ä.unñ2œæíÄl°ž */ - $"3C59 DE78 44D0 E445 BCA0 3AE0 05D9 7440" /* ÞÞGi */ - $"289C 5523 9792 EFAC 19A6 A945 B504 9446" /* (œU#—’ï¬.¦©Eµ.”F */ - $"A4DF BAA6 B5EB BAEF 7B92 3E08 6D17 870F" /* ¤ßº¦µëºï{’>.m.‡. */ - $"9E0A 487E 8A60 90B5 E555 CD4F D2F1 FE67" /* žÂH~Š`µåUÍOÒñþg */ - $"88DE BB6A E653 A2B6 F9C7 B226 2544 A167" /* ˆÞ»jæS¢¶ùDz&%D¡g */ - $"5DF7 5F35 F38B DB99 30F8 C210 AF41 C7A4" /* ]÷_5ó‹Û™0øÂ.¯AǤ */ - $"167B 30B4 8B8D 0821 4ADB EFC6 5728 A86D" /* .{0´‹.!JÛïÆW(¨m */ - $"99A8 2A1D 51E2 4CE5 AEA5 7ECC 23CB 628B" /* ™¨*.QâL宥~Ì#Ëb‹ */ - $"E438 F41A A280 CF2E 8E51 5004 A9BA 64AB" /* ä8ô.¢€Ï.ŽQP.©ºd« */ - $"B0AA 608C 8C19 38F7 567B 0C45 B7C5 0E2D" /* °ª`ŒŒ.8÷V{.E·Å.- */ - $"0F3D A192 B0F5 A567 4EE1 9FF5 F085 979A" /* .=¡’°õ¥gNáŸõð…—š */ - $"13DA 6FC3 89D0 0370 C986 5F44 AADD CAB9" /* .ÚoÉÐ.pɆ_DªÝʹ */ - $"FBD0 8CDE 18D9 8FED 715E 264F 0D69 2CEF" /* ûÐŒÞ.Ùíq^&O.i,ï */ - $"63F0 7A64 D65B 094A 6976 E6D4 E3DC 1583" /* cðzdÖ[ÆJivæÔãÜ.ƒ */ - $"FE8C BD22 992E 3FDB AF18 03A7 0A74 8333" /* þŒ½"™.?Û¯..§Âtƒ3 */ - $"76E3 5195 C7FA A180 5123 7E0C 544B 9C8C" /* vãQ•Çú¡€Q#~.TKœŒ */ - $"928D 3DF6 F330 4D6E 8049 11AF 064E 4E3B" /* ’=öó0Mn€I.¯.NN; */ - $"B937 EE03 A4D2 F530 4513 47F0 5E98 E060" /* ¹7î.¤Òõ0E.Gð^˜à` */ - $"72C6 46EC B761 FAB4 B0FA 9A80 FF78 5408" /* rÆFì·aú´°úš€ÿxT. */ - $"9152 452E 0111 2383 5E5F 6C4F FC53 0EDE" /* ‘RE...#ƒ^_lOüS.Þ */ - $"1092 66D3 5F38 1AC8 1412 561A 4017 9110" /* .’fÓ_8.È..V.@.‘. */ - $"CA19 3E6F 8803 0908 5F57 A2E2 4744 E3C4" /* Ê.>oˆ.Æ._W¢âGDãÄ */ - $"F1BF 49F6 836F E294 610B 4098 2761 1502" /* ñ¿Iöƒoâ”a.@˜'a.. */ - $"CCB2 0C11 81DD 05B4 ACD8 8F28 C5DD 1DD8" /* ̲..Ý.´¬Ø(ÅÝ.Ø */ - $"58E0 C1E1 70A8 42BF 456F FE20 1261 1F81" /* XàÁáp¨B¿Eoþ .a. */ - $"08AC FEB1 F89C 3576 EF94 A20C 255F 3B3F" /* .¬þ±øœ5v.%_;? */ - $"5E6B B0C0 4B3F EADC 8536 55E9 8144 C946" /* ^k°ÀK?êÜ…6UéDÉF */ - $"7613 8662 DCB1 C761 2BDA 412D C7D6 2D5C" /* v.†bܱÇa+ÚA-ÇÖ-\ */ - $"BCC0 F84E 54E4 9B0B BDF7 4F45 FCA6 D6AE" /* ¼ÀøNTä›.½÷OEü¦Ö® */ - $"1754 31D1 E6CB 94F4 D163 2B1D 017D 4171" /* .T1ÑæË”ôÑc+..}Aq */ - $"ABE0 0285 395D 3D23 42D7 E641 348A 0C2E" /* «à.…9]=#B׿A4Š.. */ - $"9C16 42C9 8E99 B654 8046 C365 EA71 CE64" /* œ.BÉŽ™¶T€FÃeêqÎd */ - $"B762 0E4D 7C48 617B CDB9 6264 2C81 4A9F" /* ·b.M|Ha{͹bd,JŸ */ - $"8600 50B2 B985 EB73 DB96 82EA FF7D 1E50" /* †.P²¹…ësÛ–‚êÿ}.P */ - $"6A49 AEA3 78E3 2DFD 0D59 3013 F257 AAA9" /* jI®£xã-ý.Y0.òWª© */ - $"0E5D 81DA E983 8D48 41BE DF0B FB34 AEA5" /* .]ÚéƒHA¾ß.û4®¥ */ - $"07B6 B0AA 1E53 1D9F B9C7 4CE5 8D46 6151" /* .¶°ª.S.Ÿ¹ÇLåFaQ */ - $"8000 0C24 1D66 1946 1073 4456 2361 E486" /* €..$.f.F.sDV#aä† */ - $"120F 29F0 6121 2D6A AF51 0C82 F68C B571" /* ..)ða!-j¯Q.‚öŒµq */ - $"77AD BE59 9145 D105 DE8C 9500 0000 0000" /* w­¾Y‘EÑ.ÞŒ•..... */ - $"0000 0032 BC9A BD52 00B4 6C6F 3753 1A96" /* ...2¼š½R.´lo7S.– */ - $"9B00 FCD3 F055 A11A AFB1 FB95 1610 88D0" /* ›.üÓðU¡.¯±û•..ˆÐ */ - $"8D32 9653 FC10 55FD B965 C1A9 B6BD 2245" /* 2–Sü.Uý¹eÁ©¶½"E */ - $"D48B 8230 2EF5 56F1 6618 9F91 FEC4 4106" /* Ô‹‚0.õVñf.Ÿ‘þÄA. */ - $"F23B 7C8A 0320 79EA D7A0 D75F 09BD B985" /* ò;|Š. yê× ×_ƽ¹… */ - $"C22B E2F0 0508 64BA AA2F 2414 19D7 311D" /* Â+âð..dºª/$..×1. */ - $"F709 E05C 809B 9E62 83F8 FF13 2DE3 01D6" /* ÷Æà\€›žbƒøÿ.-ã.Ö */ - $"8ADC F118 5A80 77C8 DABC 2FB5 CEF6 FCFB" /* ŠÜñ.Z€wÈÚ¼/µÎöüû */ - $"7A94 2773 6CEC FAE2 7865 753C E612 E4AF" /* z”'slìúâxeu<æ.ä¯ */ - $"657C 5C67 8FB3 1E56 A319 1ED1 FE48 0D8D" /* e|\g³.V£..ÑþH. */ - $"2431 B10B 8E15 0A4B FF7F 7EB8 D068 5015" /* $1±.Ž.ÂKÿ.~¸ÐhP. */ - $"151E C37C 0390 F6CC 64A8 0000 0000 0000" /* ..Ã|.öÌd¨...... */ - $"0000 0002 5991 79E8 2B17 082C ABCB DA90" /* ....Y‘yè+..,«ËÚ */ - $"CE92 8CB0 E992 0710 2B8F CAAB D217 C4E9" /* Î’Œ°é’..+Ê«Ò.Äé */ - $"E55E 11D2 6200 B530 5EF4 6932 1CBF EA6C" /* å^.Òb.µ0^ôi2.¿êl */ - $"E58D 2AA9 68C2 89FF 7903 A6ED D674 F1FC" /* å*©h‰ÿy.¦íÖtñü */ - $"A256 3564 F7E0 4DDF CDA1 2729 F7FF 6EB2" /* ¢V5d÷àMßÍ¡')÷ÿn² */ - $"9D35 70A9 5447 924B B8E1 71D3 4A8A DECB" /* 5p©TG’K¸áqÓJŠÞË */ - $"93E1 8FA0 140E C9B7 6124 8020 D660 3D22" /* “á ..É·a$€ Ö`=" */ - $"C708 222E 7289 B890 0002 00E1 2BC6 84B9" /* Ç.".r‰¸...á+Æ„¹ */ - $"25DF 442F 97FF 7FEF 68EC 7325 B92C A150" /* %ßD/—ÿ.ïhìs%¹,¡P */ - $"EE19 48C3 2540 0000 0000 0000 0000 0749" /* î.HÃ%@.........I */ - $"DD4A 9891 375B B0E0 C176 A698 672E F295" /* ÝJ˜‘7[°àÁv¦˜g.ò• */ - $"0311 7B3E 2B87 B4B8 7FB3 5DF7 9C67 CBEA" /* ..{>+‡´¸.³]÷œgËê */ - $"6A19 4107 C9F4 2B19 6829 179A 3FFF 7E8C" /* j.A.Éô+.h).š?ÿ~Œ */ - $"44A2 15E8 8E37 B422 F825 1862 58FF 7FFE" /* D¢.èŽ7´"ø%.bXÿ.þ */ - $"8EA1 D38C 727A 3071 1FF0 541F 6AB4 EA83" /* Ž¡ÓŒrz0q.ðT.j´êƒ */ - $"44A0 086A BAD7 6966 FC5D 0E72 A66C C301" /* D .jº×ifü].r¦lÃ. */ - $"3E1F B82C 9192 20D5 0322 858F 224C 87F5" /* >.¸,‘’ Õ."…"L‡õ */ - $"E940 85ED 7B36 EC96 D05C 21FF 7B10 59E1" /* é@…í{6ì–Ð\!ÿ{.Yá */ - $"E125 6C79 7852 2031 F3BA 34FB 6E57 BC3B" /* á%lyxR 1óº4ûnW¼; */ - $"69F0 C303 3A2A A573 D1E0 9836 C703 D02C" /* iðÃ.:*¥sÑà˜6Ç.Ð, */ - $"58CC 3DA7 FF0D 4301 F607 07C1 31FA 7F66" /* XÌ=§ÿ.C.ö..Á1ú.f */ - $"89BD A759 90CD 107A E5BD 6398 D7BE F7BB" /* ‰½§YÍ.zå½c˜×¾÷» */ - $"E273 D09A F8EE D21B 1015 A513 18F5 5C7D" /* âsКøîÒ...¥..õ\} */ - $"FD20 E7C9 C6BE 3105 7A4B 831D 251B 4C36" /* ý çÉÆ¾1.zKƒ.%.L6 */ - $"2A49 3EAC 1A86 9F87 09CC 0B00 2CF4 643C" /* *I>¬.†Ÿ‡ÆÌ..,ôd< */ - $"7012 8574 D28F 952D E959 1093 FE7E F021" /* p.…tÒ•-éY.“þ~ð! */ - $"028C 74ED 0E90 8DCD 5F06 B4BE EA1A 4C53" /* .Œtí.Í_.´¾ê.LS */ - $"A47F 3706 93CB 8FAB 7864 D123 4A39 B6BA" /* ¤.7.“Ë«xdÑ#J9¶º */ - $"CDCB 8AA9 2128 54FA CFB5 C4E1 F470 AD6E" /* ÍËŠ©!(TúϵÄáôp­n */ - $"6A05 07C9 72AA 562E F22F C922 BCF9 7DDF" /* j..ÉrªV.ò/É"¼ù}ß */ - $"3565 1AD4 F707 7DC0 1038 129E 4EA0 297E" /* 5e.Ô÷.}À.8.žN )~ */ - $"1037 3516 64BB FF75 539A 5C03 F7A3 C14D" /* .75.d»ÿuSš\.÷£ÁM */ - $"C617 50C8 14F1 7C95 0372 1443 C3F0 7ED4" /* Æ.PÈ.ñ|•.r.CÃð~Ô */ - $"EFDA FA88 BDD2 E947 7A43 A4A3 2339 CD58" /* ïÚúˆ½ÒéGzC¤£#9ÍX */ - $"526C 8407 8211 1949 6431 DB89 390B EB27" /* Rl„.‚..Id1Û‰9.ë' */ - $"9975 F04F D507 AC80 5D51 95B0 992A 1AC6" /* ™uðOÕ.¬€]Q•°™*.Æ */ - $"8699 86CC E64E 441C 2EFD 4F8C 70C1 DB2A" /* †™†ÌæND..ýOŒpÁÛ* */ - $"5395 8DF7 E279 AA65 BA32 2FD1 48C9 F400" /* S•÷âyªeº2/ÑHÉô. */ - $"D0EA 663D 92FF 053E 130C A1A9 491B E583" /* Ðêf=’ÿ.>..¡©I.åƒ */ - $"6133 2EE1 AFBE 86B8 D218 B698 906D A5B9" /* a3.᯾†¸Ò.¶˜m¥¹ */ - $"ACD3 9DC7 8720 C668 E134 1A1C 9C71 EA49" /* ¬ÓLJ Æhá4..œqêI */ - $"7AE9 9276 56E9 78BB 5679 18E2 6044 2763" /* zé’vVéx»Vy.â`D'c */ - $"2342 64F4 3952 2712 F704 B2E8 C1D2 35CC" /* #Bdô9R'.÷.²èÁÒ5Ì */ - $"F0AB 5ABD 61A0 1CD5 5316 0E78 22E6 B807" /* ð«Z½a .ÕS..x"æ¸. */ - $"8774 CA36 91EF 0BFF D969 6330 3900 00D1" /* ‡tÊ6‘ï.ÿÙic09..Ñ */ - $"2300 0000 0C6A 5020 200D 0A87 0A00 0000" /* #....jP .‡Â... */ - $"1466 7479 706A 7032 2000 0000 006A 7032" /* .ftypjp2 ....jp2 */ - $"2000 0000 4F6A 7032 6800 0000 1669 6864" /* ...Ojp2h....ihd */ - $"7200 0002 0000 0002 0000 0407 0701 0000" /* r............... */ - $"0000 0F63 6F6C 7201 0000 0000 0010 0000" /* ...colr......... */ - $"0022 6364 6566 0004 0000 0000 0001 0003" /* ."cdef.......... */ - $"0001 0000 0001 0000 0002 0002 0000 0003" /* ................ */ - $"0000 0000 6A70 3263 FF4F FF51 0032 0000" /* ....jp2cÿOÿQ.2.. */ - $"0000 0200 0000 0200 0000 0000 0000 0000" /* ................ */ - $"0000 0200 0000 0200 0000 0000 0000 0000" /* ................ */ - $"0004 0701 0107 0101 0701 0107 0101 FF52" /* ..............ÿR */ - $"000C 0000 0001 0105 0404 0001 FF5C 0013" /* ............ÿ\.. */ - $"2050 5858 6058 5860 5858 6058 5858 5050" /* PXX`XX`XX`XXXPP */ - $"58FF 6400 1100 014B 616B 6164 752D 7635" /* Xÿd....Kakadu-v5 */ - $"2E32 2E31 FF90 000A 0000 0000 D036 0001" /* .2.1ÿ.Â....Ð6.. */ - $"FF93 CFC2 DC03 54F9 36EC A8DC 2A8C 3701" /* ÿ“ÏÂÜ.Tù6ì¨Ü*Œ7. */ - $"118B 95C3 F2B2 5A7A 0428 C30A 2C64 B704" /* .‹•Ãò²Zz.(ÃÂ,d·. */ - $"5C3C 6DED 8696 4890 6404 5638 430C 59C5" /* \VFK)D.Ž */ - $"CB0C F4C7 E144 47E1 47C1 F6BD 8089 21DB" /* Ë.ôÇáDGáGÁö½€‰!Û */ - $"8279 4533 01BF B9CC C444 AD53 5F75 D706" /* ‚yE3.¿¹ÌÄD­S_u×. */ - $"3FDD CA27 5D6C 9F54 1CCF F838 38E4 B2E4" /* ?ÝÊ']lŸT.Ïø88ä²ä */ - $"F9FF 429F 59FE D27B 4A5E A69F 2C21 38F6" /* ùÿBŸYþÒ{J^¦Ÿ,!8ö */ - $"5A74 D405 2FEE 50B8 E5F1 C489 2693 5B33" /* ZtÔ./îP¸åñĉ&“[3 */ - $"D2C2 9DEC 68ED F55C 1FAC 1401 8D66 795A" /* ÒÂìhíõ\.¬..fyZ */ - $"F5F3 27A3 5874 6681 9AC6 F41D A4E6 40DA" /* õó'£XtfšÆô.¤æ@Ú */ - $"3EE5 CCEE 340C AF72 87FD 6B2A EB94 88EC" /* >åÌî4.¯r‡ýk*딈ì */ - $"A61D A536 7AC2 C6B8 85D9 CEBD 146C 83B5" /* ¦.¥6zÂÆ¸…Ùν.lƒµ */ - $"F5E0 A3C7 B524 BC64 B6B5 91A6 BF91 C547" /* õà£Çµ$¼d¶µ‘¦¿‘ÅG */ - $"BD87 811F D58E 8E51 BB89 FA6C 5257 33D9" /* ½‡.ÕŽŽQ»‰úlRW3Ù */ - $"A964 A4AB 3BB9 9608 BECC 0D9C D6B9 3D3A" /* ©d¤«;¹–.¾Ì.œÖ¹=: */ - $"CB64 28BE 3B07 6318 DF9D C134 9F16 567A" /* Ëd(¾;.c.ßÁ4Ÿ.Vz */ - $"8127 5FFD F396 BA0C B86F AA17 2301 022A" /* '_ýó–º.¸oª.#..* */ - $"3742 CE95 B1AF F858 C503 8156 35E0 8F2C" /* 7BΕ±¯øXÅ.V5à, */ - $"67D7 2D41 1F0B 5284 1535 AF16 6540 FB65" /* g×-A..R„.5¯.e@ûe */ - $"65BC 5F6B 136D 73A5 1C5D 3D92 FF5F 8494" /* e¼_k.ms¥.]=’ÿ_„” */ - $"FDBF E0C5 821F 072A 0EEB B855 6B42 CEE8" /* ý¿àÅ‚..*.ë¸UkBÎè */ - $"ABEE 381E 894E DF1E 29DD 4B78 3F0A F5EB" /* «î8.‰Nß.)ÝKx?Âõë */ - $"B9F8 61B8 8266 3BD8 A2AC 5BC1 38F4 5098" /* ¹øa¸‚f;Ø¢¬[Á8ôP˜ */ - $"3951 2437 1798 7BF9 EA00 12BF CF3E 9166" /* 9Q$7.˜{ùê..¿Ï>‘f */ - $"8253 6FF0 B942 70D7 C729 0866 33F7 3484" /* ‚Soð¹Bp×Ç).f3÷4„ */ - $"ADF8 C3D2 4EF6 1DF4 0E6F 8E64 B470 1D5E" /* ­øÃÒNö.ô.oŽd´p.^ */ - $"F311 9BD1 EDE1 BA5D 7601 2053 D70A FDCD" /* ó.›Ñíáº]v. S×ÂýÍ */ - $"82C0 1BDA A35C FAD2 67AD E569 7851 10A7" /* ‚À.Ú£\úÒg­åixQ.§ */ - $"EF9A 3533 EC03 E813 08B6 D984 1A1D 3DC0" /* ïš53ì.è..¶Ù„..=À */ - $"7C8E E03E 4A44 03E4 7894 FF1F 080E 2BFD" /* |Žà>JD.äx”ÿ...+ý */ - $"EEB4 E64A C757 389B 5780 3AF8 248C 580D" /* î´æJÇW8›W€:ø$ŒX. */ - $"461B D417 66BA CEB2 2042 3C84 DAF9 C127" /* F.Ô.fºÎ² B<„ÚùÁ' */ - $"63E9 168C A9E3 D418 61E8 C46C CF01 F59B" /* cé.Œ©ãÔ.aèÄlÏ.õ› */ - $"4518 8833 3E62 5B14 BFD1 41A8 45D6 D311" /* E.ˆ3>b[.¿ÑA¨EÖÓ. */ - $"8431 80DB 1FD5 5839 DE81 BCD9 EAFB EE26" /* „1€Û.ÕX9Þ¼Ùêûî& */ - $"33DD 9E73 0B6F F957 26EE E7BA E0DA FF22" /* 3Ýžs.oùW&îçºàÚÿ" */ - $"EA50 24BF A182 089D 749A 6AAF BFF2 224D" /* êP$¿¡‚.tšj¯¿ò"M */ - $"30D4 11D0 E07A A012 587A 0633 92B4 CBFC" /* 0Ô.Ðàz .Xz.3’´Ëü */ - $"8E1B E5AC 9025 A74D 2819 3F9D 8132 B795" /* Ž.å¬%§M(.?2·• */ - $"458E 4651 1589 158D D24C A5B0 CBFA 359E" /* EŽFQ.‰.ÒL¥°Ëú5ž */ - $"BDB0 E4FB BFE3 5854 3E88 A646 71B1 9CB2" /* ½°äû¿ãXT>ˆ¦Fq±œ² */ - $"BB4E BA8E E170 8CBF C1F5 3141 F537 C0FA" /* »NºŽápŒ¿Áõ1Aõ7Àú */ - $"9780 6448 BA3B 94D6 3E8B 7AF0 0B5A C7A2" /* —€dHº;”Ö>‹zð.ZÇ¢ */ - $"4D05 C6BB 7F47 7102 F66E E4E8 3681 1C97" /* M.Æ».Gq.önäè6.— */ - $"0996 4491 F713 2A24 3756 2715 4B55 762F" /* Æ–D‘÷.*$7V'.KUv/ */ - $"78CB 2608 0563 73F7 5626 9F35 0C54 6822" /* xË&..cs÷V&Ÿ5.Th" */ - $"F061 792A 4AFC 163A 9F83 8F82 638B 524D" /* ðay*Jü.:Ÿƒ‚c‹RM */ - $"C21C 3735 DB76 6F4B 01F2 3E7E 5755 5945" /* Â.75ÛvoK.ò>~WUYE */ - $"6149 AAEE 1A88 7748 DC47 79E4 0660 318C" /* aIªî.ˆwHÜGyä.`1Œ */ - $"AA94 E92D 9879 C9C1 AC17 C828 7BBB 997A" /* ª”é-˜yÉÁ¬.È({»™z */ - $"315E 858F F31D 3522 A6D2 B3BD E548 DBA2" /* 1^…ó.5"¦Ò³½åHÛ¢ */ - $"3274 749B 11C1 9570 D715 0350 4CC4 6820" /* 2tt›.Á•p×..PLÄh */ - $"560A 8542 A38D 913B 3863 FF5C 97F2 9BA5" /* VÂ…B£‘;8cÿ\—ò›¥ */ - $"893F 6C9B 15A2 EE40 BCD6 2676 80A9 AC89" /* ‰?l›.¢î@¼Ö&v€©¬‰ */ - $"9054 849D 859C 8DCD 181B 64F4 6D7B 71B4" /* T„…œÍ..dôm{q´ */ - $"FBD3 0C84 21D4 CC6C CF84 F40A A3CD C958" /* ûÓ.„!ÔÌlÏ„ô£ÍÉX */ - $"928E 97E5 346C 6497 2888 7903 5B0B 3277" /* ’Ž—å4ld—(ˆy.[.2w */ - $"B4D6 9AA4 86C3 C691 CA1A 3C92 FCFB 02DE" /* ´Öš¤†ÃÆ‘Ê.<’üû.Þ */ - $"A25E 5C5C C6A8 1CE2 F5B5 88AB 3673 F912" /* ¢^\\ƨ.âõµˆ«6sù. */ - $"96AF E6BC 67FF 40CC 068D C6E3 8435 48AF" /* –¯æ¼gÿ@Ì.Æã„5H¯ */ - $"B929 F509 0F59 3410 A9A6 1087 8352 11EC" /* ¹)õÆ.Y4.©¦.‡ƒR.ì */ - $"23CF CD2E 3F05 487E 0740 9BE7 236F 56FB" /* #ÏÍ.?.H~.@›ç#oVû */ - $"D0F4 677F 9514 C6E9 50BB A61A 6135 73FB" /* Ðôg.•.ÆéP»¦.a5sû */ - $"37AA FA5C 0967 671C 8485 5326 6EB5 4955" /* 7ªú\Ægg.„…S&nµIU */ - $"1AAE 5FCE C271 D992 9E8C B0DF 7795 E0F2" /* .®_ÎÂqÙ’žŒ°ßw•àò */ - $"A17A B50F E53A FE12 756F D1A1 5CE1 7C9B" /* ¡zµ.å:þ.uoÑ¡\á|› */ - $"D185 2C1A 9224 BC62 5C98 FA35 1649 6EA7" /* Ñ…,.’$¼b\˜ú5.In§ */ - $"4C7C C191 DF92 9D7A 6FE9 71D9 9A11 5A19" /* L|Á‘ß’zoéqÙš.Z. */ - $"214D F951 38FA C459 E39A 6DAE 1253 31DF" /* !MùQ8úÄYãšm®.S1ß */ - $"B335 3337 39D2 7591 BFC1 31E6 887A 8BAB" /* ³5379Òu‘¿Á1æˆz‹« */ - $"ECCD 7A58 8E4A AD65 A7E1 5FC6 8EB0 DA82" /* ìÍzXŽJ­e§á_ÆŽ°Ú‚ */ - $"0F81 6849 5CE5 AB32 B763 1227 3F4C 5691" /* .hI\å«2·c.'?LV‘ */ - $"43C7 DD24 E8D9 C4F3 7BB0 4666 7A24 1C5B" /* CÇÝ$èÙÄó{°Ffz$.[ */ - $"F57D 719F 2BDB 3794 66BA BBB6 9D8D A662" /* õ}qŸ+Û7”fº»¶¦b */ - $"CF99 4DDC E533 96D6 EEE0 3FC7 BFB8 B1B7" /* Ï™MÜå3–Öîà?Ç¿¸±· */ - $"9AE3 57C7 E1A8 B1F8 6C5C 3F0D 19C1 812D" /* šãWÇᨱøl\?..Á- */ - $"8D31 C88B C396 B5E7 3CE0 4E2C AE73 7876" /* 1ȋÖµç<àN,®sxv */ - $"0436 A295 BEC6 BDF1 C604 C41C 94E6 E7C1" /* .6¢•¾Æ½ñÆ.Ä.”æçÁ */ - $"AC78 356A B92A DB37 3360 3372 6638 0C5C" /* ¬x5j¹*Û73`3rf8.\ */ - $"F388 7CDE 4045 060F E713 C4C3 321E E08B" /* óˆ|Þ@E..ç.ÄÃ2.à‹ */ - $"0810 71EE A6AB C032 2B85 C34C 2671 8143" /* ..qÀ2+…ÃL&qC */ - $"AFDE 07D1 A40C D86A ADBE B961 EAA3 54BD" /* ¯Þ.Ѥ.Øj­¾¹aê£T½ */ - $"804D 6FA9 AA3F 7FBE BCD9 E785 A230 EA4E" /* €Mo©ª?.¾¼Ùç…¢0êN */ - $"1C08 1DF6 8373 7754 5039 7854 1192 1512" /* ...öƒswTP9xT.’.. */ - $"B956 E9A7 575E E3DB F5F9 4B02 F739 F2BB" /* ¹Vé§W^ãÛõùK.÷9ò» */ - $"91B2 73E1 3D19 EBB6 AD2F 291C 5BAC 5EEA" /* ‘²sá=.ë¶­/).[¬^ê */ - $"EEDF 8DA7 5FCA 8E8C 952D 8FD0 441C 5BA4" /* îß§_ÊŽŒ•-ÐD.[¤ */ - $"8AF6 21BE 1FAF DAE3 DADD EA91 EF73 58A0" /* Šö!¾.¯ÚãÚÝê‘ïsX  */ - $"29E6 89B2 E279 B02A D092 DD08 6187 9095" /* )扲ây°*Ð’Ý.a‡• */ - $"5C85 C903 0DD2 9ED3 538B D9BB E936 8ABB" /* \…É..ÒžÓS‹Ù»é6Š» */ - $"E203 DD03 2944 5317 7BC3 0297 2125 F198" /* â.Ý.)DS.{Ã.—!%ñ˜ */ - $"D117 8DDB E382 71F8 D0A7 14B1 6D7A A0EB" /* Ñ.Ûã‚qøÐ§.±mz ë */ - $"7C6F 7651 D2EC ECA7 F670 D09F 6CF6 30DB" /* |ovQÒìì§öpПlö0Û */ - $"0830 39B5 BC45 3915 4054 4490 A7BA 5CEC" /* .09µ¼E9.@TD§º\ì */ - $"D37B FBC2 7890 B18F DEEA 4966 D46D 5FD2" /* Ó{ûÂx±ÞêIfÔm_Ò */ - $"7811 AAD0 8EBF FB40 0F30 D8A4 2B71 5A03" /* x.ªÐŽ¿û@.0ؤ+qZ. */ - $"636A C360 C889 891D D420 A828 E337 41CC" /* cjÃ`ȉ‰.Ô ¨(ã7AÌ */ - $"3314 5473 B91F 7B78 2B3B AC7A 1127 F2DE" /* 3.Ts¹.{x+;¬z.'òÞ */ - $"E997 2101 6008 26AE 43D5 7CE7 8532 B9CE" /* é—!.`.&®CÕ|ç…2¹Î */ - $"A81A 710E 5D87 49D7 3EF6 65A3 D533 977E" /* ¨.q.]‡I×>öe£Õ3—~ */ - $"7BE9 0CA7 8B28 9ADA AF4F 45A5 99BD E21D" /* {é.§‹(šÚ¯OE¥™½â. */ - $"D4B1 BB33 2508 C8D1 31E5 E9FB F917 A8E1" /* Ô±»3%.ÈÑ1åéûù.¨á */ - $"2955 9008 F531 9010 575A 3AFB 59F4 CD63" /* )U.õ1.WZ:ûYôÍc */ - $"3EEE 2409 BCD4 E5F1 1418 6155 B6D7 A94B" /* >î$ƼÔåñ..aU¶×©K */ - $"1D48 79A8 2F32 0770 476B CE28 023A DC86" /* .Hy¨/2.pGkÎ(.:܆ */ - $"E008 813B E64A 39F5 58CE 3E75 DAA6 BD7A" /* à.;æJ9õXÎ>uÚ¦½z */ - $"1528 FF50 0738 C132 5569 3C99 C4BC A20F" /* .(ÿP.8Á2Ui<™Ä¼¢. */ - $"6DED 9310 6FE1 8BE4 BF4D D0B1 993E 0FD3" /* mí“.oá‹ä¿Mб™>.Ó */ - $"4938 1302 E4A8 FDA2 A7D2 4615 CD89 1E52" /* I8..ä¨ý¢§ÒF.͉.R */ - $"4160 51F8 BABB FEED 4281 0E0C 31CD 91D7" /* A`Qøº»þíB..1Í‘× */ - $"C7CF E302 E155 4188 0F06 097F 6906 2EC9" /* ÇÏã.áUAˆ..Æ.i..É */ - $"BE00 A1FB 0D99 8FB1 3B3D E3D3 70B8 4296" /* ¾.¡û.™±;=ãÓp¸B– */ - $"F199 E066 15B5 920C 38A2 695F F2E8 81E1" /* ñ™àf.µ’.8¢i_òèá */ - $"E0EC 34E5 97B3 9580 459F A2D9 E267 B847" /* àì4å—³•€EŸ¢Ùâg¸G */ - $"E302 3AA0 8631 8C61 5F8E 88DE 2FBB 394B" /* ã.: †1Œa_ŽˆÞ/»9K */ - $"B9EC 234B 6515 BDF3 BA80 AA30 3D50 2F90" /* ¹ì#Ke.½óº€ª0=P/ */ - $"C26A D743 2198 707A 2DC1 9C64 1647 1FA3" /* Âj×C!˜pz-Áœd.G.£ */ - $"43A2 B1C7 C95D 1E19 9650 E616 F24B C118" /* C¢±ÇÉ]..–Pæ.òKÁ. */ - $"FB68 CE23 485E BF50 ACF8 F669 B5A3 92AA" /* ûhÎ#H^¿P¬øöiµ£’ª */ - $"5625 BF48 8584 A6E7 DAC0 E203 2AF0 89A0" /* V%¿H…„¦çÚÀâ.*ð‰  */ - $"DB92 4924 9249 1BF5 D855 0470 51D0 AAE2" /* Û’I$’I.õØU.pQЪâ */ - $"A1E5 FBC9 CB80 1798 2EB3 EB1E 9FD4 46E7" /* ¡åûÉË€.˜.³ë.ŸÔFç */ - $"63DB F02E 204B D35F 54DE 0FD3 2F81 FB63" /* cÛð. KÓ_TÞ.Ó/ûc */ - $"9CEC 37F1 C9FF 5B63 B13D BFBD 1169 0415" /* œì7ñÉÿ[c±=¿½.i.. */ - $"0E97 DA89 25E3 92C7 01F5 50E6 2181 A536" /* .—Ú‰%ã’Ç.õPæ!¥6 */ - $"4020 C49B 1977 1BF5 5226 FD7D 668A D76F" /* @ Ä›.w.õR&ý}fŠ×o */ - $"2954 58F1 F44F 2935 F136 18BD C844 05FD" /* )TXñôO)5ñ6.½ÈD.ý */ - $"E325 9012 9E92 6EC3 E822 D06F A958 C54C" /* ã%.ž’nÃè"Ðo©XÅL */ - $"6A4D 0A98 093C 481D 1424 7964 E810 7A60" /* jMÂ˜Æ */ - $"C450 03B7 E8DE 17B3 9CE7 02E1 BE72 100B" /* ÄP.·èÞ.³œç.á¾r.. */ - $"2EF5 787D 0D12 FC3B 855A 3F97 1850 05EF" /* .õx}..ü;…Z?—.P.ï */ - $"A05D 7CC2 405B BA6D 9175 7C99 BE1C 2370" /*  ]|Â@[ºm‘u|™¾.#p */ - $"1F57 2085 13F8 B672 728D 1152 8232 1EE4" /* .W ….ø¶rr.R‚2.ä */ - $"A666 BFD0 06A8 6CFF 3D73 D895 5968 A54A" /* ¦f¿Ð.¨lÿ=sØ•Yh¥J */ - $"3219 63AB D4CD 8E7D 52F3 D260 CE4D E329" /* 2.c«ÔÍŽ}RóÒ`ÎMã) */ - $"F554 C837 34CC 2866 FA1E 1F34 B209 B8C3" /* õTÈ74Ì(fú..4²Æ¸Ã */ - $"097B 8DBC 8788 F621 2A57 5468 5FD8 852B" /* Æ{¼‡ˆö!*WTh_Ø…+ */ - $"08A9 45F3 71A8 A26B F63C 2DB1 750F A833" /* .©Eóq¨¢kö<-±u.¨3 */ - $"4767 6D8A B551 FF10 9E54 AD5D EE2E 2207" /* GgmеQÿ.žT­]î.". */ - $"44EA 0D21 75D4 779D E96D 49FF 47CE D775" /* Dê.!uÔwémIÿGÎ×u */ - $"D7B0 2380 5F1C 4185 EF0B BECB 1A55 9696" /* ×°#€_.A…ï.¾Ë.U–– */ - $"81B8 94F2 4F5B 07D8 D5EC 9E2A 049D 5E87" /* ¸”òO[.ØÕìž*.^‡ */ - $"2601 FB44 4AD5 C57B A7B0 8088 B723 134E" /* &.ûDJÕÅ{§°€ˆ·#.N */ - $"0B8A 375E B972 F34F F25A 2B68 3F15 4496" /* .Š7^¹róOòZ+h?.D– */ - $"5734 FE10 D742 67F9 9FFF 639C FAFD 23DB" /* W4þ.×BgùŸÿcœúý#Û */ - $"B90C F402 17F0 81C6 2656 EFD0 E011 C866" /* ¹.ô..ðÆ&VïÐà.Èf */ - $"15C8 4927 3415 BEC1 7876 E693 74CB DBEA" /* .ÈI'4.¾Áxvæ“tËÛê */ - $"7206 2246 23EC DCCA 51CD 72C1 8C41 1B85" /* r."F#ìÜÊQÍrÁŒA.… */ - $"AE9B 6FA5 4286 03FB 7000 D94F 5A8B 8A85" /* ®›o¥B†.ûp.ÙOZ‹Š… */ - $"2F34 7575 E7AB 08FF 3CBD 328D D95D BDF5" /* /4uuç«.ÿ<½2Ù]½õ */ - $"8070 0FAD B573 A91E 5F83 D32D 3337 A5B7" /* €p.­µs©._ƒÓ-37¥· */ - $"C6A7 3048 8D7C 3F01 F6BF 1BAB D684 0585" /* Ƨ0H|?.ö¿.«Ö„.… */ - $"798A A28D 68A6 4993 22BC F35C E3A7 BABE" /* yŠ¢h¦I“"¼ó\㧺¾ */ - $"0D5B 7E43 2B91 5DA6 6821 0495 4B22 33C0" /* .[~C+‘]¦h!.•K"3À */ - $"1217 1302 A7EB 1093 C8BD 3622 F0FD 14C3" /* ....§ë.“Ƚ6"ðý.à */ - $"EDBA 60FA B4C2 07D5 6D80 C177 9C23 24FE" /* íº`ú´Â.Õm€Áwœ#$þ */ - $"C9E7 77A7 1945 4C1A 8945 129A 2581 498D" /* Éçw§.EL.‰E.š%I */ - $"F2BD 5AD6 EF89 4D80 3EC2 DA29 E093 A726" /* ò½ZÖï‰M€>ÂÚ)à“§& */ - $"88F1 0796 E9F0 8F36 D342 7AD3 DEC2 2CCA" /* ˆñ.–éð6ÓBzÓÞÂ,Ê */ - $"45B9 35A0 DE31 D18B 2954 C38C 4B3A EEA2" /* E¹5 Þ1Ñ‹)TÃŒK:î¢ */ - $"5CD5 333D 6C59 23C7 17B3 C98C 65EE 8117" /* \Õ3=lY#Ç.³ÉŒeî. */ - $"22A2 574D D223 581B D09B 6473 3F85 6E2A" /* "¢WMÒ#X.Лds?…n* */ - $"81B5 F600 CAB6 1A02 3B24 D726 4344 536F" /* µö.ʶ..;$×&CDSo */ - $"99AB 09C8 96EA B41B 01C9 7AC8 9478 B8AB" /* ™«ÆÈ–ê´..ÉzÈ”x¸« */ - $"69E3 1BF1 1100 AFF3 C59C 01FB 8EF9 047D" /* iã.ñ..¯óÅœ.ûŽù.} */ - $"21EF 11DE D2CA BEE2 8372 5DDB C39C DE6E" /* !ï.ÞÒʾâƒr]ÛÜÞn */ - $"B652 35FE FDFB F1E8 2E91 778A 86C3 3117" /* ¶R5þýûñè.‘wІÃ1. */ - $"87D8 A7D5 7862 68B7 30C1 3B32 D209 0256" /* ‡Ø§Õxbh·0Á;2ÒÆ.V */ - $"2BF7 DFEF 17C3 FC30 EF1D 9327 7041 FC3C" /* +÷ßï.Ãü0ï.“'pAü< */ - $"674F 3069 DAB2 0EA5 BB48 DC2C DC66 F660" /* gO0iÚ².¥»HÜ,Üfö` */ - $"9C9B C7C8 3734 C68B 7D5A 60A1 DF3D D3A8" /* œ›ÇÈ74Æ‹}Z`¡ß=Ó¨ */ - $"E60C D15A 11C7 FB3B F75A 358E A7F7 16CB" /* æ.ÑZ.Çû;÷Z5ާ÷.Ë */ - $"67B5 097E E2A2 DE6C E40A FD52 8F75 43EF" /* gµÆ~â¢ÞläÂýRuCï */ - $"F5DF 5A51 BBF5 A074 791F F54F 9724 23C3" /* õßZQ»õ ty.õO—$#à */ - $"F5E6 C4A3 E22C 1E06 3B71 A9A2 1C17 0109" /* õæÄ£â,..;q©¢...Æ */ - $"1B59 2742 AB03 0497 3E5A AD73 7FD3 DA51" /* .Y'B«..—>Z­s.ÓÚQ */ - $"9F17 A10E B9CF 7503 3395 8788 9D9D 4A58" /* Ÿ.¡.¹Ïu.3•‡ˆJX */ - $"F9B8 4A61 3DDA 7489 8086 9EAC 4D7D 62DD" /* ù¸Ja=Út‰€†ž¬M}bÝ */ - $"BF8B 9462 1CC0 6912 69BE 3BFE FED7 3174" /* ¿‹”b.Ài.i¾;þþ×1t */ - $"CAA6 A806 FF59 B963 ABEE 508B F428 D15C" /* ʦ¨.ÿY¹c«îP‹ô(Ñ\ */ - $"82FC BA30 6907 C572 F2BD C0DB E9A2 44AF" /* ‚üº0i.Årò½ÀÛé¢D¯ */ - $"EED6 81F7 C602 F802 0374 CD1D 0F41 5E2E" /* îÖ÷Æ.ø..tÍ..A^. */ - $"F54F E7AB C492 54F8 C570 48A6 1603 35D3" /* õOç«Ä’TøÅpH¦..5Ó */ - $"EA1A 6A6D FD79 27E3 F928 4E16 3A2D 43FE" /* ê.jmýy'ãù(N.:-Cþ */ - $"6C3D AFC6 FA1C 578C 7BA9 7343 5B2C 7BB9" /* l=¯Æú.WŒ{©sC[,{¹ */ - $"0614 915A 24C4 CAC1 A2D3 0EAF EAE8 7257" /* ..‘Z$ÄÊÁ¢Ó.¯êèrW */ - $"EA2D 1ED2 3FFE 26A7 3E28 28D0 1AE1 D790" /* ê-.Ò?þ&§>((Ð.á× */ - $"A25D 1C6C BA20 E196 1EEC 9720 92EE 6E62" /* ¢].lº á–.ì— ’înb */ - $"E218 5609 944E 9A2E 9228 117A 6065 93FF" /* â.VÆ”Nš.’(.z`e“ÿ */ - $"2B32 B2C1 7876 E657 E39E 8641 F202 62B4" /* +2²ÁxvæW㞆Aò.b´ */ - $"20C5 99D9 F9E5 7D83 D807 EDB7 9A34 475B" /* Å™Ùùå}ƒØ.í·š4G[ */ - $"4F45 9AE8 ACD6 3098 A0C2 8D14 CBDB 9A2B" /* OEšè¬Ö0˜ Â.ËÛš+ */ - $"0EF7 CB30 8B49 169F 1ECD 6F33 F063 65DA" /* .÷Ë0‹I.Ÿ.Ío3ðceÚ */ - $"2A2F F0B0 EE29 91F7 CA11 748C 5E4E A447" /* *.ð°î)‘÷Ê.tŒ^N¤G */ - $"0F7F 4B32 DB7A 366C 27C4 F178 33B7 5E9B" /* ..K2Ûz6l'Äñx3·^› */ - $"BAAF 29CD A3EF 39BB 5FAD AD2B 5DCA 09E8" /* º¯)Í£ï9»_­­+]ÊÆè */ - $"DB9A DD07 84DD 870E 2A4C 850B BD04 7F9A" /* ÛšÝ.„݇.*L….½..š */ - $"1354 1DAA 0819 F583 1F47 5905 6597 5F07" /* .T.ª..õƒ.GY.e—_. */ - $"7ED6 DFFA BA65 FA6C D01D F65F F833 D479" /* ~ÖßúºeúlÐ.ö_ø3Ôy */ - $"BFD3 F3D8 57BB 3718 EBC8 5A2D 732E 464E" /* ¿ÓóØW»7.ëÈZ-s.FN */ - $"6B46 9512 778B 8066 D5DA D21A 819D 5384" /* kF•.w‹€fÕÚÒ.S„ */ - $"A84C AE56 92E2 2E9A 4D27 8A21 E02D 67FC" /* ¨L®V’â.šM'Š!à-gü */ - $"EAA4 B3D5 9306 1D06 CC9A 84C8 D6C4 C7E1" /* ꤳՓ...Ìš„ÈÖÄÇá */ - $"4F47 E168 43F0 6EB1 9276 ED11 2C29 F1CB" /* OGáhCðn±’ví.,)ñË */ - $"90AB 1975 3405 422B 78EC 7776 FA5C 0A2C" /* «.u4.B+xìwvú\Â, */ - $"F4B1 4F40 32CE D338 8911 EAB4 4CFC 7765" /* ô±O@2ÎÓ8‰.ê´Lüwe */ - $"D9ED C10E 114B 0909 1122 6832 A41E 3365" /* ÙíÁ..KÆÆ."h2¤.3e */ - $"96EF FC81 A398 2FE8 0464 5D18 0C9F C1AF" /* –ïü£˜/è.d]..ŸÁ¯ */ - $"8E6F 42CA BDC9 1DC4 770E 1C2E 01BD 62DB" /* ŽoBʽÉ.Äw....½bÛ */ - $"7798 4167 FC4F B27D D7E6 32CE 7F95 954F" /* w˜AgüO²}׿2Î.••O */ - $"653C 833E B4F1 C6C2 307E 0796 686E 6F5C" /* e<ƒ>´ñÆÂ0~.–hno\ */ - $"6EE2 6260 4C0B 5329 36D8 839E 5F08 319C" /* nâb`L.S)6؃ž_.1œ */ - $"4CAE 85DE 6B64 F427 1358 C9FF 57B9 AF78" /* L®…Þkdô'.XÉÿW¹¯x */ - $"332B 82A6 0EBF 0F83 7A3C 8004 1402 6A12" /* 3+‚¦.¿.ƒz<€...j. */ - $"FEE8 1612 2D8A 47FE 5BDE 2714 B393 E32F" /* þè..-ŠGþ[Þ'.³“ã/ */ - $"013E BD7E 14FA 285D BF61 7CDA 3A92 734A" /* .>½~.ú(]¿a|Ú:’sJ */ - $"520E 978D 8736 6AA9 847B 05C9 F28B 3D9A" /* R.—‡6j©„{.Éò‹=š */ - $"9B2E 721C 9082 3EC1 362C D516 D306 1EB9" /* ›.r.‚>Á6,Õ.Ó..¹ */ - $"A95C EC63 3111 4ED2 054A EFF8 F26A 0E36" /* ©\ìc1.NÒ.Jïøòj.6 */ - $"7445 26A0 464F CEDC 924D B183 FAEF 28F7" /* tE& FOÎÜ’M±ƒúï(÷ */ - $"AF76 2DBA F15C 4F45 4BFD E003 CDC1 A878" /* ¯v-ºñ\OEKýà.ÍÁ¨x */ - $"6FB4 207C 2A45 1ED9 CE49 2495 F6A9 77E8" /* o´ |*E.ÙÎI$•ö©wè */ - $"E7FF 7FFF 7FFF 7FFF 70EC F373 E872 28BA" /* çÿ.ÿ.ÿ.ÿpìósèr(º */ - $"A0BB 38E4 AC79 94DA 6562 832A 9A7B EEA8" /*  »8ä¬y”Úebƒ*š{î¨ */ - $"6B09 FEA7 9249 2005 E7D1 D721 4761 B6DB" /* kÆþ§’I .çÑ×!Ga¶Û */ - $"6DB6 DB6D 98C5 C208 FD98 41AA F430 3EAE" /* m¶Ûm˜ÅÂ.ý˜Aªô0>® */ - $"7118 7229 50B1 07D8 C5CA 010D 4AB4 DE82" /* q.r)P±.ØÅÊ..J´Þ‚ */ - $"53D3 E184 6561 DE5F 7236 BBF5 550D 4A83" /* SÓá„eaÞ_r6»õU.Jƒ */ - $"555B 5C0F 9C0E F052 0080 F4AC 3912 DD30" /* U[\.œ.ðR.€ô¬9.Ý0 */ - $"47C9 B77E C632 15D7 8EB6 CD51 0454 A805" /* GÉ·~Æ2.׎¶ÍQ.T¨. */ - $"2DAD F687 6CB7 B37F 2289 759F F7D5 8839" /* -­ö‡l·³."‰uŸ÷Õˆ9 */ - $"B3E6 BCA5 AA89 9D9D 599A 5BDD 54B9 7F7D" /* ³æ¼¥ª‰Yš[ÝT¹.} */ - $"2770 11ED 2217 C539 0204 16FF 728A C52A" /* 'p.í".Å9...ÿrŠÅ* */ - $"2D24 5FC7 E1D7 C47E 1DE8 C3F0 EA38 E730" /* -$_Çá×Ä~.èÃðê8ç0 */ - $"2D9D 0AC5 991A F5DD 38EC 007B A963 8B4D" /* -ÂÅ™.õÝ8ì.{©c‹M */ - $"51BA A9FC AE25 908A 1B70 9145 EBA2 38C4" /* Qº©ü®%Š.p‘Eë¢8Ä */ - $"168F 70BB 10A5 CAA5 A249 1974 03F3 AB57" /* .p».¥Ê¥¢I.t.ó«W */ - $"3611 30C5 1F14 529F 040A A8EC EBDF F2FF" /* 6.0Å..RŸ.¨ìëßòÿ */ - $"232B 83FE C2D0 59D9 93C2 2A8A F86A 997F" /* #+ƒþÂÐYÙ“Â*Šøj™. */ - $"3207 03A7 C406 E96C C96F 23F1 1490 95DF" /* 2..§Ä.élÉo#ñ.•ß */ - $"4024 67DC 3DE6 E1B1 EB60 1026 8786 531C" /* @$gÜ=æá±ë`.&‡†S. */ - $"9A51 378D EE86 881F 496C 8854 9459 7799" /* šQ7.IlˆT”Yw™ */ - $"11EC 4196 0C22 0F05 3762 D8F4 C348 7299" /* .ìA–."..7bØôÃHr™ */ - $"793E 0718 14D3 D09C C192 80E1 9F7C 5CFA" /* y>...ÓМÁ’€áŸ|\ú */ - $"429C 7960 2F8B 9063 C7E1 1447 7F52 D850" /* Bœy`/‹cÇá.G.RØP */ - $"B80A F1D8 BE98 DC3C 9C44 3AB7 3DA7 E08C" /* ¸Âñؾ˜Ü<œD:·=§àŒ */ - $"E7B6 07CE 2B69 C0E9 0C21 6133 1EC5 DAB5" /* ç¶.Î+iÀé.!a3.ÅÚµ */ - $"B079 413B FBA4 0259 78B8 DA3A E6D1 4AAC" /* °yA;û¤.Yx¸Ú:æÑJ¬ */ - $"2459 93C8 AD9A D69C AC40 5CF7 7385 1B18" /* $Y“È­šÖœ¬@\÷s….. */ - $"D67D 82BD 5E44 3DF8 5D2F E6D3 CE47 0191" /* Ö}‚½^D=ø]/æÓÎG.‘ */ - $"6E57 0F2F E8E8 9FF0 14BC 21F1 7720 6F34" /* nW./èèŸð.¼!ñw o4 */ - $"1EEE 5EF6 F8FD 5481 44E3 AB6B B06E 2556" /* .î^öøýTDã«k°n%V */ - $"6F07 AD65 FC95 7C32 7487 10A0 3C20 9CA7" /* o.­eü•|2t‡. < œ§ */ - $"B0EB F703 2D09 F0A6 D3FD 55F6 354B EDB0" /* °ë÷.-Æð¦ÓýUö5Kí° */ - $"179B B267 B9EB 8DA1 ED8E 7D0F 1AFF 4D50" /* .›²g¹ë¡íŽ}..ÿMP */ - $"C1C7 A686 586C 6A26 3B0B 4292 60A0 A804" /* ÁǦ†Xlj&;.B’` ¨. */ - $"04F6 5FDB 0F76 E2BC D680 20B5 46AE 399D" /* .ö_Û.vâ¼Ö€ µF®9 */ - $"CC54 82A4 1DCA 08E7 E2B4 6710 ABD8 FC18" /* ÌT‚¤.Ê.çâ´g.«Øü. */ - $"949B 7076 11CD 598E 2A8B 99FC CC28 EC17" /* ”›pv.ÍYŽ*‹™üÌ(ì. */ - $"451C DE31 F7F4 C47E 3ABB AF03 FDC6 D875" /* E.Þ1÷ôÄ~:»¯.ýÆØu */ - $"BD0C AB3E B78F F942 A53E E5F8 CA09 414D" /* ½.«>·ùB¥>åøÊÆAM */ - $"7544 D5B4 8367 3256 6D8C CB66 6DE7 E99C" /* uDÕ´ƒg2VmŒËfmçéœ */ - $"88E9 FCDC EB55 F67B 20E7 F44D 7616 6B29" /* ˆéüÜëUö{ çôMv.k) */ - $"124A C9AB 95C7 E9A8 209D EDA5 499F 2D2F" /* .JÉ«•Çé¨ í¥IŸ-/ */ - $"20E5 DE8C 2EEE 92AF 4BD6 484B 7E18 2D81" /* åÞŒ.î’¯KÖHK~.- */ - $"0502 F439 C742 BA21 693B 43C5 60DF 8BA0" /* ..ô9ÇBº!i;CÅ`ß‹  */ - $"9EAC 0A98 DFE4 DB4B 0BE1 E526 9B74 5982" /* ž¬Â˜ßäÛK.áå&›tY‚ */ - $"1817 EA6B 067A D3E4 8786 883D 26DB D361" /* ..êk.zÓ䇆ˆ=&ÛÓa */ - $"C40F 89F4 B31F 2AF3 1369 FDA9 889A 5620" /* Ä.‰ô³.*ó.iý©ˆšV */ - $"9AE7 4384 7184 9D7F 6C37 F79B 9422 ADF3" /* šçC„q„.l7÷›”"­ó */ - $"2BEA A620 14CF 0267 110E AB20 594B F1DA" /* +ê¦ .Ï.g..« YKñÚ */ - $"9D7F DB53 3723 1A4E 0DEC DF68 3A10 078F" /* .ÛS7#.N.ìßh:.. */ - $"8CA5 471B 4400 0975 92AA A351 8C66 5DDA" /* Œ¥G.D.Æu’ª£QŒf]Ú */ - $"0E4E C7B1 286F 2F7C E0EB 24CC 0A8B CAF8" /* .NDZ(o/|àë$ÌÂ‹Êø */ - $"4F0F 75E5 CACF 26F5 0FFE 86A8 1E77 5F03" /* O.uåÊÏ&õ.þ†¨.w_. */ - $"A8B5 A544 F04B A521 B3FA 854A 64FA 70CD" /* ¨µ¥DðK¥!³ú…JdúpÍ */ - $"526F 97AE 807A 05FC 3F67 2471 61E5 2715" /* Ro—®€z.ü?g$qaå'. */ - $"5774 E452 7E4A CDDA 6E48 0DA2 04B3 3A29" /* WtäR~JÍÚnH.¢.³:) */ - $"DE10 8F75 3A3A 559D A881 B948 74F3 AB92" /* Þ.u::U¨¹Htó«’ */ - $"B154 0F88 A11B A00B 25ED 9A59 B894 618E" /* ±T.ˆ¡. .%íšY¸”aŽ */ - $"AD45 3D59 9C08 49EA 076C CD63 8F49 B714" /* ­E=Yœ.Iê.lÍcI·. */ - $"32B3 8743 2506 F55A C011 CBEF C94A 8606" /* 2³‡C%.õZÀ.ËïÉJ†. */ - $"EDE4 BE7D 2DC9 8830 6C23 91E0 0209 440C" /* íä¾}-Ɉ0l#‘à.ÆD. */ - $"9409 1457 6CA0 2201 8FF4 7573 54F8 CCEC" /* ”Æ.Wl ".ôusTøÌì */ - $"D201 4A3A 66A6 B191 4E14 4CB1 08B4 2100" /* Ò.J:f¦±‘N.L±.´!. */ - $"BCF2 3A0D 696F 4582 F8B0 3A60 2D09 E9A7" /* ¼ò:.ioE‚ø°:`-Æé§ */ - $"8E83 CF44 A16A 6516 31C1 B51E 2DFE BDAC" /* ŽƒÏD¡je.1Áµ.-þ½¬ */ - $"356B F402 856C BEA0 109C A125 A759 E580" /* 5kô.…l¾ .œ¡%§Yå€ */ - $"3501 F500 F252 9533 F180 6E7D 30A8 FD62" /* 5.õ.òR•3ñ€n}0¨ýb */ - $"7FD6 B4EB 9120 8504 493A DD87 D79A 0CB1" /* .Ö´ë‘ ….I:݇ך.± */ - $"B674 7010 830D 8A38 5B44 B11D 3632 3FA5" /* ¶tp.ƒ.Š8[D±.62?¥ */ - $"CE31 CE9A 1670 AF20 16F6 BDA6 4980 002E" /* Î1Κ.p¯ .ö½¦I€.. */ - $"3E9E 8AB0 8B1F 63C5 28C3 7914 2833 137F" /* >žŠ°‹.cÅ(Ãy.(3.. */ - $"0915 DD39 7D38 49A3 6054 B5DC 2509 EE11" /* Æ.Ý9}8I£`TµÜ%Æî. */ - $"D68A 5C2A C75B 5B9F 7A9A FF3A D06F 3331" /* ÖŠ\*Ç[[Ÿzšÿ:Ðo31 */ - $"29E6 A9F4 8AD5 E0D9 7FB9 84B1 F403 8910" /* )æ©ôŠÕàÙ.¹„±ô.‰. */ - $"1168 1270 19E2 E385 0353 0FFF 697F 96BE" /* .h.p.âã….S.ÿi.–¾ */ - $"EF55 21CA 25A1 CE5E 0CD7 03A9 094F 51FE" /* ïU!Ê%¡Î^.×.©ÆOQþ */ - $"5314 E59F 90EB 907A E37A DD9D 182A E41C" /* S.åŸëzãzÝ.*ä. */ - $"CFFB 7262 0D9E B904 8D95 2DE3 E02B F5CB" /* Ïûrb.ž¹.•-ãà+õË */ - $"BF61 6012 924E 50D3 2D8D 6C25 FC60 8D19" /* ¿a`.’NPÓ-l%ü`. */ - $"9855 8BF2 5400 0000 04E3 7684 B40E 9EE7" /* ˜U‹òT....ãv„´.žç */ - $"21F8 CB76 250B 7CE0 2605 7C84 7E9F F226" /* !øËv%.|à&.|„~Ÿò& */ - $"6B94 0DB5 02AA 61E7 A9FF 5D9F A9F2 B546" /* k”.µ.ªaç©ÿ]Ÿ©òµF */ - $"2417 2E4D B238 ADDF 9233 5911 1D61 D35A" /* $..M²8­ß’3Y..aÓZ */ - $"8788 DF34 284A 9664 B91E 7A11 4568 B395" /* ‡ˆß4(J–d¹.z.Eh³• */ - $"7C74 C891 2A46 C056 EE92 0459 D81C A41F" /* |tÈ‘*FÀVî’.YØ.¤. */ - $"CA5E 4752 3ADE 89AB 995B 2BF2 D070 41B1" /* Ê^GR:Þ‰«™[+òÐpA± */ - $"EBFE 65BF FF61 55F5 5460 A4E0 33CF 7F1E" /* ëþe¿ÿaUõT`¤à3Ï.. */ - $"691A 0DA4 9372 4DCD 4A7C FF30 7DA5 4AD0" /* i..¤“rMÍJ|ÿ0}¥JÐ */ - $"1236 3C90 00C2 4517 FF78 771E DA05 952D" /* .6<.ÂE.ÿxw.Ú.•- */ - $"1085 D433 FD50 1E6F D583 2585 CBD6 5CFC" /* .…Ô3ýP.oÕƒ%…ËÖ\ü */ - $"9EF2 539B BE7A CCA1 ABF6 5AED 484B FF78" /* žòS›¾zÌ¡«öZíHKÿx */ - $"D6BD 435E E56E 5510 3047 49DE C511 72CF" /* Ö½C^ånU.0GIÞÅ.rÏ */ - $"72A0 B2CE 5E4D E2DA 0AFA FEDE BDFD 3167" /* r ²Î^MâÚÂúþÞ½ý1g */ - $"02FE 3FBE A1B9 7A5F 205B 7D60 1BA3 C975" /* .þ?¾¡¹z_ [}`.£Éu */ - $"5949 A641 5A3E 5AF2 F237 53BE FCAC 71F1" /* YI¦AZ>Zòò7S¾ü¬qñ */ - $"E3E3 6AEB 35B9 41BD C4B6 3400 DBA0 4B7F" /* ããjë5¹A½Ä¶4.Û K. */ - $"FF79 17FD 23F9 918D E532 F6BD F949 B633" /* ÿy.ý#ù‘å2ö½ùI¶3 */ - $"6A36 7600 17D8 C912 DB72 6F48 869C 0D66" /* j6v..ØÉ.ÛroH†œ.f */ - $"1410 074A 8F5B 629C 5B8B F293 6DB6 DB6D" /* ...J[bœ[‹ò“m¶Ûm */ - $"B6DB 6740 B8F8 BF85 2938 ECDA 6390 6537" /* ¶Ûg@¸ø¿…)8ìÚce7 */ - $"5986 A2A6 B52C A20D F057 C41F 660A C203" /* Y†¢¦µ,¢.ðWÄ.fÂÂ. */ - $"E5C1 68B0 9D56 DAD8 F20C 665C 5D04 4BA2" /* åÁh°VÚØò.f\].K¢ */ - $"46FF 7DB5 4880 6121 2EA3 5D2A 82F4 B18A" /* Fÿ}µH€a!.£]*‚ô±Š */ - $"50FC 2D12 DEFE 1F4D 01BF 3315 10D3 5D94" /* Pü-.Þþ.M.¿3..Ó]” */ - $"11B1 0221 28B8 56D9 4CED 012D D9C9 4005" /* .±.!(¸VÙLí.-ÙÉ@. */ - $"316F E887 29A8 3E83 9E25 FF1F A4C1 5D25" /* 1oè‡)¨>ƒž%ÿ.¤Á]% */ - $"8893 36E0 73BE DE25 456A 4678 B7C5 AD7A" /* ˆ“6às¾Þ%EjFx·Å­z */ - $"90C9 3950 942F 1459 C737 31EF 991F 241B" /* É9P”/.YÇ71ï™.$. */ - $"C294 7CFB 9461 B43A 8D37 8A6D BBC8 D7F6" /* ”|û”a´:7Šm»È×ö */ - $"A128 281D DF2B EAC5 A154 E6D9 FF53 984D" /* ¡((.ß+êÅ¡TæÙÿS˜M */ - $"550E 9C70 3F64 0E0E 0940 0AFC 5CC9 CF43" /* U.œp?d..Æ@Âü\ÉÏC */ - $"7184 3D0F 9FDE 08DF EC31 B86E 0D38 AF71" /* q„=.ŸÞ.ßì1¸n.8¯q */ - $"29F1 A21D 7847 7150 6DCA 9211 C778 F1A4" /* )ñ¢.xGqPmÊ’.Çxñ¤ */ - $"26AA B90D 1A39 DB92 4924 9249 2493 36D2" /* &ª¹..9Û’I$’I$“6Ò */ - $"4924 9249 2492 49FE 069C E7B9 CB0D 4E87" /* I$’I$’Iþ.œç¹Ë.N‡ */ - $"7D9E 9D29 FC64 8A6F 6185 2BD9 806F 760B" /* }ž)üdŠoa…+Ù€ov. */ - $"464D 4732 BD90 0E7D CABF 2B6F 2A78 8608" /* FMG2½.}Ê¿+o*x†. */ - $"DEF5 406F D401 3FD4 AE82 058D D6C8 B980" /* Þõ@oÔ.?Ô®‚.Öȹ€ */ - $"FECA D9B9 E7B6 3982 9FD3 81EA 544B 30BD" /* þÊÙ¹ç¶9‚ŸÓêTK0½ */ - $"7E56 FD78 66FD 5A41 D0BD 7714 5FAF 2A1E" /* ~VýxfýZAнw._¯*. */ - $"8FDA B705 EAAE F6F2 D69C 9812 7194 A56E" /* Ú·.ê®öòÖœ˜.q”¥n */ - $"DB55 BF75 C4E4 BDCD 9FC2 ACAD C428 829F" /* ÛU¿uÄä½ÍŸÂ¬­Ä(‚Ÿ */ - $"2409 3BB2 A894 8020 A8E7 FC16 F4FF 4E84" /* $Æ;²¨”€ ¨çü.ôÿN„ */ - $"C06E 889C 1C74 96AD 5420 F825 1A2B 015C" /* Ànˆœ.t–­T ø%.+.\ */ - $"6BC2 31EE 64AB 7A44 15E5 3458 8040 AEEF" /* kÂ1îd«zD.å4X€@®ï */ - $"F6BD 7D58 6478 8344 018F D3C6 2E33 69A4" /* ö½}XdxƒD.ÓÆ.3i¤ */ - $"E5E8 721A 5B2F 777B C0D8 0A05 2CE7 EEC8" /* åèr.[/w{ÀØÂ.,çîÈ */ - $"69EF 417B A960 D320 842E 84DE D442 AB2F" /* iïA{©`Ó „.„ÞÔB«/ */ - $"3B31 84FE DCFC A608 2E09 AA42 60F6 DB2E" /* ;1„þÜü¦..ƪB`öÛ. */ - $"DA5B C95D D10A 77BE AD48 B5FF 0557 A5AC" /* Ú[É]ÑÂw¾­Hµÿ.W¥¬ */ - $"327B F763 FDA1 32BF 7308 3EFC 0C2B 2D22" /* 2{÷cý¡2¿s.>ü.+-" */ - $"584A F9CA BFB4 78FF 6E67 42CC B491 492B" /* XJùÊ¿´xÿngBÌ´‘I+ */ - $"17C3 C746 9966 5780 BA6C 2798 472E 1CFF" /* .ÃÇF™fW€ºl'˜G..ÿ */ - $"6A32 69A0 86E0 44C6 1679 08F9 9928 48D9" /* j2i †àDÆ.y.ù™(HÙ */ - $"3DA0 CBA0 1E5E 2618 7162 51C9 DEF0 56A0" /* = Ë .^&.qbQÉÞðV  */ - $"1924 F126 CAAD F248 A1A4 2816 13A7 FE76" /* .$ñ&Ê­òH¡¤(..§þv */ - $"594E 647C 36C4 C014 CDC7 5C89 DBAB 9854" /* YNd|6ÄÀ.ÍÇ\‰Û«˜T */ - $"9094 FC96 5FED 7476 AA3C DF0B B47B C123" /* ”ü–_ítvª<ß.´{Á# */ - $"BE6D CD5A BA07 CC19 94FC DC37 B85C 0FD2" /* ¾mÍZº.Ì.”üÜ7¸\.Ò */ - $"9FED 62E6 F910 2F49 529E CE10 9738 D296" /* Ÿíbæù./IRžÎ.—8Ò– */ - $"A81C 1A0D 0FBF 7CAE DB93 40C0 3BC9 5A0C" /* ¨....¿|®Û“@À;ÉZ. */ - $"B23D FBD4 3863 C520 03A0 D966 5327 A0A2" /* ²=ûÔ8cÅ . ÙfS' ¢ */ - $"DD06 B7A1 942B 0A75 CB23 8664 4159 8647" /* Ý.·¡”+ÂuË#†dAY†G */ - $"2725 DAF6 693A 58D7 7A7D B34A 393D FE7A" /* '%Úöi:X×z}³J9=þz */ - $"C105 C374 193C 123C 130E 062C 8AB2 32FD" /* Á.Ãt.<.<...,в2ý */ - $"80E0 72E3 6AEA 2078 5D7C D3E5 4E20 D927" /* €àrãjê x]|ÓåN Ù' */ - $"157E 9DC5 1A29 2F0F C326 AFE3 3ACF C361" /* .~Å.)/.Ã&¯ã:ÏÃa */ - $"8C45 D79C EB27 7441 E4C7 8BFD 5832 DB93" /* ŒEלë'tAäÇ‹ýX2Û“ */ - $"78F5 B9DB BA4E 329E A262 C467 88DC C540" /* xõ¹ÛºN2ž¢bÄgˆÜÅ@ */ - $"78E0 4E55 34F3 806E 2DEA B371 E9B5 D8DF" /* xàNU4ó€n-ê³qéµØß */ - $"5EDA B5B9 1C48 5A11 ECAB E4F8 67B7 C76E" /* ^Úµ¹.HZ.ì«äøg·Çn */ - $"460F 8E6A C7BA B5F8 75F2 9105 1480 FD1A" /* F.ŽjǺµøuò‘..€ý. */ - $"80EB DB48 6115 AA6E 9AEA A07C 57B0 1A7F" /* €ëÛHa.ªnšê |W°.. */ - $"0CBF D5DE 47A7 89BE 4CAE 19FE 7B79 5839" /* .¿ÕÞG§‰¾L®.þ{yX9 */ - $"232D 495E 476C E267 D9D2 5257 F0E6 3EB5" /* #-I^GlâgÙÒRWðæ>µ */ - $"F140 AAAF 1E36 BA04 086A EEC5 3232 7958" /* ñ@ª¯.6º..jîÅ22yX */ - $"72E3 FCC3 9488 B44C 0C15 EF6B 811B CF97" /* rãüÔˆ´L..ïk.Ï— */ - $"0532 2B88 663D 8675 6050 AB94 A435 C0FC" /* .2+ˆf=†u`P«”¤5Àü */ - $"9E08 9873 92AF 6859 F7F5 64B0 0BA5 FA68" /* ž.˜s’¯hY÷õd°.¥úh */ - $"3557 0898 9E0D 5795 BF67 2866 5FB6 63C6" /* 5W.˜ž.W•¿g(f_¶cÆ */ - $"4F82 42CE A682 DC8D CB18 D4FE 6252 95D1" /* O‚BΦ‚ÜË.ÔþbR•Ñ */ - $"C85C 6B2C 0FC0 7C9D 5A80 F93B 8900 F93A" /* È\k,.À|Z€ù;‰.ù: */ - $"8EE6 7513 4AFA 1609 3CEE D5EB B420 A1CE" /* Žæu.Jú.Æ<îÕë´ ¡Î */ - $"318D 6F67 720A 7F84 4127 C0F2 9193 35CE" /* 1ogrÂ.„A'Àò‘“5Î */ - $"6D97 9682 5E5D B9FC 5A97 3B71 AB1F 64AA" /* m—–‚^]¹üZ—;q«.dª */ - $"3383 1F0E C0E9 26BE E6EB 24CD 499F F2BA" /* 3ƒ..Àé&¾æë$ÍIŸòº */ - $"997D E886 6FF8 C6B5 0607 1259 7715 7539" /* ™}è†oøÆµ...Yw.u9 */ - $"4B57 F7A9 56A7 A04B 031F 0786 6C02 E7BC" /* KW÷©V§ K...†l.ç¼ */ - $"8256 7F27 A39A B66D 6B95 6C11 CDE4 C580" /* ‚V.'£š¶mk•l.ÍäÅ€ */ - $"54DE 7E26 129C EB67 ABC8 455E 6CC3 453E" /* TÞ~&.œëg«ÈE^lÃE> */ - $"F9A8 3ED5 9B43 4EB8 384E 0F7B 28E0 16FF" /* ù¨>Õ›CN¸8N.{(à.ÿ */ - $"1342 18B1 31B6 EAEF 4C40 36F7 0CFF 6AFF" /* .B.±1¶êïL@6÷.ÿjÿ */ - $"8059 5D1C 275B 4F7D B392 4DB0 5E5D 4304" /* €Y].'[O}³’M°^]C. */ - $"4848 2A3A C93F BAD6 638D 315A 8771 1150" /* HH*:É?ºÖc1Z‡q.P */ - $"1D41 B6A7 C9B8 782E 19D8 F8E7 07EB ED20" /* .A¶§É¸x..Øøç.ëí */ - $"7D4E AFFF 5FD2 4FA0 2B48 B549 6A50 AD81" /* }N¯ÿ_ÒO +HµIjP­ */ - $"F11D 357F 7CB2 4B8B F28B 6C97 2C23 58A3" /* ñ.5.|²K‹ò‹l—,#X£ */ - $"92E8 2BFB 77F2 1ECE 7A2A C437 47E3 A833" /* ’è+ûwò.Îz*Ä7Gã¨3 */ - $"D60C C3CA 168A 85B8 620C 109C 4134 35BF" /* Ö.ÃÊ.Š…¸b..œA45¿ */ - $"ECCB 3629 944F AD29 444A C4B6 F019 F19B" /* ìË6)”O­)DJĶð.ñ› */ - $"4189 B1D3 8F28 65B9 85D8 C715 2E1A 267D" /* A‰±Ó(e¹…ØÇ...&} */ - $"A7DB 4C90 9829 BC86 E14C 9F44 757D 5436" /* §ÛL˜)¼†áLŸDu}T6 */ - $"9C38 979D 3654 9A63 E572 7864 E513 A083" /* œ8—6Tšcårxdå. ƒ */ - $"C943 97C5 A88B 23A2 4ECC E4F1 AEED F3EC" /* ÉC—Ũ‹#¢NÌäñ®íóì */ - $"C57D F254 B087 7E1F 81B3 59E6 E2A0 E5CB" /* Å}òT°‡~.³Yæâ åË */ - $"B710 EF71 0598 01BF 1400 3814 0759 EDA8" /* ·.ïq.˜.¿..8..Yí¨ */ - $"386C 3DF0 F1C5 CA93 612F C58D 71BA 6ED6" /* 8l=ðñÅÊ“a/ÅqºnÖ */ - $"FE35 90B4 9C10 A938 33B6 6987 E407 AE7B" /* þ5´œ.©83¶i‡ä.®{ */ - $"5B1A 8E0E BE53 1C94 D747 9303 2ED9 13FA" /* [.Ž.¾S.”×G“..Ù.ú */ - $"226C F38A 7134 3CF6 1923 B85F A254 0048" /* "lóŠq4<ö.#¸_¢T.H */ - $"A765 B678 FC9C 1E2C E183 FC80 CA83 9572" /* §e¶xüœ.,áƒü€Êƒ•r */ - $"E573 B224 9894 7316 C931 4A49 C28F 6E33" /* ås²$˜”s.É1JIÂn3 */ - $"B579 EE14 84BC 61CC 351B 41FB 7095 5F8C" /* µyî.„¼aÌ5.Aûp•_Œ */ - $"1B15 6DAF FF7F F8EA 5A11 5453 6ECA 1C02" /* ..m¯ÿ.øêZ.TSnÊ.. */ - $"C8A4 F40F AD00 7BC9 EDFD AC3A 28E4 546F" /* Ȥô.­.{Éíý¬:(äTo */ - $"1E36 BE45 897E F5D5 BE25 E84B 57C6 9080" /* .6¾E‰~õÕ¾%èKWÆ€ */ - $"B6C4 79B8 153B 110F D90B 215D 401C 0453" /* ¶Äy¸.;..Ù.!]@..S */ - $"8243 BF4A CDAE 9270 0658 462F E0C7 82A8" /* ‚C¿JÍ®’p.XF/àÇ‚¨ */ - $"E155 C547 D144 EBAD 74EC EAFF 7799 6D50" /* áUÅGÑDë­tìêÿw™mP */ - $"D0F9 6BA4 D8B3 0FBB B75B BC48 D5BA 8EAB" /* Ðùk¤Ø³.»·[¼HÕºŽ« */ - $"FF7F 3A2A 820F D817 FB8B 7590 ED4A 3D7B" /* ÿ.:*‚.Ø.û‹uíJ={ */ - $"DAF8 C05F BDCF 1B7C 8862 53A8 95D6 C0DF" /* ÚøÀ_½Ï.|ˆbS¨•ÖÀß */ - $"4069 36DA 0739 783C C432 1E0C 7DA6 2D70" /* @i6Ú.9x<Ä2..}¦-p */ - $"B33A C5AD 810A FBBD E9BB B776 6463 9FDC" /* ³:Å­Âû½é»·vdcŸÜ */ - $"B401 211D 81BA A9FA 8761 ED36 A1EF 439D" /* ´.!.º©ú‡aí6¡ïC */ - $"9880 BE88 E045 3068 F59F 7AD7 EFFF 7FFC" /* ˜€¾ˆàE0hõŸz×ïÿ.ü */ - $"5562 1F00 0818 22D6 5002 F762 7A20 0DC0" /* Ub...."ÖP.÷bz .À */ - $"3ADD FF5D 1851 D391 F011 0000 0000 0000" /* :Ýÿ].QÓ‘ð....... */ - $"0000 0000 0138 5715 ED61 F2C5 2C28 30C0" /* .....8W.íaòÅ,(0À */ - $"F669 9389 6153 3A95 E010 CCA0 2FEF B36F" /* öi“‰aS:•à.Ì /ï³o */ - $"9576 F8C0 F17B 27F6 F6FA 412C 70C7 CF14" /* •vøÀñ{'ööúA,pÇÏ. */ - $"7625 6871 7FE2 16C9 B6E9 5BF1 1A16 E2F0" /* v%hq.â.ɶé[ñ..âð */ - $"945D E51E CCF9 0970 E586 517C 475F 8856" /* ”]å.ÌùÆpå†Q|G_ˆV */ - $"CA0C 1DD9 E001 D7BC 1876 745C 8077 672D" /* Ê..Ùà.×¼.vt\€wg- */ - $"CECA FF0B 01D1 76FA 32F5 C047 26FB 451F" /* ÎÊÿ..Ñvú2õÀG&ûE. */ - $"5261 79B6 5990 79C9 4DF7 5B69 D548 E894" /* Ray¶YyÉM÷[iÕHè” */ - $"F249 0C84 D3F0 9555 7B99 EA27 FA38 184E" /* òI.„Óð•U{™ê'ú8.N */ - $"F863 AFA1 CE80 AEBC CB89 DD99 B8E2 0BEC" /* øc¯¡Î€®¼Ë‰Ý™¸â.ì */ - $"2F74 E534 3FF4 B50A 4B04 02B1 C178 B189" /* /tå4?ôµÂK..±Áx±‰ */ - $"D30F 77DC 8A15 8C9E AF87 1DCD D545 AC6B" /* Ó.wÜŠ.Œž¯‡.ÍÕE¬k */ - $"CAFB 832B E240 6752 8EF2 9BDF 76E8 621D" /* Êûƒ+â@gRŽò›ßvèb. */ - $"892E 384C 7BF0 4DE8 F910 7689 C3F0 E7E9" /* ‰.8L{ðMèù.v‰Ãðçé */ - $"E401 C781 F341 A84F 6922 E97B FC22 E259" /* ä.ÇóA¨Oi"é{ü"âY */ - $"6B26 9B03 14A7 DFA1 B7BD CBED 9539 5DE3" /* k&›..§ß¡·½Ëí•9]ã */ - $"2041 2F5F A37A 2F23 00FC 6424 D7F8 902E" /* A/_£z/#.üd$×ø. */ - $"7261 227B B4EC F4D1 9C18 22C3 8CA5 EFF8" /* ra"{´ìôÑœ."ÃŒ¥ïø */ - $"5701 6734 9110 8B4E D9E0 EE8F 7FEA 202F" /* W.g4‘.‹NÙàî.ê / */ - $"CFF7 5CC7 6107 0B22 B0BE A87B 32EF 0FA8" /* Ï÷\Ça.."°¾¨{2ï.¨ */ - $"3D2D 794E 556E 6089 ACBA D46C 17EC A9DC" /* =-yNUn`‰¬ºÔl.ì©Ü */ - $"0F4E D57D B8C8 EED1 F9D4 F96A 7BEE 3794" /* .NÕ}¸ÈîÑùÔùj{î7” */ - $"49DE 3AA7 EE2E 0B25 A47C 966A D90D C792" /* IÞ:§î..%¤|–jÙ.Ç’ */ - $"6304 7C05 C6EB A26D 83B8 3E0C AAF5 AFFE" /* c.|.Æë¢mƒ¸>.ªõ¯þ */ - $"FDC3 F7C4 C0A3 C3ED E8D2 0FAB AC58 1F56" /* ýÃ÷ÄÀ£ÃíèÒ.«¬X.V */ - $"FF40 F44B 4289 C6D7 CC17 A019 AD4A C889" /* ÿ@ôKB‰Æ×Ì. .­Jȉ */ - $"67AD 0673 32A0 B6BA 087E 7279 19C2 025F" /* g­.s2 ¶º.~ry.Â._ */ - $"DB0E 0E97 02D9 2268 5BCA CDE6 B94E 8D9B" /* Û..—.Ù"h[ÊÍæ¹N› */ - $"03EB D786 1698 2D8A 2ECD 432E D615 931F" /* .ë׆.˜-Š.ÍC.Ö.“. */ - $"452B 5D40 0950 5BBE A70F BD95 9F0E 8B95" /* E+]@ÆP[¾§.½•Ÿ.‹• */ - $"86B7 47DE 0757 BFE4 9775 3082 9D22 863A" /* †·GÞ.W¿ä—u0‚"†: */ - $"E404 B84C 5E88 8424 31DD 689A D234 88E2" /* ä.¸L^ˆ„$1ÝhšÒ4ˆâ */ - $"971F 9E59 429C 6C7E 3670 8F7C 8F86 A80D" /* —.žYBœl~6p|†¨. */ - $"848E E78B 5331 058E E444 FEC2 269A 7E23" /* „Žç‹S1.ŽäDþÂ&š~# */ - $"608D 0502 E075 F7A4 DACF 515F AA08 31C1" /* `..àu÷¤ÚÏQ_ª.1Á */ - $"1275 02C0 F37E F465 ADE9 1918 F1F0 0E4F" /* .u.Àó~ôe­é..ñð.O */ - $"E5A4 41A5 F655 22D9 946A 7FEC 0720 3D3A" /* å¤A¥öU"Ù”j.ì. =: */ - $"4961 05B2 F02D 51D2 1212 084B B3EA 5DC9" /* Ia.²ð-QÒ...K³ê]É */ - $"F986 5763 A2AC E2AC 1144 5DC3 E6A5 D092" /* ù†Wc¢¬â¬.D]Ãæ¥Ð’ */ - $"3654 3737 A598 21C2 34FF 097C B8B8 5934" /* 6T77¥˜!Â4ÿÆ|¸¸Y4 */ - $"C947 05C9 B4BA F52B 99FF 3AFE 6B15 2CAE" /* ÉG.É´ºõ+™ÿ:þk.,® */ - $"06CF D962 CCDE D937 D4AE B3D9 7E92 E2AF" /* .ÏÙbÌÞÙ7Ô®³Ù~’⯠*/ - $"8F4E 31CE 06E7 0AD8 71DB 4456 7101 E221" /* N1Î.çÂØqÛDVq.â! */ - $"74AC 1159 9EDF 9841 CFA3 E04F DECF 6FD3" /* t¬.Yžß˜AÏ£àOÞÏoÓ */ - $"90CC C22F 63B0 45CC C98B 3125 33C0 CFBA" /* ÌÂ/c°EÌÉ‹1%3ÀϺ */ - $"4CE7 3FAD F2E4 85E7 0C74 35A5 97E9 8672" /* Lç?­òä…ç.t5¥—é†r */ - $"9180 E059 EF0F C416 E25F 0E83 095A 36AA" /* ‘€àYï.Ä.â_.ƒÆZ6ª */ - $"8E74 F1F7 11A8 49DD C47E 5098 D576 DC41" /* Žtñ÷.¨IÝÄ~P˜ÕvÜA */ - $"D6FC 7C37 E307 A2DB 997E A046 C114 CF04" /* Öü|7ã.¢Û™~ FÁ.Ï. */ - $"FD8E 32D1 2AC6 3A81 C8B6 C680 6E60 7826" /* ýŽ2Ñ*Æ:ȶƀn`x& */ - $"9A40 9C80 BA1B 4DE8 854B 09D9 33B3 95BE" /* š@œ€º.Mè…KÆÙ3³•¾ */ - $"7CE5 CCA3 C463 5D1C 1F2B A160 E208 AA0A" /* |åÌ£Äc]..+¡`â.ªÂ */ - $"D00F 1933 5FB5 2705 4E9C 3733 0FD0 2AA0" /* Ð..3_µ'.Nœ73.Ð*  */ - $"D116 F240 05EA 53BB 5A5A 0A4B 3D9E FCB7" /* Ñ.ò@.êS»ZZÂK=žü· */ - $"FE35 1D0B 1E56 C4AA 9B6C 8CE6 10CA DAA5" /* þ5...VĪ›lŒæ.ÊÚ¥ */ - $"6DF1 6F74 C332 BD93 556E 89F5 A94A 232D" /* mñotÃ2½“Un‰õ©J#- */ - $"E9EF C950 666C 7D3E D1BA C98F 4489 3C5D" /* éïÉPfl}>ѺÉD‰<] */ - $"F7FC 88D4 C90E EE9D 7691 C976 2CFE 6BA0" /* ÷üˆÔÉ.îv‘Év,þk  */ - $"B53E 5C59 749E FEBC 4AB4 490C A3B6 5187" /* µ>\Ytžþ¼J´I.£¶Q‡ */ - $"4A10 1076 6348 AEC1 054B 0A98 9196 29C3" /* J..vcH®Á.K˜‘–)à */ - $"F995 50E4 E003 F099 9495 7ECC 1C78 C536" /* ù•Päà.ð™”•~Ì.xÅ6 */ - $"AA8D 7305 BE7F FF72 99F7 25ED 4C38 0896" /* ªs.¾.ÿr™÷%íL8.– */ - $"A1BE F2D4 016E B744 CBB7 9CEE 1C88 5E3D" /* ¡¾òÔ.n·DË·œî.ˆ^= */ - $"1B9E E3CB 29D2 AAA7 C3F6 41F4 B6C0 5861" /* .žãË)Òª§ÃöAô¶ÀXa */ - $"93D3 4773 858E 3470 E670 4F94 E206 FBA3" /* “ÓGs…Ž4pæpO”â.û£ */ - $"7050 2A3D 6DC0 004E 32D7 6043 4E5E C44F" /* pP*=mÀ.N2×`CN^ÄO */ - $"284A 3214 97B7 19DE 41C4 6204 56CB 1695" /* (J2.—·.ÞAÄb.VË.• */ - $"BAD8 C308 0FFE BEB7 FE14 C6AC CEE8 5022" /* ºØÃ..þ¾·þ.ƬÎèP" */ - $"C27A 2CCA 4714 4C52 3975 615D A1C8 62BF" /* Âz,ÊG.LR9ua]¡Èb¿ */ - $"C477 FF7E 2637 3B89 8C43 6E09 285B 2D1A" /* Äwÿ~&7;‰ŒCnÆ([-. */ - $"8E9E 4110 CE7B E30A E21C A140 02C8 D0AD" /* ŽžA.Î{ãÂâ.¡@.ÈЭ */ - $"630B 5488 7CE7 B884 393A 6FDD 5A68 7FB9" /* c.Tˆ|縄9:oÝZh.¹ */ - $"60EC C73B 143E 3F61 3E31 1A3E 8438 7944" /* `ìÇ;.>?a>1.>„8yD */ - $"B652 14AE 63CA 803C 9B67 C6FE 2F5D 4CD0" /* ¶R.®cÊ€<›gÆþ/]LÐ */ - $"3A63 1328 8809 A4AB B4A1 8664 FE90 F03E" /* :c.(ˆÆ¤«´¡†dþð> */ - $"18E2 7982 7DDC A444 1306 4546 61B2 A710" /* .ây‚}ܤD..EFa²§. */ - $"CCED 529C 92CB D547 22F5 0DB0 B10F 8450" /* ÌíRœ’ËÕG"õ.°±.„P */ - $"E5AC 253A 6937 BFBD D0C6 8AED 14C7 787E" /* å¬%:i7¿½ÐÆŠí.Çx~ */ - $"21E7 860D 8567 633D A9E6 0466 93A5 6789" /* !ç†.…gc=©æ.f“¥g‰ */ - $"D643 2EEE 7542 7B02 086A 83C4 AD3C 785C" /* ÖC.îuB{..jƒÄ­úE¹ä¨.ßߎÕÿ */ - $"750C 2E52 4F3F 5960 B3B7 3DEB CFE3 4EC3" /* u..RO?Y`³·=ëÏãNà */ - $"676F D76A F8C3 67EB 383B 042A C000 1CF5" /* go×jøÃgë8;.*À..õ */ - $"FB57 51DF 4E0F 9709 4A58 F371 8A53 79CD" /* ûWQßN.—ÆJXóqŠSyÍ */ - $"B935 29C8 5953 BBFB B216 24F0 FF5C F1BE" /* ¹5)ÈYS»û².$ðÿ\ñ¾ */ - $"1649 C9BE 754A CC45 62C3 44A2 3E12 A872" /* .IɾuJÌEbÃD¢>.¨r */ - $"736B 05DD F77C C7C6 F33D 8224 147E D163" /* sk.Ý÷|ÇÆó=‚$.~Ñc */ - $"02B4 0BC6 297A FA75 03A7 BFDD 709A A878" /* .´.Æ)zúu.§¿Ýpš¨x */ - $"734A 7236 791A BFF6 9F21 CC67 268D 160D" /* sJr6y.¿öŸ!Ìg&.. */ - $"A6D0 7988 72CF 6475 146C 81EB 8249 518A" /* ¦ÐyˆrÏdu.lë‚IQŠ */ - $"49B7 0389 FDB6 9CEB DCA2 41ED 085D 4E85" /* I·.‰ý¶œëÜ¢Aí.]N… */ - $"03E4 3F4E D8CF 25E1 658D 38F6 8F88 A499" /* .ä?NØÏ%áe8öˆ¤™ */ - $"B64A DD79 FDF2 39FB 5CEC F29B 714A 733B" /* ¶JÝyýò9û\ìò›qJs; */ - $"76E4 94E5 F567 3A71 28F0 13A6 7A74 CD91" /* vä”åõg:q(ð.¦ztÍ‘ */ - $"5804 065E D3C7 09B7 ED19 51E5 0913 4436" /* X..^ÓÇÆ·í.QåÆ.D6 */ - $"9791 BB58 10F3 7183 5DB6 4874 65D2 AAD2" /* —‘»X.óqƒ]¶HteÒªÒ */ - $"DBA2 C761 A70F 3EEE 9256 2EF0 945D E52D" /* Û¢Ça§.>î’V.ð”]å- */ - $"34CF 10DF B2AF 8E14 A5A4 E24F 0051 F63E" /* 4Ï.ß²¯Ž.¥¤âO.Qö> */ - $"F11C 5DAC 6D8D DEDD A585 96FC A2AB A5FF" /* ñ.]¬mÞÝ¥…–ü¢«¥ÿ */ - $"5298 6349 DB41 9276 C1C6 F1E2 9ABF 822B" /* R˜cIÛA’vÁÆñâš¿‚+ */ - $"346F 8679 726C 666A 9638 246A EABE 54A9" /* 4o†yrlfj–8$jê¾T© */ - $"49DD F22A BC62 5867 51F2 FDBD B33B 40E0" /* IÝò*¼bXgQòý½³;@à */ - $"220F 075D 031C EAAE 3CDE 67CF 2269 E26D" /* "..]..ê®<ÞgÏ"iâm */ - $"BEF3 1873 E610 D43E 8F03 A14F F04F 980B" /* ¾ó.sæ.Ô>.¡OðO˜. */ - $"69FF 1E4A 1925 DDE6 B473 84B5 6F53 75DD" /* iÿ.J.%Ýæ´s„µoSuÝ */ - $"CF71 C4C0 72DC 5403 7E7B 1A9B 6F16 BA87" /* ÏqÄÀrÜT.~{.›o.º‡ */ - $"A44D D4A2 8029 E15A 8C17 BE55 A30B 87B3" /* ¤MÔ¢€)áZŒ.¾U£.‡³ */ - $"DC5B CED9 2E4C A8F3 939B 6F82 8885 9BD5" /* Ü[ÎÙ.L¨ó“›o‚ˆ…›Õ */ - $"905B 6EE2 E3C9 D45E DE91 DD46 7EDD 23BB" /* [nâãÉÔ^Þ‘ÝF~Ý#» */ - $"6852 2BD3 3D31 2755 2D1B 7431 35EB 6CBD" /* hR+Ó=1'U-.t15ël½ */ - $"638C 9E5D F0EB 9AE0 49BC D327 7536 BCB3" /* cŒž]ðëšàI¼Ó'u6¼³ */ - $"65F1 992B E073 9D25 980D A244 7F9E 749F" /* eñ™+às%˜.¢D.žtŸ */ - $"53BD D08A C5EF 64A2 D672 7A55 9146 5CAD" /* S½ÐŠÅïd¢ÖrzU‘F\­ */ - $"7839 E1B6 7543 4556 146E C347 33E3 2798" /* x9á¶uCEV.nÃG3ã'˜ */ - $"4752 6F78 AAA5 AE5E 7B02 CD92 D5F1 FD30" /* GRoxª¥®^{.Í’Õñý0 */ - $"F78A 7BFB 03AB CF34 58BF 3810 B8A7 CDAB" /* ÷Š{û.«Ï4X¿8.¸§Í« */ - $"A573 658E 260A 7C50 000F 00AC D13F 618E" /* ¥seŽ&Â|P...¬Ñ?aŽ */ - $"A241 9458 3945 9D59 3F9B 13C5 04CC 600E" /* ¢A”X9EY?›.Å.Ì`. */ - $"FC51 8C8D FBA0 4150 5832 4539 730B 4631" /* üQŒû APX2E9s.F1 */ - $"0598 EE14 817C B560 97C5 B953 64D4 980D" /* .˜î.|µ`—ŹSdÔ˜. */ - $"C379 6FFF 3E63 6746 7BE8 D3AB 5215 B47F" /* Ãyoÿ>cgF{èÓ«R.´. */ - $"3CAE 42E4 D4BF B7BF 6580 3319 6A71 C2E9" /* <®BäÔ¿·¿e€3.jqÂé */ - $"48AA 2C5E 9D78 B9C3 F8DA B858 D5AB 99F4" /* Hª,^x¹ÃøÚ¸XÕ«™ô */ - $"B04F EAAC D0DE 2302 F874 7E64 A69B 89CE" /* °Oê¬ÐÞ#.øt~d¦›‰Î */ - $"AEAB A73F F815 0D06 B24E 39EC D8E9 EFB7" /* ®«§?ø...²N9ìØéï· */ - $"ED32 55A0 8E21 B52A E55C 17AE E07B 42F4" /* í2U Ž!µ*å\.®à{Bô */ - $"D451 CB7C E941 1578 3EE3 9565 087E 9A05" /* ÔQË|éA.x>ã•e.~š. */ - $"B5FC 403A AAA2 25CE 5AC1 B658 1EE9 9A53" /* µü@:ª¢%ÎZÁ¶X.éšS */ - $"4000 51DF 95E8 C605 97AC C7E1 A8B1 F86C" /* @.Qß•èÆ.—¬Çᨱøl */ - $"7C3F 0BCC E410 8FA7 78C0 7964 BDD0 E341" /* |?.Ìä.§xÀyd½ÐãA */ - $"5DC5 D977 EF99 460C FC48 A51A B5CD DE47" /* ]ÅÙwï™F.üH¥.µÍÞG */ - $"F9E2 194D 1F2D B2B6 556B 0F68 BD1B 5BEA" /* ùâ.M.-²¶Uk.h½.[ê */ - $"9FDD 1280 92A3 EF96 132C 22F6 CA8A 1C20" /* ŸÝ.€’£ï–.,"öÊŠ. */ - $"54DA F163 6119 BC02 7AE6 10CA A16B 993A" /* TÚñca.¼.zæ.Ê¡k™: */ - $"E22B CC58 D181 40E6 EA99 0897 5166 4C1F" /* â+ÌXÑ@æê™.—QfL. */ - $"6D58 D092 5119 1AF5 0C2B 1DC6 029D F0E8" /* mXÐ’Q..õ.+.Æ.ðè */ - $"1F6F 9F5C 17D8 68A0 F600 5C68 5C16 4269" /* .oŸ\.Øh ö.\h\.Bi */ - $"F5A9 4D97 32DE 3A9C 6609 86C2 1D0F BA56" /* õ©M—2Þ:œfƆÂ..ºV */ - $"3C8C 1046 E0DC 2ECB 9BDB D61E 6955 CE38" /* <Œ.FàÜ.Ë›ÛÖ.iUÎ8 */ - $"DB97 859B 9E73 78BF FDEB ED74 0C4E 4203" /* Û—…›žsx¿ýëít.NB. */ - $"431D 69C4 635D D1EA 1A9A 6462 BE48 DDB9" /* C.iÄc]Ñê.šdb¾Hݹ */ - $"6E63 C4D8 8886 51CB 19E6 A7C9 5941 8443" /* ncÄØˆ†QË.æ§ÉYA„C */ - $"57E5 8C3B B907 FF17 4B41 08DA 7AFC 1B8B" /* WåŒ;¹.ÿ.KA.Úzü.‹ */ - $"9B05 622E 1F81 91D8 2C60 9C6A 3B23 608B" /* ›.b..‘Ø,`œj;#`‹ */ - $"F2EC E527 70F9 D963 D302 D7AC 18E2 2692" /* òìå'pùÙcÓ.׬.â&’ */ - $"AE0C D915 7E30 5B09 305C 8F5D 1346 3FF2" /* ®.Ù.~0[Æ0\].F?ò */ - $"8635 ECEC 1CB7 962D 0846 3FA9 5920 C1B0" /* †5ìì.·–-.F?©Y Á° */ - $"5582 FF3A 24E0 FAAE 8FAE 3843 DFCF B74F" /* U‚ÿ:$àú®®8CßÏ·O */ - $"CAEC 5602 D1C5 1760 5ECD 92C8 1DD1 4ABE" /* ÊìV.ÑÅ.`^Í’È.ÑJ¾ */ - $"2336 8A90 E444 6753 D3E0 0F02 8E99 7393" /* #6ŠäDgSÓà..Ž™s“ */ - $"8B26 6C9F BFB4 64DE 7867 73F7 10F0 477A" /* ‹&lŸ¿´dÞxgs÷.ðGz */ - $"8383 ADA5 49C3 722B 1FD7 0BB5 4118 4714" /* ƒƒ­¥IÃr+.×.µA.G. */ - $"D5F9 6C20 CDD0 8151 EAB4 457F FF4E 314C" /* Õùl ÍÐQê´E.ÿN1L */ - $"6E7F 04DB DE0C 611B 62AC 2A4E 869C 06FB" /* n..ÛÞ.a.b¬*N†œ.û */ - $"DB81 F238 C4FC 149E 8176 3F0C 4B83 0DFF" /* Ûò8Äü.žv?.Kƒ.ÿ */ - $"7FB4 A5F5 80C7 E4F0 47AD 8D3F 5426 B12A" /* .´¥õ€ÇäðG­?T&±* */ - $"8678 11E1 A0EF 5439 31D8 E97E 3AE9 E4DD" /* †x.á ïT91Øé~:éäÝ */ - $"3DB7 4A94 7FFF 7135 0C02 ACE2 70F5 626B" /* =·J”.ÿq5..¬âpõbk */ - $"271A 4401 DF00 AE70 E43B D3F8 75AD 0DAB" /* '.D.ß.®pä;Óøu­.« */ - $"794A C0C7 928F 8621 BE61 DA60 A89F 8E95" /* yJÀÇ’†!¾aÚ`¨ŸŽ• */ - $"64E1 4B82 9CA5 D1CB 26FA 3B49 2FDF 8007" /* dáK‚œ¥ÑË&ú;I/߀. */ - $"60B1 1C23 B192 973E 87DD 9323 E697 CA76" /* `±.#±’—>‡Ý“#æ—Êv */ - $"03D6 B09A 33FA 5CEC 856D 1D12 5249 2492" /* .Ö°š3ú\ì…m..RI$’ */ - $"4924 9249 2492 4924 9231 8B0A C6C2 C882" /* I$’I$’I$’1‹ÂÆÂÈ‚ */ - $"FC66 E59C E646 38B0 B26F A097 FEA2 30FE" /* üfåœæF8°²o —þ¢0þ */ - $"F5B9 90DC 3FEF 3116 73C4 7B20 6C09 EA40" /* õ¹Ü?ï1.sÄ{ lÆê@ */ - $"AB90 6257 8BAD 951C 002E 138D 7274 121D" /* «bW‹­•....rt.. */ - $"B91E 66F5 6038 8257 FD9A 18C9 0155 522C" /* ¹.fõ`8‚Wýš.É.UR, */ - $"D6CC 0F6A 6A4A 09F3 0C4A B702 47FF 7FFC" /* ÖÌ.jjJÆó.J·.Gÿ.ü */ - $"B504 0034 6682 CE19 CA7C 50BE F8B0 9DCB" /* µ..4f‚Î.Ê|P¾ø°Ë */ - $"0092 4924 9248 F298 B4D2 A612 6CEE 878F" /* .’I$’Hò˜´Ò¦.lî‡ */ - $"FF7F FF5F 8F59 B3E0 FE9F A74E 506D C924" /* ÿ.ÿ_Y³àþŸ§NPmÉ$ */ - $"9249 2492 4924 9249 2492 4924 924D 57A2" /* ’I$’I$’I$’I$’MW¢ */ - $"2CC8 426C 393A 96E4 50FB 0ACE 8874 7A86" /* ,ÈBl9:–äPûÂΈtz† */ - $"2B20 84D4 0F34 1532 DFF0 D633 0231 0F65" /* + „Ô.4.2ßðÖ3.1.e */ - $"91D1 8E19 A917 CD2A 8D35 89BE F64E D1A8" /* ‘ÑŽ.©.Í*5‰¾öNѨ */ - $"926C AE06 3A49 80F9 C1FE 0E81 52D8 5A8C" /* ’l®.:I€ùÁþ.RØZŒ */ - $"7A00 5EF2 9F04 3659 74EC D695 94B6 5B90" /* z.^òŸ.6YtìÖ•”¶[ */ - $"89C0 E661 DFC4 5E69 965B 4D1D 4B76 7C0E" /* ‰ÀæaßÄ^i–[M.Kv|. */ - $"89D2 C1E8 B1EF CF9E 5E96 3977 AEA6 532B" /* ‰ÒÁè±ïÏž^–9w®¦S+ */ - $"68B1 BD73 2BE6 BB5B 766E FA91 5C36 628C" /* h±½s+æ»[vnú‘\6bŒ */ - $"F45F FEEA C7DF 49F0 278F F459 E9B6 BDAC" /* ô_þêÇßIð'ôYé¶½¬ */ - $"1A28 F485 45C5 2761 DC37 C72A 8A17 2D08" /* .(ô…EÅ'aÜ7Ç*Š.-. */ - $"5130 E9D5 E1BD 2D59 07B5 2290 00F9 F737" /* Q0éÕá½-Y.µ".ù÷7 */ - $"C1F4 5C78 1058 C4C6 13AB AE5C 45DE ACB4" /* Áô\x.XÄÆ.«®\EÞ¬´ */ - $"7DC9 03C4 0F82 7850 6F9E 5FD3 9223 36FE" /* }É.Ä.‚xPož_Ó’#6þ */ - $"8A1D 1D99 FBB3 646B 206B FC7E 668E 4730" /* Š..™û³dk kü~fŽG0 */ - $"7C8C 79D9 A37A 427B 1E91 E7A1 DED2 E57D" /* |ŒyÙ£zB{.‘ç¡ÞÒå} */ - $"E167 967A 8B9F A6C0 A36F 68E8 D03C 84C6" /* ág–z‹Ÿ¦À£ohèÐ<„Æ */ - $"E952 3CAF 039F 18CD 236C 4AE1 FB74 D7F6" /* éR<¯.Ÿ.Í#lJáût×ö */ - $"DFBF B7A4 AFDB D27E 2FB7 7BBF 86F0 DF6F" /* ß¿·¤¯ÛÒ~/·{¿†ðßo */ - $"4F9F C3A7 EC7F 0D0F BEDB 1EFB 77AA FB77" /* OŸÃ§ì...¾Û.ûwªûw */ - $"2CED 1CDE F39E A2F3 567D 91E9 4703 B8A2" /* ,í.Þóž¢óV}‘éG.¸¢ */ - $"5006 2494 6271 81F3 3B95 0B89 EDD5 7FE8" /* P.$”bqó;•.‰íÕ.è */ - $"B864 3D84 75CD 7478 A5D6 28C8 D483 39EF" /* ¸d=„uÍtx¥Ö(ÈÔƒ9ï */ - $"86CA 5763 87CA 97CF A9D4 AFA9 0450 6744" /* †ÊWc‡Ê—ϩԯ©.PgD */ - $"16E3 8C0B 0015 88DA 5244 1AB2 9790 35B0" /* .ãŒ...ˆÚRD.²—5° */ - $"0489 B911 D871 2BB4 6576 C185 22B7 1F86" /* .‰¹.Øq+´evÁ…"·.† */ - $"230A 3CD3 ECB5 20A6 23BA A068 A53E 8EAD" /* #Â<Óìµ ¦#º h¥>Ž­ */ - $"3793 46B5 BA07 96A8 DF28 6A66 CE05 73CE" /* 7“Fµº.–¨ß(jfÎ.sÎ */ - $"1938 F9A6 9CBC 0D7F F193 E0D5 09CC 3426" /* .8ù¦œ¼..ñ“àÕÆÌ4& */ - $"4BB1 52B9 F337 0537 FA01 B010 5471 B015" /* K±R¹ó7.7ú.°.Tq°. */ - $"754C A1A6 E071 800C 1A26 243D 172B 1497" /* uL¡¦àq€..&$=.+.— */ - $"E5DF 1EB1 6A6C 6761 3BA6 52C0 C0B4 69BD" /* åß.±jlga;¦RÀÀ´i½ */ - $"E6B4 275E EB6E 42BF D693 8928 15A4 9DB2" /* æ´'^ënB¿Ö“‰(.¤² */ - $"D8FA E273 6C04 CBB5 06A9 8096 5E97 5D11" /* Øúâsl.˵.©€–^—]. */ - $"0B1B 8E93 BDCC 1AE8 4CBA 9413 A729 F6A7" /* ..Ž“½Ì.èLº”.§)ö§ */ - $"F24D 467F 0316 BF60 F777 C2E3 7FAA DC07" /* òMF...¿`÷wÂã.ªÜ. */ - $"148F 5C26 91C3 20B8 F3A0 9088 F893 6D47" /* .\&‘à ¸ó ˆø“mG */ - $"7AC1 A0D9 5483 8281 5B98 28AE 9EAB 94F0" /* zÁ ÙTƒ‚[˜(®ž«”ð */ - $"9B68 08E3 E3DA 7E3A AA84 9EED F083 117F" /* ›h.ããÚ~:ª„žíðƒ.. */ - $"FE75 781E E394 EEEC F9AC 21D6 FF5E DD57" /* þux.ã”îìù¬!Öÿ^ÝW */ - $"96CF A7DF 3C0D 7E2F F9E7 F212 83EE E629" /* –ϧß<.~/ùçò.ƒîæ) */ - $"9543 AA61 C10A 4B12 1DD8 6835 405A D739" /* •CªaÁÂK..Øh5@Z×9 */ - $"DBD7 1628 2816 909D 1DEB 81F2 16AF 8953" /* Û×.((..ëò.¯‰S */ - $"9239 B79D A64A 3275 E506 BFD3 0198 776C" /* ’9·¦J2uå.¿Ó.˜wl */ - $"F4C2 39CD 4CF8 2482 D781 526A 7D82 0B83" /* ôÂ9ÍLø$‚×Rj}‚.ƒ */ - $"120C B2AB 1FC0 2DAA 4A72 ACD9 B4C7 926A" /* ..²«.À-ªJr¬Ù´Ç’j */ - $"CE69 46FA C67E 904D 12D4 D6EC 2F77 AC43" /* ÎiFúÆ~M.ÔÖì/w¬C */ - $"0A82 A09A 8FAC 59F0 D192 4F8F E6D1 A8B3" /* ‚ š¬YðÑ’OæÑ¨³ */ - $"26FD EAD1 7727 E253 F826 580D 8786 8EAD" /* &ýêÑw'âSø&X.‡†Ž­ */ - $"4561 33FC 6C93 72E4 3F53 3E92 5E78 9597" /* Ea3ül“rä?S>’^x•— */ - $"895F 61B9 D382 514D 839E D4E8 A40B 6F99" /* ‰_a¹Ó‚QMƒžÔè¤.o™ */ - $"0BEC 889F F976 6F24 AEAC 2A18 479B 9CD0" /* .숟ùvo$®¬*.G›œÐ */ - $"A58D E4A8 4940 D7A9 26A7 8649 C387 22EB" /* ¥ä¨I@ש&§†IÇ"ë */ - $"10F3 AB7F 805D 57F4 6918 508A 429D FC32" /* .ó«.€]Wôi.PŠBü2 */ - $"0E49 3480 E5A6 0267 54A6 D677 422D 1B62" /* .I4€å¦.gT¦ÖwB-.b */ - $"4DFB C3A4 2E01 8C0D 029D D238 87B0 230E" /* Mûä..Œ..Ò8‡°#. */ - $"AB6E AEFD 64F3 F7AE 7BD7 DA13 2BCC DCFB" /* «n®ýdó÷®{×Ú.+ÌÜû */ - $"13EC E7EE A36F 86C6 A2D8 DD70 6174 04FA" /* .ìçî£o†Æ¢ØÝpat.ú */ - $"B7F7 A3BF 9C4C F99C C177 9B27 9148 3998" /* ·÷£¿œLùœÁw›'‘H9˜ */ - $"013A 4B0C E3A5 6905 6ADC 739C 3586 7009" /* .:K.ã¥i.jÜsœ5†pÆ */ - $"38DA 0496 C25E DFB2 F2AB 34C0 F138 4F81" /* 8Ú.–Â^ß²ò«4Àñ8O */ - $"7240 2774 4588 B153 267B DBBE DFDE AEAD" /* r@'tEˆ±S&{Û¾ßÞ®­ */ - $"1D90 BA71 2B83 D108 1CDB 8B36 7837 8AAA" /* .ºq+ƒÑ..Û‹6x7Šª */ - $"299C 2916 D66C CC2E 2FCF B0E3 228A 88C1" /* )œ).ÖlÌ./ϰã"ŠˆÁ */ - $"568F 12D8 D599 AB3F 29DE 1FA6 9336 132F" /* V.ØÕ™«?)Þ.¦“6./ */ - $"521E 8EB9 9BD4 30E4 362E 349E 209A 6EB6" /* R.޹›Ô0ä6.4ž šn¶ */ - $"D5CC 985B E51E 8A74 B9A0 1718 2753 A1E0" /* Õ̘[å.Št¹ ..'S¡à */ - $"BDCC 77CC 5697 641D B916 AB08 C12F 102F" /* ½ÌwÌV—d.¹.«.Á/./ */ - $"59A0 4283 27A8 9F9E 1980 381A 4785 E896" /* Y Bƒ'¨Ÿž.€8.G…è– */ - $"B9C8 A383 0C1E EBDE A8DC D1A0 00FB 61C2" /* ¹È£ƒ..ëÞ¨ÜÑ .ûa */ - $"70F1 84C8 8368 337E DA6C 7A1A 014F 77C3" /* pñ„ȃh3~Úlz..Owà */ - $"EFFF 0CCC F88E E539 B4FF 3187 54EA 4B2E" /* ïÿ.ÌøŽå9´ÿ1‡TêK. */ - $"27BF 1121 0DCD 456F 5AB4 E115 9E30 8B1C" /* '¿.!.ÍEoZ´á.ž0‹. */ - $"FCFB 8634 E35F E3F0 2A65 8EC0 775F C0EE" /* üû†4ã_ãð*eŽÀw_Àî */ - $"37B2 6C5A AA44 2B7C 889A 5854 FBB4 DC29" /* 7²lZªD+|ˆšXTû´Ü) */ - $"E875 94AB D4F4 19C2 5989 594D 6B55 CB5E" /* èu”«Ôô.ÂY‰YMkUË^ */ - $"012C A350 BF1C 322E 6DC6 6CFB 052A B48D" /* .,£P¿.2.mÆlû.*´ */ - $"2FFE D908 D443 2FB2 706F 13A8 B2BF 2E97" /* /þÙ.ÔC/²po.¨²¿.— */ - $"D7EF 6FE2 7D0B 4D6C 89E6 24BB D547 A266" /* ×ïoâ}.Ml‰æ$»ÕG¢f */ - $"3B92 FF58 BE83 0D95 D587 B51D B83A B360" /* ;’ÿX¾ƒ.•Õ‡µ.¸:³` */ - $"DF16 A55F 5D17 5ED7 C7D7 88FD D24B 89C4" /* ß.¥_].^×Ç׈ýÒK‰Ä */ - $"17FF 1CE0 2FC5 E332 79FF 6532 D599 2C36" /* .ÿ.à/Åã2yÿe2Õ™,6 */ - $"7360 56F2 6017 1165 F8CD AC09 6435 530F" /* s`Vò`..eøÍ¬Æd5S. */ - $"8E48 0152 06AE 7F31 9D5A A12E EC4A 26BD" /* ŽH.R.®.1Z¡.ìJ&½ */ - $"1D28 2D81 EBF2 625A 03C8 8240 FAB0 343C" /* .(-ëòbZ.È‚@ú°4< */ - $"3460 4650 A369 CBAF D533 EC55 DB4D 46F7" /* 4`FP£i˯Õ3ìUÛMF÷ */ - $"45C4 1B75 581D CC26 9E29 8B0F C424 5512" /* EÄ.uX.Ì&ž)‹.Ä$U. */ - $"9417 F11C 77C1 F3FD 57B1 487F D8F8 A086" /* ”.ñ.wÁóýW±H.Øø † */ - $"E60E 2356 E9E1 F3EC 7F31 52E1 E3DB C75E" /* æ.#Véáóì.1RáãÛÇ^ */ - $"7A4B 2D19 8F06 AB86 5A88 F23D C312 C565" /* zK-..«†Zˆò=Ã.Åe */ - $"1AF0 4B35 F0D9 D100 6634 A377 90C1 A69A" /* .ðK5ðÙÑ.f4£wÁ¦š */ - $"1C64 495A BEF2 5A5C 1714 0504 2639 71A2" /* .dIZ¾òZ\....&9q¢ */ - $"5989 FF6E F887 5ADD 9843 A719 60CC 5185" /* Y‰ÿnø‡ZݘC§.`ÌQ… */ - $"B308 2551 F63A 7543 2A92 3949 FCC5 5023" /* ³.%Qö:uC*’9IüÅP# */ - $"5A92 FE32 A26E FF00 9CFC 0CFF 4A08 60C7" /* Z’þ2¢nÿ.œü.ÿJ.`Ç */ - $"F76C 480A E682 3C58 66B8 7045 CDBA 616C" /* ÷lHÂæ‚¯.Ñáùõ¯Æ */ - $"6428 F517 1201 C3F1 1B80 0DD2 DCD9 CA31" /* d(õ...Ãñ.€.ÒÜÙÊ1 */ - $"B022 DAFB D990 A8B1 6FF1 004E 4847 E5C8" /* °"ÚûÙ¨±oñ.NHGåÈ */ - $"0580 DA86 704F E2FF 7E83 5167 5C3F ADB2" /* .€Ú†pOâÿ~ƒQg\?­² */ - $"4C44 A9D9 DB84 C360 68ED 1BF0 068E 04BF" /* LD©ÙÛ„Ã`hí.ð.Ž.¿ */ - $"D16E B55F 0701 3739 42FA E15C 0EA2 BF81" /* Ñnµ_..79Búá\.¢¿ */ - $"31C1 F1A3 A766 CAB8 C82E C96B 4868 D491" /* 1Áñ£§fʸÈ.ÉkHhÔ‘ */ - $"5ACB 6EED 4027 0C73 AACA 730C ECA6 DE42" /* ZËní@'.sªÊs.ì¦ÞB */ - $"38DA E07E CE64 BC49 7FDD FCCB 07B3 45BF" /* 8Úà~Îd¼I.ÝüË.³E¿ */ - $"B9DC FF13 039F D40E 43BB ACE4 B8F8 31F5" /* ¹Üÿ..ŸÔ.C»¬ä¸ø1õ */ - $"6743 9390 0B87 C9B1 194A 0200 FB53 29CD" /* gC“.‡É±.J..ûS)Í */ - $"3141 15F5 3C38 9F70 2B7E 0E46 B5A7 5C94" /* 1A.õ<8Ÿp+~.Fµ§\” */ - $"AED4 E415 1639 7B49 20DA 1541 9742 A3A6" /* ®Ôä..9{I Ú.A—B£¦ */ - $"B873 4C7C 9112 1322 7D7F 5F6E 14AB 57FC" /* ¸sL|‘.."}._n.«Wü */ - $"A01D 94EC BC05 F45B C4C4 1FC3 D61B F5D3" /*  .”ì¼.ô[ÄÄ.ÃÖ.õÓ */ - $"0E62 9C2F CAE6 C609 B0D2 803B AF5F CC7F" /* .bœ/ÊæÆÆ°Ò€;¯_Ì. */ - $"4085 5B49 F81B 0AB3 DB0C 27C1 7A95 45D6" /* @…[Iø.³Û.'Áz•EÖ */ - $"CDDD 4F06 1A20 A7FE 22F6 EA13 EB6E C723" /* ÍÝO.. §þ"öê.ënÇ# */ - $"87B9 A058 CAF9 9F59 C9C9 6AAD 8358 5147" /* ‡¹ XÊùŸYÉÉj­ƒXQG */ - $"2B3E 2FD8 506F A48B 305C 97C7 5D25 5C75" /* +>/ØPo¤‹0\—Ç]%\u */ - $"C5B1 E7B4 CBC7 C76A 2FE5 1669 302C 2318" /* űç´ËÇÇj/å.i0,#. */ - $"CB1D BB38 5B47 3563 F041 0F00 C23A B1E9" /* Ë.»8[G5cðA..Â:±é */ - $"1972 D9C9 2F2F 4013 F8EF A6CA 7E8E 705C" /* .rÙÉ//@.øï¦Ê~Žp\ */ - $"0CB6 1301 5ED4 25E6 F7D9 999D AB8F 4CAC" /* .¶..^Ô%æ÷Ù™«L¬ */ - $"6FF2 04C8 8307 016C 6E46 645B 5488 79C0" /* oò.ȃ..lnFd[TˆyÀ */ - $"C0E5 8A2A 46EB DB4C 65A0 27FC 6230 781C" /* ÀåŠ*FëÛLe 'üb0x. */ - $"EDB8 4666 1604 1937 9603 A2AA D8C3 43A6" /* í¸Ff...7–.¢ªØÃC¦ */ - $"E254 D745 866F D24A DD91 397E C575 F187" /* âT×E†oÒJÝ‘9~Åuñ‡ */ - $"193B F5F5 819B 7D57 EC83 0871 ED1B 64F6" /* .;õõ›}Wìƒ.qí.dö */ - $"E47A E1B0 65F9 67DF 5680 3642 52AA BB4B" /* äzá°eùgßV€6BRª»K */ - $"BA52 D8BA 8AF7 0A96 412A 92B2 045F 9739" /* ºRغŠ÷–A*’²._—9 */ - $"3A52 D961 6BC6 1D2E D90D 29A7 E9DE 2651" /* :RÙakÆ..Ù.)§éÞ&Q */ - $"CE3F 9921 03BC 7A7A CBFD 63E2 4C7C 9025" /* Î?™!.¼zzËýcâL|% */ - $"BCC3 D509 745E 9AE4 1675 0242 26EE E4F6" /* ¼ÃÕÆt^šä.u.B&îäö */ - $"B04B CFB3 E37F EADB 2840 E47E 0209 C8C5" /* °Kϳã.êÛ(@ä~.ÆÈÅ */ - $"56FC 6228 BB57 F43A BE32 0753 73FB EAE2" /* Vüb(»Wô:¾2.Ssûêâ */ - $"55B4 D581 42C8 10B8 AEA9 67C4 F685 982C" /* U´ÕBÈ.¸®©gÄö…˜, */ - $"3104 095F DCBD 3701 8749 9CBA A7A5 B714" /* 1.Æ_ܽ7.‡Iœº§¥·. */ - $"FDED FAA3 F034 54D8 728F 8640 4A61 560C" /* ýíú£ð4TØr†@JaV. */ - $"50D4 B224 A5F1 6715 6C8B 7EC6 BF5C 120D" /* PÔ²$¥ñg.l‹~Æ¿\.. */ - $"8797 B25E B0E1 C57E 69AF 1FF2 99C3 44B5" /* ‡—²^°áÅ~i¯.ò™ÃDµ */ - $"0508 0061 1F44 795F 27C0 511E 0796 9740" /* ...a.Dy_'ÀQ..–—@ */ - $"14FF 4C51 5651 34F3 658D 4CA8 3FBF 43CC" /* .ÿLQVQ4óeL¨?¿CÌ */ - $"8813 D372 1723 7DB5 6D44 4524 4E91 B644" /* ˆ.Ór.#}µmDE$N‘¶D */ - $"4B7D CDEC E0E0 8468 622D 87FE 80E3 E097" /* K}Íìàà„hb-‡þ€ãà— */ - $"303D 8894 1FFF 7FA6 9AAB C6E0 0B83 3EDD" /* 0=ˆ”.ÿ.¦š«Æà.ƒ>Ý */ - $"86A5 43D3 C650 0008 D364 A800 0000 0000" /* †¥CÓÆP..Ód¨..... */ - $"0000 07D7 8F92 61B9 E6E0 BCBF CD4A AB76" /* ...×’a¹æà¼¿ÍJ«v */ - $"5B6E 246A 8DFB D274 41F9 3583 773D 5165" /* [n$jûÒtAù5ƒw=Qe */ - $"2139 B773 476E DF91 33F0 8CDA F420 613F" /* !9·sGnß‘3ðŒÚô a? */ - $"9B35 33C9 8298 A661 A5DB 2CEF 1A1C BC3E" /* ›53É‚˜¦a¥Û,ï..¼> */ - $"09B4 5415 8511 4FE5 3FF8 B88C 339D C169" /* Æ´T.….Oå?ø¸Œ3Ái */ - $"9608 FF62 B2D6 285A 80A2 22C9 E4AA 5A99" /* –.ÿb²Ö(Z€¢"ÉäªZ™ */ - $"B3F5 E9D4 7FFF 7FF4 7D5C 4CC0 788F 0EB6" /* ³õéÔ.ÿ.ô}\LÀx.¶ */ - $"8024 0000 0A1E 1F40 0000 0000 0000 0000" /* €$..Â..@........ */ - $"CA54 CF6A 897B B6D7 9C90 87E9 FF6A 22A0" /* ÊTÏj‰{¶×œ‡éÿj"  */ - $"0765 4AE8 B827 B7A1 C412 4000 0000 0000" /* .eJè¸'·¡Ä.@..... */ - $"0000 2222 DAB7 AEED C4EB AFCB FF79 6610" /* ..""Ú·®íÄë¯Ëÿyf. */ - $"A362 D5F2 1401 DA9F 8978 3FC3 FF60 341C" /* £bÕò..ÚŸ‰x?Ãÿ`4. */ - $"524C CBF3 AF64 9BA4 637F F217 CA8C A4CE" /* RLËó¯d›¤c.ò.ÊŒ¤Î */ - $"A881 46DE C63F CB0B 4C86 F71C CDFF 6CDC" /* ¨FÞÆ?Ë.L†÷.ÍÿlÜ */ - $"3C86 AFD6 02EF 25B3 E392 0238 14ED F9FF" /* <†¯Ö.ï%³ã’.8.íùÿ */ - $"71EA 1A7B 7848 281D C18D 83C1 F0D1 C115" /* qê.{xH(.ÁƒÁðÑÁ. */ - $"C525 7E38 9E60 32A4 CED2 A5DE 8006 1212" /* Å%~8ž`2¤ÎÒ¥Þ€... */ - $"7136 14A1 74D1 9C7D F74C 708E 43DE 4154" /* q6.¡tÑœ}÷LpŽCÞAT */ - $"2939 179A 87BB 2AAF 7401 4404 CB30 458F" /* )9.š‡»*¯t.D.Ë0E */ - $"F1B7 EE42 3E46 458F B220 6F30 EE24 7D86" /* ñ·îB>FE² o0î$}† */ - $"2D28 3CA7 C184 60D3 4EBC 9C79 C402 02FC" /* -(<§Á„`ÓN¼œyÄ..ü */ - $"553C C62D DDC0 3D0C F12B C1FF 546D A4FF" /* U<Æ-ÝÀ=.ñ+ÁÿTm¤ÿ */ - $"5885 6B1B 9EF6 2206 8FB5 1CB0 2D3D B922" /* X…k.žö".µ.°-=¹" */ - $"644F D104 0152 70F8 BF41 4D6E 4F05 B928" /* dOÑ..Rpø¿AMnO.¹( */ - $"396A 4A92 9B1B 24AB 4611 6D95 87D6 2D7C" /* 9jJ’›.$«F.m•‡Ö-| */ - $"7546 B839 A3B1 C612 0F2A 796E 7911 5FF9" /* uF¸9£±Æ..*yny._ù */ - $"03C4 D13E EF00 2DEF 9CFE FDDE 3A2C FF3E" /* .ÄÑ>ï.-ïœþýÞ:,ÿ> */ - $"4567 F432 3673 3F84 8787 B65C 7A4F 2007" /* Egô26s?„‡‡¶\zO . */ - $"FF7C D894 A762 3872 8FA4 9563 D178 5039" /* ÿ|Ø”§b8r¤•cÑxP9 */ - $"C4BD 2EB4 0491 2A80 0000 0000 0000 0001" /* Ľ.´.‘*€........ */ - $"F172 6FA1 09F2 9F35 F3BC 2E0B 8E46 2557" /* ñro¡ÆòŸ5ó¼..ŽF%W */ - $"67C5 4F12 D1CF F08C BC61 0F89 E4A4 9249" /* gÅO.ÑÏðŒ¼a.‰ä¤’I */ - $"2492 4924 9249 221B 4708 65ED 84CA FDD2" /* $’I$’I".G.eí„ÊýÒ */ - $"D193 7C69 0CA3 95EF DDF2 33FF 556E D976" /* Ñ“|i.£•ïÝò3ÿUnÙv */ - $"2E4D FDCE E0FC 8669 83FF 768E 3CBB 179B" /* .MýÎàü†iƒÿvŽ<».› */ - $"DBB9 253D BFFF 79F1 5006 27BF 5548 40B9" /* Û¹%=¿ÿyñP.'¿UH@¹ */ - $"BADC F963 10BA 8BD9 367F E03A 6E29 5908" /* ºÜùc.º‹Ù6.à:n)Y. */ - $"0000 0000 0000 0000 0028 8080 0000 000A" /* .........(€€... */ - $"6370 D000 0142 83C0 0000 0011 CD3F D940" /* cpÐ..BƒÀ....Í?Ù@ */ - $"0022 C990 C912 501C 14FC 1926 5412 0E88" /* ."ÉÉ.P..ü.&T..ˆ */ - $"C32F B2ED E7A4 9249 2492 4924 9249 247E" /* Ã/²í礒I$’I$’I$~ */ - $"FB2C 999E D2ED 6DFF 783B 4C3A 3DB7 14A5" /* û,™žÒímÿx;L:=·.¥ */ - $"872C 2B85 8FC2 72EA 3412 FCA8 32E0 7A2E" /* ‡,+…Ârê4.ü¨2àz. */ - $"B109 F66C 3F99 7C32 2761 1522 7B9C 1851" /* ±Æöl?™|2'a."{œ.Q */ - $"B3CB 5373 0652 CE79 D8C5 B721 03D7 CD81" /* ³ËSs.RÎyØÅ·!.×Í */ - $"A03A CD5F CECF B58A 4122 7ED2 9FFF 7FFF" /*  :Í_ÎϵŠA"~ÒŸÿ.ÿ */ - $"1575 DF0B 430B 0A6C 6108 B421 B33F E9FA" /* .uß.C.Âla.´!³?éú */ - $"AC06 391C EB01 17F4 3BF4 4CDA 87DA 516F" /* ¬.9.ë..ô;ôLÚ‡ÚQo */ - $"EFA3 E7F9 651A 6902 C269 AF79 2EA4 D861" /* ï£çùe.i.Âi¯y.¤Øa */ - $"CBC1 7F37 146D 4163 38BB B16B AAD4 9AC2" /* ËÁ.7.mAc8»±kªÔšÂ */ - $"424A B3CE 1368 78EF B4B0 FE68 2FBA 0CB2" /* BJ³Î.hxï´°þh/º.² */ - $"E672 A89D 999E 64CD 417A 98A3 8458 0603" /* ær¨™ždÍAz˜£„X.. */ - $"C03D 9F9E B15E 8418 0FC6 F3E0 BA39 A3C1" /* À=Ÿž±^„..Æóàº9£Á */ - $"9929 0547 9C29 FC76 57CA B1E5 F887 AE73" /* ™).Gœ)üvWÊ±åø‡®s */ - $"78AA BA9F FF7F C07C 00F0 28E9 7533 0FC1" /* xªºŸÿ.À|.ð(éu3.Á */ - $"097C 4ABC F3CB 6604 EEC2 5194 A1F2 A201" /* Æ|J¼óËf.îÂQ”¡ò¢. */ - $"D6B0 C5F3 4AA3 8FD8 34DC A382 0CD4 134E" /* Ö°ÅóJ£Ø4Ü£‚.Ô.N */ - $"8275 37F5 2388 74C6 1A6C F889 1037 A348" /* ‚u7õ#ˆtÆ.lø‰.7£H */ - $"ACB4 EFF5 B446 564C C6DC 75F7 8445 013F" /* ¬´ïõ´FVLÆÜu÷„E.? */ - $"79FF 407B 05EE 9C66 8A53 FF7A 367A 6D06" /* yÿ@{.îœfŠSÿz6zm. */ - $"9ADF CBDD 25B5 0629 78A0 A071 35BA EE49" /* šßËÝ%µ.)x  q5ºîI */ - $"64E9 3EA3 9A07 917A 66E3 090C B916 3BF5" /* dé>£š.‘zfãÆ.¹.;õ */ - $"10D7 77D5 7281 248E 3F09 0C0F 319E 7F71" /* .×wÕr$Ž?Æ..1ž.q */ - $"98DA A34A C823 06A4 6BFD 8EA1 8C71 EB25" /* ˜Ú£JÈ#.¤kýŽ¡Œqë% */ - $"E5FC 0BA1 DB35 9514 A229 56F0 7E42 9FD0" /* åü.¡Û5•.¢)Vð~BŸÐ */ - $"5435 3CB7 AED9 0A4F 625B A493 D1B2 C654" /* T5<·®ÙÂOb[¤“ѲÆT */ - $"F691 87F9 F8E9 7459 1823 E06B 57D6 C638" /* ö‘‡ùøétY.#àkWÖÆ8 */ - $"7EE2 8CA0 1D79 4000 0000 0000 0000 0000" /* ~⌠.y@......... */ - $"0000 0000 442A 0D8C 8522 4E1A 3752 5040" /* ....D*.Œ…"N.7RP@ */ - $"E53D EE69 0B70 A6BF 9D0D D725 D66E 8D50" /* å=îi.p¦¿.×%ÖnP */ - $"10DB 966B 649B 0CA3 958B 6457 90CC 214A" /* .Û–kd›.£•‹dWÌ!J */ - $"C4C0 27A2 95F4 98AD 14C2 1892 EBE7 864B" /* ÄÀ'¢•ô˜­.Â.’ëç†K */ - $"18AA 55C7 50D2 4A15 7F4E 566A 9C13 9C52" /* .ªUÇPÒJ..NVjœ.œR */ - $"AC77 FE86 B3A2 5D92 D112 516C BA99 60EE" /* ¬wþ†³¢]’Ñ.Qlº™`î */ - $"221A F194 D9DF FF5F FF6B 77F9 4B01 4F8F" /* ".ñ”Ùßÿ_ÿkwùK.O */ - $"F681 8614 2F3E 31E3 EABB 7C34 6025 A491" /* ö†./>1ãê»|4`%¤‘ */ - $"9BC1 A348 628D 34AE 751A F8F7 7521 7F48" /* ›Á£Hb4®u.ø÷u!.H */ - $"68A4 6B9C F66F 252D 6021 9C97 39AB B637" /* h¤kœöo%-`!œ—9«¶7 */ - $"3B5D E8FB 56EE 824A F65D C84D E23C 7BF2" /* ;]èûVî‚Jö]ÈMâ<{ò */ - $"5400 0000 0000 0000 0000 0000 0014 080D" /* T............... */ - $"B05B 4688 1F60 376D 2209 1DE1 7E75 CD30" /* °[Fˆ.`7m"Æ.á~uÍ0 */ - $"5D2F 627B A077 8D86 2001 62AF 1031 6853" /* ]/b{ w† .b¯.1hS */ - $"2A8E 0308 16F6 C4EC E5B6 814A 1DF2 23EB" /* *Ž...öÄìå¶J.ò#ë */ - $"8C16 64F9 A1ED 8A1F 346E 2E1C 5ACB 4376" /* Œ.dù¡íŠ.4n..ZËCv */ - $"5014 B885 5212 5294 8F4F DF56 7339 8A5D" /* P.¸…R.R”OßVs9Š] */ - $"03C0 A05F D60B 5D58 2677 CD67 A4EE 3803" /* .À _Ö.]X&wÍg¤î8. */ - $"B2B1 9AD5 A41A C3EF 3281 3FFF 780A A5BD" /* ²±šÕ¤.Ãï2?ÿxÂ¥½ */ - $"861B 62F7 456F 1021 93CD A115 BD61 7E4C" /* †.b÷Eo.!“Í¡.½a~L */ - $"2306 D6BF D5D9 18AF 12BB 22D9 E32E 6976" /* #.Ö¿ÕÙ.¯.»"Ùã.iv */ - $"9282 5E47 A842 7983 2C87 64C5 6215 A0D9" /* ’‚^G¨Byƒ,‡dÅb. Ù */ - $"E45A EFAE 74F3 E5E5 7679 A7C0 D366 649C" /* äZï®tóååvy§ÀÓfdœ */ - $"9EF3 D763 2D6C D0AD 48E5 7A2A 9454 8B34" /* žó×c-lЭHåz*”T‹4 */ - $"B7FF 7FCD F604 90E4 2716 1C40 DD8A 8B1A" /* ·ÿ.Íö.ä'..@ÝŠ‹. */ - $"24C8 2F0C 06AC 999A 58B7 C15E E6B1 431B" /* $È/..¬™šX·Á^æ±C. */ - $"73D1 FEC5 5182 4A2D 33CB E920 AFBE 9F5A" /* sÑþÅQ‚J-3Ëé ¯¾ŸZ */ - $"0478 C2F3 80D7 241A 2E07 8BF3 FD3F 471A" /* .xÂó€×$...‹óý?G. */ - $"7C53 1C79 2F17 C32F D5C6 B977 E2F9 9D80" /* |S.y/.Ã/ÕÆ¹wâù€ */ - $"558B 7336 75BC 5945 3986 BD1C CE95 EA07" /* U‹s6u¼YE9†½.Εê. */ - $"7152 C778 65AD 73E9 F1B7 24D4 BDB0 7F24" /* qRÇxe­séñ·$Ô½°.$ */ - $"BACD 3C51 D344 33D7 21C7 BE9A 915D 2808" /* ºÍh?.C®0Î.ÿg.x„˜ */ - $"08D8 E1D9 3F1A E50B EB7C E564 6F4C 57F3" /* .ØáÙ?.å.ë|ådoLWó */ - $"9E60 5F9B 244E 83A9 33C9 668A 3951 7E33" /* ž`_›$Nƒ©3ÉfŠ9Q~3 */ - $"31D7 01E7 0342 6BC0 7FD1 7488 2BE1 9AD1" /* 1×.ç.BkÀ.Ñtˆ+ášÑ */ - $"1938 BBD8 7710 BAD3 BB92 2C80 A162 B2EF" /* .8»Øw.ºÓ»’,€¡b²ï */ - $"3FEA 6FC2 47D2 0D0E 28AB 03DA 4B34 4027" /* ?êoÂGÒ..(«.ÚK4@' */ - $"7FFD 87BC 9D96 E076 3C00 0000 0000 0000" /* .ý‡¼–àv<....... */ - $"0000 0000 0000 136C 1721 95F0 1991 3F80" /* .......l.!•ð.‘?€ */ - $"65DC 1F3F AEA0 BE5C 71D2 94CE C7FF 7FFF" /* eÜ.?® ¾\qÒ”ÎÇÿ.ÿ */ - $"7917 BEAD D458 935A 563C CC9C 6C0D CFFF" /* y.¾­ÔX“ZV<Ìœl.Ïÿ */ - $"55DA 93C2 F199 3D1E C4C2 3C5F A7BC D48E" /* UÚ“Âñ™=.ÄÂ<_§¼ÔŽ */ - $"4980 037B 9FCC F7BC 6E1E 78CD 2838 DC58" /* I€.{ŸÌ÷¼n.xÍ(8ÜX */ - $"F156 C827 88EA BFF7 BD95 BBD6 FE11 C305" /* ñVÈ'ˆê¿÷½•»Öþ.Ã. */ - $"A1D2 FA2A EA0B E56B 285B 91FE 551E F5E2" /* ¡Òú*ê.åk([‘þU.õâ */ - $"687C 5A51 1A67 64D3 BD76 4937 F455 4C94" /* h|ZQ.gdÓ½vI7ôUL” */ - $"6A7E B888 CB40 7AA3 DDEE 8BD8 2D9F 1EB6" /* j~¸ˆË@z£Ýî‹Ø-Ÿ.¶ */ - $"48DF 9C66 6BF3 A26A 3CC4 2D4D E47A 6D9A" /* Hßœfkó¢j<Ä-Mäzmš */ - $"DAB1 1DA4 083A D994 4416 C0D2 2E63 539E" /* Ú±.¤.:Ù”D.ÀÒ.cSž */ - $"7274 3C04 85F4 D7B5 EDEF 507A B2B7 1832" /* rt<.…ô×µíïPz²·.2 */ - $"6615 A186 4A80 0000 0000 0000 0000 0000" /* f.¡†J€.......... */ - $"07CF BF6C 3626 7453 BF7D 8B57 26C9 F556" /* .Ï¿l6&tS¿}‹W&ÉõV */ - $"1F12 0BB9 5DC4 797D 3C69 7DB2 2FFF 7F33" /* ...¹]Äy}LJ¬ */ - $"3161 5289 3A6A FC0B E254 CAFA 6A32 2F8C" /* 1aR‰:jü.âTÊúj2/Œ */ - $"8B76 FA87 DADD 0333 2250 0058 F5C6 21CD" /* ‹vú‡ÚÝ.3"P.XõÆ!Í */ - $"D094 5CD5 10DD 2FA0 B74B 06FB AA9B 2B62" /* Д\Õ.Ý/ ·K.ûª›+b */ - $"E36D 708E B8F5 0739 3097 7F03 47BE 48F5" /* ãmpޏõ.90—..G¾Hõ */ - $"D079 1641 CA5D DF28 C92B 0EFA B18F CE6F" /* Ðy.AÊ]ß(É+.ú±Îo */ - $"6648 DB26 DE5C 1D17 2BD3 28AF DD89 801C" /* fHÛ&Þ\..+Ó(¯Ý‰€. */ - $"AB0D 40D1 9016 D542 63A0 8222 9D7A F0F5" /* «.@Ñ.ÕBc ‚"zðõ */ - $"A171 2D28 3D2C C22E 09AB 3AA9 C50B 7545" /* ¡q-(=,Â.Æ«:©Å.uE */ - $"4C64 18E8 8E67 3A7D DDBE 36CE 2F97 5AD0" /* Ld.èŽg:}ݾ6Î/—ZÐ */ - $"E4F0 8AFB 6071 6268 E5F6 09EA 245F 9F87" /* äðŠû`qbhåöÆê$_Ÿ‡ */ - $"E304 242C 234C 9FF7 1D0A 11C7 4FE7 20BC" /* ã.$,#LŸ÷.Â.ÇOç ¼ */ - $"EC58 1A4B 5A8E DE45 0E5F 4A03 4C8A 5051" /* ìX.KZŽÞE._J.LŠPQ */ - $"E410 4405 321B BD82 AC69 94F7 AA5E 5C65" /* ä.D.2.½‚¬i”÷ª^\e */ - $"436F 861A C95F 1AB0 2E2B 9689 AA43 B247" /* Co†.É_.°.+–‰ªC²G */ - $"6DE3 4E9E F205 F221 D175 86BB 4434 C0EE" /* mãNžò.ò!Ñu†»D4Àî */ - $"C472 EA2B 499D 63FA B4C8 FAB3 91F3 060D" /* Ärê+Icú´Èú³‘ó.. */ - $"C203 A636 1D98 6B00 D678 0D3C BE92 309E" /* Â.¦6.˜k.Öx.<¾’0ž */ - $"759A 11D4 B514 24FB E4D2 7089 76DE 42DD" /* uš.Ôµ.$ûäÒp‰vÞBÝ */ - $"5338 4798 5943 4A6B 500A 472E 77BE AEBD" /* S8G˜YCJkPÂG.w¾®½ */ - $"93B0 117A 0E2D A8E4 DFED 5A76 1775 2BFF" /* “°.z.-¨äßíZv.u+ÿ */ - $"1A84 CBE1 B007 D3EA 11B0 9BB8 4B3F BB56" /* .„Ëá°.Óê.°›¸K?»V */ - $"33F6 B242 4C5C A63D 638F 1BA5 0AC5 698D" /* 3ö²BL\¦=c.¥ÂÅi */ - $"45B3 D343 D769 FEEE C45D 50B0 9AAA 4146" /* E³ÓC×iþîÄ]P°šªAF */ - $"0BFA F8CC 694B A42D FC1E C3F1 54F0 D3F9" /* .úøÌiK¤-ü.ÃñTðÓù */ - $"F051 5182 D373 5210 38AA F9B0 D3F3 6B07" /* ðQQ‚ÓsR.8ªù°Óók. */ - $"C944 7FCA 2126 D17A 01B1 7763 CDE8 D5FF" /* ÉD.Ê!&Ñz.±wcÍèÕÿ */ - $"00F4 08D7 4060 339C D8E2 7EA4 B00D 3171" /* .ô.×@`3œØâ~¤°.1q */ - $"ABB0 7F47 D146 13B9 398E 14B3 C55D 10AF" /* «°.GÑF.¹9Ž.³Å].¯ */ - $"8D0A 2444 26A0 EFEA 6CB2 51FD EA28 0FD7" /* Â$D& ïêl²Qýê(.× */ - $"4E2F F54F 0066 62F2 66F3 334C 5D9D 77ED" /* N/õO.fbòfó3L]wí */ - $"F3D0 12ED 7A95 89A1 B928 8429 DCFB 8C68" /* óÐ.íz•‰¡¹(„)ÜûŒh */ - $"C35C 3C77 5D7D 5180 A012 ADA3 AE60 AAE0" /* Ã\rœ`u¨&i". */ - $"E140 D538 7CD4 5763 D708 6D5E 45C0 AE61" /* á@Õ8|ÔWc×.m^EÀ®a */ - $"EC8B E180 1D9C 712C 4DB9 F177 6733 0F76" /* ì‹á€.œq,M¹ñwg3.v */ - $"9A72 7AD0 D18D 2BE6 9DCE 6294 4092 CE8E" /* šrzÐÑ+æÎb”@’ÎŽ */ - $"ACED 8B00 B050 AE53 C09C 98D6 CFD1 4208" /* ¬í‹.°P®SÀœ˜ÖÏÑB. */ - $"DEB2 AF01 5ED7 E1F4 4EAA 0B09 2263 FE09" /* Þ²¯.^×áôNª.Æ"cþÆ */ - $"2771 6EB7 9181 1DFE A5DD 9A12 4592 02FD" /* 'qn·‘.þ¥Ýš.E’.ý */ - $"5F2D D4D6 5C15 B454 B07C 9B6A B9F9 AEC2" /* _-ÔÖ\.´T°|›j¹ù®Â */ - $"D883 1F5F B9B1 8258 6732 C7E3 5C90 DB16" /* ؃._¹±‚Xg2Çã\Û. */ - $"42EC D875 2B9D FEAF 1FED BD80 261D BAAE" /* BìØu+þ¯.í½€&.º® */ - $"3799 FDC7 DBE5 E769 A11C 3304 5D3B 419C" /* 7™ýÇÛåçi¡.3.];Aœ */ - $"5844 E615 EE7A 5DCE 272E D055 121D 1F84" /* XDæ.îz]Î'.ÐU...„ */ - $"2EC6 E6B1 A7DA D03A D600 6D58 4FF0 9196" /* .Ææ±§ÚÐ:Ö.mXOð‘– */ - $"FBCA CDDC 1B8D 9D1A BB7B 3782 0F3F 626C" /* ûÊÍÜ..»{7‚.?bl */ - $"26AA AF34 6A20 8210 1E96 ED21 5A26 EF04" /* &ª¯4j ‚..–í!Z&ï. */ - $"5F66 5C2D A8A4 F3BC 1871 AD1D FE4D 8C8B" /* _f\-¨¤ó¼.q­.þMŒ‹ */ - $"F1E5 A382 654B 08C7 EFC4 BFBA C29B 5C73" /* ñ壂eK.ÇïÄ¿ºÂ›\s */ - $"2420 9390 3B75 6DE6 0208 6F4F BB53 B2AA" /* $ “;umæ..oO»S²ª */ - $"AD28 4360 1A8A 4301 088C 6F17 68CC 9180" /* ­(C`.ŠC..Œo.hÌ‘€ */ - $"D757 7012 3BE3 C4AB DF05 97B9 4B57 B6FC" /* ×Wp.;ãÄ«ß.—¹KW¶ü */ - $"7693 36DE 89E8 E2AB 4352 A782 4520 DA28" /* v“6Þ‰èâ«CR§‚E Ú( */ - $"F1F2 34D6 2EAE E401 ED61 1E2E 4E74 D4EB" /* ñò4Ö.®ä.ía..NtÔë */ - $"98A9 94AD F856 8EE1 E3D0 06FC AA37 31E5" /* ˜©”­øVŽáãÐ.üª71å */ - $"1047 113E C151 CE86 B6A4 0F82 E5D9 CE50" /* .G.>ÁQΆ¶¤.‚åÙÎP */ - $"57A8 8F86 AFAD 21D1 2C4C F181 8BD7 106C" /* W¨†¯­!Ñ,Lñ‹×.l */ - $"3C77 649E 038E 3C63 66F4 EE1A 2906 755C" /* 1dÄ>Ta */ - $"4BD0 139E 6390 0E05 4793 56B8 5080 CBF6" /* KÐ.žc..G“V¸P€Ëö */ - $"9E70 BEA1 FB26 DD1E AEE1 E78D 0D32 FA02" /* žp¾¡û&Ý.®áç.2ú. */ - $"43FC FBC6 7464 2C9A 14AD 2C7C 0969 995F" /* CüûÆtd,š.­,|Æi™_ */ - $"6363 3037 9C34 C5F8 42DF B339 D2B0 5C45" /* cc07œ4ÅøBß³9Ò°\E */ - $"6130 509D 28E7 D3A7 9308 74ED 9265 B7F9" /* a0P(çÓ§“.tí’e·ù */ - $"0F54 D265 33D9 EB57 07C4 852B E3C8 771F" /* .TÒe3ÙëW.Ä…+ãÈw. */ - $"21F8 ADA3 D807 625C 513A E395 604B 0D6A" /* !ø­£Ø.b\Q:ã•`K.j */ - $"A9FC 297E 63AF 7622 23B6 63E1 EF25 F572" /* ©ü)~c¯v"#¶cáï%õr */ - $"01B0 400D 18C6 C9FA 6AF5 3E26 4199 6E68" /* .°@..ÆÉújõ>&A™nh */ - $"99B5 B3A9 F861 3419 C6C7 B65C D0F6 353B" /* ™µ³©øa4.ÆÇ¶\Ðö5; */ - $"6551 1B0A 9D82 1F07 4185 8C46 5867 DC22" /* eQ.‚..A…ŒFXgÜ" */ - $"BD38 AFF7 27BA 1114 9266 5EF4 1EA9 89B4" /* ½8¯÷'º..’f^ô.©‰´ */ - $"A634 E917 65E5 502E 8028 D24E 725F 0C22" /* ¦4é.eåP.€(ÒNr_." */ - $"1513 7B38 5FEA 3150 520B 6D8A 03D8 F796" /* ..{8_ê1PR.mŠ.Ø÷– */ - $"D183 D8FA 82E2 C147 B662 593B 9FC8 A2A0" /* уØú‚âÁG¶bY;ŸÈ¢  */ - $"C63B D151 D905 072C 02E5 919B 0BE9 6D76" /* Æ;ÑQÙ..,.å‘›.émv */ - $"4BEF 7D51 FF67 C2F2 BB61 DDD2 7981 0B7E" /* Kï}QÿgÂò»aÝÒy.~ */ - $"D406 3679 DFA4 FAE3 A33C 28AC 06C6 93C1" /* Ô.6yߤúã£<(¬.Æ“Á */ - $"B82F 53DB 1EB8 A6F3 5A24 A44A 1A76 9204" /* ¸/SÛ.¸¦óZ$¤J.v’. */ - $"6543 FC80 18DA 3C5D 395B 01DC D7E8 C21E" /* eCü€.Ú<]9[.Ü×èÂ. */ - $"A66C 9AE3 08D6 DBFC EE95 9E73 F71D 7CCA" /* ¦lšã.ÖÛüs÷.|Ê */ - $"2A6A F6D2 11D9 AC28 BEDE 8E1B 65EF A995" /* *jöÒ.Ù¬(¾ÞŽ.eï©• */ - $"F7B5 B19D 5F63 F42B D0AD D69A BD47 1EED" /* ÷µ±_cô+Э֚½G.í */ - $"2E5C 0276 3AEA F6D9 6E3F 314C 7F5F 52C3" /* .\.v:êöÙn?1L._Rà */ - $"093D C8A9 23E4 C154 5587 294A 98A9 0643" /* Æ=È©#äÁTU‡)J˜©.C */ - $"AF18 0D20 51A4 6FE1 F326 11E7 5A91 2919" /* ¯.. Q¤oáó&.çZ‘). */ - $"DD53 B13B 2CB3 DE77 FAB9 420E BAFB 305B" /* ÝS±;,³Þwú¹B.ºû0[ */ - $"E9AB 7A2B 623B 78FE 346D 8BB6 BA40 AE40" /* é«z+b;xþ4m‹¶º@®@ */ - $"5B6D 6D53 81A1 076D 7058 E792 E410 3FA7" /* [mmS¡.mpXç’ä.?§ */ - $"AD06 7E2E 5158 D129 9233 6E1D 6B7C C701" /* ­.~.QXÑ)’3n.k|Ç. */ - $"D61D 42D8 472F D5E2 2710 0B6C 828A 2352" /* Ö.BØG/Õâ'..l‚Š#R */ - $"D400 65FA E227 A938 1832 18CC 2BCE 19A8" /* Ô.eúâ'©8.2.Ì+Î.¨ */ - $"773C 3CB1 C6BD D722 8EE1 8AE2 4D4B 97D4" /* w<<±Æ½×"ŽáŠâMK—Ô */ - $"1763 37E4 2F93 8578 534E 0BA9 B493 3B80" /* .c7ä/“…xSN.©´“;€ */ - $"F018 28BE 2A52 15B2 8499 08A8 005F F028" /* ð.(¾*R.²„™.¨._ð( */ - $"ADFD ACEB 238F 922A 75E4 1C65 F2C3 F14B" /* ­ý¬ë#’*uä.eòÃñK */ - $"213D 7263 4A9A 1C80 12BD 5895 0EC8 B955" /* !=rcJš.€.½X•.ȹU */ - $"8CD0 FB81 63CF FF7F B545 85DF E201 36A9" /* ŒÐûcÏÿ.µE…ßâ.6© */ - $"E524 1BD6 EDDA 7C33 8CD2 E114 BA93 51E0" /* å$.ÖíÚ|3ŒÒá.º“Qà */ - $"A113 A12A FBEA 8570 B5FE E1B6 7963 5B31" /* ¡.¡*ûê…pµþá¶yc[1 */ - $"512A 99B1 3A59 E50E C584 DD7F FF7F FF7E" /* Q*™±:Yå.Å„Ý.ÿ.ÿ~ */ - $"D3C9 019B 1FBC DB70 2C2A 14A6 E7F1 0147" /* ÓÉ.›.¼Ûp,*.¦çñ.G */ - $"5F3A A36C 6F8A 9038 ABD8 EB8F FF7F FE79" /* _:£loŠ8«Øëÿ.þy */ - $"6C12 2D6F FD6D F9A0 0392 0E82 0296 3C14" /* l.-oýmù .’.‚.–<. */ - $"FEFA 803C A3D4 1049 CF30 E22F 6542 7ABF" /* þú€<£Ô.IÏ0â/eBz¿ */ - $"378E 66B2 9091 D396 B953 DCF5 66D3 C5B5" /* 7Žf²‘Ó–¹SÜõfÓŵ */ - $"7719 028C 5C0F F898 00A1 0C1D E181 F9C7" /* w..Œ\.ø˜.¡..áùÇ */ - $"2E46 06D4 D623 1256 EFAE 89E3 4FFF 7FDD" /* .F.ÔÖ#.VﮉãOÿ.Ý */ - $"F00D 4E11 65D5 B8F9 7C0B A045 AC4A 1E42" /* ð.N.eÕ¸ù|. E¬J.B */ - $"221C B512 5480 EF2D CB80 A089 3603 2CA1" /* ".µ.T€ï-Ë€ ‰6.,¡ */ - $"391C 7925 C817 92E3 8438 C438 08D1 0637" /* 9.y%È.’ã„8Ä8.Ñ.7 */ - $"9FCD F4C2 C04C 40BB A484 5043 0C1E 7C85" /* ŸÍôÂÀL@»¤„PC..|… */ - $"D7F6 1F6D BFC7 60AA 4D18 A399 9A13 CCD0" /* ×ö.m¿Ç`ªM.£™š.ÌÐ */ - $"26DA 3F97 24CB E902 0668 67F7 FE63 7A2E" /* &Ú?—$Ëé..hg÷þcz. */ - $"16D6 987F FF7F AFC1 5C35 E63D BA36 6227" /* .Ö˜.ÿ.¯Á\5æ=º6b' */ - $"FF7C FD39 8B8B 1A5F 6026 831B 0764 8805" /* ÿ|ý9‹‹._`&ƒ..dˆ. */ - $"E40B 0F19 7FFF 7FFC DEBC DD5B 9008 0000" /* ä....ÿ.üÞ¼Ý[... */ - $"0C24 1D44 4641 3BC8 4248 E229 62D2 088D" /* .$.DFA;ÈBHâ)bÒ. */ - $"117F DE8D 0B52 C3FD 1DD9 3823 F138 4C98" /* ..Þ.RÃý.Ù8#ñ8L˜ */ - $"58A8 2683 519C F914 4961 5226 891F F863" /* X¨&ƒQœù.IaR&‰.øc */ - $"3FF2 B19F 113D BFEF 9D12 30C6 66BD E2A6" /* ?ò±Ÿ.=¿ï.0Æf½â¦ */ - $"5D8C BE7E BE19 3D8F 03F2 5D26 FF7F FF7E" /* ]Œ¾~¾.=.ò]&ÿ.ÿ~ */ - $"A82B 5E03 E7A8 E8F1 8C4D B6F1 F0E2 FC36" /* ¨+^.ç¨èñŒM¶ñðâü6 */ - $"DE7A 2F55 38B1 B436 2E50 7D25 E3F0 82C8" /* Þz/U8±´6.P}%ãð‚È */ - $"580F 0D19 C280 415C 2A7F FCD9 C720 E649" /* X...€A\*.üÙÇ æI */ - $"4064 2624 04AC 0B71 41FD 3937 8359 4137" /* @d&$.¬.qAý97ƒYA7 */ - $"8CA9 B642 C318 BD37 82D3 B786 8217 3252" /* Œ©¶BÃ.½7‚Ó·†‚.2R */ - $"44EA 4598 57D2 2F66 957F 39FE D712 F449" /* DêE˜WÒ/f•.9þ×.ôI */ - $"213A BEBB B6CC F551 FF7F EB0A AE45 8497" /* !:¾»¶ÌõQÿ.ë®E„— */ - $"0F4C FD34 4090 01FE CFC8 51AA C32A 7D95" /* .Lý4@.þÏÈQªÃ*}• */ - $"D414 2609 E22F 1B7D E10E 97BB 05D1 9D04" /* Ô.&Æâ/.}á.—».Ñ. */ - $"0592 9271 0D39 AB59 F165 0D09 549C B4E3" /* .’’q.9«Yñe.ÆTœ´ã */ - $"AEE5 555F 00A3 5E0A E4D3 BAFE 1EC6 2FCE" /* ®åU_.£^ÂäÓºþ.Æ/Î */ - $"FB04 C9BC 71D8 A42D 2F70 9FE1 EC17 C31D" /* û.ɼqؤ-/pŸáì.Ã. */ - $"ECB2 0A82 EFB1 914C F6D2 E54C 5316 B6C4" /* ì²Â‚ﱑLöÒåLS.¶Ä */ - $"4FFF 653B FD6E 27A6 9959 244B F458 B35C" /* Oÿe;ýn'¦™Y$KôX³\ */ - $"865C EB94 2CD7 7343 B74C C211 8A4D 2A99" /* †\ë”,×sC·LÂ.ŠM*™ */ - $"732E 3B43 CEAC C300 A520 924D 6F1F 8295" /* s.;CάÃ.¥ ’Mo.‚• */ - $"DF36 1FD4 E8F0 9221 6313 1B33 0C98 2721" /* ß6.Ôèð’!c..3.˜'! */ - $"8F55 5BA1 0E46 A755 1D7F A914 458D 9FFF" /* U[¡.F§U..©.EŸÿ */ - $"33CF 4CE3 AFC6 3383 BC4D A7E9 F546 FDCB" /* 3ÏLã¯Æ3ƒ¼M§éõFýË */ - $"8276 7778 2BBA EF7C 3677 6251 58C0 9EFF" /* ‚vwx+ºï|6wbQXÀžÿ */ - $"526C C883 6CFF 7FFF 7D4C 3F9F BD74 6BE9" /* Rlȃlÿ.ÿ}L?Ÿ½tké */ - $"B6EB 9003 823B 235D 6AD9 B382 FC45 F10C" /* ¶ë.‚;#]jÙ³‚üEñ. */ - $"8282 90ED 9D47 E949 FADC 7B04 1C1C 9EF1" /* ‚‚íGéIúÜ{...žñ */ - $"1ABB 270D 07BE 1943 4E14 70E0 48FF 81EE" /* .»'..¾.CN.pàHÿî */ - $"CE8A 5AAD 3CE9 090D 3126 F96A AEBA 5853" /* ΊZ­<éÆ.1&ùj®ºXS */ - $"D02E ADE8 4614 E2B7 2E7E 3DB6 DE6A 77A8" /* Ð.­èF.â·.~=¶Þjw¨ */ - $"48D0 2DBB BAF4 E94C 735D 27D6 87FF 7F80" /* HÐ-»ºôéLs]'Ö‡ÿ.€ */ - $"5BCC 3CA6 1168 D9E0 38B4 22B2 2154 02AA" /* [Ì<¦.hÙà8´"²!T.ª */ - $"A1FF 6D87 EB2B F3EB 3814 9F74 DEF3 4D86" /* ¡ÿm‡ë+óë8.ŸtÞóM† */ - $"ED68 7E75 9E81 1FD9 170B E013 7E4D 97B3" /* íh~už.Ù..à.~M—³ */ - $"51B0 6B2A 42AF EEB4 899B D2A2 6AC9 8EBF" /* Q°k*B¯î´‰›Ò¢jÉŽ¿ */ - $"2858 9FFC 5050 3364 8F2D 313E 94A9 5ED5" /* (XŸüPP3d-1>”©^Õ */ - $"6213 E9DD 6FF6 5813 72DA FE40 0F70 06C4" /* b.éÝoöX.rÚþ@.p.Ä */ - $"FF7D 053C 3E69 C976 DDFF 02D9 4688 D8D7" /* ÿ}.<>iÉvÝÿ.ÙFˆØ× */ - $"8DEF 5187 FCA3 40EE 3167 B6DD 7EE6 42AB" /* ïQ‡ü£@î1g¶Ý~æB« */ - $"B07A DB20 DC1D 7016 631F 8FB0 C83A 9CC2" /* °zÛ Ü.p.c.°È:œÂ */ - $"66B9 304B 74F5 03F7 217C D3E3 6000 ECE6" /* f¹0Ktõ.÷!|Óã`.ìæ */ - $"A319 FD9E 4131 7E74 59C6 FB3F 1B51 FE89" /* £.ýžA1~tYÆû?.Qþ‰ */ - $"52D3 C845 1BF0 4BFE 3BAE 4940 9830 8E9C" /* RÓÈE.ðKþ;®I@˜0Žœ */ - $"F843 F6A2 218E B2E2 8092 8E0E 3889 8137" /* øCö¢!Ž²â€’Ž.8‰7 */ - $"583C 394F CCE6 3D1B 37B8 C9A4 D805 B9E4" /* X<9OÌæ=.7¸É¤Ø.¹ä */ - $"A037 E45D 1167 9627 81E0 538C 1B6D EA0E" /*  7ä].g–'àSŒ.mê. */ - $"18CD 8E3C EE0C 5E0C B048 8DD2 C804 CA38" /* .ÍŽ<î.^.°HÒÈ.Ê8 */ - $"8678 CAA9 5EE1 8B6C E7D9 FDE1 5C14 D52A" /* †xÊ©^á‹lçÙýá\.Õ* */ - $"67F3 8A12 F698 857A 5692 1FB3 FF27 FE1B" /* góŠ.ö˜…zV’.³ÿ'þ. */ - $"7E31 5D25 B4A2 3647 FF07 064A 4D7B F160" /* ~1]%´¢6Gÿ..JM{ñ` */ - $"62D7 81CE 0940 AE5F CAEB F1A6 10C4 CB0E" /* b×ÎÆ@®_Êëñ¦.ÄË. */ - $"3D77 2C40 0146 8C72 B765 F6A9 3047 E748" /* =w,@.FŒr·eö©0GçH */ - $"0239 A725 8B4C 56F0 7E86 9A24 53D7 4832" /* .9§%‹LVð~†š$S×H2 */ - $"7924 73CB 4431 4977 0487 03FC F1B3 A21C" /* y$sËD1Iw.‡.üñ³¢. */ - $"2792 0B05 8183 8348 8EC0 2635 47D9 B51D" /* '’..ƒƒHŽÀ&5GÙµ. */ - $"CE40 1FA4 20C5 93A8 BEB4 B8CD 93D8 A79E" /* Î@.¤ Å“¨¾´¸Í“اž */ - $"62C5 846C 964D 0404 BE21 3AA5 9EC3 4450" /* bÅ„l–M..¾!:¥žÃDP */ - $"FAEE 938A A428 E4D0 7F1B 46A8 7AEC 97FB" /* ú¤(äÐ..F¨zì—û */ - $"1AFF 71DA F26D B5B1 E6F2 66B4 865E 1F12" /* .ÿqÚòmµ±æòf´†^.. */ - $"CE0F 3A8A EDF1 6321 BC5A 22D5 D3D6 BE19" /* Î.:Šíñc!¼Z"ÕÓÖ¾. */ - $"671A 38C3 11E8 FC9D 93AC 895A 1B84 7C9B" /* g.8Ã.èü“¬‰Z.„|› */ - $"979F 5DC5 BBE6 19A8 5D03 BE83 6FA4 B8F2" /* —Ÿ]Å»æ.¨].¾ƒo¤¸ò */ - $"AFCD 8115 B21B C1D5 80B4 5E20 3B19 9E48" /* ¯Í.².ÁÕ€´^ ;.žH */ - $"29C0 68DA F799 EC0D 56B3 7049 5EC1 11CB" /* )ÀhÚ÷™ì.V³pI^Á.Ë */ - $"CBAF FA0A 5AF1 22F1 3A4C 6F13 635A C681" /* ˯úÂZñ"ñ:Lo.cZÆ */ - $"06DA 8B44 A35B CF31 9B6F 57E6 AEC2 8D59" /* .Ú‹D£[Ï1›oWæ®ÂY */ - $"1556 A43E A289 74DC C398 B209 31B9 8CD0" /* .V¤>¢‰tÜØ²Æ1¹ŒÐ */ - $"07BE D253 76AB 7D79 4F26 D099 7AE8 E52C" /* .¾ÒSv«}yO&Йzèå, */ - $"EA35 D7BB E968 CAA0 5F61 EAE5 E9A1 E903" /* ê5×»éhÊ _aêåé¡é. */ - $"100E ED2C 5A66 21E2 1426 BE74 7A19 8C98" /* ..í,Zf!â.&¾tz.Œ˜ */ - $"3D67 A4D2 370F C95D 7131 2D31 0971 6022" /* =g¤Ò7.É]q1-1Æq`" */ - $"F4F2 359E 1FBD D23A CD94 4467 205E F7B1" /* ôò5ž.½Ò:Í”Dg ^÷± */ - $"5D18 EE91 9078 176B ADC2 65EB EECF D1A8" /* ].î‘x.k­ÂeëîÏѨ */ - $"F1B3 B999 E7CC 3079 BD9C 82D8 DF6E 29E0" /* ñ³¹™çÌ0y½œ‚Øßn)à */ - $"9502 EC8D 5C13 629B 109E A7C0 F438 6674" /* •.ì\.b›.ž§Àô8ft */ - $"C48B E75A 7CAC 28AE 3E9C 0ECF 9ADF F7BF" /* Ä‹çZ|¬(®>œ.Ïšß÷¿ */ - $"C51A E20D 64F1 B1DD C986 0C6F 6BFF 5102" /* Å.â.dñ±ÝɆ.okÿQ. */ - $"B233 B826 EBC9 35E2 9799 0A0F E81D 0816" /* ²3¸&ëÉ5â—™Â.è... */ - $"E01C B1A8 E4D9 1CCF 7F2E 4DB3 371B 83C0" /* à.±¨äÙ.Ï..M³7.ƒÀ */ - $"9DFD A603 83D6 4412 7DCF 2E2F 85D8 8259" /* ý¦.ƒÖD.}Ï./…Ø‚Y */ - $"DC97 798F 2E8A 09F5 C1A7 1E56 55F3 BFD0" /* Ü—y.ŠÆõÁ§.VUó¿Ð */ - $"34CE 311A 98BE C87C 8CCE 6EDF C85C A788" /* 4Î1.˜¾È|ŒÎnßÈ\§ˆ */ - $"AA7E 47D5 72AF 1842 5C5F 9D6A C586 CA4C" /* ª~GÕr¯.B\_jņÊL */ - $"34D3 6315 D6CA 0D6D 5B75 6C85 551B E270" /* 4Óc.ÖÊ.m[ul…U.âp */ - $"E9DD 6127 C363 1F5A 0AA4 8F55 114F 9ED3" /* éÝa'Ãc.Z¤U.OžÓ */ - $"034E A968 1BF1 513A 2F0D 3E61 612A 15E6" /* .N©h.ñQ:/.>aa*.æ */ - $"B89F 1877 F38E 8C96 20C3 1952 A559 62AE" /* ¸Ÿ.w󎌖 Ã.R¥Yb® */ - $"20E0 BE7D BF7C FAA3 F56C FF75 6D5E 07E7" /* à¾}¿|ú£õlÿum^.ç */ - $"EB87 E7E9 BFE7 EE37 E7EE B60B E7DA F7CF" /* ë‡çé¿çî7çî¶.çÚ÷Ï */ - $"A6FF 2B5C 2F9F AC00 ED1C BCF0 084D B6D5" /* ¦ÿ+\/Ÿ¬.í.¼ð.M¶Õ */ - $"A3F8 3A1B 179B 5659 AE02 A536 8D65 B1A0" /* £ø:..›VY®.¥6e±  */ - $"F806 81C6 9453 B9E5 1E84 EF36 3D8C 9922" /* ø.Æ”S¹å.„ï6=Œ™" */ - $"A841 EBC7 584D 175D A8CF 5AE5 52F4 364A" /* ¨AëÇXM.]¨ÏZåRô6J */ - $"CACB F4FA 59D1 6C18 1FE0 5F96 0F70 465A" /* ÊËôúYÑl..à_–.pFZ */ - $"7CFD 0C37 59FF 6248 10C6 4872 8573 D54E" /* |ý.7YÿbH.ÆHr…sÕN */ - $"7839 337E D900 4336 CF58 B59C BCC4 602F" /* x93~Ù.C6ÏXµœ¼Ä`/ */ - $"EA1A 205F CD8D 635B AE0D 5750 3316 72C7" /* ê. _Íc[®.WP3.rÇ */ - $"A765 C2F2 CF8C 52FB 1892 F55E B7A5 6D85" /* §eÂòÏŒRû.’õ^·¥m… */ - $"5782 FAB6 FBB5 CDF3 2DC2 0256 2927 4F4F" /* W‚ú¶ûµÍó-Â.V)'OO */ - $"1F92 5F99 B540 87DD 7A80 991B 0677 AB00" /* .’_™µ@‡Ýz€™..w«. */ - $"2D82 C5F6 11F7 F21B 2652 B798 75D5 42A6" /* -‚Åö.÷ò.&R·˜uÕB¦ */ - $"7757 E0E7 3C3F DBA5 6106 9F44 1800 E044" /* wWàç¼×ý */ - $"B79B E645 6FD3 A5EE ECE2 C9A7 53C7 B2E3" /* ·›æEoÓ¥îìâɧSDzã */ - $"C659 D5C5 0FBD 7C88 93C3 D3D9 D81F 0AEB" /* ÆYÕÅ.½|ˆ“ÃÓÙØ.Âë */ - $"5784 8BF9 DAD7 993D 0C8B 9873 08A4 254B" /* W„‹ùÚ×™=.‹˜s.¤%K */ - $"2452 F95D 29CA 8B3E D48D 18FB C813 4ECB" /* $Rù])Ê‹>Ô.ûÈ.NË */ - $"D118 E3FA 926C 7A5F E5CC F774 D1DB B5C1" /* Ñ.ãú’lz_åÌ÷tÑÛµÁ */ - $"579A 2647 619A 67A0 423D 6C64 B3A6 9357" /* Wš&Gašg B=ld³¦“W */ - $"B8C6 8FBE A3AC E380 E548 5ED3 D83D 7DB9" /* ¸Æ¾£¬ã€åH^ÓØ=}¹ */ - $"93E8 9071 F6E0 168F 6BEC F674 6D08 F4DA" /* “èqöà.kìötm.ôÚ */ - $"C1F7 11FD DEF8 2420 30DA 71E2 C605 81EB" /* Á÷.ýÞø$ 0ÚqâÆ.ë */ - $"565B D461 AF6E 3127 34AC BA64 C660 14E1" /* V[Ôa¯n1'4¬ºdÆ`.á */ - $"F6AB DA92 386B 3E7B BD42 90E9 ABA2 6EE7" /* ö«Ú’8k>{½Bé«¢nç */ - $"8D0D 373C D280 46EC 6746 310C EA41 862B" /* .7<Ò€FìgF1.êA†+ */ - $"6D1B 7BE9 93AF 17F6 1D3A E7AB CA55 8A4B" /* m.{铯.ö.:ç«ÊUŠK */ - $"E867 6EF3 29DF FF5F B839 75E1 FA04 DD81" /* ègnó)ßÿ_¸9uáú.Ý */ - $"B6C9 DA44 D268 3B1A FF63 60F5 37A5 DDCB" /* ¶ÉÚDÒh;.ÿc`õ7¥ÝË */ - $"1AB3 5275 7692 7F15 F8E8 6A96 CEB4 D9E5" /* .³Ruv’..øèj–δÙå */ - $"3E5A 0E16 B1D0 B056 D0D2 0360 0900 5773" /* >Z..±Ð°VÐÒ.`Æ.Ws */ - $"BB3F C215 FD55 C9BF E3FC 48A1 CFAB BD39" /* »?Â.ýUÉ¿ãüH¡Ï«½9 */ - $"CD3D 906E 21CB C3DD E4D3 548C 4731 E777" /* Í=n!ËÃÝäÓTŒG1çw */ - $"EE15 C0DE CEBC 0F2F 85A6 9822 F1FF 7B2F" /* î.ÀÞμ./…¦˜"ñÿ{/ */ - $"2530 48C7 0C39 3659 CD03 06C5 7C8E 3D49" /* %0HÇ.96YÍ..Å|Ž=I */ - $"FED5 7B72 4652 772C 39C7 8F1B 63E8 2DC1" /* þÕ{rFRw,9Ç.cè-Á */ - $"1242 CA35 E396 6103 15DF D939 0597 B8D4" /* .BÊ5ã–a..ßÙ9.—¸Ô */ - $"8858 ACE3 3C32 6EE5 69A3 8512 3447 2B3B" /* ˆX¬ã<2nåi£….4G+; */ - $"0647 8C1F 2D31 4E57 0D03 BE26 5235 5275" /* .GŒ.-1NW..¾&R5Ru */ - $"74E8 B8F6 CF32 E077 8C51 41DB ED67 EE30" /* tè¸öÏ2àwŒQAÛígî0 */ - $"AD97 7956 D279 B0A8 768D 00E3 F604 A240" /* ­—yVÒy°¨v.ãö.¢@ */ - $"9656 5BCD B309 D0CD 3ECE C477 31EC F88D" /* –V[ͳÆÐÍ>ÎÄw1ìø */ - $"782F 8B9E 37FA A741 C636 7B55 D047 64A4" /* x/‹ž7ú§AÆ6{UÐGd¤ */ - $"E2EC C69D F609 F38F 821E 8D20 8709 87FF" /* âìÆöÆó‚. ‡Æ‡ÿ */ - $"3C3A B1ED C420 1F0B 52E3 8999 C684 30F3" /* <:±íÄ ..R㉙Ƅ0ó */ - $"C4ED 7FA9 3A2C D0E7 AE48 1AC2 7196 9347" /* Äí.©:,Ðç®H.Âq–“G */ - $"6BC9 BEE1 4112 4209 93CA 307A 7FF7 8B12" /* kɾáA.BÆ“Ê0z.÷‹. */ - $"EE76 8890 A529 33CC F435 A84F 9414 A719" /* îvˆ¥)3Ìô5¨O”.§. */ - $"BFB2 6305 201F 372D 567F 30DF 2E47 D0B9" /* ¿²c. .7-V.0ß.Gй */ - $"C68F 5126 7EAA D95A 12D0 DA8A 8CF4 8A2A" /* ÆQ&~ªÙZ.ÐÚŠŒôŠ* */ - $"CBAE 0509 B614 A9E1 2CA2 D0E0 F017 E395" /* Ë®.ƶ.©á,¢Ðàð.ã• */ - $"AF82 85B5 4509 E75C 8E4D 5465 7DF2 CF39" /* ¯‚…µEÆç\ŽMTe}òÏ9 */ - $"ACFB DD5B C683 62C0 0B1C B7B9 EAEC 049C" /* ¬ûÝ[ƃbÀ..·¹êì.œ */ - $"8045 0178 6757 E317 872D ABC2 B077 6EF6" /* €E.xgWã.‡-«Â°wnö */ - $"3612 4132 3DD7 D39B B49A 04A8 207D 6135" /* 6.A2=×Ó›´š.¨ }a5 */ - $"C64F 3A0F 5028 7B6B 953E 8F19 920A 718F" /* ÆO:.P({k•>.’Âq */ - $"08E9 A079 EC51 A08F 4A77 5130 C807 9BC2" /* .é yìQ JwQ0È.›Â */ - $"B37B 4C7B 9BAA 40F3 4E94 BE51 C027 32B5" /* ³{L{›ª@óN”¾QÀ'2µ */ - $"751F 4793 7271 226E 82F3 CF14 8BC3 F927" /* u.G“rq"n‚óÏ.‹Ãù' */ - $"4C81 7F29 AB70 8B3B E948 86D6 569F FEC2" /* L.)«p‹;éH†ÖVŸþ */ - $"BF6C 92F9 1011 3BE3 9E91 6458 1634 34A3" /* ¿l’ù..;ãž‘dX.44£ */ - $"3042 520F 5D64 6429 32CE 04FD 1B98 0698" /* 0BR.]dd)2Î.ý.˜.˜ */ - $"3A36 655C 86C7 C272 4B02 E259 0537 4DB8" /* :6e\†ÇÂrK.âY.7M¸ */ - $"C6C2 6980 ECFB 0FC1 C6D9 0A2C D00F 282A" /* ÆÂi€ìû.ÁÆÙÂ,Ð.(* */ - $"7A0B D91F 08CA 762C A629 048E 9BCC CFD2" /* z.Ù..Êv,¦).Ž›ÌÏÒ */ - $"1EBC 8F60 2F64 F24D F1FB 81C6 8AEC CFDB" /* .¼`/dòMñûÆŠìÏÛ */ - $"623A 01A9 35D2 B5E1 B80A 2D32 084E 3857" /* b:.©5Òµá¸Â-2.N8W */ - $"C025 BCDA 4728 F3AD 35AD 9AAA E054 21B7" /* À%¼ÚG(ó­5­šªàT!· */ - $"A47E 62C5 9921 02C0 09E3 440D 063A 3789" /* ¤~bÅ™!.ÀÆãD..:7‰ */ - $"5072 E54A 4654 E148 AC2E 4A99 C6A5 3923" /* PråJFTáH¬.J™Æ¥9# */ - $"49B5 6906 6531 FD5E 7CCE 1C4B EEDE 7482" /* Iµi.e1ý^|Î.KîÞt‚ */ - $"9E3F 73AE C777 0214 C921 3131 C5CB 9F61" /* ž?s®Çw..É!11ÅËŸa */ - $"64A4 4E70 57C2 5C04 E25B 266E 6887 7477" /* d¤NpWÂ\.â[&nh‡tw */ - $"FCCB 1F0C 89F2 6CF6 713E 4D08 8AC8 9B0C" /* üË..‰òlöq>M.ŠÈ›. */ - $"00AC D9D7 A28A C219 B52B B46A D704 F919" /* .¬Ù×¢ŠÂ.µ+´j×.ù. */ - $"2050 6CCA 215A 299B 9129 9739 DA6F 3A67" /* PlÊ!Z)›‘)—9Úo:g */ - $"FE12 2BF1 4F8B 26ED D21F F727 5B59 22F3" /* þ.+ñO‹&íÒ.÷'[Y"ó */ - $"2E05 F4A0 9754 F431 9AED 1B65 038C CD7F" /* ..ô —Tô1ší.e.ŒÍ. */ - $"8254 E3AE 035C 18D7 0E28 6300 0DF0 998D" /* ‚Tã®.\.×.(c..ð™ */ - $"0191 85AF C71B B3CF F0D6 3A8F B1AA 5E99" /* .‘…¯Ç.³ÏðÖ:±ª^™ */ - $"BAB8 7C7F 0214 F864 4744 E747 7248 3C94" /* º¸|...ødGDçGrH<” */ - $"3AC8 CE04 1019 11ED 4BCC 76E9 FE4E 5728" /* :ÈÎ....íKÌvéþNW( */ - $"5BB0 986C D763 A3C7 AF8A 14E9 D24A AD17" /* [°˜l×c£Ç¯Š.éÒJ­. */ - $"FF66 611F B77C 0830 9093 A560 06FA E9CF" /* ÿfa.·|.0“¥`.úéÏ */ - $"054B 5846 1681 5DBF 34F9 49A9 45E0 8F20" /* .KXF.]¿4ùI©Eà */ - $"7FFD 6264 2193 031D A60F A111 B0B7 CFEE" /* .ýbd!“..¦.¡.°·Ïî */ - $"DE49 EC80 C0F1 D7F6 A495 900B 4126 40BE" /* ÞIì€Àñ×ö¤•.A&@¾ */ - $"185B DFFE C7B0 12AC C143 AA85 70E5 81EF" /* .[ßþǰ.¬ÁCª…påï */ - $"79CE 1662 08E4 203F 1706 40FB CC39 CA8F" /* yÎ.b.ä ?..@ûÌ9Ê */ - $"8002 1CFA 3BCC 6B79 5C83 A4D2 7147 E38F" /* €..ú;Ìky\ƒ¤ÒqGã */ - $"C93B F2E8 6A15 6D30 C314 E898 81E3 FF7B" /* É;òèj.m0Ã.è˜ãÿ{ */ - $"5FC5 EE13 0449 1985 2CBC 73C7 C569 DCB1" /* _Åî..I.…,¼sÇÅiܱ */ - $"8024 F7CA CC7A FE3B CC15 4BCE 5B92 1BBB" /* €$÷ÊÌzþ;Ì.KÎ[’.» */ - $"0048 F291 579F FD20 F11A 1934 CC11 9C3F" /* .Hò‘WŸý ñ..4Ì.œ? */ - $"CE49 027A 9763 9E57 A2FF 7FFD 53E4 E50B" /* ÎI.z—cžW¢ÿ.ýSäå. */ - $"C747 02FF 7869 0537 1482 221E 0220 79D5" /* ÇG.ÿxi.7.‚".. yÕ */ - $"45B1 2E48 6A6C 8486 571F E1F1 BF39 0797" /* E±.Hjl„†W.áñ¿9.— */ - $"5D21 6964 EA9B 13F1 E6B7 C4B5 A2B7 E2BD" /* ]!idê›.ñæ·Äµ¢·â½ */ - $"09C2 B200 0000 0000 003E A392 6527 69B6" /* ÆÂ²......>£’e'i¶ */ - $"B189 8365 F55D 7A2B 0398 4196 BB60 D4F0" /* ±‰ƒeõ]z+.˜A–»`Ôð */ - $"06B6 100C 5B60 D76F 8FEE EFFB D525 0E2B" /* .¶..[`×oîïûÕ%.+ */ - $"3535 B765 22E7 F77C CF5C 8907 7626 62C0" /* 55·e"ç÷|Ï\‰.v&bÀ */ - $"3B04 A170 EEA6 A399 F26B CD7E 92BC 9E13" /* ;.¡p™òkÍ~’¼ž. */ - $"9D2D 6907 B06F 6B9A 957D 3C57 DC9F 06E6" /* -i.°okš•}£Ú*.ãŸþ:Ž */ - $"0D69 7E9D 5B07 1396 ED52 69BC 3971 5630" /* .i~[..–íRi¼9qV0 */ - $"7C63 8DA9 7A40 F364 CC6A FCAC DC7C 59DC" /* |c©z@ódÌjü¬Ü|YÜ */ - $"278A 92E3 6FBF F936 7157 2583 232E E558" /* 'Š’ão¿ù6qW%ƒ#.åX */ - $"0000 C241 6B90 4DCB 6421 F85A B681 4812" /* ..ÂAkMËd!øZ¶H. */ - $"9165 5C06 0195 F213 DB9F 5E2F 4BDE A075" /* ‘e\..•ò.ÛŸ^/KÞ u */ - $"BD9A 741B 971B 3411 1F73 7FF8 D719 BA55" /* ½št.—.4..s.ø×.ºU */ - $"8048 404F FEEA FC74 AEB1 84FD 03F9 5D43" /* €H@Oþêüt®±„ý.ù]C */ - $"BE42 E61F FF7F F4CA BA56 9654 B757 FF60" /* ¾Bæ.ÿ.ôʺV–T·Wÿ` */ - $"CA39 3290 054C E785 0EA7 F04D AF3E B342" /* Ê92.Lç….§ðM¯>³B */ - $"A80A 815D 3954 73F2 871A 51FF 7488 20CD" /* ¨Â]9Tsò‡.Qÿtˆ Í */ - $"90F3 23B8 80FE C6BF 726C 5426 83F2 5400" /* ó#¸€þÆ¿rlT&ƒòT. */ - $"0000 0000 0000 0000 BFA5 D802 777C F954" /* ........¿¥Ø.w|ùT */ - $"286B A586 76CF 26CE 72CA 6FE7 BD43 DB36" /* (k¥†vÏ&ÎrÊoç½CÛ6 */ - $"A826 870E 2EEF E2C4 2E22 E63C FF7F AF51" /* ¨&‡..ïâÄ."æ<ÿ.¯Q */ - $"40C1 B727 22F3 9ACC 894D 0C49 EC7A D998" /* @Á·'"óšÌ‰M.IìzÙ˜ */ - $"64A9 DD22 2545 B85C D621 0609 B73A 9D9F" /* d©Ý"%E¸\Ö!.Æ·:Ÿ */ - $"FF7F FF7F C0F7 00E1 B069 1D76 3BA1 E98C" /* ÿ.ÿ.À÷.á°i.v;¡éŒ */ - $"5F1B 1E11 B6F6 EB6D 6316 9DBC D1B2 DC90" /* _...¶öëmc.¼Ñ²Ü */ - $"5E1D 5EE0 3C65 57D0 B69C 3782 D1BE 3A77" /* ^.^àÛ®‹ÆÛ#S¤.. */ - $"74AA 7920 6233 E3BF B281 AFAA 957D FDFB" /* tªy b3㿲¯ª•}ýû */ - $"216A 3ECE 3139 37DF 8885 620B 5D55 D0FD" /* !j>Î197߈…b.]UÐý */ - $"F796 6A70 CEFD 33D8 B369 178E 99C0 9FFF" /* ÷–jpÎý3سi.Ž™ÀŸÿ */ - $"7FD2 27D4 D615 4840 B836 A0B5 1D6F 2A5A" /* .Ò'ÔÖ.H@¸6 µ.o*Z */ - $"1338 2369 83A0 D409 0FA7 77EF 19B9 21E6" /* .8#iƒ ÔÆ.§wï.¹!æ */ - $"3E21 0CB0 D4D3 362A EA6F 6340 8D73 27FB" /* >!.°ÔÓ6*êoc@s'û */ - $"C3EF 7823 33DF 7A8C 5C69 20C4 5816 72E4" /* Ãïx#3ßzŒ\i ÄX.rä */ - $"712C 3345 6755 76F3 FEAF 494B D0B4 3C8F" /* q,3EgUvóþ¯IKд< */ - $"B83F A050 C3E9 4CA2 6A6E 7AD0 D7FF 5860" /* ¸? PÃéL¢jnzÐ×ÿX` */ - $"548E 54E7 C3B9 6DDF 462C 54BE 5EF9 1A41" /* TŽTçùmßF,T¾^ù.A */ - $"6A46 A4FB 1C36 1CA4 77EC 2899 F147 3422" /* jF¤û.6.¤wì(™ñG4" */ - $"843C 7FAE 123E 6894 9B7F 3125 EB0F 3129" /* „<.®.>h”›.1%ë.1) */ - $"9DC1 8469 CE90 BB6E 4F2C 385A 0FD1 9AC7" /* Á„iλnO,8Z.ÑšÇ */ - $"3318 3BF0 B1AA A51A 9022 A143 29FF 7FC1" /* 3.;𱪥."¡C)ÿ.Á */ - $"0F0F 6570 67C4 7FA7 9906 DE4E 5439 A278" /* ..epgÄ.§™.ÞNT9¢x */ - $"34E1 3D57 BB0E 086E 4C71 4406 DA9D CA56" /* 4á=W»..nLqD.ÚÊV */ - $"3EFD D077 5DA5 CD7D C244 9128 F408 1F03" /* >ýÐw]¥Í}ÂD‘(ô... */ - $"0C8F FF4B 9274 2EC6 E208 13C5 EE1B 3CEA" /* .ÿK’t.Æâ..Åî.<ê */ - $"C5C0 06F5 0FA1 11FF 7FE3 A446 32E6 F4DA" /* ÅÀ.õ.¡.ÿ.ã¤F2æôÚ */ - $"23EC 5108 3AE0 CD16 AFFF 3965 8196 56E2" /* #ìQ.:àÍ.¯ÿ9e–Vâ */ - $"2881 4EB9 CA14 5C4A 8091 B176 8823 BF09" /* (N¹Ê.\J€‘±vˆ#¿Æ */ - $"CED5 0D88 E6BB DD95 1B72 36E8 809C D432" /* ÎÕ.ˆæ»Ý•.r6耜Ô2 */ - $"872D C08C 7DCB B30E 548B AE16 0D85 6B49" /* ‡-ÀŒ}˳.T‹®..…kI */ - $"9B28 D491 ECD6 F598 691A 0891 135A 63A0" /* ›(Ô‘ìÖõ˜i..‘.Zc  */ - $"593C 1FFD 8A54 4FB9 F2AB 20FC 5CF3 1B88" /* Y<.ýŠTO¹ò« ü\ó.ˆ */ - $"EE7E 8355 45D6 87C8 28CE 7B33 92A2 D8D6" /* î~ƒUEÖ‡È(Î{3’¢ØÖ */ - $"E8DF EF94 500A 0D78 DE9F 8657 F7BD 7F40" /* èßï”PÂ.xÞŸ†W÷½.@ */ - $"5E07 0789 EDC7 F3A5 A0BF 3929 6B19 A460" /* ^..‰íÇó¥ ¿9)k.¤` */ - $"7A50 91FF 42EA 5F12 DFA5 E0A0 84CC E869" /* zP‘ÿBê_.ߥࠄÌèi */ - $"BB1F 6EDA 2238 5DB0 7F22 3521 F04B FF6B" /* ».nÚ"8]°."5!ðKÿk */ - $"6827 722A DD5F 3C9D D3F4 2BE3 614D 0A3F" /* h'r*Ý_<Óô+ãaMÂ? */ - $"62C4 E6AC 95CA 5946 37E8 BC76 97FD 5167" /* bÄæ¬•ÊYF7è¼v—ýQg */ - $"C970 D4C7 0655 C470 5913 DBBD AA8C 87A4" /* ÉpÔÇ.UÄpY.Û½ªŒ‡¤ */ - $"3C63 0B7F 54CD 391E 574D F2D5 C728 20B7" /* .“„O.À.Z÷ßS.8 */ - $"3615 80D7 428E 90F6 4620 02EA 4590 DF22" /* 6.€×BŽöF .êEß" */ - $"4B70 2FB2 CADA A529 F7FA E7C6 BC99 DFCD" /* Kp/²ÊÚ¥)÷úçÆ¼™ßÍ */ - $"5EE7 D677 B5BE F819 6A55 6070 E1A9 DF53" /* ^çÖwµ¾ø.jU`pá©ßS */ - $"3F82 0229 B6B7 D247 1967 8313 056F 9D27" /* ?‚.)¶·ÒG.gƒ..o' */ - $"753E E4DD EB7F 1372 C0F7 D72E 349B 2F9B" /* u>äÝë..rÀ÷×.4›/› */ - $"686C C9AF 0896 0865 7A3A 5A9D 807F 292A" /* hlɯ.–.ez:Z€.)* */ - $"8DDA A776 4B3C 0993 532D D682 A41B 9DC2" /* Ú§vK<Æ“S-Ö‚¤. */ - $"5113 9D60 934B 2055 D671 C6C4 1252 3CEF" /* Q.`“K UÖqÆÄ.R<ï */ - $"C72F AC19 4BED 185D BC60 5957 F81B 8278" /* Ç/¬.Kí.]¼`YWø.‚x */ - $"20B5 9173 4A1B FDC9 295D 54B7 8AFE 6938" /* µ‘sJ.ýÉ)]T·Šþi8 */ - $"FE49 BA78 3225 49A1 4243 823C 52B9 8489" /* þIºx2%I¡BC‚ÚOî›-ó */ - $"B640 95E8 70A5 B577 8C1D 99D5 797D D482" /* ¶@•èp¥µwŒ.™Õy}Ô‚ */ - $"E23A 56DD 644D 9623 FEE2 63D2 A3DB E146" /* â:VÝdM–#þâcÒ£ÛáF */ - $"FC39 35A7 6C28 63D8 5240 0C80 0000 0000" /* ü95§l(cØR@.€.... */ - $"0001 4095 99D3 7A7A 0A05 B673 69BC DA9C" /* ..@•™ÓzzÂ.¶si¼Úœ */ - $"A108 DDEA EE48 6385 0790 FEA1 1AFC 2CED" /* ¡.ÝêîHc….þ¡.ü,í */ - $"2225 BE73 2ED7 00BB 2301 80FE 09DF E78E" /* "%¾s.×.»#.€þÆßçŽ */ - $"6FE6 4743 A0EE 0A03 4C9E F046 CDD8 E7F1" /* oæGC îÂ.LžðFÍØçñ */ - $"DB3F 1B67 F6E1 1F31 8096 90DF 5110 40B0" /* Û?.göá.1€–ßQ.@° */ - $"0000 0000 0000 0000 C0B9 E0FC 41FB A11C" /* ........À¹àüAû¡. */ - $"4696 89A0 DE42 F8C7 27D0 3F03 AA51 70FD" /* F–‰ ÞBøÇ'Ð?.ªQpý */ - $"DC5F D7B9 AFD3 A0F3 7BAA A910 9E5C 259E" /* Ü_×¹¯Ó ó{ª©.ž\%ž */ - $"E4FB 8F8E 01C1 96E2 0768 FE5A 0A43 E2F8" /* äûŽ.Á–â.hþZÂCâø */ - $"DA74 9500 C241 D1F6 3EFF 3F06 586F A511" /* Út•.ÂAÑö>ÿ?.Xo¥. */ - $"CCFE 8FE7 61E1 C392 D001 3F52 1CA8 CC23" /* ÌþçaáÃ’Ð.?R.¨Ì# */ - $"93F0 27DF 893F 4AC1 06C3 34DA 8953 BBC0" /* “ð'߉?JÁ.Ã4Ú‰S»À */ - $"84C0 4843 27E0 067E 5EBF FF7A 1540 4C0E" /* „ÀHC'à.~^¿ÿz.@L. */ - $"FA6C 44A1 A7BC DB24 6AD7 C367 EC93 33BF" /* úlD¡§¼Û$j×Ãgì“3¿ */ - $"FECB C1DF 83CC 5BF7 A7C0 DF62 2EFA 4283" /* þËÁ߃Ì[÷§Àßb.úBƒ */ - $"6E49 2492 4924 9249 2492 4924 9246 A4A5" /* nI$’I$’I$’I$’F¤¥ */ - $"7754 9685 B091 D8FF 1549 CF90 2079 3AFB" /* wT–…°‘Øÿ.IÏ y:û */ - $"E925 85CC 62A2 E49B 476B 47B9 319B 630F" /* é%…Ìb¢ä›GkG¹1›c. */ - $"A6B8 182C E282 D1CD 920A 4EB3 21BF 943C" /* ¦¸.,â‚ÑÍ’ÂN³!¿”< */ - $"27BF CCDE BD6E 481A 188C F70B C257 8118" /* '¿ÌÞ½nH..Œ÷.ÂW. */ - $"FBF7 FF78 F422 A3DB AE81 4980 0000 0000" /* û÷ÿxô"£Û®I€.... */ - $"0000 0000 0000 1EE1 BFBB C300 0000 0000" /* .......á¿»Ã..... */ - $"0000 0000 0000 14FB 3FE1 1B7A D142 E13F" /* .......û?á.zÑBá? */ - $"5B6F 704A 61CF 957D 258E F744 FB26 8356" /* [opJaÏ•}%Ž÷Dû&ƒV */ - $"74AD 1DDB 02F2 CF85 7AEB 3A06 6F12 084E" /* t­.Û.òÏ…zë:.o..N */ - $"8E93 D6DA E4FE 9FBE 2D16 1C87 701F 55C3" /* Ž“ÖÚäþŸ¾-..‡p.Uà */ - $"9966 3E8F 36CB 6D9F F3F6 F8D3 B3B9 E2C1" /* ™f>6ËmŸóöøÓ³¹âÁ */ - $"1019 C6E6 8FFF 7FDC 6948 D3AB C944 C64A" /* ..Ææÿ.ÜiHÓ«ÉDÆJ */ - $"8000 0000 0000 0000 000A B0CB 3806 445C" /* €........°Ë8.D\ */ - $"7110 4CDE 3651 AC94 777C 8AB0 5382 04AF" /* q.LÞ6Q¬”w|аS‚.¯ */ - $"32E5 68C2 122F 8A5B 12A8 FF39 CF5E 72FB" /* 2åhÂ./Š[.¨ÿ9Ï^rû */ - $"EFD4 1669 47C6 525E 88EF 0AAC 1EE1 98B6" /* ïÔ.iGÆR^ˆï¬.ᘶ */ - $"0BFF 7FAF 8A4B 7158 F7D7 1707 DE93 841E" /* .ÿ.¯ŠKqX÷×..Þ“„. */ - $"3C82 3260 1FFF 1C8B 6A6E 8C66 0000 0000" /* <‚2`.ÿ.‹jnŒf.... */ - $"0000 0000 0000 0121 EF03 234C 3124 0000" /* .......!ï.#L1$.. */ - $"0000 0000 0000 0000 077C 5957 204B A2ED" /* .........|YW K¢í */ - $"59B8 F3C4 CC60 8A58 7E23 0B9F A0FD 1DC8" /* Y¸óÄÌ`ŠX~#.Ÿ ý.È */ - $"8E0F FE2B 5F9F 12D8 09B3 57BB 7818 3CF5" /* Ž.þ+_Ÿ.ØÆ³W»x.<õ */ - $"D579 D427 5198 BD86 E2FC 8775 915B 37A5" /* ÕyÔ'Q˜½†âü‡u‘[7¥ */ - $"B2E6 6BD8 8404 31D9 4C54 3621 6561 5C3E" /* ²ækØ„.1ÙLT6!ea\> */ - $"4A80 0000 0000 0000 0000 0014 D22D 6758" /* J€..........Ò-gX */ - $"336C 63A1 C13F 3E94 9877 8E90 4E5D 0C70" /* 3lc¡Á?>”˜wŽN].p */ - $"F80A 4262 C2CC C7E4 DAE8 526F 393F 4558" /* øÂBbÂÌÇäÚèRo9?EX */ - $"5CC9 5DDA B2FF 7ED5 F809 3A02 F1EE 2760" /* \É]Ú²ÿ~ÕøÆ:.ñî'` */ - $"FF7E 5037 F054 4A1B 9602 92EA 8D26 A198" /* ÿ~P7ðTJ.–.’ê&¡˜ */ - $"9C4F 8238 A60E 7734 20F8 18FE 478F 5403" /* œO‚8¦.w4 ø.þGT. */ - $"1658 618B A80F 879F 4A98 E809 DEB2 7CE9" /* .Xa‹¨.‡ŸJ˜èÆÞ²|é */ - $"9724 407B B8C8 A48D 4F33 9126 751B 9FC2" /* —$@{¸È¤O3‘&u.ŸÂ */ - $"0283 44C3 5AFD 9546 FCE2 4212 4F5B 01D4" /* .ƒDÃZý•FüâB.O[.Ô */ - $"6E53 A032 DA91 40F4 4BDE 0C23 FF1E D5DE" /* nS 2Ú‘@ôKÞ.#ÿ.ÕÞ */ - $"B543 59DC C0DC 759A 6043 5883 A5FE C785" /* µCYÜÀÜuš`CXƒ¥þÇ… */ - $"BA68 9F46 C21A 4C50 20E3 0488 FB34 1043" /* ºhŸFÂ.LP ã.ˆû4.C */ - $"FC68 562B 635A EE8D E334 0C6F 25A9 E4C9" /* ühV+cZîã4.o%©äÉ */ - $"3484 2AC2 6188 7242 E3F6 AEAC 6F86 2DE2" /* 4„*ÂaˆrBãö®¬o†-â */ - $"C377 BD02 CB1C 9553 5485 6A5B E118 9BBD" /* Ãw½.Ë.•ST…j[á.›½ */ - $"DC6B 2C92 C6CC C866 6E7F FE63 AB01 FE7D" /* Ük,’ÆÌÈfn.þc«.þ} */ - $"FF7F BB81 EA94 87BE B101 F468 0E30 F111" /* ÿ.»ê”‡¾±.ôh.0ñ. */ - $"7BC9 FA0D F87F BDD0 811B 8588 1AE7 8387" /* {Éú.ø.½Ð.…ˆ.烇 */ - $"5C06 B3A9 E2ED 6E5B B524 35AA CBFF 50D6" /* \.³©âín[µ$5ªËÿPÖ */ - $"49D9 6918 3837 59BD E7CC 8796 B0AF 2729" /* IÙi.87Y½ç̇–°¯') */ - $"0512 5A97 66FF 1A85 E004 1882 0108 EA41" /* ..Z—fÿ.…à..‚..êA */ - $"BBCC 15E0 254C 59AF 877D 0722 15FB ADA1" /* »Ì.à%LY¯‡}.".û­¡ */ - $"84C2 9B83 DD5B C6B1 EE29 084C 08F7 06C8" /* „›ƒÝ[Ʊî).L.÷.È */ - $"4F07 9818 6BF2 66E2 582B 2F7D 29AD BAFA" /* O.˜.kòfâX+/})­ºú */ - $"8F9E 0AC8 60AE D10E 3E49 17BF E015 0C5E" /* žÂÈ`®Ñ.>I.¿à..^ */ - $"5C51 5D5B 5BC1 6C83 C428 4505 E9BB 61CB" /* \Q][[ÁlƒÄ(E.é»aË */ - $"D7C2 F3C6 C102 73F5 409E D0CF B43E E497" /* ×ÂóÆÁ.sõ@žÐÏ´>ä— */ - $"C1E0 707B 3F6F EAA8 2F10 9285 7D9D 9F81" /* Áàp{?oê¨/.’…}Ÿ */ - $"303D 3A70 2B3F 4A45 558D 63F6 EEB9 CF21" /* 0=:p+?JEUcöî¹Ï! */ - $"52C1 27C2 8439 0BE2 BE1F A553 A1C7 E44C" /* RÁ'„9.â¾.¥S¡ÇäL */ - $"5422 9BC0 356D 1B40 E53B 3064 AA69 F464" /* T"›À5m.@å;0dªiôd */ - $"7AA7 4E56 F7E2 7AE5 CB6E E538 8582 1927" /* z§NV÷âzåËnå8…‚.' */ - $"019D B4B0 E6D9 0F0E 9670 7723 62CF C422" /* .´°æÙ..–pw#bÏÄ" */ - $"DD53 ED12 92AE 20B0 6B63 6CB3 C596 4F4E" /* ÝSí.’® °kcl³Å–ON */ - $"18B6 FD06 93B2 6F73 A740 770D C39F B873" /* .¶ý.“²os§@w.߸s */ - $"598F 3667 6F7A 29E9 9E6F 9D04 48DD A175" /* Y6goz)éžo.HÝ¡u */ - $"2AFC 61BD D706 2A8E 9789 F513 B8AF B8EA" /* *üa½×.*Ž—‰õ.¸¯¸ê */ - $"2426 7EDF 1EFA 1D19 7A50 D22F D15E 76FE" /* $&~ß.ú..zPÒ/Ñ^vþ */ - $"CD34 19AD 8126 775C A5FB B209 9658 F850" /* Í4.­&w\¥û²Æ–XøP */ - $"F2FD A65F B487 9F50 7FF0 12FD BA8B FB6E" /* òý¦_´‡ŸP.ð.ýº‹ûn */ - $"49F5 50DF C349 B4F9 F4D7 EDEB 53BE DEB0" /* IõPßÃI´ùô×íëS¾Þ° */ - $"7F85 29FB 5DFF 36B9 BEDA 9BF8 3CF2 FDAE" /* .…)û]ÿ6¹¾Ú›ø<òý® */ - $"DFB5 ABBE D3DB ED2B FDBA CFFB 7606 FB74" /* ßµ«¾ÓÛí+ýºÏûv.ût */ - $"D3F8 6B96 83BA F7ED EB3F 7EDE AFE0 EECD" /* Óøk–ƒº÷íë?~Þ¯àîÍ */ - $"FB5E 7F6E 807E DB9B F6BD F0FE D32B EA21" /* û^.n€~Û›ö½ðþÓ+ê! */ - $"EFA8 1EFA 823F 6DCF FB6C 8BEA 6CFD B5AF" /* ï¨.ú‚?mÏûl‹êlýµ¯ */ - $"0774 CFDB D337 FB7A 3F83 BA5D F51F DF55" /* .tÏÛÓ7ûz?ƒº]õ.ßU */ - $"47FB 690F DA86 F791 DDD6 2CCB E6B8 C536" /* Gûi.Ú†÷‘ÝÖ,Ëæ¸Å6 */ - $"D512 AD5E 1B08 0B8A 8D03 2F75 60E5 6BF8" /* Õ.­^...Š./u`åkø */ - $"447B C66A 7EC2 7912 B45F 8E48 277C D8E1" /* D{Æj~Ây.´_ŽH'|Øá */ - $"809C 5755 D718 BAAC F891 2AE5 F97C 3F5E" /* €œWU×.º¬ø‘*åù|?^ */ - $"0116 3A00 99F4 5896 E0EA B189 F5A5 7929" /* ..:.™ôX–à걉õ¥y) */ - $"C491 B57F 2232 B0C2 52F8 89B1 DB2F B284" /* Ä‘µ."2°ÂRø‰±Û/²„ */ - $"C1EE 0C43 EF76 FD94 F871 4077 7E19 EC36" /* Áî.Cïvý”øq@w~.ì6 */ - $"BBFA 6DFF 3C0B 5A98 89B4 84BB 56DB 5FC2" /* »úmÿ<.Z˜‰´„»VÛ_ */ - $"16C2 351A B46E AF45 AAC7 DD2E 97ED 970C" /* .Â5.´n¯EªÇÝ.—í—. */ - $"76D8 F8D0 42EB E639 28E8 BE33 A530 3B58" /* vØøÐBëæ9(è¾3¥0;X */ - $"2374 6B1C 97B0 1CD5 ACD5 615F FD30 62C6" /* #tk.—°.Õ¬Õa_ý0bÆ */ - $"899A 977D 4B74 CAB1 E9EE 6588 4E67 8733" /* ‰š—}KtʱéîeˆNg‡3 */ - $"B359 BCC7 DC7B 9884 E4A8 78CB 77E7 675D" /* ³Y¼ÇÜ{˜„ä¨xËwçg] */ - $"FF2D FCE4 7744 BDD1 A833 6BEC C481 2DA8" /* ÿ-üäwD½Ñ¨3kìÄ-¨ */ - $"3D1C 5D57 7595 1DEB 2278 31AE 4188 B1F2" /* =.]Wu•.ë"x1®Aˆ±ò */ - $"54E1 113D DA75 96ED 71FF 1577 7820 4D22" /* Tá.=Úu–íqÿ.wx M" */ - $"2BD9 3841 A416 96A4 2549 1A9D 3A55 8E39" /* +Ù8A¤.–¤%I.:UŽ9 */ - $"A929 4B4E E11F 0F88 8BB6 7E08 2210 9D21" /* ©)KNá..ˆ‹¶~.".! */ - $"92BF 623B B974 D371 0208 1489 5713 0F66" /* ’¿b;¹tÓq...‰W..f */ - $"3C4C 8394 72A6 08A1 3D86 BA0C 198B CE8B" /* 8.ʦ!m1ÂpW */ - $"0B3D 429A 6CFB 0819 EB4D B9D2 549F 6601" /* .=Bšlû..ëM¹ÒTŸf. */ - $"2436 5BEA 9DAC BBDA AB3A AB4F ABFF 768D" /* $6[ꬻګ:«O«ÿv */ - $"E220 E451 7E45 49C5 21FD B2E6 DEFD 2505" /* â äQ~EIÅ!ý²æÞý%. */ - $"836B 3500 54D8 50B8 7538 C5BF B951 7FB2" /* ƒk5.TØP¸u8Å¿¹Q.² */ - $"F927 CBB1 7AA1 D0BD 51E2 D7F7 C440 5DA0" /* ù'˱z¡Ð½Qâ×÷Ä@]  */ - $"89EF FEEE BF2E A5E4 F98A B652 F25A D1DC" /* ‰ïþî¿.¥äùжRòZÑÜ */ - $"482A 40CB A288 250A 22CA BCB4 815D 077E" /* H*@Ë¢ˆ%Â"ʼ´].~ */ - $"229E 59B2 8249 D336 A3C1 5D5B FAE5 483C" /* "žY²‚IÓ6£Á][úåH< */ - $"67F3 255E 1530 AFB1 D900 48FE 254B C54E" /* gó%^.0¯±Ù.Hþ%KÅN */ - $"42DC EE54 066B CE83 B1C9 F021 2031 8DF1" /* BÜîT.k΃±Éð! 1ñ */ - $"FE58 9315 B761 79CA 409A 6CD6 337A 14A9" /* þX“.·ayÊ@šlÖ3z.© */ - $"8622 90BC 3474 727C 66CE 09C5 61B4 A386" /* †"¼4tr|fÎÆÅa´£† */ - $"7509 819F 6EEB 5FCC C0A7 084A 7742 A6E3" /* uÆŸnë_ÌÀ§.JwB¦ã */ - $"F69A 90CA 24AD EB53 60AB 5FD0 FD6F 3DE6" /* öšÊ$­ëS`«_Ðýo=æ */ - $"44CF 80FB A400 B71F 1DD4 C690 A3DB 54CF" /* DÏ€û¤.·..ÔÆ£ÛTÏ */ - $"F492 7EC7 540C 048F 3D35 FD63 7593 751B" /* ô’~ÇT..=5ýcu“u. */ - $"F88F 4B7D E355 6685 FD5F 2743 8DF3 D839" /* øK}ãUf…ý_'CóØ9 */ - $"0894 99DB 1FAA 22B2 8800 8C9F D91F E60B" /* .”™Û.ª"²ˆ.ŒŸÙ.æ. */ - $"0EEE 2870 2932 2AE5 F401 11F0 8B2B 53DB" /* .î(p)2*åô..ð‹+SÛ */ - $"8028 E39D 744F E70B 11F3 A220 ABF4 FCD5" /* €(ãtOç..ó¢ «ôüÕ */ - $"37C9 0AC8 8749 215E 1D89 4022 96D0 04FF" /* 7ÉÂȇI!^.‰@"–Ð.ÿ */ - $"0C57 AC3D 351A 8582 EBA4 EA2B B65B A14B" /* .W¬=5.…‚ë¤ê+¶[¡K */ - $"048B E031 DE15 251C 669F 8457 FF38 D131" /* .‹à1Þ.%.fŸ„Wÿ8Ñ1 */ - $"0027 BB20 9721 6636 A375 AFBA AF7B BDBA" /* .'» —!f6£u¯º¯{½º */ - $"05F3 3114 E55E DAA9 219F 9516 F3DF 12B4" /* .ó1.å^Ú©!Ÿ•.óß.´ */ - $"DA3F 83DF 13A0 9900 3FA6 17E9 B014 E404" /* Ú?ƒß. ™.?¦.é°.ä. */ - $"434D 02D4 4283 D73D F4D1 5D95 8B25 6A6A" /* CM.ÔBƒ×=ôÑ]•‹%jj */ - $"CD5E BA93 82DF 1A30 4B0D 0E21 65A1 0001" /* Í^º“‚ß.0K..!e¡.. */ - $"2869 F06A 8949 311F DB03 39EB E8E1 5BFB" /* (iðj‰I1.Û.9ëèá[û */ - $"F11C 05C6 2469 BAEA 4516 4CC4 DAF5 927A" /* ñ..Æ$iºêE.LÄÚõ’z */ - $"2CEB 3150 DB6F 4DE2 8EED 59C0 604F 9AE5" /* ,ë1PÛoMâŽíYÀ`Ošå */ - $"E136 83B0 F348 3D1A B44D 3A8E D77A B0DE" /* á6ƒ°óH=.´M:Ž×z°Þ */ - $"5267 1055 24F7 3C3D EB3E 08EF 97F9 4B29" /* Rg.U$÷<=ë>.ï—ùK) */ - $"454F 1B5D 4A6E 56E1 0F90 00A1 4467 7454" /* EO.]JnVá..¡DgtT */ - $"B556 362A 9A19 9E35 19E9 BFDF E2AD 91D6" /* µV6*š.ž5.é¿ßâ­‘Ö */ - $"7FB6 95B9 F19D 8D07 2FAF 3162 D880 0AA7" /* .¶•¹ñ./¯1b؀§ */ - $"C9C4 94AD C49A 1231 2D9F 780F 6E3E 57D2" /* ÉÄ”­Äš.1-Ÿx.n>WÒ */ - $"8C1C 582C 179A 721C 7063 F056 F938 4EA1" /* Œ.X,.šr.pcðVù8N¡ */ - $"F3E4 E458 D254 280F 92CA ABDC 4ECF 3EB7" /* óääXÒT(.’Ê«ÜNÏ>· */ - $"95DF A3B8 45C0 1427 BA54 B2E2 D1BC B67D" /* •ߣ¸EÀ.'ºT²âѼ¶} */ - $"5A0F EE12 37D4 BE1C 5785 A90D 2E62 B301" /* Z.î.7Ô¾.W…©..b³. */ - $"F66D A637 374B 17DA 7446 C318 3B11 4F50" /* öm¦77K.ÚtFÃ.;.OP */ - $"ED27 AEB2 D8F6 C3E4 AB48 5E7C 1D46 9463" /* í'®²ØöÃä«H^|.F”c */ - $"E7BA 9296 7BFA FDBB 39F2 7E86 1A5D 8FFA" /* 纒–{úý»9ò~†.]ú */ - $"7E06 FC92 3472 7950 8B67 8329 FA9F 47AA" /* ~.ü’4ryP‹gƒ)úŸGª */ - $"51F3 01AD A6DA 224F E711 AF6F BA8F FA86" /* Qó.­¦Ú"Oç.¯oºú† */ - $"FF61 EBD1 5613 B076 3543 3515 FF1B 1E9C" /* ÿaëÑV.°v5C5.ÿ..œ */ - $"CE78 6A36 7CCF FD63 E9E3 00E6 EA60 1DBE" /* Îxj6|Ïýcéã.æê`.¾ */ - $"42FB 3E66 D69D 8BA6 A0E6 13E1 2087 20D7" /* Bû>fÖ‹¦ æ.á ‡ × */ - $"7941 E3C4 C7C6 67FF 2C9C A486 253A C206" /* yAãÄÇÆgÿ,œ¤†%:Â. */ - $"F961 4A0E D9DD D32A 6D67 A012 B1A2 B549" /* ùaJ.ÙÝÓ*mg .±¢µI */ - $"3F58 8BA1 CA98 94EB 6099 570C D139 09AA" /* ?X‹¡Ê˜”ë`™W.Ñ9ƪ */ - $"8DEB C31A 0812 5DAD 2926 6846 D789 4430" /* ëÃ...]­)&hF׉D0 */ - $"4931 16B5 0804 52F1 040D B0A7 DDD7 7052" /* I1.µ..Rñ..°§Ý×pR */ - $"4269 C765 98AA 3941 F9EE 987A 2EAD 46BE" /* BiÇe˜ª9Aùî˜z.­F¾ */ - $"AA2B DD79 D9F9 7AF7 9318 B633 97CC DB93" /* ª+ÝyÙùz÷“.¶3—ÌÛ“ */ - $"5AF7 23D4 08E5 1FD7 EA45 85E9 4C98 77B6" /* Z÷#Ô.å.×êE…éL˜w¶ */ - $"0038 8756 6C8F 1A76 8D36 D67C 0BBD 248F" /* .8‡Vl.v6Ö|.½$ */ - $"8465 4CC4 7B7A C1B7 6348 F763 66A7 F04E" /* „eLÄ{zÁ·cH÷cf§ðN */ - $"FF4E 1C72 1053 323F 9E55 F75D 4097 9C24" /* ÿN.r.S2?žU÷]@—œ$ */ - $"AD5D 3C1B 766A 50A8 7252 6563 2687 8251" /* ­]<.vjP¨rRec&‡‚Q */ - $"8AE2 2EAE 6AA9 6439 2831 281E 034D 7999" /* Šâ.®j©d9(1(..My™ */ - $"F46F 47C1 911D 553A D887 0E8F 6E83 1B48" /* ôoGÁ‘.U:؇.nƒ.H */ - $"F0D9 C566 C0FF 0F02 5E68 EA76 7381 25B1" /* ðÙÅfÀÿ..^hêvs%± */ - $"D388 A375 370B A655 625B B71A 191C CD9D" /* Óˆ£u7.¦Ub[·...Í */ - $"F3CA 83B2 88D6 3712 B3E3 6CEA 19DC 3295" /* óʃ²ˆÖ7.³ãlê.Ü2• */ - $"3398 DF4F 1279 B346 1DD8 ED24 186F BEE1" /* 3˜ßO.y³F.Øí$.o¾á */ - $"8FD4 5FAD EAFF 6960 DE17 A0A4 B89E 7CF3" /* Ô_­êÿi`Þ. ¤¸ž|ó */ - $"C360 9DA8 91BF 470F ECC0 C0AA E260 3430" /* Ã`¨‘¿G.ìÀÀªâ`40 */ - $"EF4E CAD6 F964 05B0 8E27 C1F6 7516 4350" /* ïNÊÖùd.°Ž'Áöu.CP */ - $"B87D 7D16 703E 7972 1232 2E0F 6577 664C" /* ¸}}.p>yr.2..ewfL */ - $"8FA6 1414 7FB2 A33D A69E FD2F CF21 FC8F" /* ¦...²£=¦žý/Ï!ü */ - $"23A5 6AED 3E28 34A0 F73F F7D6 7F7C 5B6B" /* #¥jí>(4 ÷?÷Ö.|[k */ - $"0596 8B6D BACA 52DF 8E72 CDBA E221 7092" /* .–‹mºÊRߎrͺâ!p’ */ - $"A3AB B99D 1EE3 3F21 1AD2 0F0B DC5A 8BE1" /* £«¹.ã?!.Ò..ÜZ‹á */ - $"9E35 D891 9A60 EF28 5934 FA3B 8009 DC42" /* ž5Ø‘š`ï(Y4ú;€ÆÜB */ - $"11BE 487F D776 AF26 0EBD BF3E 8DCC B940" /* .¾H.×v¯&.½¿>̹@ */ - $"2523 D6E1 447F EA8A 5F66 DE0B 0962 249E" /* %#ÖáD.êŠ_fÞ.Æb$ž */ - $"165D BB6D 1EBD 1237 021B F903 DEEF 78FE" /* .]»m.½.7..ù.Þïxþ */ - $"B3F3 76B7 429F 336D 0EFA FF47 5CBC E3DF" /* ³óv·BŸ3m.úÿG\¼ãß */ - $"FC44 41BA BC9D 67AE 0B43 D817 FBCE 4F36" /* üDAº¼g®.CØ.ûÎO6 */ - $"8209 CCB5 38F6 712E 7DEA 4E9E 4B38 3B80" /* ‚ÆÌµ8öq.}êNžK8;€ */ - $"7B16 28E3 AB59 340E 93F0 4C65 C281 A4F1" /* {.(ã«Y4.“ðLe¤ñ */ - $"08E4 26A6 31AA B6A4 F784 BA8E C7FA 8919" /* .ä&¦1ª¶¤÷„ºŽÇú‰. */ - $"4B19 FA98 09C8 3C79 27DA CB39 881C 3B0E" /* K.ú˜ÆÈoâN¯sÛ^·)¤¿‰J */ - $"782D E8F2 91C9 E628 322C F20C 2D0C 73DD" /* x-èò‘Éæ(2,ò.-.sÝ */ - $"F093 4ED7 63DF E121 E7B9 DB7E 530D E3BD" /* ð“N×cßá!ç¹Û~S.ã½ */ - $"3469 29CE 5768 BE0F 1E91 46B7 00A0 CC2E" /* 4i)ÎWh¾..‘F·. Ì. */ - $"183D 7D57 762C 062D 0707 EBA4 177D 73E8" /* .=}Wv,.-..ë¤.}sè */ - $"FA30 83A6 479B AA9A 702E B8FD 9B54 0FF3" /* ú0ƒ¦G›ªšp.¸ý›T.ó */ - $"8222 1EB0 4CDD 4CF7 F0AB 8972 B655 9426" /* ‚".°LÝL÷ð«‰r¶U”& */ - $"4EEE 3B88 A6D2 F8B9 6845 0467 D606 9DDD" /* Nî;ˆ¦Òø¹hE.gÖ.Ý */ - $"C547 A61F 71E7 5A8E 6B83 51FD B2C1 A732" /* ÅG¦.qçZŽkƒQý²Á§2 */ - $"A6EA A0AA 6D13 E80B 0EC4 5DF4 348F FF6E" /* ¦ê ªm.è..Ä]ô4ÿn */ - $"2289 CFB4 1AE2 18D1 340F B29B E1FF 16B1" /* "‰Ï´.â.Ñ4.²›áÿ.± */ - $"0F0F B5AD 260A 7FD9 B1F2 3D0C 404F 75A8" /* ..µ­&Â.Ù±ò=.@Ou¨ */ - $"E4DB 52EE 259B D762 E5E5 4FFD 22AC 4856" /* äÛRî%›×bååOý"¬HV */ - $"9C62 8DDB F5D8 58F8 4EC7 1110 30EC E0D8" /* œbÛõØXøNÇ..0ìàØ */ - $"7FED 0176 FEF2 53B3 75C6 34E1 A3A7 79DA" /* .í.vþòS³uÆ4ᣧyÚ */ - $"1FDC 42EC 83B2 F3EB 056C E41B 4E65 3699" /* .ÜB샲óë.lä.Ne6™ */ - $"4BD6 1AE3 85A9 DBF6 89D4 39B0 79F9 8877" /* KÖ.ã…©Ûö‰Ô9°yùˆw */ - $"161C 2CB5 3F3C 294B 8CA3 A6F6 556C 4CAD" /* ..,µ?<)KŒ£¦öUlL­ */ - $"A752 918D 7E61 BA54 02D2 CF5C AEBE 1A0B" /* §R‘~aºT.ÒÏ\®¾.. */ - $"B75C A9CA 9876 AB0B 6028 4D8E D46C E479" /* ·\©Ê˜v«.`(MŽÔläy */ - $"A186 EA09 496E 0935 04E2 4C25 FA18 270B" /* ¡†êÆInÆ5.âL%ú.'. */ - $"A054 DE1C 1BD8 A089 9D95 1335 E93C 7C21" /*  TÞ..Ø ‰•.5é<|! */ - $"435E A570 3C42 AA88 0075 BB20 20AF 90EC" /* C^¥pÝÙøFF|ïÆS.+F */ - $"5BD9 2BFF 5F26 72DB 523D D0FC CE49 47B0" /* [Ù+ÿ_&rÛR=ÐüÎIG° */ - $"D98B 4D36 1B60 7C3A 0707 F46A 8565 4CCB" /* Ù‹M6.`|:..ôj…eLË */ - $"5DC1 A50D C039 BF24 7418 78A7 6D4F DE55" /* ]Á¥.À9¿$t.x§mOÞU */ - $"1CB8 B787 158C 6C4D D840 920F 3130 7A92" /* .¸·‡.ŒlMØ@’.10z’ */ - $"1CF4 1B74 BC2B 8954 0A80 9636 BFC3 6330" /* .ô.t¼+‰T€–6¿Ãc0 */ - $"3E7F 7E4E A811 39F2 3D56 10D3 6A76 4E20" /* >.~N¨.9ò=V.ÓjvN */ - $"F646 5CD3 9166 D2D6 046F E398 A934 2D04" /* öF\Ó‘fÒÖ.o㘩4-. */ - $"2E01 C602 1332 8274 6AE2 D5C9 6226 30B3" /* ..Æ..2‚tjâÕÉb&0³ */ - $"07DB FDF3 B3BB 6C31 B162 FF63 0639 8E6F" /* .Ûýó³»l1±bÿc.9Žo */ - $"3501 A54C 1AA6 42EB EDE7 885E EE2F A6D9" /* 5.¥L.¦Bëíçˆ^î/¦Ù */ - $"B74A AE20 8FFB 6FCF A537 642D F17F A45E" /* ·J® ûoÏ¥7d-ñ.¤^ */ - $"EE37 DE05 7569 A81E F464 A35B 603B 4F40" /* î7Þ.ui¨.ôd£[`;O@ */ - $"D00F C3D2 D04A F943 AC3C 37E2 1B2B A1D3" /* Ð.ÃÒÐJùC¬<7â.+¡Ó */ - $"09D6 A92B F7CB B2FA 9FF7 97F2 83F9 BABC" /* ÆÖ©+÷˲úŸ÷—òƒùº¼ */ - $"E4BE F015 E804 97FC A16F 6E8B 9004 8424" /* ä¾ð.è.—ü¡on‹.„$ */ - $"04F7 1295 0A15 3C1A AA5D 6A75 372A 0BB4" /* .÷.•Â.<.ª]ju7*.´ */ - $"4849 DD4A 012F D969 23A9 FBA7 C3EB D29F" /* HIÝJ./Ùi#©û§ÃëÒŸ */ - $"5CE0 BD6F 8436 26BB 1B52 3BCB DCAA 0791" /* \à½o„6&».R;Ëܪ.‘ */ - $"02B3 8EC7 5A89 D402 C9FF 058E E2C8 AD72" /* .³ŽÇZ‰Ô.Éÿ.ŽâÈ­r */ - $"01BF D9B3 FA52 B000 0000 3090 8B4E 8809" /* .¿Ù³úR°...0‹NˆÆ */ - $"9E4F 59A7 8021 D030 169B 78E6 55B4 9FB8" /* žOY§€!Ð0.›xæU´Ÿ¸ */ - $"48A1 D2F4 BE8E A948 A89E 5E3E BE56 AE8C" /* H¡Òô¾Ž©H¨ž^>¾V®Œ */ - $"BF6C 6485 F435 4906 BE37 4D88 589A 85C0" /* ¿ld…ô5I.¾7MˆXš…À */ - $"5278 59EC 1FED 3652 3FE0 5229 0524 D686" /* RxYì.í6R?àR).$Ö† */ - $"1E5E 14D9 8C56 8742 9625 36BB 4674 0391" /* .^.ÙŒV‡B–%6»Ft.‘ */ - $"9647 FCC9 30C4 6D0D 5812 1271 E9C8 E89D" /* –GüÉ0Äm.X..qéÈè */ - $"7F9B 3420 0269 5F58 4554 F964 BDDA E9F3" /* .›4 .i_XETùd½Úéó */ - $"973A 5B5F 4C59 107B 2D9E 87CB D896 1F13" /* —:[_LY.{-ž‡ËØ–.. */ - $"AC52 F00D 3600 9104 3FF2 399A 0158 5153" /* ¬Rð.6.‘.?ò9š.XQS */ - $"139A A5C2 51CC D2C7 D082 C2A0 E35B FE05" /* .š¥ÂQÌÒÇЂ ã[þ. */ - $"06C9 DBB4 7036 39DB 80AF 4642 9F53 170C" /* .ÉÛ´p69Û€¯FBŸS.. */ - $"2856 38D5 0FA7 B562 4ED8 3BB5 B48A B1C8" /* (V8Õ.§µbNØ;µ´Š±È */ - $"B20B 4B42 4499 C5C1 242B A1BA CB74 D8F1" /* ².KBD™ÅÁ$+¡ºËtØñ */ - $"1CF1 241E 7A2A B847 111D 13DC CD3C 05A3" /* .ñ$.z*¸G...ÜÍ<.£ */ - $"024F 25B5 41E2 0A15 E1C4 1A0E A5D8 0742" /* .O%µAâÂ.áÄ..¥Ø.B */ - $"A359 2372 FD88 7447 1DB7 F766 5B7F E63E" /* £Y#rýˆtG.·÷f[.æ> */ - $"26B8 BC6E 7B72 E331 2BE1 73BD 04A0 E941" /* &¸¼n{rã1+ás½. éA */ - $"45EC 9039 8769 8BFF 1624 8D43 CA24 9D0D" /* Eì9‡i‹ÿ.$CÊ$. */ - $"A05B F467 7401 E777 0608 C4A6 A698 9A9B" /*  [ôgt.çw..Ħ¦˜š› */ - $"7066 11D3 606F 857E 18D8 D9D3 E226 38C0" /* pf.Ó`o…~.ØÙÓâ&8À */ - $"D89B 09D9 A2F1 0171 BAC9 D7BF AB2E BD58" /* Ø›ÆÙ¢ñ.qºÉ׿«.½X */ - $"7178 6CC2 608D 447D D92A 621C 1A82 B764" /* qxlÂ`D}Ù*b..‚·d */ - $"2ABE CBE8 07C0 E2A6 9B83 46A8 1109 FC87" /* *¾Ëè.À⦛ƒF¨.Æü‡ */ - $"F083 9598 26AE 8847 7E22 278D 9311 59FC" /* ðƒ•˜&®ˆG~"'“.Yü */ - $"2995 1D44 BA58 24BC 2A99 3946 0E00 9144" /* )•.DºX$¼*™9F..‘D */ - $"9113 0297 29E3 A7B5 B937 2D23 8405 86ED" /* ‘..—)ã§µ¹7-#„.†í */ - $"29F1 5254 6A8C 0FB8 4B13 F6C3 6028 2C14" /* )ñRTjŒ.¸K.öÃ`(,. */ - $"3B80 E317 225C 7A9B 405C 7E95 A2E4 311B" /* ;€ã."\z›@\~•¢ä1. */ - $"076A D7B8 A4B5 225A 1F29 FAA2 8239 D98F" /* .j׸¤µ"Z.)ú¢‚9Ù */ - $"071A F302 DA24 AE80 2AC0 D108 035D EA76" /* ..ó.Ú$®€*ÀÑ..]êv */ - $"2F7E 850F 9E87 6B19 B2F1 F1E5 F5B3 A5AF" /* /~….ž‡k.²ññåõ³¥¯ */ - $"35BB D867 8257 8A48 5E4F 6983 E22E 6DAD" /* 5»Øg‚WŠH^Oiƒâ.m­ */ - $"D361 1505 ECF2 3F3C DB84 1861 E5AB 6793" /* Óa..ìò?<Û„.aå«g“ */ - $"910D 8F56 6BB5 FD17 29DB 242A 6946 8022" /* ‘.Vkµý.)Û$*iF€" */ - $"7DAF 8120 02EB C840 3765 69EC BB8B F2FF" /* }¯ .ëÈ@7ei컋òÿ */ - $"6031 7BE4 EFC4 BECD 7BD7 CB0A 8B8C 75C2" /* `1{äïľÍ{×Ë‹Œu */ - $"E63A F4E4 B05B 1442 0CB1 BEBD E078 84F5" /* æ:ôä°[.B.±¾½àx„õ */ - $"3D95 24FA 952F 949B AD72 01B7 1CC7 4CA6" /* =•$ú•/”›­r.·.ÇL¦ */ - $"78C2 BA05 B757 517A 5CB1 A380 0C23 0680" /* xº.·WQz\±£€.#.€ */ - $"3113 0CBA 23B8 AA48 F832 B74F 997E 6E03" /* 1..º#¸ªHø2·O™~n. */ - $"D16C 577F 968F E9A4 73CA DA79 07B3 A5F1" /* ÑlW.–é¤sÊÚy.³¥ñ */ - $"2D20 C13D F821 62F9 41A0 A7AA 472A 368A" /* - Á=ø!bùA §ªG*6Š */ - $"28EE 7686 F7B4 D5CF 225E 004E 709F C4E8" /* (îv†÷´ÕÏ"^.NpŸÄè */ - $"FCBC B778 C976 A1E0 1968 1EF9 E998 2DC2" /* ü¼·xÉv¡à.h.ùé˜- */ - $"1693 C645 A4F5 787A 5B10 45C0 F010 8596" /* .“ÆE¤õxz[.EÀð.…– */ - $"A0F6 E8AA 1BAC C958 C0F6 101E 0C4D 2E61" /*  öèª.¬ÉXÀö...M.a */ - $"B76E 4019 58DD 3058 000C 2375 6EBC 6599" /* ·n@.XÝ0X..#un¼e™ */ - $"BEA3 9ADC 0002 F98F 24B3 B036 EA0D F2FD" /* ¾£šÜ..ù$³°6ê.òý */ - $"6823 E10A 59D7 5D0B F6C0 EFB2 7D9D A684" /* h#áÂY×].öÀï²}¦„ */ - $"3084 4AD6 92F2 BFB2 57CA 7294 FF2D 53C8" /* 0„JÖ’ò¿²WÊr”ÿ-SÈ */ - $"8D05 254E 2360 582F CE0C E209 240D FAB4" /* .%N#`X/Î.âÆ$.ú´ */ - $"C638 2103 7462 2AF1 5461 2036 09B4 294F" /* Æ8!.tb*ñTa 6Æ´)O */ - $"52A6 6553 F6B7 85F6 E77F A8B7 058C F201" /* R¦eSö·…öç.¨·.Œò. */ - $"19BA D75B 6612 0013 CFA6 F54F 8855 C000" /* .º×[f...ϦõOˆUÀ. */ - $"00BE 57DE C13B 77B0 AF81 F95D 8E88 7224" /* .¾WÞÁ;w°¯ù]Žˆr$ */ - $"002F C7BE 1D06 F540 58EF 1909 1D8F 037F" /* ./Ǿ..õ@Xï.Æ... */ - $"E973 290F 641E 8849 F996 EA66 D15C CA23" /* és).d.ˆIù–êfÑ\Ê# */ - $"C620 3090 94D8 F95F C58C 720B 7FFE 206C" /* Æ 0”Øù_ÅŒr..þ l */ - $"A3E0 EE49 AE89 4586 6617 FE87 4D7B D300" /* £àîI®‰E†f.þ‡M{Ó. */ - $"4CF6 E77F A882 E041 362F 710E AC03 D573" /* Löç.¨‚àA6/q.¬.Õs */ - $"69FF 7480 0018 484B 0D10 C800 0000 0C24" /* iÿt€..HK..È....$ */ - $"183F ADBF D900 0184 8481 E82C C758 1848" /* .?­¿Ù..„„è,ÇX.H */ - $"4840 6806 1212 B020 EA50 0818 484B F6E7" /* H@h...° êP..HKöç */ - $"7FA5 E774 6249 2F3D 5FF9 2FC0 0C24 1656" /* .¥çtbI/=_ù/À.$.V */ - $"1B91 8000 1846 D5F4 CA01 40C2 3F26 3D84" /* .‘€..FÕôÊ.@Â?&=„ */ - $"7B4A 811F 08D6 B47D 05C2 4402 D57B C1FC" /* {J..Ö´}.ÂD.Õ{Áü */ - $"7D32 E6FE 8125 F24E 514B 2820 7323 F96F" /* }2æþ%òNQK( s#ùo */ - $"B1F9 CDBD 94E4 C9BF 81D6 5A26 1C08 2131" /* ±ùͽ”äÉ¿ÖZ&..!1 */ - $"FF58 608E A4BB BEFD 703F C3EA B596 2AEA" /* ÿX`ޤ»¾ýp?Ãêµ–*ê */ - $"48B2 2319 2F7A B9BC A14D EAB4 49CF 89E9" /* H²#./z¹¼¡Mê´Iωé */ - $"D312 5979 1910 6519 C45E 4B88 F709 D65D" /* Ó.Yy..e.Ä^Kˆ÷ÆÖ] */ - $"BF0F 86DC C883 8469 9757 7FC7 FB91 A851" /* ¿.†Üȃ„i—W.Çû‘¨Q */ - $"7834 0232 03F5 F552 B022 E799 431E 3FE8" /* x4.2.õõR°"ç™C.?è */ - $"BE7C A37B AAE1 D04F 9795 EA98 CAB0 6816" /* ¾|£{ªáÐO—•ê˜Ê°h. */ - $"047F 244A 2BD3 E0CF B862 B172 B1B3 F027" /* ..$J+Óàϸb±r±³ð' */ - $"6505 A5AA 6AB2 5F8E B98F 85CB D487 2603" /* e.¥ªj²_޹…ËÔ‡&. */ - $"BDA4 4C6D 4B74 0A12 117F 6137 6A30 37CE" /* ½¤LmKtÂ...a7j07Î */ - $"0441 188C 63FC 46ED 5C9A B6A0 9012 6450" /* .A.ŒcüFí\š¶ .dP */ - $"A042 C4D3 8E69 8930 0797 25B3 B70D 5C62" /*  BÄÓŽi‰0.—%³·.\b */ - $"6A83 3964 5EF1 4A28 508D FF7F E847 17D0" /* jƒ9d^ñJ(Pÿ.èG.Ð */ - $"7C91 F4BC AA82 5462 99EF FF79 5A7A E45E" /* |‘ô¼ª‚Tb™ïÿyZzä^ */ - $"98FF 5B1E 90FE 7F80 9453 7AD1 4A63 8FFC" /* ˜ÿ[.þ.€”SzÑJcü */ - $"1B61 796C 4B90 7FE9 1959 752B 8579 95F8" /* .aylK.é.Yu+…y•ø */ - $"C5B9 7EC6 2D24 5185 1BCE 12D6 B418 B42C" /* Ź~Æ-$Q….Î.Ö´.´, */ - $"D40F 7AF7 657E 5184 9CAA 8834 B65C 4785" /* Ô.z÷e~Q„œªˆ4¶\G… */ - $"B934 7C3A 8000 0000 99F5 3F06 3790 6AF7" /* ¹4|:€...™õ?.7j÷ */ - $"0769 9D8E F19F 4FF3 EDE6 D059 B97C A1F0" /* .iŽñŸOóíæÐY¹|¡ð */ - $"0CE2 4FAF B846 8CCE 52E4 E898 D2E0 00A3" /* .âO¯¸FŒÎRäè˜Òà.£ */ - $"CB3D F2B1 E7F7 0C30 FF13 DB29 474C C00D" /* Ë=ò±ç÷.0ÿ.Û)GLÀ. */ - $"C6B7 6A2D 2F89 8E2F BDE7 F2BA C3DD 591B" /* Æ·j-/‰Ž/½çòºÃÝY. */ - $"CEDE C7DD 35BA 492C BB53 2AF6 7315 AC30" /* ÎÞÇÝ5ºI,»S*ös.¬0 */ - $"17D7 1C05 3AE4 4AB3 8D31 0DC9 7A9F 0A76" /* .×..:äJ³1.ÉzŸÂv */ - $"B4EE 95EE 6CB5 1C6A FE4F D27E 0966 CE51" /* ´î•îlµ.jþOÒ~ÆfÎQ */ - $"8607 E144 F4AD E999 5480 05FF 7FC2 C645" /* †.áDô­é™T€.ÿ.ÂÆE */ - $"D136 BB6E 89FA 9A2D F827 338F FEB9 B248" /* Ñ6»n‰úš-ø'3þ¹²H */ - $"23A6 377D 0E53 BBF3 D290 3AD8 F58B CE4C" /* #¦7}.S»óÒ:Øõ‹ÎL */ - $"24CA 8E49 76ED DA48 8856 904D C31F 305F" /* $ÊŽIvíÚHˆVMÃ.0_ */ - $"C441 7DAA 86D8 3FE1 5EA7 E20A CDBC 5F2A" /* ÄA}ª†Ø?á^§âÂͼ_* */ - $"35DC 107F DDE2 D88C 7B38 D700 4C54 9C81" /* 5Ü..ÝâØŒ{8×.LTœ */ - $"B8FD F39D 0F47 DE2B 6E17 7D4F E30F F60C" /* ¸ýó.GÞ+n.}Oã.ö. */ - $"0895 5694 3006 1211 EFEC D7F8 F743 3D43" /* .•V”0...ïì×ø÷C=C */ - $"6BA5 7C06 9025 9188 E369 0FC8 94CB F38E" /* k¥|.%‘ˆãi.È”ËóŽ */ - $"DF76 CA67 91C4 D786 F34F 1E56 332B 1404" /* ßvÊg‘Ä׆óO.V3+.. */ - $"B66B 2702 B13D 47B8 1FBD 38D7 A2DF 54EF" /* ¶k'.±=G¸.½8×¢ßTï */ - $"FD1C 00CC 5D05 5B28 3EBF 2FC7 7263 5880" /* ý..Ì].[(>¿/ÇrcX€ */ - $"0364 4A0B 982F 4A13 A55F 5D64 61D2 110C" /* .dJ.˜/J.¥_]daÒ.. */ - $"4319 318A 5BD6 94B7 DBA9 92F0 379B 0E87" /* C.1Š[Ö”·Û©’ð7›.‡ */ - $"4561 92A0 0000 0000 0000 12FE B897 0ABD" /* Ea’ .......þ¸—½ */ - $"B3C7 FEA8 AE43 B177 DA3F 2BA3 2D59 3358" /* ³Çþ¨®C±wÚ?+£-Y3X */ - $"9FAE 567F E53B 2877 9FFF 7FFF 7FFB 4B90" /* Ÿ®V.å;(wŸÿ.ÿ.ûK */ - $"C00D FEA3 7DF6 39C4 C825 2952 2C65 8FFF" /* À.þ£}ö9ÄÈ%)R,eÿ */ - $"7E91 DB49 1333 7DEC 6471 1E2E 394E A080" /* ~‘ÛI.3}ìdq..9N € */ - $"C1C9 0DD4 62C4 4FC9 E332 BC0D F9DD FEAB" /* ÁÉ.ÔbÄOÉã2¼.ùÝþ« */ - $"9D33 8271 2A01 8484 B009 6058 624E 2736" /* 3‚q*.„„°Æ`XbN'6 */ - $"529C A0F4 BCBB 846D 32FD 407C FA84 2D52" /* Rœ ô¼»„m2ý@|ú„-R */ - $"21DC 1623 210B 0410 4061 212D 0386 04FF" /* !Ü.#!...@a!-.†.ÿ */ - $"7F72 1DFF 6F83 6A31 2B6E 0A6B D1F1 9A43" /* .r.ÿoƒj1+nÂkÑñšC */ - $"F340 2C47 D413 DFAC FF76 46AC 4BDD 55F0" /* ó@,GÔ.߬ÿvF¬KÝUð */ - $"2F9A 3BC6 613E 2F69 F45C 08F3 3FCB F83F" /* /š;Æa>/iô\.ó?Ëø? */ - $"F7D8 DC38 0F99 4764 0309 0948 41C6 1212" /* ÷ØÜ8.™Gd.ÆÆHAÆ.. */ - $"293B 5EA3 BE56 F760 BAEF 61FF 43D4 2891" /* );^£¾V÷`ºïaÿCÔ(‘ */ - $"A380 672E FF7E 4B98 FBFB 1ACD 90F6 4A7E" /* £€g.ÿ~K˜ûû.ÍöJ~ */ - $"3B14 E9F4 B1B4 4120 E600 AF42 0056 B131" /* ;.éô±´A æ.¯B.V±1 */ - $"0310 EF4F EA97 E030 9090 A298 F514 CEFA" /* ..ïOê—à0¢˜õ.Îú */ - $"B200 0061 211A A495 FD76 5850 B8F7 1CF1" /* ²..a!.¤•ývXP¸÷.ñ */ - $"A979 F478 5BFF 7FFB E6D6 F6D8 03FF 7FFD" /* ©yôx[ÿ.ûæÖöØ.ÿ.ý */ - $"2A36 38D4 BA43 6280 D508 C4BD 735D 1C6F" /* *68ÔºCb€Õ.Ľs].o */ - $"2444 63E9 1C9A 969F 90A6 F34E D24D 94F2" /* $Dcé.š–Ÿ¦óNÒM”ò */ - $"1A09 F86A 2762 886F FBA0 96EA 1DC7 0364" /* .Æøj'bˆoû –ê.Ç.d */ - $"6192 A000 0000 0000 0000 0000 0061 BE9F" /* a’ ..........a¾Ÿ */ - $"2C25 5C25 4958 1428 AA60 5ABF 5551 6084" /* ,%\%IX.(ª`Z¿UQ`„ */ - $"D319 B739 1DC3 F92F 03A7 CF66 39CC 13BE" /* Ó.·9.Ãù/.§Ïf9Ì.¾ */ - $"100A 204E 9A06 CBD9 A8ED 9E4D CEED AE53" /* . Nš.ËÙ¨ížMÎí®S */ - $"023D B3BF AC07 F70E F7DD 2601 E2B4 B214" /* .=³¿¬.÷.÷Ý&.â´². */ - $"3B1D 74CD 0F60 7063 EFC5 24B8 3B0F DF21" /* ;.tÍ.`pcïÅ$¸;.ß! */ - $"2929 3755 A800 7D09 63D9 1548 5D89 6D22" /* ))7U¨.}ÆcÙ.H]‰m" */ - $"FAEF 37DC EB96 FF52 0018 EBDF 464C 8B34" /* úï7Üë–ÿR..ëßFL‹4 */ - $"DF85 2990 1CF1 7C84 CEDC D384 5003 D5A1" /* ß…).ñ|„ÎÜÓ„P.Õ¡ */ - $"2797 DBDC FDFB 0E8C 3703 470D 1FD5 B974" /* '—ÛÜýû.Œ7.G..Õ¹t */ - $"5A32 CF32 3D2A 0213 FDC8 8A0C B595 4840" /* Z2Ï2=*..ýÈŠ.µ•H@ */ - $"C240 6E40 D585 AF4C 004A F98F FC90 E5BB" /* Â@n@Õ…¯L.Jùüå» */ - $"D6AD 2A34 0A6E 1D4D 933D 2221 80B7 C8EF" /* Ö­*4Ân.M“="!€·Èï */ - $"7C61 2953 2991 F91A 61A3 B54E 56D2 77E1" /* |a)S)‘ù.a£µNVÒwá */ - $"1DB8 8B5F 5E9C 7D32 80A0 C23F BBE6 A2B2" /* .¸‹_^œ}2€ Â?»æ¢² */ - $"D49F C777 4BE6 FDA6 7B0F 2983 E19B 84FF" /* ÔŸÇwKæý¦{.)ƒá›„ÿ */ - $"4B7B 0DD6 A35E 60AD 632D D6D7 7030 0A9F" /* K{.Ö£^`­c-Ö×p0Ÿ */ - $"0FA2 0820 8451 9624 D0FF 1FB4 9B81 61CC" /* .¢. „Q–$Ðÿ.´›aÌ */ - $"591F 6D98 E1AF 16E4 AF42 1FE0 B7C7 30DF" /* Y.m˜á¯.ä¯B.à·Ç0ß */ - $"CFFC EC14 15A1 B07A 4E11 ED5F BDB3 FD2A" /* Ïüì..¡°zN.í_½³ý* */ - $"84B1 6901 4333 27BB 2E8C 3329 2064 A800" /* „±i.C3'».Œ3) d¨. */ - $"0001 2FDE 803E 817B C369 A30F FCF0 FF1D" /* ../Þ€>{Ãi£.üðÿ. */ - $"89A1 2FD7 FF71 B63D 19EC 98DE DFE2 D9B8" /* ‰¡/×ÿq¶=.ì˜ÞßâÙ¸ */ - $"9D39 1737 4722 2A89 D291 623B 279F BF0B" /* 9.7G"*‰Ò‘b;'Ÿ¿. */ - $"E8C0 8AF8 CBE4 0011 5D58 29AB 34B0 335C" /* èÀŠøËä..]X)«4°3\ */ - $"36B2 1383 D820 11B8 22DF 56E1 27EF 932D" /* 6².ƒØ .¸"ßVá'ï“- */ - $"30DE CC72 58E3 9BDD A88C 229A CBC8 A466" /* 0ÞÌrXã›Ý¨Œ"šËȤf */ - $"7C29 FDE8 E789 F28F 3258 A2DD 897B 1C6A" /* |)ýèç‰ò2X¢Ý‰{.j */ - $"C048 306A EEA7 3DF0 F8D4 BECC CDBD 9E43" /* ÀH0jî§=ðøÔ¾ÌͽžC */ - $"A29D 8052 478B 6470 79B7 B38A 5743 CAE7" /* ¢€RG‹dpy·³ŠWCÊç */ - $"0BD4 0F4A 23E1 4C85 39C9 DEB0 75AF 151E" /* .Ô.J#áL…9ÉÞ°u¯.. */ - $"45D5 1681 2BA4 74C9 13B5 746A E399 9467" /* EÕ.+¤tÉ.µtjã™”g */ - $"E6B9 D503 7F7C D57D 4D5F 7FC8 DD43 7D9B" /* æ¹Õ..|Õ}M_.ÈÝC}› */ - $"3CDC F9AD 167C 162B 4E6C 2110 DB2C DF34" /* <Üù­.|.+Nl!.Û,ß4 */ - $"AEED CCE4 05AC 4057 9829 B161 9CA0 8159" /* ®íÌä.¬@W˜)±aœ Y */ - $"A64F FD15 EC5A 4A51 CA6C FD10 9A25 4291" /* ¦Oý.ìZJQÊlý.š%B‘ */ - $"1E90 1FC2 3530 E0DB E4E6 232E CB64 AF95" /* ..Â50àÛäæ#.Ëd¯• */ - $"9494 656D D395 3D62 9EDA 2EC1 DB02 1FAA" /* ””emÓ•=bžÚ.ÁÛ..ª */ - $"6778 0FC0 C4A2 CCA8 EDC0 4DA8 F889 162F" /* gx.ÀĢ̨íÀM¨ø‰./ */ - $"03F9 A9C1 C635 1DAD 2E22 580B 0B2B 83E3" /* .ù©ÁÆ5.­."X..+ƒã */ - $"EC02 5552 3AA8 91BA 45AF 5439 4265 71F6" /* ì.UR:¨‘ºE¯T9Beqö */ - $"3E7A 4412 5DE5 1863 50E6 C0ED C470 3ED9" /* >zD.]å.cPæÀíÄp>Ù */ - $"0E3F 48BA 54C5 915E 03F0 D836 6429 2A67" /* .?HºTÅ‘^.ðØ6d)*g */ - $"B7FA 6AF9 069E 8E67 2848 B570 C3AC 7746" /* ·újù.žŽg(HµpìwF */ - $"EB48 0A2F 4BE4 8EB3 3F8F 791F 0646 DEDF" /* ëHÂ/K䎳?y..FÞß */ - $"316B EFDF 6FD8 C0B9 7319 CE94 8930 C6F6" /* 1kïßoØÀ¹s.Δ‰0Æö */ - $"6399 C4A9 79AD E967 4783 3F8D C538 3C15" /* c™Ä©y­égGƒ?Å8<. */ - $"E5B7 CE98 22B7 5333 A938 B26F 0E1E EF2E" /* å·Î˜"·S3©8²o..ï. */ - $"74B9 72EF 9D8A 80B7 FDC1 8334 A5F9 DCFB" /* t¹r·ýÁƒ4¥ùÜû */ - $"B891 BB38 373C 9BE8 59F4 6018 6E63 DA65" /* ¸‘»87<›èYô`.ncÚe */ - $"9B13 9DC8 28DB 3C15 0D2C 11FC 0E2D 7A0A" /* ›.È(Û<..,.ü.-z */ - $"F8FF 671F C3FF 7F8E 1210 C212 EA5A 5F0B" /* øÿg.Ãÿ.Ž..Â.êZ_. */ - $"9727 F770 25A5 236D 9789 75C7 4089 11DD" /* —'÷p%¥#m—‰uÇ@‰.Ý */ - $"E472 3865 B217 B946 CF22 5225 27DE 566D" /* är8e².¹FÏ"R%'ÞVm */ - $"6799 4F82 0D46 59F5 E466 F9E7 71C3 FA80" /* g™O‚.FYõäfùçqÃú€ */ - $"7826 E598 FF48 E181 6CA8 5A7E C354 0CAA" /* x&å˜ÿHál¨Z~ÃT.ª */ - $"B01C 9EC4 181F 849B 6A13 FB8D C477 70BD" /* °.žÄ..„›j.ûÄwp½ */ - $"F46B 278C 4467 B0CF 3E21 805E EF97 9696" /* ôk'ŒDg°Ï>!€^ï—–– */ - $"CBB9 E3F6 B62E DC26 001A 408F D7E2 07C3" /* ˹ãö¶.Ü&..@×â.à */ - $"C1A4 AD97 4235 8863 A088 1980 C505 6E1F" /* Á¤­—B5ˆc ˆ.€Å.n. */ - $"F392 0B24 B500 20DC 8295 5703 F9B9 FF70" /* ó’.$µ. Ü‚•W.ù¹ÿp */ - $"355C 9B8D BB49 898F 1AAB F65F 7D7E E28F" /* 5\›»I‰.«ö_}~â */ - $"4300 BDCC FB20 4F67 CA07 0CAE 3BAD AA36" /* C.½Ìû OgÊ..®;­ª6 */ - $"A4D8 3358 4176 1AD6 01FA 0450 0000 0042" /* ¤Ø3XAv.Ö.ú.P...B */ - $"7B49 E0E8 A7D8 4EA9 E1A5 597B DB80 BA6D" /* {Iàè§ØN©á¥Y{Û€ºm */ - $"8010 25EA 0A26 833F DE77 DBF7 78B9 564B" /* €.%êÂ&ƒ?ÞwÛ÷x¹VK */ - $"57B2 AF8C BC92 97D7 46A1 23C1 B595 A2EE" /* W²¯Œ¼’—×F¡#Áµ•¢î */ - $"F8A9 29FA 42C2 3557 6345 80B1 FCFD F322" /* ø©)úBÂ5WcE€±üýó" */ - $"E992 9262 A83F E43D B059 CB12 D425 FEF2" /* é’’b¨?ä=°YË.Ô%þò */ - $"9932 1BD8 C65C ED82 D05E E15C 5E9C 76B7" /* ™2.ØÆ\í‚Ð^á\^œv· */ - $"7C64 FCDB A247 D388 3CCB 86B5 C486 2261" /* |düÛ¢GÓˆ<ˆµÄ†"a */ - $"BFD1 7213 39C3 0D69 6AF0 2476 B711 7E91" /* ¿Ñr.9Ã.ijð$v·.~‘ */ - $"6B53 6A04 4F3C 2781 A090 3118 6C3F 49BA" /* kSj.O<' 1.l?Iº */ - $"B81A 3FEB D686 EFCE F487 8315 E33F 84DB" /* ¸.?ëÖ†ïÎô‡ƒ.ã?„Û */ - $"E2C9 F35F 28C5 10C4 FF7F FA4F E953 89FC" /* âÉó_(Å.Äÿ.úOéS‰ü */ - $"8B32 23C6 0D04 5E49 DADA F0FE BCA7 D2C9" /* ‹2#Æ..^IÚÚðþ¼§ÒÉ */ - $"5869 EAD4 F153 9BF5 A5EA 3298 CC8B 8721" /* XiêÔñS›õ¥ê2˜Ì‹‡! */ - $"F919 680B 3F8C 304A 2849 4970 41CF 0F60" /* ù.h.?Œ0J(IIpAÏ.` */ - $"76D9 5820 EF21 CD4A 205A 632F 7CC4 EFDF" /* vÙX ï!ÍJ Zc/|Äïß */ - $"33F3 CCA8 EDAF 405B 78E1 8F79 0F66 6573" /* 3ǫ́í¯@[xáy.fes */ - $"35A2 AD75 1E18 6018 AF23 7C9D A008 1A01" /* 5¢­u..`.¯#| ... */ - $"C5FE 69AA 2C8E D97E 244D D075 F213 0CC6" /* Åþiª,ŽÙ~$MÐuò..Æ */ - $"738F 4395 BBC0 5CB6 3ADC 3DA8 ACB8 E018" /* sC•»À\¶:Ü=¨¬¸à. */ - $"BA5B 13DB 0F6A CB18 DEAC 9749 F5B5 361D" /* º[.Û.jË.Þ¬—Iõµ6. */ - $"CF3A C107 9606 179F F4C7 F3DE CB0B 1F53" /* Ï:Á.–..ŸôÇóÞË..S */ - $"F27E 5D3C 11AB 66B4 8037 0644 AE98 19BF" /* ò~]<.«f´€7.D®˜.¿ */ - $"D564 973A 0CF2 C96F 56D4 5CB8 666F C68C" /* Õd—:.òÉoVÔ\¸foÆŒ */ - $"1E73 E515 8B33 75D2 D3B4 B3A3 8CDE DE0C" /* .så.‹3uÒÓ´³£ŒÞÞ. */ - $"DA37 A3DF 44D2 B57E 2DB2 E891 D36F CC23" /* Ú7£ßDÒµ~-²è‘ÓoÌ# */ - $"ADE8 45BC BB30 78D7 77BD D4A8 087F C83F" /* ­èE¼»0x×w½Ô¨..È? */ - $"E49A 6873 FAC4 C12B 0056 5E18 C3CB C2E9" /* äšhsúÄÁ+.V^.ÃËÂé */ - $"DCAE F0E8 A75F 18DD B8DD 1DCD B0F5 3A1C" /* Ü®ðè§_.ݸÝ.Ͱõ:. */ - $"3816 51A8 0D93 00D0 6FF6 8F07 E4BE EDF9" /* 8.Q¨.“.Ðoö.ä¾íù */ - $"BF0E 6CAA 5384 5DF0 DF12 4CF4 E3B3 5D6C" /* ¿.lªS„]ðß.Lôã³]l */ - $"602A B6F1 C0E0 E520 B0D6 71FB 7996 4930" /* `*¶ñÀàå °Öqûy–I0 */ - $"23DD 3601 3653 C40D 1A64 DC2B D5C2 01C9" /* #Ý6.6SÄ..dÜ+ÕÂ.É */ - $"5002 6BBE 7338 81EE F87D 7687 0FE6 7CF9" /* P.k¾s8îø}v‡.æ|ù */ - $"BAB6 5B35 1A25 421C 5BBA 4D82 4E1F B1D4" /* º¶[5.%B.[ºM‚N.±Ô */ - $"1907 FF78 F534 4A16 7BB6 B598 51F6 E4D3" /* ..ÿxõ4J.{¶µ˜QöäÓ */ - $"A04B 1198 B926 CFAE FC03 22E3 8360 E696" /*  K.˜¹&Ï®ü."ãƒ`æ– */ - $"F546 62F9 7178 F327 E245 4520 8D17 41C4" /* õFbùqxó'âEE .AÄ */ - $"9EC6 EF8D 0924 9416 7901 CE87 5EBB 286D" /* žÆïÆ$”.y.·^»(m */ - $"53BF 09FA 41F6 5FBA 8F4C 79A8 75BA 277A" /* S¿ÆúAö_ºLy¨uº'z */ - $"7D42 642B 38EE 9A49 DEDB F1B3 80D0 E5D0" /* }Bd+8îšIÞÛñ³€ÐåÐ */ - $"2980 F797 E7D0 F90D 4B2F AFDD 4A69 3389" /* )€÷—çÐù.K/¯ÝJi3‰ */ - $"1418 EBD0 6DF0 E38D 6E2F D546 C1A8 C8DD" /* ..ëÐmðãn/ÕFÁ¨ÈÝ */ - $"8977 E053 9C26 053A CF69 97F9 7FB4 9000" /* ‰wàSœ&.:Ïi—ù.´. */ - $"0000 0115 0E67 B64C 0015 DD82 643D 6476" /* .....g¶L..Ý‚d=dv */ - $"ED28 6324 AD72 8124 1AF6 FB1B 21C9 0605" /* í(c$­r$.öû.!É.. */ - $"FAE6 04A6 31BF 6D67 FF7B B889 831A 4FFD" /* úæ.¦1¿mgÿ{¸‰ƒ.Oý */ - $"6BF5 F098 23AB A490 39F7 6AFC 3832 E2E1" /* kõð˜#«¤9÷jü82âá */ - $"11B2 ADB0 ECCA 83DE B4FF 3685 5106 75DE" /* .²­°ìʃ޴ÿ6…Q.uÞ */ - $"3047 28A0 EDBE AD29 17CD DA62 698B CE64" /* 0G( í¾­).ÍÚbi‹Îd */ - $"5999 2B8E BB7D C74F F009 A25D B2B5 BDD9" /* Y™+Ž»}ÇOðÆ¢]²µ½Ù */ - $"B852 BFFE 0B74 9C05 22D7 B0A3 2139 0979" /* ¸R¿þ.tœ."×°£!9Æy */ - $"5C29 BAE8 43DA F9E5 5383 AFD2 14EC 64AA" /* \)ºèCÚùåSƒ¯Ò.ìdª */ - $"442C CE71 74ED 5C27 4331 9374 AC77 47EE" /* D,Îqtí\'C1“t¬wGî */ - $"31AC 4C74 97BC 753C D5DC 3D8B F7D2 C612" /* 1¬Lt—¼u<ÕÜ=‹÷ÒÆ. */ - $"2399 F431 07A1 76CA DAE6 772B 309A C800" /* #™ô1.¡vÊÚæw+0šÈ. */ - $"9F2F D6DF A44C 48EB 853E 4140 A123 BCA3" /* Ÿ/ÖߤLHë…>A@¡#¼£ */ - $"D096 00DA 0822 DFB3 6887 B31F A18F 59BE" /* Ж.Ú."ß³h‡³.¡Y¾ */ - $"6B25 B5CF CFA3 8806 85B7 ED84 B20B CDA2" /* k%µÏÏ£ˆ.…·í„².Í¢ */ - $"A0C8 404B 3FFF 7FF3 3816 5BF0 A16B 85D0" /*  È@K?ÿ.ó8.[ð¡k…Ð */ - $"B87F E4BB 21F9 A3BB 9103 2944 434A 5789" /* ¸.ä»!ù£»‘.)DCJW‰ */ - $"E3EC B1E3 6F3E 154A 37E4 ACA6 4B02 6C5B" /* ãì±ão>.J7䬦K.l[ */ - $"D23A D4D4 83CE F291 CD7F 114F 5935 8EE0" /* Ò:ÔÔƒÎò‘Í..OY5Žà */ - $"17EA F0B3 1D93 BC5F 2CF8 511C E99F 21D8" /* .êð³.“¼_,øQ.éŸ!Ø */ - $"E286 EB17 6FC2 C34B 1110 6398 03BF CB08" /* â†ë.oÂÃK..c˜.¿Ë. */ - $"0018 4848 E24D 90A5 63F9 B1F8 6E20 EF6E" /* ..HHâM¥cù±øn ïn */ - $"25D5 858B 0AE4 2235 581B D4DA E01C B006" /* %Õ…‹Âä"5X.ÔÚà.°. */ - $"E5EB DE78 855B 19E7 4D80 DAC2 1E8F CB2B" /* åëÞx…[.çM€ÚÂ.Ë+ */ - $"0EC8 3FFF 7759 B569 0861 20CC 1D71 2121" /* .È?ÿwYµi.a Ì.q!! */ - $"71A7 FA20 B34B EAB3 4260 A827 6E91 2B3C" /* q§ú ³Kê³B`¨'n‘+< */ - $"5479 449A 3161 D24E 8489 C00A 18A6 3FEC" /* TyDš1aÒN„‰ÀÂ.¦?ì */ - $"61F2 4C86 23C1 85DB 6ECA 221D BCC2 C25F" /* aòL†#Á…ÛnÊ".¼ÂÂ_ */ - $"EFFF 7891 F475 0E20 DC0A 8F85 8208 4541" /* ïÿx‘ôu. ÜÂ…‚.EA */ - $"579B 5EE2 24C4 5C60 39B7 D9F1 ECFD 0F0C" /* W›^â$Ä\`9·Ùñìý.. */ - $"3719 72A8 A543 8BF5 94BF BF6C E6F7 E45A" /* 7.r¨¥C‹õ”¿¿læ÷äZ */ - $"C5CF 1FD7 32F5 2D70 041E 3641 2C46 E23D" /* ÅÏ.×2õ-p..6A,Fâ= */ - $"E072 6889 A892 A27F 44A8 564A 74A3 B421" /* àrh‰¨’¢.D¨VJt£´! */ - $"E1CC A0F3 50E2 2711 6919 76BE D84B D2FE" /* áÌ óPâ'.i.v¾ØKÒþ */ - $"AAED 2D64 7C8F 4C55 7FFF 7EFC 2CBF 05DE" /* ªí-d|LU.ÿ~ü,¿.Þ */ - $"25B2 001C 00EC 6D17 ED17 E559 9DFA F731" /* %²...ìm.í.åYú÷1 */ - $"B21A 7394 8B35 5948 BA4F 5858 020F FF7C" /* ².s”‹5YHºOXX..ÿ| */ - $"C89D 1CFA F89B 9F9C 841F 19EF D626 E6DE" /* È.úø›Ÿœ„..ïÖ&æÞ */ - $"DCC3 3148 38A0 C32F 898F BEC3 0AF3 318C" /* ÜÃ1H8 Ã/‰¾ÃÂó1Œ */ - $"5E09 119B 43C8 9FE6 73B2 F4B9 9789 4BFC" /* ^Æ.›CÈŸæs²ô¹—‰Kü */ - $"99A2 FF7F FF7A 4FD0 8C64 F459 410C 013C" /* ™¢ÿ.ÿzOÐŒdôYA..< */ - $"1C6C 85B5 1C8F D078 995D 714E 1C60 3090" /* .l…µ.Ðx™]qN.`0 */ - $"9058 77C4 BB80 5F57 1871 CA72 B2FD 0016" /* XwÄ»€_W.qÊr²ý.. */ - $"BAA7 F84F F4E9 ACDF F766 8CB4 475D 2F0B" /* º§øOôé¬ß÷fŒ´G]/. */ - $"37BC 18C8 6162 79C2 BDD7 8753 204B A536" /* 7¼.Èaby½ׇS K¥6 */ - $"9CBE 4972 316A BCB1 9442 4238 B88F 2F48" /* œ¾Ir1j¼±”BB8¸/H */ - $"7A45 5CD1 A306 3A23 5A78 354F CDB6 C0A5" /* zE\Ñ£.:#Zx5OͶÀ¥ */ - $"2A5C 19DA 0B0C CD84 8D85 D2B8 1DC9 059C" /* *\.Ú..Í„…Ò¸.É.œ */ - $"A8C4 8118 4848 9372 9372 566C 21E5 2665" /* ¨Ä.HH“r“rVl!å&e */ - $"D16C 6601 48A8 35CE 7FFF 7F19 B54E 7F04" /* Ñlf.H¨5Î.ÿ..µN.. */ - $"10EC 1AA3 13FF 4588 9722 A7AA B011 863C" /* .ì.£.ÿEˆ—"§ª°.†< */ - $"E4B1 717B 7C2D 21E6 267B 4B48 E790 FF76" /* ä±q{|-!æ&{KHçÿv */ - $"40CC F425 41CB 289F 809D 8170 A529 2EDA" /* @Ìô%AË(Ÿ€p¥).Ú */ - $"A105 B3AF FB44 7951 B87A 0091 5B53 5979" /* ¡.³¯ûDyQ¸z.‘[SYy */ - $"CDC6 5976 6393 34F2 21FF 7FFF 7FFF 7D43" /* ÍÆYvc“4ò!ÿ.ÿ.ÿ}C */ - $"4F4B C77F 73C7 0454 BE9C BE9C 282E 440E" /* OKÇ.sÇ.T¾œ¾œ(.D. */ - $"0608 A380 6121 2103 DBD2 250B 5D57 9159" /* ..£€a!!.ÛÒ%.]W‘Y */ - $"B69A 28CF E66A 154F F84F F4E9 99ED 48C4" /* ¶š(Ïæj.OøOôé™íHÄ */ - $"CA7E BE76 FC67 A7CD DC26 1C00 0184 8463" /* Ê~¾vüg§ÍÜ&...„„c */ - $"69A8 C0A9 127C 5830 CC3A 380A C742 E4DE" /* i¨À©.|X0Ì:8ÂÇBäÞ */ - $"06F5 7999 556D FD9F 268B 895F FF4B 7BB9" /* .õy™UmýŸ&‹‰_ÿK{¹ */ - $"C201 52B7 B483 0906 65EC 1848 4750 6F27" /* Â.R·´ƒÆ.eì.HGPo' */ - $"C86C 1F27 9108 6253 0416 4CD3 30E4 7F77" /* Èl.'‘.bS..LÓ0ä.w */ - $"0705 8420 83B6 BCB6 29DE B71E 8DC5 851A" /* ..„ ƒ¶¼¶)Þ·.Å…. */ - $"ABB0 83D8 F2E2 5113 55D2 AAF6 B3AB 7679" /* «°ƒØòâQ.UÒªö³«vy */ - $"49FE A1F8 6F30 0EC0 7D91 534C C78C DC5D" /* Iþ¡øo0.À}‘SLÇŒÜ] */ - $"5A42 CA06 37D8 E0ED 27FA 3E31 C849 D2BE" /* ZBÊ.7Øàí'ú>1ÈIÒ¾ */ - $"847C 0CCF 676F ACFE 91A3 0F62 B711 1897" /* „|.Ïgo¬þ‘£.b·..— */ - $"9DC3 8E37 3AF8 907E 0B69 1577 2856 AA36" /* ÃŽ7:ø~.i.w(Vª6 */ - $"FAC0 D56C 6686 0443 CA96 FDCD 051B 23A7" /* úÀÕlf†.CÊ–ýÍ..#§ */ - $"7DAC 8229 C5FC F840 103A 6407 49F7 6B32" /* }¬‚)Åüø@.:d.I÷k2 */ - $"254F 2B32 7FC1 F460 D5C0 5EE1 3046 612A" /* %O+2.Áô`ÕÀ^á0Fa* */ - $"1BC1 C143 7B76 B9EF ECCB 5EE9 8F0C 3F71" /* .ÁÁC{v¹ïìË^é.?q */ - $"E805 8B9B 17B7 9ECE C237 AF5C 0062 E61E" /* è.‹›.·žÎÂ7¯\.bæ. */ - $"DF6C C1F7 904E 4379 2A9C 92FC 1B04 00A8" /* ßlÁ÷NCy*œ’ü...¨ */ - $"F9D5 DB1B C4C6 9485 ABC2 1199 CCF2 0A47" /* ùÕÛ.ÄÆ”…«Â.™ÌòÂG */ - $"9693 C097 7AD0 449A FC53 DEC5 6EE8 6BF7" /* –“À—zÐDšüSÞÅnèk÷ */ - $"0D7D 4ED8 3426 DA7E ECF9 57ED 9252 9A6A" /* .}NØ4&Ú~ìùWí’Ršj */ - $"2B94 2614 1B6E A495 8261 4D5E DAEF 03FA" /* +”&..n¤•‚aM^Úï.ú */ - $"8A63 9496 E8AB A1A6 5B5C B03E E73E 2889" /* Šc”–è«¡¦[\°>ç>(‰ */ - $"D257 6C28 080A 68DC 226C 950F F55B E7CC" /* ÒWl(.ÂhÜ"l•.õ[çÌ */ - $"95AD FDA7 43EA 7489 A545 C0FC E9B0 2A25" /* •­ý§Cêt‰¥EÀüé°*% */ - $"719C EE06 9E5A 8FC0 D3B0 0C81 1EB0 C8C6" /* qœî.žZÀÓ°..°ÈÆ */ - $"25BD B383 33BD B80D D9A9 48F3 7539 D7D5" /* %½³ƒ3½¸.Ù©Hóu9×Õ */ - $"8021 5EBA 94A7 83A3 69FE 8179 9106 BC56" /* €!^º”§ƒ£iþy‘.¼V */ - $"14A4 427B 8C09 BACB 2FC9 B8F3 CAFA E51C" /* .¤B{ŒÆºË/ɸóÊúå. */ - $"9C07 9A69 033C 6159 163E 6ED8 259D 7AAB" /* œ.ši.nØ%z« */ - $"D316 475C F6C7 BD0E 7972 4C59 DF3A D5B4" /* Ó.G\öǽ.yrLYß:Õ´ */ - $"44ED 7D01 B0FB 34D4 4C9C BC2D B8A6 5B65" /* Dí}.°û4ÔLœ¼-¸¦[e */ - $"134F 0C96 5CA1 21CC A249 F17D 4660 9835" /* .O.–\¡!Ì¢Iñ}F`˜5 */ - $"957C 7392 53A9 DE42 E650 604B 10E2 FF12" /* •|s’S©ÞBæP`K.âÿ. */ - $"B47A 044A 524A B8D3 60B5 A258 CEAB 55E8" /* ´z.JRJ¸Ó`µ¢XΫUè */ - $"5219 EC3E A9F6 0813 A2B4 930C EDE4 3BBE" /* R.ì>©ö..¢´“.íä;¾ */ - $"C0E3 7F93 1A3F 38EB 2DE3 492D A3BD FD00" /* Àã.“.?8ë-ãI-£½ý. */ - $"811C 530E 2FB8 9D68 2466 D288 EC29 9094" /* .S./¸h$fÒˆì)” */ - $"A3C7 2D32 0A25 BA73 2023 08CA C360 2C72" /* £Ç-2Â%ºs #.ÊÃ`,r */ - $"8BA9 516A 7081 F2FF 1E84 E1C2 F841 77CE" /* ‹©Qjpòÿ.„áÂøAwÎ */ - $"ABDF 6476 30A4 3018 F7F4 F3EE 1A5E 5DF0" /* «ßdv0¤0.÷ôóî.^]ð */ - $"CAAA AA77 C90D 52C4 6AA9 5755 33B9 1814" /* ʪªwÉ.RÄj©WU3¹.. */ - $"3528 E205 C379 648A E627 A23E D5DB 1CAE" /* 5(â.ÃydŠæ'¢>ÕÛ.® */ - $"4868 B7D4 F381 2534 1F48 2BCC 5211 3B0F" /* Hh·Ôó%4.H+ÌR.;. */ - $"9692 B002 4CFB 1F83 3628 D1EB 5416 0648" /* –’°.Lû.ƒ6(ÑëT..H */ - $"F0F0 B0F8 C7C7 6E92 8C54 6859 791B 7890" /* ðð°øÇÇn’ŒThYy.x */ - $"EBA3 BC74 5F3F C4AD 7C9D 6954 2D0C 15BF" /* 룼t_?Ä­|iT-..¿ */ - $"F699 82A6 4170 D2F1 02A5 7EF3 6061 C9CF" /* ö™‚¦ApÒñ.¥~ó`aÉÏ */ - $"C370 E129 F805 8CC8 C670 CBDC 2D44 D349" /* Ãpá)ø.ŒÈÆpËÜ-DÓI */ - $"F3E5 C5F9 357E 3DF2 CDF3 DC8A 1F13 5B2D" /* óåÅù5~=òÍóÜŠ..[- */ - $"C544 448D 1038 8293 4EEA 75A4 0738 7D9F" /* ÅDD.8‚“Nêu¤.8}Ÿ */ - $"C002 3D68 26D8 7B06 FB10 CCDF C4F3 5364" /* À.=h&Ø{.û.ÌßÄóSd */ - $"2342 154B F8FB 01ED 8893 9160 A3A0 B81D" /* #B.Køû.툓‘`£ ¸. */ - $"47A0 6C82 1CBA FAED 931D E025 BDFF 1535" /* G l‚.ºúí“.à%½ÿ.5 */ - $"CADF 68C5 41FD 3896 1AC9 F979 A885 F5AE" /* ÊßhÅAý8–.Éùy¨…õ® */ - $"EFBE C674 ED92 5FE9 E9AF FF52 D573 A6DD" /* ï¾Ætí’_éé¯ÿRÕs¦Ý */ - $"631B 27E4 62CB B76E 7020 EC65 75E2 DB6F" /* c.'äbË·np ìeuâÛo */ - $"0E10 980A 0EA3 2287 4CF8 D402 52B8 1491" /* ..˜Â.£"‡LøÔ.R¸.‘ */ - $"21C9 BC2B 48BC CBD4 464A C539 6CD5 28F1" /* !ɼ+H¼ËÔFJÅ9lÕ(ñ */ - $"CAE4 CA43 9CB8 B181 BF06 522B 4D19 8295" /* ÊäÊCœ¸±¿.R+M.‚• */ - $"05C8 D7CD 8CFA D3E7 7BC9 630C DCDD 7C7E" /* .È×ÍŒúÓç{Éc.ÜÝ|~ */ - $"E4C6 D7DC 5E38 67CC 5934 9E8D 9552 B837" /* äÆ×Ü^8gÌY4ž•R¸7 */ - $"53AE 6D39 FAB1 2EB6 886C 1855 26ED AD08" /* S®m9ú±.¶ˆl.U&í­. */ - $"1EBE 9570 EA2F DFFF 06F4 ABF3 4534 2831" /* .¾•pê/ßÿ.ô«óE4(1 */ - $"1AE2 0A99 2956 2A90 C2A4 58AC E49E F047" /* .â™)V*¤X¬äžðG */ - $"A9BA C394 E8F4 6427 7966 A79C 4269 9ADD" /* ©ºÃ”èôd'yf§œBišÝ */ - $"AD1D 1A7E 375C D3FB 8C25 0B6B 0460 5EB9" /* ­..~7\ÓûŒ%.k.`^¹ */ - $"416C AE82 DFC3 09DA 1F69 8796 6897 8CD0" /* Al®‚ßÃÆÚ.i‡–h—ŒÐ */ - $"3E1B FF7D 9AE9 7F6D 4E84 967C 674F CA41" /* >.ÿ}šé.mN„–|gOÊA */ - $"44C1 0575 93A9 2599 66D0 AB7B 6260 D32C" /* DÁ.u“©%™fЫ{b`Ó, */ - $"94AF 7FC8 82FD F692 92FE B6ED A660 750F" /* ”¯.È‚ýö’’þ¶í¦`u. */ - $"80A2 A8AA E6F6 7B9F E894 ED71 D223 6F4B" /* €¢¨ªæö{Ÿè”íqÒ#oK */ - $"A203 F64C 7560 DBB1 6F9E EE9F 2945 C994" /* ¢.öLu`Û±ožîŸ)EÉ” */ - $"BA00 D3D1 6414 A300 4296 670B 2350 CDD1" /* º.ÓÑd.£.B–g.#PÍÑ */ - $"DF61 29E8 EC17 87B6 BC62 B6BD 5F31 13B2" /* ßa)èì.‡¶¼b¶½_1.² */ - $"48A2 F723 53C7 6955 969B ED83 6A9B 1B06" /* H¢÷#SÇiU–›íƒj›.. */ - $"C7D0 2584 430B 8C52 D00A 736B D6FB AEDB" /* ÇÐ%„C.ŒRÐÂskÖû®Û */ - $"2BA1 5095 759B 0AFF 5138 58EF 3DC2 B14D" /* +¡P•u›ÂÿQ8Xï=±M */ - $"3B7D 62D0 DE12 CFEF 17A3 32C4 C79A C2DA" /* ;}bÐÞ.Ïï.£2ÄÇšÂÚ */ - $"6BA1 6478 B1D3 2278 3787 6C30 08FD 6095" /* k¡dx±Ó"x7‡l0.ý`• */ - $"FF65 1DF4 7606 34C3 B4EE E609 A3BF 7085" /* ÿe.ôv.4Ã´îæÆ£¿p… */ - $"8B3B 2C80 D860 6043 10A4 24B1 2D80 880D" /* ‹;,€Ø``C.¤$±-€ˆ. */ - $"671A 9A76 E1D4 2304 B4E0 9E47 129D 6316" /* g.šváÔ#.´àžG.c. */ - $"33DF C88C 3BB6 5232 475C D19D FA9B 3303" /* 3ßÈŒ;¶R2G\Ñú›3. */ - $"2956 D8B1 08A5 2735 CD4D F130 C700 DA0D" /* )Vر.¥'5ÍMñ0Ç.Ú. */ - $"7BAE 21FA FB1B 35A5 957E 0211 955B 25D0" /* {®!úû.5¥•~..•[%Ð */ - $"A3DD B72F 5BCD 8792 418E BCB6 C727 DD0F" /* £Ý·/[͇’A޼¶Ç'Ý. */ - $"2D42 F031 2A73 C1F9 7964 B937 1E77 A757" /* -Bð1*sÁùyd¹7.w§W */ - $"D158 CB02 80D3 C310 E1C5 709C 5C69 7F04" /* ÑXË.€ÓÃ.áÅpœ\i.. */ - $"4476 F017 3FF2 B891 0160 D681 AEBC F8C9" /* Dvð.?ò¸‘.`Ö®¼øÉ */ - $"8F46 7922 4414 5CEE 0CA8 417B 33BB 5926" /* Fy"D.\î.¨A{3»Y& */ - $"B7A6 7094 6363 C5F2 9AD7 1751 2456 3B83" /* ·¦p”ccÅòš×.Q$V;ƒ */ - $"9BB0 0ECD 1420 6141 A097 DBF4 802A 2377" /* ›°.Í. aA —Ûô€*#w */ - $"CDAC EFE9 4A16 4B3C 5058 A5DC 1C40 169E" /* ͬïéJ.K.K */ - $"89CE 81FD AC96 C691 FDE5 F993 B9CB 6302" /* ‰Îý¬–Æ‘ýåù“¹Ëc. */ - $"B8EE 86B4 A2F7 19EA DAFD D511 B59F BBD2" /* ¸î†´¢÷.êÚýÕ.µŸ»Ò */ - $"5D4E F6A3 BC58 51D5 273F 2E2E 2B6A 2755" /* ]Nö£¼XQÕ'?..+j'U */ - $"38A3 CA29 BFAB D31D CD53 B29C 7418 40DB" /* 8£Ê)¿«Ó.ÍS²œt.@Û */ - $"FD56 1BF6 9350 5411 CF5C 8D26 B1FA 754F" /* ýV.ö“PT.Ï\&±úuO */ - $"E584 8277 6221 6866 257C 9FC9 65A5 6D93" /* å„‚wb!hf%|ŸÉe¥m“ */ - $"C524 B971 3F1D 34A0 BBF4 6B83 9722 CFAD" /* Å$¹q?.4 »ôkƒ—"Ï­ */ - $"8296 103F 53BB 1B22 8A84 2FAC 94DE 4994" /* ‚–.?S»."Š„/¬”ÞI” */ - $"2D31 56A5 DBCD B661 81D7 B360 4958 8FF5" /* -1V¥ÛͶa׳`IXõ */ - $"EB02 25A9 6386 8241 D936 A3CB AA88 9936" /* ë.%©c†‚AÙ6£Ëªˆ™6 */ - $"1698 4F59 765B 34EA 3741 D2D3 2DAC 854D" /* .˜OYv[4ê7AÒÓ-¬…M */ - $"366B C9A0 15F8 D2E6 7CCF 99EF A794 460C" /* 6kÉ .øÒæ|ϙ倫F. */ - $"934E C88B 2BF5 91F7 7BD1 3DC9 6ED3 91FE" /* “NÈ‹+õ‘÷{Ñ=ÉnÓ‘þ */ - $"E63B EDCC 3D4A CC1B AE5D 88D0 B241 20D1" /* æ;íÌ=JÌ.®]ˆÐ²A Ñ */ - $"AB6C 9FE2 E494 395E 8E3C 0EB0 1796 58CC" /* «lŸâä”9^Ž<.°.–XÌ */ - $"9791 D931 DB33 473E 003E 10CD B736 7295" /* —‘Ù1Û3G>.>.Í·6r• */ - $"DD81 B481 9A0A ED27 3C1E 6298 FD0D BDE0" /* Ý´šÂí'<.b˜ý.½à */ - $"11D6 8A21 79C1 DBB7 FEDC 6E48 8080 5ADB" /* .ÖŠ!yÁÛ·þÜnH€€ZÛ */ - $"E61D 9E0E E6A3 6D38 A028 4016 464D F534" /* æ.ž.æ£m8 (@.FMõ4 */ - $"D764 3AD7 55DF 3CAB 7B3D 12F5 9A8D DDCF" /* ×d:×Uß<«{=.õšÝÏ */ - $"6CCD 0387 C982 0FE9 D431 0FE3 E064 1700" /* lÍ.‡É‚.éÔ1.ãàd.. */ - $"1AAD F49E D6DE A939 8010 C91B 605B 4E0A" /* .­ôžÖÞ©9€.É.`[N */ - $"FCBE ADE9 C17A EC1F 3990 9EB2 E6BF 92AA" /* ü¾­éÁzì.9ž²æ¿’ª */ - $"951C D27F A984 10A9 22DC 996E FF6E 12AE" /* •.Ò.©„.©"Ü™nÿn.® */ - $"DC03 5AB3 2CA0 8291 4174 C69E AE28 DBA8" /* Ü.Z³, ‚‘AtÆž®(Û¨ */ - $"38A8 FF12 67D3 F8A3 00D6 2A2E A564 CEFA" /* 8¨ÿ.gÓø£.Ö*.¥dÎú */ - $"0F00 4B44 62A7 CA9F F072 2821 DD3C 6A34" /* ..KDb§ÊŸðr(!ÝC€e.²O1Ú Ÿ */ - $"F51A 9108 7912 32B0 52A6 A901 CADB A758" /* õ.‘.y.2°R¦©.ÊÛ§X */ - $"C00A D516 E462 35B4 C071 131A 0F01 9A95" /* ÀÂÕ.äb5´Àq....š• */ - $"9739 F131 0E5F 7FBA D8AD 925F 992C 0187" /* —9ñ1._.ºØ­’_™,.‡ */ - $"D97C 832B 847E 1148 0402 0449 FB25 D0F1" /* Ù|ƒ+„~.H...Iû%Ðñ */ - $"C1F8 2B8E CE97 D5A4 BEFE 7F0D E420 E43E" /* Áø+ŽÎ—Õ¤¾þ..ä ä> */ - $"801A 448D 9D61 D23C 5956 3DEB A1A6 0858" /* €.DaÒ */ - $"A177 C3EA 4FE4 AFFE 1BFF 61D3 2F87 4BFC" /* ¡wÃêOä¯þ.ÿaÓ/‡Kü */ - $"946E 03F8 6CFF 06A3 FC28 FE13 BF0F 6B7E" /* ”n.ølÿ.£ü(þ.¿.k~ */ - $"1EB8 FC3B 47E1 ECEE EEDF F87D 51FF 07D5" /* .¸ü;Gáìîîßø}Qÿ.Õ */ - $"0BBB 87E1 D3FF 0779 FC3B 6FE1 D378 0DF0" /* .»‡áÓÿ.yü;oáÓx.ð */ - $"BD7C 29EB A2DD 17F2 6ADB E1DB 7F0D 97E1" /* ½|)ë¢Ý.òjÛáÛ..—á */ - $"E84D 7750 FC3E 906F C3E8 35DD 42ED AFE1" /* èMwPü>oÃè5ÝBí¯á */ - $"D33F 0E8D F86E 00F7 91DD 3D8B A94D D83C" /* Ó?.øn.÷‘Ý=‹©MØ< */ - $"B51B 129C 103F 899D B929 4724 C188 2C29" /* µ..œ.?‰¹)G$Áˆ,) */ - $"CE89 11F8 9065 1C37 E234 DFEF 60D7 3221" /* Ή.øe.7â4ßï`×2! */ - $"5343 F889 DCDB AFB3 6F20 F76A 31D9 986E" /* SCø‰ÜÛ¯³o ÷j1Ù˜n */ - $"A745 547E 6F18 076D A675 BA1A 1AAF 6558" /* §ET~o..m¦uº..¯eX */ - $"338A FF71 4707 0776 1B62 BCCC 89E5 4726" /* 3ŠÿqG..v.b¼Ì‰åG& */ - $"A7CB 8885 E07C DADC D741 3B1D D81F AB03" /* §Ëˆ…à|ÚÜ×A;.Ø.«. */ - $"2F84 F52D DFD5 7384 4649 7BA2 5AB1 14C8" /* /„õ-ßÕs„FI{¢Z±.È */ - $"3D8D B951 8183 C33A B08E 82CC EF1A F046" /* =¹QƒÃ:°Ž‚Ìï.ðF */ - $"5B62 C9E0 A926 F330 0A61 A30C 6194 7E1E" /* [bÉà©&ó0Âa£.a”~. */ - $"1EE9 3D0D 1ABE 5536 A026 8B32 830F C02F" /* .é=..¾U6 &‹2ƒ.À/ */ - $"3041 04B7 2C65 024D AC81 D2CC 03CA A08A" /* 0A.·,e.M¬ÒÌ.Ê Š */ - $"B105 F3F1 C365 6BCE 9876 A867 7DBA 63AF" /* ±.óñÃekΘv¨g}ºc¯ */ - $"0973 495F DCC1 3552 54BA 5BDB 618D C6C0" /* ÆsI_ÜÁ5RTº[ÛaÆÀ */ - $"91B8 4489 141B A7D3 F188 8A97 DAB0 8942" /* ‘¸D‰..§ÓñˆŠ—Ú°‰B */ - $"EA67 F235 E18A 871B 4B0C DAC6 9050 BA9C" /* êgò5ኇ.K.ÚÆPºœ */ - $"C432 95CE 13CA 93ED 4FD5 9495 377D C920" /* Ä2•Î.Ê“íOÕ”•7}É */ - $"C8A2 F997 5348 8890 91D5 0A23 50BF 3C37" /* È¢ù—SHˆ‘ÕÂ#P¿<7 */ - $"8372 7C96 32AA 1CD2 46BE 8220 C983 2A71" /* ƒr|–2ª.ÒF¾‚ Ƀ*q */ - $"7961 BF33 9590 C086 CCE9 578B 322E FB50" /* ya¿3•À†ÌéW‹2.ûP */ - $"CB68 6459 C127 EB9B E974 EF02 59F4 FF4D" /* ËhdYÁ'ë›étï.YôÿM */ - $"4525 1874 6A9F 99EB DFCC C1B1 72EA 9FA0" /* E%.tjŸ™ëßÌÁ±r꟠ */ - $"DE00 BBB9 D95F 36B9 406E 3CE0 3BCF 32B6" /* Þ.»¹Ù_6¹@n<à;Ï2¶ */ - $"8DC0 55D6 C6DA 3622 8A6E 63F6 28AE 08AC" /* ÀUÖÆÚ6"Šncö(®.¬ */ - $"03AC 288D 069A 750E CBBD 97D9 E42D BA93" /* .¬(.šu.˽—Ùä-º“ */ - $"E82A 4EB3 C008 CC7C B6A7 6F70 F1BC FDAA" /* è*N³À.Ì|¶§opñ¼ýª */ - $"1DF4 D2E4 3ECB 9702 444E 278F 6B50 F00E" /* .ôÒä>Ë—.DN'kPð. */ - $"C228 C132 E5E0 B4DE 93BF DBBD 2C85 ABF9" /* Â(Á2åà´Þ“¿Û½,…«ù */ - $"7FAD EC28 1D40 D390 5A2F 9B14 D348 8C76" /* .­ì(.@ÓZ/›.ÓHŒv */ - $"C04B 1173 BF19 8F50 7E3D 8311 BB79 FDA8" /* ÀK.s¿.P~=ƒ.»yý¨ */ - $"1FD4 24A9 5F59 8B76 709E 5C84 1902 8690" /* .Ô$©_Y‹vpž\„..† */ - $"AD49 334F 5AE8 E376 288C BDE7 EE13 FBDE" /* ­I3OZèãv(Œ½çî.ûÞ */ - $"7606 0135 6DB2 DCD9 F5B3 E7E2 B2B8 8BE1" /* v..5m²ÜÙõ³çⲸ‹á */ - $"1985 85D2 0EC1 5CCD BC74 D88B 7206 5075" /* .……Ò.Á\ͼtØ‹r.Pu */ - $"FB92 BF92 C5CB B6E3 024D EB71 D909 AF79" /* û’¿’Å˶ã.MëqÙÆ¯y */ - $"DD82 BBF2 37F1 1193 74D0 373D 4043 C292" /* Ý‚»ò7ñ.“tÐ7=@CÂ’ */ - $"0B1D 4E8F 04F4 A035 451A 7DCB 02DB D77E" /* ..N.ô 5E.}Ë.Û×~ */ - $"DD1C 3667 1BA7 2584 C128 3835 4454 5C15" /* Ý.6g.§%„Á(85DT\. */ - $"5846 C7D1 4689 3D2A 1172 9BA8 9830 F037" /* XFÇÑF‰=*.r›¨˜0ð7 */ - $"0053 8FD6 4023 68C6 7122 CAC6 0325 5AF3" /* .SÖ@#hÆq"ÊÆ.%Zó */ - $"E104 A423 C5AE F551 6DF6 7B11 D5EB FD34" /* á.¤#Å®õQmö{.Õëý4 */ - $"DF67 C50C 737D 74D5 D5EC 7027 A2D8 C79A" /* ßgÅ.s}tÕÕìp'¢ØÇš */ - $"200D A972 A30A 509A C3DE 483F 8B53 D69C" /* .©r£ÂPšÃÞH?‹SÖœ */ - $"001F 47E9 BD2C 84EC DB83 B493 0326 DE6E" /* ..Gé½,„ìÛƒ´“.&Þn */ - $"336A 7C76 3225 8351 7B2D 37B5 D645 9866" /* 3j|v2%ƒQ{-7µÖE˜f */ - $"019E 6472 40C4 5853 3376 9D90 D3EA A727" /* .ždr@ÄXS3vÓê§' */ - $"07A1 A4B8 A32F 475A 22A2 059C AB5B F13E" /* .¡¤¸£/GZ"¢.œ«[ñ> */ - $"E2DF 5B3E E6B5 B27F 28AF A15F 400C 7D9F" /* âß[>æµ².(¯¡_@.}Ÿ */ - $"43ED 33D4 9B4D CB64 E550 5FED FC2F E485" /* Cí3Ô›MËdåP_íü/ä… */ - $"271E 2DB1 6AE5 6793 EFE8 FCC5 A784 4C95" /* '.-±jåg“ïèüŧ„L• */ - $"E488 B5AC A528 BACB 10FF 4ABD D554 E56B" /* 䈵¬¥(ºË.ÿJ½ÕTåk */ - $"F72E 8ED7 5E48 60A4 82D0 381F A2D4 625C" /* ÷.Ž×^H`¤‚Ð8.¢Ôb\ */ - $"9F80 2A63 5FD3 DD0C EDA8 3DE3 281E A65C" /* Ÿ€*c_ÓÝ.í¨=ã(.¦\ */ - $"88EA 1A96 626D DC03 79BE C4ED EA60 4FC5" /* ˆê.–bmÜ.y¾Äíê`OÅ */ - $"BB10 D9D5 99AF 0534 65C2 05AE 8D23 82B0" /* ».ÙÕ™¯.4eÂ.®#‚° */ - $"6FB7 881A 7BC5 0316 7A28 4B27 2763 A6C3" /* o·ˆ.{Å..z(K''c¦Ã */ - $"8FC7 073A 1391 81BB 707F 625D 355F B1DF" /* Ç.:.‘»p.b]5_±ß */ - $"A749 C3EE A157 EC1F 0F6C 70AB 1A36 5711" /* §IÃî¡Wì..lp«.6W. */ - $"C49B 1CA8 54A0 0FB9 6A2E 0F86 2E57 BC2F" /* Ä›.¨T .¹j..†.W¼/ */ - $"8CDD B76A F6DB 83F9 EEFF 4BF1 DE60 660E" /* ŒÝ·jöÛƒùîÿKñÞ`f. */ - $"BCBA 7D68 D5DE 8663 DF06 3F65 A981 38D7" /* ¼º}hÕÞ†cß.?e©8× */ - $"CC20 EBAE 6143 C79E D2F3 DCF4 FA0F 433E" /* Ì ë®aCÇžÒóÜôú.C> */ - $"6DFE 4C5F 032A F6DD DD11 F85F 5003 22CD" /* mþL_.*öÝÝ.ø_P."Í */ - $"C07E F1CC 40B9 8D61 825D 77C7 91A6 BD49" /* À~ñÌ@¹a‚]wÇ‘¦½I */ - $"2590 4BCD EB13 37A2 D5FA 2931 F311 9028" /* %KÍë.7¢Õú)1ó.( */ - $"6C02 96FC ACF5 1EA4 8E51 4BC9 FDE8 DFEF" /* l.–ü¬õ.¤ŽQKÉýèßï */ - $"C5A0 8082 7E0D C127 3A80 A65B 7989 CCEE" /* Å €‚~.Á':€¦[y‰Ìî */ - $"6F6A 8DDF FB5B 46A5 3757 7FC3 3EFD BC0A" /* ojßû[F¥7W.Ã>ý¼Â */ - $"8567 1CB0 3BE7 A153 D7CE 8F63 D2DC 8840" /* …g.°;ç¡S×ÎcÒ܈@ */ - $"D993 E028 0E86 AA99 3ADE CC55 A789 CFC8" /* Ù“à(.†ª™:ÞÌU§‰ÏÈ */ - $"D92B 9613 3850 B7B3 467A FA09 7D45 E174" /* Ù+–.8P·³FzúÆ}Eát */ - $"D351 3254 64A3 7FC5 0D8D 1EDB FEC9 3F05" /* ÓQ2Td£.Å..ÛþÉ?. */ - $"C3C2 264B ACB8 F3C3 1BFF 04A5 12CF C191" /* ÃÂ&K¬¸óÃ.ÿ.¥.ÏÁ‘ */ - $"8CA0 5985 E34C E583 A230 CD43 8602 BAAF" /* Œ Y…ãL僢0ÍC†.º¯ */ - $"1475 FCA7 B274 1314 051F AF06 089D 13B1" /* .uü§²t....¯...± */ - $"5C06 815E FAA5 6864 CECE D56A 127C 058B" /* \.^ú¥hdÎÎÕj.|.‹ */ - $"1859 E9E8 7A98 4299 3CFF 70CE C2DD 8676" /* .Yéèz˜B™<ÿpÎÂ݆v */ - $"1798 5F8E 9960 922E 9226 3F9B 5657 890F" /* .˜_Ž™`’.’&?›VW‰. */ - $"75BC FECF 6919 6701 D086 0EA5 26BA 8B78" /* u¼þÏi.g.І.¥&º‹x */ - $"7381 41FC 19AD 7201 BFD9 B3D3 2F00 1A1C" /* sAü.­r.¿Ù³Ó/... */ - $"E689 F3BC 5FC7 0418 66A2 5AEE 0374 DE30" /* æ‰ó¼_Ç..f¢Zî.tÞ0 */ - $"DC4B 70F1 ACC6 2BC6 06E9 461F E71B CD5E" /* ÜKpñ¬Æ+Æ.éF.ç.Í^ */ - $"2766 D533 884B A37F 7820 5CCA 3D60 1C3A" /* 'fÕ3ˆK£.x \Ê=`.: */ - $"8865 509F C1F0 86B6 9A91 0A52 426E CF1D" /* ˆePŸÁð†¶š‘ÂRBnÏ. */ - $"4B52 7AFE 9519 ECDB 9DD3 BFA1 80F7 50BD" /* KRzþ•.ìÛÓ¿¡€÷P½ */ - $"D2DD 6FAB F00D 3600 9104 37AC 81AA F9C3" /* ÒÝo«ð.6.‘.7¬ªùà */ - $"3933 A702 AC9C 42F1 4579 C5F2 CD99 165F" /* 93§.¬œBñEyÅòÍ™._ */ - $"2D84 FE8B D02C 055F F99C 1729 45C7 6B56" /* -„þ‹Ð,._ùœ.)EÇkV */ - $"EE73 818A 9940 BB46 1408 639B 9779 C805" /* îsŠ™@»F..c›—yÈ. */ - $"1B0B CC86 D42E E9BB 046D 0E93 7273 E00F" /* ..̆Ô.é».m.“rsà. */ - $"B7D5 D377 E0ED 2494 4623 5BDF C83C 54A5" /* ·ÕÓwàí$”F#[ßÈQ.G€Næ‰.ø=ÿ}Ñà */ - $"818F 28A2 2AC0 AD00 7F03 5781 2882 A44A" /* (¢*À­...W(‚¤J */ - $"6728 D9F6 E77F A883 C794 71AC 55E9 8112" /* g(Ùöç.¨ƒÇ”q¬Ué. */ - $"BF6F ECDA 9BD1 96B8 79AA A397 A6F2 C93F" /* ¿oìڛі¸yª£—¦òÉ? */ - $"3792 B8C4 8667 AAF4 659D 59F6 E77F A870" /* 7’¸Ä†gªôeYöç.¨p */ - $"24F1 5461 DB69 0F4C F8B3 F02A F6E7 7FA6" /* $ñTaÛi.Lø³ð*öç.¦ */ - $"26C9 5EDE 9BB6 A1C6 9467 854A 5327 BA38" /* &É^Þ›¶¡Æ”g…JS'º8 */ - $"F535 A01A B90A 9580 95A0 FE5C A623 DE0D" /* õ5 .¹Â•€• þ\¦#Þ. */ - $"6C3E BF23 66F2 9312 9490 EB88 1D63 7AF4" /* l>¿#fò“.”ëˆ.czô */ - $"9F5B 7F45 9078 3A5F CC36 7702 EAD5 FA4D" /* Ÿ[.Ex:_Ì6w.êÕúM */ - $"5F9D 258B 14A8 A235 6490 6B7D 2B05 42C3" /* _%‹.¨¢5dk}+.Bà */ - $"2A5A 791E 92C3 B1E8 B323 FF74 81FC B063" /* *Zy.’ñè³#ÿtü°c */ - $"4A31 CBBC 91E2 A64A F935 FE79 4C07 1376" /* J1˼‘â¦Jù5þyL..v */ - $"002A 4795 5221 70B2 005C 41F9 D631 126F" /* .*G•R!p².\AùÖ1.o */ - $"FF7F DF03 06BD 7214 71AB 4EF3 8EEA 0261" /* ÿ.ß..½r.q«NóŽê.a */ - $"D054 C087 EA15 CBD2 4645 2F9F 3600 4144" /* ÐTÀ‡ê.ËÒFE/Ÿ6.AD */ - $"5671 C61E D3CB 8B84 A60D B58E FB69 C71F" /* VqÆ.ÓË‹„¦.µŽûiÇ. */ - $"B09A EDD9 AAC0 6FBA D7FE 8C4D 8262 6C73" /* °šíÙªÀoº×þŒM‚bls */ - $"9F69 0E81 7581 1D52 FB27 C979 1597 69EA" /* Ÿi.u.Rû'Éy.—iê */ - $"F1DF E906 0B77 2E21 D31A 5CCD 9474 95A2" /* ñßé..w.!Ó.\Í”t•¢ */ - $"CB48 AB27 5F53 B82F 1638 16A4 87CD ED1F" /* ËH«'_S¸/.8.¤‡Íí. */ - $"20BC 2894 5EE1 C84C 1AC1 1158 0293 024E" /* ¼(”^áÈL.Á.X.“.N */ - $"1023 0E4F 9BD8 FA73 6E62 FF7F FD08 5797" /* .#.O›Øúsnbÿ.ý.W— */ - $"0788 A951 6DDA 2448 21D2 7FCA 20B4 E1BF" /* .ˆ©QmÚ$H!Ò.Ê ´á¿ */ - $"3262 89C7 5386 ACB1 8B89 6AC3 F907 1355" /* 2b‰ÇS†¬±‹‰jÃù..U */ - $"66D9 1E5A 5B54 19E9 2737 FF7C B8DF 1F5E" /* fÙ.Z[T.é'7ÿ|¸ß.^ */ - $"3592 B16D 6089 DE73 8F19 479D 626B 977D" /* 5’±m`‰Þs.Gbk—} */ - $"185E F7A3 AF62 AD92 E5AC 2F74 B991 F96F" /* .^÷£¯b­’å¬/t¹‘ùo */ - $"211F 5AE0 4C27 344F A9E1 C731 DB20 A0FF" /* !.ZàL'4O©áÇ1Û  ÿ */ - $"7FFF 7F2E 356F CC55 C6B8 C2C9 2AEF 2D31" /* .ÿ..5oÌUƸÂÉ*ï-1 */ - $"EFEB D878 C16F B1B1 3D47 240C 489C 7153" /* ïëØxÁo±±=G$.HœqS */ - $"E5F8 A5C8 6E2C 7650 AED0 C4B7 43EA 67B6" /* åø¥Èn,vP®ÐÄ·Cêg¶ */ - $"94E4 7274 CFEB 4CF3 FD3E 8065 B9CC 35A5" /* ”ärtÏëLóý>€e¹Ì5¥ */ - $"21B1 3804 AD98 4F8A 6FFC 50DA 014C 442B" /* !±8.­˜OŠoüPÚ.LD+ */ - $"AA41 1455 BD94 B366 A37D CA82 7FFC DE57" /* ªA.U½”³f£}Ê‚.üÞW */ - $"2EA9 98C2 5510 E51E 24CC 0428 4C83 1BBE" /* .©˜ÂU.å.$Ì.(Lƒ.¾ */ - $"0A46 A6DD 6963 D4CB 24E8 748B ED10 7B6D" /* ÂF¦ÝicÔË$èt‹í.{m */ - $"E61C 86C3 C80E 3030 FCE9 2263 C956 95A1" /* æ.†ÃÈ.00üé"cÉV•¡ */ - $"AED0 C4B1 D07C F701 9DA0 ED2C C401 BC1A" /* ®ÐıÐ|÷. í,Ä.¼. */ - $"9421 2D43 EF12 7494 8D46 CB82 3FE2 6439" /* ”!-Cï.t”FË‚?âd9 */ - $"6BDE C8CE 23B7 9D2E B6F9 DF4B C1A9 A145" /* kÞÈÎ#·.¶ùßKÁ©¡E */ - $"1512 85E6 30E6 98D1 AC22 EEBC 459C D841" /* ..…æ0æ˜Ñ¬"î¼EœØA */ - $"0A0F 1F31 2F75 7937 220F 7271 FE79 44A6" /* Â..1/uy7".rqþyD¦ */ - $"777E 1645 E0BA D980 0FFF 7D9F EC83 A930" /* w~.EàºÙ€.ÿ}Ÿìƒ©0 */ - $"D12B 216D 4D3F 4AD0 5EE9 DBC7 53D7 0A21" /* Ñ+!mM?JÐ^éÛÇS×Â! */ - $"2372 C608 6701 8AFA 8E33 4125 2B7E 38DA" /* #rÆ.g.ŠúŽ3A%+~8Ú */ - $"5990 99EE B1D0 B07C 9F9D 97DD D658 2C2A" /* Y™î±Ð°|Ÿ—ÝÖX,* */ - $"C7D6 4556 2AA7 297F ACBE 4802 B472 E76F" /* ÇÖEV*§).¬¾H.´rço */ - $"644F 2F11 17FF 7F9D CE1C 2989 7199 03B1" /* dO/..ÿ.Î.)‰q™.± */ - $"E719 2B3B 1131 C4CC 808B BC7A 26A4 479F" /* ç.+;.1ÄÌ€‹¼z&¤GŸ */ - $"4824 6486 E338 DB65 A502 454C C415 B8D0" /* H$d†ã8Ûe¥.ELÄ.¸Ð */ - $"7C77 7323 E381 5958 F415 95B9 142E 85F8" /* |ws#ãYXô.•¹..…ø */ - $"1742 E22F FF17 567B A195 DFF1 7EE0 8E40" /* .Bâ/ÿ.V{¡•ßñ~àŽ@ */ - $"431A B629 DDCE AED1 A925 9FCD 56B5 7945" /* C.¶)Ýήѩ%ŸÍVµyE */ - $"B8B9 77DF 732C CD1E 8137 2645 1135 9593" /* ¸¹wßs,Í.7&E.5•“ */ - $"E31C 333B 30E2 518D E202 A1E0 FEA6 C40E" /* ã.3;0âQâ.¡àþ¦Ä. */ - $"BB50 0174 C21D 0BFB 34C1 1A8D 8E5D FF77" /* »P.tÂ..û4Á.Ž]ÿw */ - $"909A 8111 3123 8200 AFC2 0525 13A1 C383" /* š.1#‚.¯Â.%.¡Ãƒ */ - $"5472 BA45 8D58 8818 E5CD 6FEA D858 47C5" /* TrºEXˆ.åÍoêØXGÅ */ - $"F5A0 7773 3C86 1CE8 9A67 FAA7 5726 643B" /* õ ws<†.èšgú§W&d; */ - $"1BF8 C2C1 E7AD D3CE E89B 97C4 0210 1FAE" /* .øÂÁç­ÓÎè›—Ä...® */ - $"9319 1F1F 7F89 0B76 5918 7EF8 9947 CF44" /* “....‰.vY.~ø™GÏD */ - $"6B5C 4B5D 5067 58A7 F35E CF39 7D01 C555" /* k\K]PgX§ó^Ï9}.ÅU */ - $"FCD3 E0F6 C1A4 9C8A 0B34 2D33 A20D F664" /* üÓàöÁ¤œŠ.4-3¢.öd */ - $"C174 CCE8 CAA1 C45F 2974 101B 86E7 68FD" /* ÁtÌèÊ¡Ä_)t..†çhý */ - $"D6FE 8FE9 AC95 5D3D DE38 1829 E3B9 37FE" /* Öþ鬕]=Þ8.)ã¹7þ */ - $"5008 F383 21C4 4D57 AE92 9F94 A9BB 3A76" /* P.óƒ!ÄMW®’Ÿ”©»:v */ - $"705F 8D2D 889C EB93 FD2B 05C5 89F2 500E" /* p_-ˆœë“ý+.ʼnòP. */ - $"4220 A486 F348 D466 4D62 E368 540A 1D25" /* B ¤†óHÔfMbãhTÂ.% */ - $"AF7C A9EF 43CC E423 16FC 6EE5 C407 DDAE" /* ¯|©ïCÌä#.ünåÄ.Ý® */ - $"EB28 23D2 3FDE 40EF 2ED1 D53A B87B 9C40" /* ë(#Ò?Þ@ï.ÑÕ:¸{œ@ */ - $"80A2 77EF CC8F D34E C33F 7BB4 4748 E4A6" /* €¢wïÌÓNÃ?{´GHä¦ */ - $"B177 05FF 085F CBF9 F1A0 8CA7 4200 32AC" /* ±w.ÿ._Ëùñ Œ§B.2¬ */ - $"7B87 A517 EA04 C96C F9A3 C6ED 5FFF 7FED" /* {‡¥.ê.Élù£Æí_ÿ.í */ - $"D5EB F835 3E15 6882 AED1 72BF B42C 87DE" /* Õëø5>.h‚®Ñr¿´,‡Þ */ - $"8111 0F7A 5DA6 CFEA 79A7 9174 89E8 E637" /* ..z]¦Ïêy§‘t‰èæ7 */ - $"7E56 B53E 9987 2013 8F1A 06A5 07A2 1856" /* ~Vµ>™‡ ...¥.¢.V */ - $"FE30 E259 128A 968B 881F E88D 8566 98D7" /* þ0âY.Š–‹ˆ.è…f˜× */ - $"C815 C397 64E8 9FAC 059A 5922 C863 F220" /* È.×d蟬.šY"Ècò */ - $"EC2A 4AF8 5DB2 A77D FC6A 3AC1 357E D5CC" /* ì*Jø]²§}üj:Á5~ÕÌ */ - $"142B 85B0 FEE0 2579 D845 CDFD F507 4C58" /* .+…°þà%yØEÍýõ.LX */ - $"D86A F299 0BBC A0A8 39A4 03D9 2144 6B3E" /* Øjò™.¼ ¨9¤.Ù!Dk> */ - $"6D67 242B 0FEB B6F4 79CB 58ED 2338 DB9F" /* mg$+.ë¶ôyËXí#8ÛŸ */ - $"6EC7 1626 0FDD 0C77 1E00 2AE4 8B46 F39C" /* nÇ.&.Ý.w..*ä‹Fóœ */ - $"6268 EE5F FF49 B5C8 30E7 9859 E163 A9D4" /* bhî_ÿIµÈ0ç˜Yác©Ô */ - $"C50F BC0C 46BB BBC7 9FFF 7D54 E81B 8936" /* Å.¼.F»»ÇŸÿ}Tè.‰6 */ - $"A032 72E8 6576 5FEA 9A3F A5A9 9E58 B9C2" /*  2rèev_êš?¥©žX¹Â */ - $"A089 A039 5695 766F 3295 A1FF 7F5F FBDB" /*  ‰ 9V•vo2•¡ÿ._ûÛ */ - $"A3FD 1F1F 76AD 6787 B4D0 D1A5 E4EA 72F8" /* £ý..v­g‡´ÐÑ¥äêrø */ - $"0276 0C35 EC34 65A8 000A CA35 6AAE 1800" /* .v.5ì4e¨.ÂÊ5j®.. */ - $"99CA 1B65 F56D 6C3B DF33 AB08 94A3 15CF" /* ™Ê.eõml;ß3«.”£.Ï */ - $"C9B8 D32E 35D7 D32D 57E6 86D2 A5BE 2B3A" /* ɸÓ.5×Ó-Wæ†Ò¥¾+: */ - $"4535 2C10 41FE FDA9 E202 3927 BC4F 5F90" /* E5,.Aþý©â.9'¼O_ */ - $"E637 311C DB00 E394 09F3 005B 7DB3 0DFE" /* æ71.Û.ã”Æó.[}³.þ */ - $"9F1F CAA4 DD03 B381 8330 AB38 E13B 2F9C" /* Ÿ.ʤÝ.³ƒ0«8á;/œ */ - $"3DB5 01C5 100A 5D16 5C8D 792C FA0E 1A85" /* =µ.Å.Â].\y,ú..… */ - $"E3FF 467A 6333 E4F1 F27C 9E2B 161E 18F0" /* ãÿFzc3äñò|ž+...ð */ - $"3F30 9C2C 631D BE74 4B7F 6E21 3FBC 404E" /* ?0œ,c.¾tK.n!?¼@N */ - $"E063 4152 D02D 68E4 869C E7E9 E4E6 4E95" /* àcARÐ-h䆜çéäæN• */ - $"3A66 1FDA 1145 DFB4 0796 9F97 503C E2C9" /* :f.Ú.Eß´.–Ÿ—P<âÉ */ - $"7F49 D644 1290 98BD 8EA0 2FA1 CF00 E383" /* .IÖD.˜½Ž /¡Ï.ム*/ - $"C003 7BFE D79B FF62 A38E 2C39 A64D 19FF" /* À.{þ×›ÿb£Ž,9¦M.ÿ */ - $"6A9D 976A 994B 6626 4F4D 7DC8 F0CA EDB7" /* j—j™Kf&OM}ÈðÊí· */ - $"F99E 21E2 36B4 3AAB E787 C6A2 1783 F623" /* ùž!â6´:«ç‡Æ¢.ƒö# */ - $"8755 1F66 AFBC 2959 6E6E 2E61 AC85 2198" /* ‡U.f¯¼)Ynn.a¬…!˜ */ - $"9978 EDFD 334C F0D6 7F76 9AF2 47AF 5E4B" /* ™xíý3LðÖ.všòG¯^K */ - $"805C 54D3 5F2A 16C5 6675 C288 B44F F851" /* €\TÓ_*.Åfuˆ´OøQ */ - $"1CE9 9F21 BF10 92B9 2366 5D69 AE8E 9989" /* .éŸ!¿.’¹#f]i®Ž™‰ */ - $"36A6 F9E6 75A7 0D47 C8B5 8727 0138 2BFA" /* 6¦ùæu§.Gȵ‡'.8+ú */ - $"5C4A 649C 123C 225E 2CEC 2007 5016 3F11" /* \Jdœ.<"^,ì .P.?. */ - $"B8FF 60CB 7150 EBFD DFED 147E 0A98 E096" /* ¸ÿ`ËqPëýßí.~Â˜à– */ - $"6B76 3AF0 39A5 5BF2 880C E857 174C 8735" /* kv:ð9¥[òˆ.èW.L‡5 */ - $"ACF6 E4B7 3477 6293 FF7C 8515 A8DE 4E73" /* ¬öä·4wb“ÿ|….¨ÞNs */ - $"8E37 8A0C 4384 0CF3 FA01 15F5 9639 ED05" /* Ž7Š.C„.óú..õ–9í. */ - $"C86B 28A0 C331 14BC 2817 FE9B F96A D60D" /* Èk( Ã1.¼(.þ›ùjÖ. */ - $"EBCB 14DA FF7F FF47 8A61 A2C7 F01F 10B7" /* ëË.Úÿ.ÿGŠa¢Çð..· */ - $"3DAF B01C B484 F55D 457E E3EC CC41 95DE" /* =¯°.´„õ]E~ãìÌA•Þ */ - $"097E 8117 F77F FEFB A490 8B96 1300 2B37" /* Æ~.÷.þû¤‹–..+7 */ - $"19FA E04C 4188 E9F6 8950 0668 B082 8FD8" /* .úàLAˆéö‰P.h°‚Ø */ - $"0B7D 6C32 4DBF F84F F4E9 ACAF 719A DC43" /* .}l2M¿øOô鬯qšÜC */ - $"9F8D A53E DF1A BDB0 AAA7 3267 9C2D 357A" /* Ÿ¥>ß.½°ª§2gœ-5z */ - $"9CA7 1AE1 59C4 F467 83D3 308B 004A 42C2" /* œ§.áYÄôgƒÓ0‹.JB */ - $"909B F979 41CE AB25 C6D1 9FE9 46E1 E837" /* ›ùyAΫ%ÆÑŸéFáè7 */ - $"7ADF FF72 225E 4472 D323 F55C BE19 1E50" /* zßÿr"^DrÓ#õ\¾..P */ - $"BF94 6787 CADB F576 300A 054B 0A2D E9B2" /* ¿”g‡ÊÛõv0Â.KÂ-é² */ - $"5C15 DB84 E735 F76D 5477 D8A7 28AF FF7A" /* \.Û„ç5÷mTwا(¯ÿz */ - $"7EB8 06F8 4FF4 E999 ED48 02C4 F111 F61D" /* ~¸.øOôé™íH.Äñ.ö. */ - $"8A6C 1CC6 AE54 94E4 8C5D 7655 4ECC 205F" /* Šl.Æ®T”äŒ]vUNÌ _ */ - $"DBF9 1BA7 83CC 52E9 E9C9 52A4 1151 7DE4" /* Ûù.§ƒÌRééÉR¤.Q}ä */ - $"051B E140 3FC0 D60B 0C11 663F 98A9 8B53" /* ..á@?ÀÖ...f?˜©‹S */ - $"776E BD8D 7678 AD62 ACEE 033F D134 B61E" /* wn½vx­b¬î.?Ñ4¶. */ - $"F86D 3384 AAE7 9074 F7CF 4509 F9B3 4F30" /* øm3„ªçt÷ÏEÆù³O0 */ - $"F32D 840F 1DDA E6B1 BDD4 951F 2379 F890" /* ó-„..Úæ±½Ô•.#yø */ - $"530A E915 A228 D3D8 B188 C692 2767 D628" /* SÂé.¢(ÓØ±ˆÆ’'gÖ( */ - $"12F8 3FFA BA23 F76B 1D92 1FC1 EA73 30FC" /* .ø?úº#÷k.’.Áês0ü */ - $"CE72 0CA5 6695 6326 F93B B52F B9D4 F6F0" /* Îr.¥f•c&ù;µ/¹Ôöð */ - $"FF07 727B 80F9 EBFC 2176 788C 333F 4137" /* ÿ.r{€ùëü!vxŒ3?A7 */ - $"E82C D066 6088 A8EA 168F 40EA F1EE BDE8" /* è,Ðf`ˆ¨ê.@êñî½è */ - $"C023 75BA 66F2 335A 98C0 31A8 2137 7A7B" /* À#uºfò3Z˜À1¨!7z{ */ - $"DA0F 3962 D4B3 3E6E A5A1 3A19 5EED 48A7" /* Ú.9bÔ³>n¥¡:.^íH§ */ - $"7617 DE46 D178 BC48 D85D 7821 DFEC B30D" /* v.ÞFÑx¼HØ]x!ßì³. */ - $"F84F B7CD 80ED 55C7 9E1A F58D 7085 F625" /* øO·Í€íUÇž.õp…ö% */ - $"F564 3BF5 A09E B353 4E45 2F0B FC02 ECFD" /* õd;õ ž³SNE/.ü.ìý */ - $"539F 529C A652 34F1 C0CC BC04 FCE0 2C7D" /* SŸRœ¦R4ñÀ̼.üà,} */ - $"A8A9 9E67 79E9 ADE4 ABEE BFF6 4793 1B91" /* ¨©žgyé­ä«î¿öG“.‘ */ - $"413A 4302 7FB5 190C CB09 0DC9 3B33 E18D" /* A:C..µ..ËÆ.É;3á */ - $"DDAB 23C5 FABA 5DC1 554F C940 B964 7F6A" /* Ý«#Åúº]ÁUOÉ@¹d.j */ - $"A781 2032 BF9E 0262 7C99 CD96 9251 9FB6" /* § 2¿ž.b|™Í–’QŸ¶ */ - $"1C69 9141 7A13 3022 DE48 DA68 C959 A0B5" /* .i‘Az.0"ÞHÚhÉY µ */ - $"0F3A F19A 9301 5051 5855 9D7B 5173 EE47" /* .:ñš“.PQXU{QsîG */ - $"2B0D DB30 28CC 5E41 46F1 E79F 90B3 AB2A" /* +.Û0(Ì^AFñ石«* */ - $"CAEA 6128 10E1 2CC0 DDC2 EBF1 26F1 E1DC" /* Êêa(.á,ÀÝÂëñ&ñáÜ */ - $"EB87 87ED 55F3 827C A066 D932 FCF7 B134" /* 뇇íUó‚| fÙ2ü÷±4 */ - $"8BC9 CC70 B38C B019 8372 EA60 7C36 4D38" /* ‹ÉÌp³Œ°.ƒrê`|6M8 */ - $"F82F 16C2 2390 A91B 203A 8EBE D0EC E278" /* ø/.Â#©. :޾Ðìâx */ - $"7AC4 8493 A217 6AC3 B85A 470D D74A B91D" /* zÄ„“¢.jøZG.×J¹. */ - $"0180 7BAB 4088 5671 6268 5B4A 54FE C179" /* .€{«@ˆVqbh[JTþÁy */ - $"1600 7677 830B 0E81 EEB2 6124 33F8 DBBD" /* ..vwƒ..î²a$3øÛ½ */ - $"1B35 D1F9 0568 3891 0ECB A836 5A86 9636" /* .5Ñù.h8‘.˨6Z†–6 */ - $"9F87 052F 0D66 8AA3 3362 1651 9B33 9057" /* Ÿ‡./.fŠ£3b.Q›3W */ - $"5B98 05EB 23CE 099F 2358 444E 0D64 A9F9" /* [˜.ë#ÎÆŸ#XDN.d©ù */ - $"A569 7D56 A50D 6256 69AF BDD9 7847 D651" /* ¥i}V¥.bVi¯½ÙxGÖQ */ - $"73E2 F76E F277 58DC BFB9 7B8E 593C 0E97" /* sâ÷nòwXÜ¿¹{ŽY<.— */ - $"3C4E 507D FA6C 7984 FAC8 6C42 6882 78AC" /* ÄÀ’ÜjXLª¯.Ÿ¢.Τ */ - $"884B 2DB6 09F4 F51B 546F CD71 F4D3 6452" /* ˆK-¶Æôõ.ToÍqôÓdR */ - $"B6E5 3EFF 66F8 0D60 D916 F755 1348 E250" /* ¶å>ÿfø.`Ù.÷U.HâP */ - $"D8E2 6858 B424 B84B D59A 6885 24D3 D845" /* ØâhX´$¸KÕšh…$ÓØE */ - $"692F 4313 B616 584F 7419 0661 0064 C281" /* i/C.¶.XOt..a.d */ - $"A873 131C 5296 042B 1FD5 3EED BFC2 659E" /* ¨s..R–.+.Õ>í¿Âež */ - $"C4C7 2720 8002 28DD 141A BBE7 99F8 028F" /* ÄÇ' €.(Ý..»ç™ø. */ - $"8262 0577 5240 EB9A F866 2901 B75B 3FED" /* ‚b.wR@ëšøf).·[?í */ - $"9E78 9071 83FD 02BC FCDE 2135 42D1 F184" /* žxqƒý.¼üÞ!5BÑñ„ */ - $"309D F47E DF10 F797 4268 120A D377 04A4" /* 0ô~ß.÷—Bh.ÂÓw.¤ */ - $"2998 099E CA35 66AD FB20 8C14 1E0E 714E" /* )˜ÆžÊ5f­û Œ...qN */ - $"B9A7 70EE 5BA0 7A18 FC16 97EB 1A98 CB6C" /* ¹§pî[ z.ü.—ë.˜Ël */ - $"4B5D AC5B 3DC2 2062 E74A 18F2 0A76 6085" /* K]¬[= bçJ.òÂv`… */ - $"EF50 1C2F FE23 117A ED22 7BE8 0231 BC71" /* ïP./þ#.zí"{è.1¼q */ - $"707C 6736 BC3C 38AA 81C2 66B6 DCE5 13E9" /* p|g6¼<8ªÂf¶Üå.é */ - $"3076 C7AD 8C4B A962 C37E 4605 CDC0 8247" /* 0vÇ­ŒK©bÃ~F.ÍÀ‚G */ - $"190C 41CD 6923 8D00 BC94 5B5F E2AB 443B" /* ..AÍi#.¼”[_â«D; */ - $"3C5A 7FF6 213C 9E2D 9224 70B1 EA9B 7D36" /* .[ä.j,×Þf */ - $"BE8E C996 696D 58EC 6CFE 40AD 3C95 EAF1" /* ¾ŽÉ–imXìlþ@­<•êñ */ - $"4591 1D62 836E D2E3 4CD8 E4A6 F4F4 C456" /* E‘.bƒnÒãLØä¦ôôÄV */ - $"A70C B3BE AA22 A188 DAB5 D3F7 4B7B 865D" /* §.³¾ª"¡ˆÚµÓ÷K{†] */ - $"4D89 77E6 99A6 46C9 14BA 25E1 55C5 ADBD" /* M‰w晦FÉ.º%áUÅ­½ */ - $"4379 96AF 26DA A399 F009 AE75 248B 0285" /* Cy–¯&Ú£™ðÆ®u$‹.… */ - $"B370 5704 6429 C8AF 0BD3 A332 90B2 8351" /* ³pW.d)ȯ.Ó£2²ƒQ */ - $"F715 32C9 347B EADE 2EBB 9D97 BF95 0C5A" /* ÷.2É4{êÞ.»—¿•.Z */ - $"9203 1EC5 7A8E CF46 C28C 39A2 DE74 C656" /* ’..ÅzŽÏFÂŒ9¢ÞtÆV */ - $"F0BF 3ABF CE5F BE71 B7CE 2FF3 F41B F3EA" /* ð¿:¿Î_¾q·Î/óô.óê */ - $"8BE7 B07E AB17 4F87 74FC FDE8 EF9F BF3F" /* ‹ç°~«.O‡tüýè? */ - $"A9EB F3D5 3F3E 83BE 7BAF EA5F E0FE 7ADF" /* ©ëóÕ?>ƒ¾{¯ê_àþzß */ - $"E7A7 7F9D 3FE7 3BF9 FA77 F9FA 3FF9 F7C7" /* ç§.?ç;ùúwùú?ù÷Ç */ - $"E7E9 871D E84F CFE8 83FC FE85 E3BB E7E7" /* çé‡.èOÏèƒüþ…ã»çç */ - $"AFFE 7D7F F9F5 57E7 AF70 6F9D 2DF3 9ED7" /* ¯þ}.ùõWç¯po-óž× */ - $"C81E F903 FEAB 8EF9 F50D F254 3F3E A4D1" /* È.ù.þ«Žùõ.òT?>¤Ñ */ - $"DD53 F3F6 F37E 7EC9 4775 1BE4 77F9 EEBF" /* ÝSóöó~~ÉGu.äwùî¿ */ - $"9ED1 F9DC 00F7 91DD 3D8B A94D D83C 797F" /* žÑùÜ.÷‘Ý=‹©MØ.iùó.ÆäÓè»L§..à */ - $"F1D0 53DE 91D8 6723 A047 11C7 57B3 C46C" /* ñÐSÞ‘Øg# G.ÇW³Äl */ - $"84A7 C2E1 C7CC 185C 9F21 7E2B 0F2E 64B1" /* „§ÂáÇÌ.\Ÿ!~+..d± */ - $"D734 4142 C65E A2FB 9ABE B62D 076B 2B65" /* ×4ABÆ^¢ûš¾¶-.k+e */ - $"9D6E 63F1 4825 79A9 3936 C7A7 531F EF6A" /* ncñH%y©96ǧS.ïj */ - $"F859 3084 0421 88A9 A648 8641 ACEB 95DE" /* øY0„.!ˆ©¦H†A¬ë•Þ */ - $"2E94 E3C9 442C 13AF CF63 0404 C5C6 5CE2" /* .”ãÉD,.¯Ïc..ÅÆ\â */ - $"CE90 F9CC A1B6 5713 031E C239 174F CC40" /* ÎùÌ¡¶W...Â9.OÌ@ */ - $"BCA4 EA9A EB6A 1D24 7962 F735 AF5A B937" /* ¼¤êšëj.$yb÷5¯Z¹7 */ - $"AC3B A12E 10A8 D332 6FE3 8ED1 6F01 B198" /* ¬;¡..¨Ó2oãŽÑo.±˜ */ - $"1543 A6A1 367E E226 5D76 B860 E0E1 8963" /* .C¦¡6~â&]v¸`àá‰c */ - $"AA7A F9EE DABF DB52 28F6 69F9 273F 8729" /* ªzùîÚ¿ÛR(öiù'?‡) */ - $"1D00 C7D2 20B9 3483 2125 88FC 94C0 54A6" /* ..ÇÒ ¹4ƒ!%ˆü”ÀT¦ */ - $"42FE F4E5 DA50 F495 F88B 5986 21CB 22E8" /* BþôåÚPô•ø‹Y†!Ë"è */ - $"EE5E 0622 2CB0 BCC8 0C6B 2B2B 23EB 0506" /* î^.",°¼È.k++#ë.. */ - $"A40F 09C2 726F 0C1F B8D4 55D3 2FE4 D629" /* ¤.ÆÂro..¸ÔUÓ/äÖ) */ - $"94C2 C913 BB28 4394 A9D2 8684 9E47 0445" /* ”ÂÉ.»(C”©Ò†„žG.E */ - $"B6CF 3E21 7072 B435 310C D7A3 063D 942B" /* ¶Ï>!pr´51.×£.=”+ */ - $"6AE9 350C 9442 C76E 1E6B A8C1 18A3 4309" /* jé5.”BÇn.k¨Á.£CÆ */ - $"6D55 E62F FC4E C4E9 6CF8 241D FAC5 2CC9" /* mUæ/üNÄélø$.úÅ,É */ - $"E020 6B12 31A6 9B11 710B 8850 FABE 5D63" /* à k.1¦›.q.ˆPú¾]c */ - $"068A 4018 2A90 93A5 9715 531E 8E7B AD7A" /* .Š@.*“¥—.S.Ž{­z */ - $"2921 115F 19CE 2B6A F643 DE89 2E76 890B" /* )!._.Î+jöCÞ‰.v‰. */ - $"5A69 1668 6A02 061F 4832 24EB FC82 6B4D" /* Zi.hj...H2$ëü‚kM */ - $"9B08 D22F CBBF D348 D18F 8B0C C684 6851" /* ›.Ò/Ë¿ÓHÑ‹.Æ„hQ */ - $"6CA9 E2FA 43CE 8A9A 7A58 FB28 0208 A6E0" /* l©âúCΊšzXû(..¦à */ - $"1ACF CE23 C624 5A38 C640 72C0 26F1 2818" /* .ÏÎ#Æ$Z8Æ@rÀ&ñ(. */ - $"07FD 74D9 F3D6 ED38 CA01 6485 CE8C 41A3" /* .ýtÙóÖí8Ê.d…ÎŒA£ */ - $"02C6 18E5 E4D2 2043 FA62 8768 3E14 7E80" /* .Æ.åäÒ Cúb‡h>.~€ */ - $"F2EB 67AD F743 75A0 2DDF 8724 1468 F88D" /* òëg­÷Cu -߇$.hø */ - $"9BF3 11EB 4D4C B372 D210 9B58 BAA0 646A" /* ›ó.ëML³rÒ.›Xº dj */ - $"222F 5E5A C781 1D86 5652 1B57 07AF C8FA" /* "/^ZÇ.†VR.W.¯Èú */ - $"9E77 DD7B FCB9 1D4C 8573 7B03 95AC D2DA" /* žwÝ{ü¹.L…s{.•¬ÒÚ */ - $"3314 4FFC CAF4 39B5 EAF4 9617 2CC5 9258" /* 3.OüÊô9µêô–.,Å’X */ - $"8F99 8C44 8D44 DA10 F1A5 51F7 5533 F13B" /* ™ŒDDÚ.ñ¥Q÷U3ñ; */ - $"CDDC B6D6 BE71 3C92 2628 3B69 DC32 C623" /* Íܶ־q<’&(;iÜ2Æ# */ - $"F497 3959 034A 67C3 10A8 26E2 572F B4B1" /* ô—9Y.JgÃ.¨&âW/´± */ - $"6C5C 3E47 FB9F AA7D D9A4 7A08 4BBA E854" /* l\>GûŸª}Ù¤z.KºèT */ - $"4370 CE77 C69A 11EB 1BD8 B9AF 8225 BC8E" /* CpÎwÆš.ë.ع¯‚%¼Ž */ - $"A261 1CAA A74D B531 A0B9 D462 35DF 9C21" /* ¢a.ª§Mµ1 ¹Ôb5ßœ! */ - $"73F1 EAC1 A13C E0BC AF6C 8111 03DF AF1F" /* sñêÁ¡<༯l..߯. */ - $"4748 1866 322C 535A 7C5E D2BC 4304 3541" /* GH.f2,SZ|^Ò¼C.5A */ - $"F14E 8412 296B 2C37 B642 9B4A 6417 EABB" /* ñN„.)k,7¶B›Jd.ê» */ - $"9034 1260 1B81 AFCC F903 4FAA A3F2 339E" /* 4.`.¯Ìù.Oª£ò3ž */ - $"F332 B080 8C32 31D7 4DEA B260 F190 43F1" /* ó2°€Œ21×Mê²`ñCñ */ - $"CCD5 A584 5C1C 343F FB87 CEA5 F246 8EAC" /* ÌÕ¥„\.4?û‡Î¥òFެ */ - $"C407 302C FEE7 3F59 F4B8 74ED ED62 D373" /* Ä.0,þç?Yô¸tííbÓs */ - $"A4BA B53A 0554 5403 9C2C E745 1087 5546" /* ¤ºµ:.TT.œ,çE.‡UF */ - $"2671 7BA6 3A33 703E BEF5 CD28 10A5 462B" /* &q{¦:3p>¾õÍ(.¥F+ */ - $"D902 9493 B2FC 176F 34BA 5A2D D2BC 0CBB" /* Ù.”“²ü.o4ºZ-Ò¼.» */ - $"5AB7 B854 08D3 CD79 3C71 1A89 E643 2FBC" /* Z·¸T.ÓÍy©¶éó¯ */ - $"6757 09A3 C49E A9AD 7201 BFD9 B3FA 52B0" /* gWƣĞ©­r.¿Ù³úR° */ - $"0000 0030 908B 4E52 45F1 3CBE F04A D2E4" /* ...0‹NREñ<¾ðJÒä */ - $"83AF 6AEA 78E9 A438 C877 BAAD 65CB C703" /* ƒ¯jêxé¤8Èwº­eËÇ. */ - $"70B2 B9DD E19B 6B8C 0CE9 E402 0C9F 94F0" /* p²¹Ýá›kŒ.éä..Ÿ”ð */ - $"21BC 4E05 C03C 012A 66EF D0BC 2B72 292E" /* !¼N.À<.*fïм+r). */ - $"3592 1FDB 2A5C 8D2D C2FF 5C5B 6AB8 F695" /* 5’.Û*\-Âÿ\[j¸ö• */ - $"F279 2C54 0529 555A 6ACA 22A4 C28B D693" /* òy,T.)UZjÊ"¤Â‹Ö“ */ - $"1FC9 4492 43F3 A323 F990 0A31 9356 30D3" /* .ÉD’Có£#ùÂ1“V0Ó */ - $"D6F0 0D36 0091 043F F239 9D1E 114E 3693" /* Öð.6.‘.?ò9..N6“ */ - $"DF1C 23DF A27A 5B11 A44D 9199 07D1 AF2C" /* ß.#ߢz[.¤M‘™.ѯ, */ - $"63EB 21C5 D29F 8644 8C6A 129A 9CB9 ED72" /* cë!ÅÒŸ†DŒj.šœ¹ír */ - $"9286 3E0E B604 539A F262 B727 9284 01F9" /* ’†>.¶.Sšòb·'’„.ù */ - $"5AE1 DA5A 8A02 140E 5275 5433 BCDF 8038" /* ZáÚZŠ...RuT3¼ß€8 */ - $"0050 856F A747 857B 8376 255A 9185 28CC" /* .P…o§G…{ƒv%Z‘…(Ì */ - $"301A EC7C B5D3 89CC A695 1C87 8266 7CA8" /* 0.ì|µÓ‰Ì¦•.‡‚f|¨ */ - $"A203 7467 426E 9507 3DB3 1F90 F66B DC9F" /* ¢.tgBn•.=³.ökÜŸ */ - $"ACF6 CDB2 4FCC 5AE4 2F94 F555 CB9E D8AC" /* ¬öͲOÌZä/”õU˞ج */ - $"950B FF38 0FE4 5056 E5E8 F371 9A98 5697" /* •.ÿ8.äPVåèóqš˜V— */ - $"6319 5197 B545 E594 AADD B2F2 CA27 260D" /* c.Q—µE唪ݲòÊ'&. */ - $"9BAF 0E45 0846 5573 F96B 7AC1 CC89 E86E" /* ›¯.E.FUsùkzÁ̉èn */ - $"61E6 72E2 05E3 9F8D 26D8 F178 BCC0 0B18" /* aærâ.ãŸ&Øñx¼À.. */ - $"967C EA80 F7C1 45AE 8FAE A41C 41B6 438E" /* –|ê€÷ÁE®®¤.A¶CŽ */ - $"46EF 1094 D558 01A8 BBAD 7380 DA27 2772" /* Fï.”ÕX.¨»­s€Ú''r */ - $"9D67 1330 A48C 62EA 0643 14EC 3E22 A055" /* g.0¤Œbê.C.ì>" U */ - $"4E39 4E23 853D C587 99C8 CFD2 AEBB 9843" /* N9N#…=Ň™ÈÏÒ®»˜C */ - $"ECC9 0241 3253 8CF1 E068 1936 3BB2 56D3" /* ìÉ.A2SŒñàh.6;²VÓ */ - $"46F7 6A71 98D1 A300 1337 B3B0 7ABB 5752" /* F÷jq˜Ñ£..7³°z»WR */ - $"DB7A 7F85 5CFE 59DE A852 6987 DC11 C6B5" /* Ûz.…\þYÞ¨Ri‡Ü.Ƶ */ - $"E45B 7DD1 1F3A D566 C16D 3FBF 7BAD 7201" /* ä[}Ñ.:ÕfÁm?¿{­r. */ - $"B71C C74C A678 C2BB 10FD 534A 5E5D 79C0" /* ·.ÇL¦x».ýSJ^]yÀ */ - $"000C 2336 9113 B9C5 5D4A 1756 1C8B 0CD6" /* ..#6‘.¹Å]J.V.‹.Ö */ - $"AA8B DFF5 6CE3 CDAB B9B4 D85C 93FF 76AA" /* ª‹ßõlãÍ«¹´Ø\“ÿvª */ - $"15CF CF39 A864 B236 A172 03A1 65A1 9F76" /* .ÏÏ9¨d²6¡r.¡e¡Ÿv */ - $"FF55 00DE C7D0 C767 2787 9EB3 7CE5 C5BC" /* ÿU.ÞÇÐÇg'‡ž³|åż */ - $"8E08 6085 37A2 229C 73D3 2CC5 F6E8 AA1B" /* Ž.`…7¢"œsÓ,Åöèª. */ - $"AF13 15FD EB95 2609 6006 23C6 7910 8FFE" /* ¯..ýë•&Æ`.#Æy.þ */ - $"8C5E 60A6 A558 E899 0A05 0F37 EC94 8E51" /* Œ^`¦¥Xè™Â..7씎Q */ - $"7838 9A11 8483 88B0 E284 B88D CDEA 9D56" /* x8š.„ƒˆ°â„¸ÍêV */ - $"5C7E CFA2 8001 847E ABC9 360E 17EA 2D34" /* \~Ï¢€.„~«É6..ê-4 */ - $"8314 96C0 3810 D88F A54E 6E7C 6030 76FA" /* ƒ.–À8.Ø¥Nn|`0vú */ - $"18A4 A549 37FC 11F6 E77F A883 C794 71AC" /* .¤¥I7ü.öç.¨ƒÇ”q¬ */ - $"55F1 7F88 664A FEE4 01C4 5576 1BE6 9C41" /* Uñ.ˆfJþä.ÄUv.æœA */ - $"D800 6121 2FC0 E681 A16E 21AF D5FE 0E80" /* Ø.a!/Àæ¡n!¯Õþ.€ */ - $"A800 0000 3090 8C40 9184 82DA 7187 51C6" /* ¨...0Œ@‘„‚Úq‡QÆ */ - $"44DC C420 FF13 98AD D100 2C07 132C 8D6C" /* DÜÄ ÿ.˜­Ñ.,..,l */ - $"5D16 A089 D8F6 E77F A870 24F1 5461 DB69" /* ]. ‰Øöç.¨p$ñTaÛi */ - $"0F41 5029 7A41 B55F 0000 0184 846A 850C" /* .AP)zAµ_...„„j…. */ - $"241E E628 EDA6 4000 3090 6AA2 F6E7 7FA6" /* $.æ(í¦@.0j¢öç.¦ */ - $"26C9 5EDE 9BB6 A1B1 51E6 8D5D F800 0061" /* &É^Þ›¶¡±Qæ]ø..a */ - $"19B3 E47D 6F6F DB03 0885 4A53 27BA 38F5" /* .³ä}ooÛ..…JS'º8õ */ - $"35A0 1AB9 0A95 8FAE 85E3 F528 5A8B E645" /* 5 .¹Â•®…ãõ(Z‹æE */ - $"8419 0456 6A38 D0DA 4948 8987 2323 1216" /* „..Vj8ÐÚIH‰‡##.. */ - $"A4F8 FD1A C374 D30C BF43 CD86 B984 F23C" /* ¤øý.ÃtÓ.¿C͆¹„ò< */ - $"5487 B47F E217 F15A D8CF A66A 96A9 EAF3" /* T‡´.â.ñZØÏ¦j–©êó */ - $"F966 0205 D320 1556 5C3C 073A 8E66 1E3F" /* ùf..Ó .V\<.:Žf.? */ - $"A74E FF2C BC45 E9DB 3B25 FF7F 46AD 13A9" /* §Nÿ,¼EéÛ;%ÿ.F­.© */ - $"5C21 458B 6AD4 829C 1DFB 54BA E5F2 3C76" /* \!E‹jÔ‚œ.ûTºåò’F...! */ - $"2CFF 4F5F FD2E 999E B77D A47D 61B4 2C01" /* ,ÿO_ý.™ž·}¤}a´,. */ - $"D397 493D CB48 AB27 EB4A 13A7 8C89 7F64" /* Ó—I=ËH«'ëJ.§Œ‰.d */ - $"6C08 FF21 9696 98C7 6248 1615 541F EC81" /* l.ÿ!––˜ÇbH..T.ì */ - $"8E18 FAED 5257 3D01 2CBB 74C1 DA64 81A0" /* Ž.úíRW=.,»tÁÚd  */ - $"39BF B272 4068 15E8 A44A 007C 732C D9DC" /* 9¿²r@h.è¤J.|s,ÙÜ */ - $"1CF8 4612 8611 A36D 67BC 6E6A EA14 9D87" /* .øF.†.£mg¼njê.‡ */ - $"2962 C4B4 5442 9564 BFAA D0FB 991F 4288" /* )bÄ´TB•d¿ªÐû™.Bˆ */ - $"7CB2 2A41 333E 7827 5070 F3A6 67FF 7FFF" /* |²*A3>x'Ppó¦gÿ.ÿ */ - $"7601 CFFE E44B 4413 809B 3877 B59D BC19" /* v.ÏþäKD.€›8wµ¼. */ - $"548F 0A5B C1E9 A8D7 6B5D 8EC8 8A1A BB3D" /* TÂ[Áé¨×k]ŽÈŠ.»= */ - $"3CD1 3139 57CF 9E94 00E9 CF6E 3830 3561" /* <Ñ19WÏž”.éÏn805a */ - $"8DE4 A59F FD1B 45CF C608 D0FD 5D48 485E" /* 䥟ý.EÏÆ.Ðý]HH^ */ - $"D5A3 30A5 F9EE 5D55 B9C2 E552 3A9F B087" /* Õ£0¥ùî]U¹ÂåR:Ÿ°‡ */ - $"FE87 5DBC 5E73 0F16 9221 2B0D F399 AB6F" /* þ‡]¼^s..’!+.ó™«o */ - $"9950 0000 0000 0000 0008 2444 88CE 3BBD" /* ™P........$DˆÎ;½ */ - $"CC78 4932 9C47 DEFA 74E7 91BF 9827 FF7B" /* ÌxI2œGÞútç‘¿˜'ÿ{ */ - $"77EB 9B1B 9F7F FDAB 6552 35A1 0C22 E9C6" /* wë›.Ÿ.ý«eR5¡."éÆ */ - $"42E3 FF7F FF7F E9FD A23B 2F7D 3ADD FC90" /* Bãÿ.ÿ.éý¢;/}:Ýü */ - $"E4A1 F8B9 0560 0F86 D7FE 3F46 C953 2A03" /* 䡸¹.`.†×þ?FÉS*. */ - $"F1C7 F5AE D0C4 B743 EA67 B694 E47D 45CD" /* ñÇõ®ÐÄ·Cêg¶”ä}EÍ */ - $"6F92 178A E383 8B71 800E D9AF A55A F149" /* o’.Šãƒ‹q€.Ù¯¥ZñI */ - $"A838 5671 4C9A 8915 447A CDA9 C6B7 DD68" /* ¨8VqLš‰.DzͩƷÝh */ - $"A5FB F404 CF63 A62E CC5E 89D3 FDB2 C841" /* ¥ûô.Ïc¦.Ì^‰Óý²ÈA */ - $"7A37 5B5D 5958 4B46 20B1 D389 5188 F9FE" /* z7[]YXKF ±Ó‰Qˆùþ */ - $"8FF1 D718 6C8C 3254 0000 0000 0000 0000" /* ñ×.lŒ2T........ */ - $"0000 00A1 EBEC C33A 8622 D0FF 7FFF 7FFF" /* ...¡ëìÃ:†"Ðÿ.ÿ.ÿ */ - $"705D C7FE 49E7 01B7 A65D D5BC 2041 80B0" /* p]ÇþIç.·¦]Õ¼ A€° */ - $"89ED F68A A000 F438 EBD0 C908 0B67 414F" /* ‰íöŠ .ô8ëÐÉ..gAO */ - $"C8F1 4312 2EC8 05E6 CA19 184F FF5B BA24" /* ÈñC..È.æÊ..Oÿ[º$ */ - $"57E8 A6B4 FBD3 FF79 4D8E FF44 BC50 6938" /* W覴ûÓÿyMŽÿD¼Pi8 */ - $"137F FF7D 6251 8D1A 9B33 CF7E 0BCB EAD7" /* ..ÿ}bQ.›3Ï~.Ëê× */ - $"2E0D EAE0 0003 0906 AA2B 66A8 C950 0000" /* ..êà..Æ.ª+f¨ÉP.. */ - $"0000 0000 0000 0000 0001 1E1F F600 1848" /* ............ö..H */ - $"4BF6 7A7C F92D 3E7A 437E 2254 51EB 4AF5" /* Köz|ù->zC~"TQëJõ */ - $"C6BF 442A 12CD 51FF 7FFE B8AE D0C4 B1D0" /* Æ¿D*.ÍQÿ.þ¸®ÐıР*/ - $"7CF7 019D A0ED 2CC4 01BC 1A94 212D 43EF" /* |÷. í,Ä.¼.”!-Cï */ - $"1274 9B67 94D5 062D 5FCC E23C 4816 416B" /* .t›g”Õ.-_Ìâ•Þ0Ð1ˆ*uO5Ë.ÝÕ */ - $"7FFD A983 95A9 71E7 A7A3 7D3F F944 0A7E" /* .ý©ƒ•©qç§£}?ùDÂ~ */ - $"24D9 966F 6B6A 0FD0 23AC 7000 0000 0000" /* $Ù–okj.Ð#¬p..... */ - $"0009 D4AF 9196 E5A4 B8AC 407F F9EE C709" /* .ÆÔ¯‘–夸¬@.ùîÇÆ */ - $"F927 08C3 CA6C 3A3A D90F E306 BCC4 6D6C" /* ù'.ÃÊl::Ù.ã.¼Äml */ - $"C7A9 F042 6F4C FDC9 60AB A087 6338 8F12" /* Ç©ðBoLýÉ`« ‡c8. */ - $"4D29 D00C C575 C7B5 9FA4 E96C 1FA0 AAFB" /* M)Ð.ÅuǵŸ¤él. ªû */ - $"09E9 8DF9 1BE0 C62D 3C1D F55B DD77 A0FD" /* Æéù.àÆ-<.õ[Ýw ý */ - $"5C16 D959 BA08 0000 0000 0000 0145 AE01" /* \.ÙYº........E®. */ - $"712A 0E06 1212 70CD 94A8 0A2C 18F5 1E3B" /* q*....pÍ”¨Â,.õ.; */ - $"52FA C8F6 56F3 F7E4 69E6 54A0 3FF6 2487" /* RúÈöVó÷äiæT ?ö$‡ */ - $"C65F 0EFF 7F4F 8D07 C817 FE78 727D 3C75" /* Æ_.ÿ.O.È.þxr}~bR.ÀJƒP× */ - $"DADA 8602 5949 900F D2B6 D10D 2661 3014" /* ÚÚ†.YI.Ò¶Ñ.&a0. */ - $"4541 17FF 2106 00DF AC82 0046 09BB A5AF" /* EA.ÿ!..߬‚.FÆ»¥¯ */ - $"CE51 0EBF F9AD 787A 907F 9F9A 628F E16B" /* ÎQ.¿ù­xz.Ÿšbák */ - $"C015 137E 9C68 FCFA A817 FF7F DD6B FDB6" /* À..~œhüú¨.ÿ.Ýký¶ */ - $"3DA3 7C9D 3309 0B8A B551 C370 4401 CD7F" /* =£|3Æ.еQÃpD.Í. */ - $"7503 8425 E297 1B3F FF49 4FF8 3583 685A" /* u.„%â—.?ÿIOø5ƒhZ */ - $"B273 A7F7 CEBF F27E D78C 3E35 5332 152B" /* ²s§÷οò~׌>5S2.+ */ - $"033C C7FF 7B97 1AF0 F2A4 3C88 CC7B B96E" /* .<Çÿ{—.ðò¤<ˆÌ{¹n */ - $"65B3 533C F2F8 5E4B 6DBF 7D78 A316 310F" /* e³S<òø^Km¿}x£.1. */ - $"6B09 FD62 88D7 77FF 7447 524E C235 00A3" /* kÆýbˆ×wÿtGRNÂ5.£ */ - $"8F5A 4BEE D240 6154 C17C 2CC2 68F0 A959" /* ZKîÒ@aTÁ|,Âhð©Y */ - $"2F12 9B74 7E8E 423F BB1D BC9A C75B C618" /* /.›t~ŽB?».¼šÇ[Æ. */ - $"19D1 C6CB 0A15 BD77 99BD 96D3 CC07 F5AC" /* .ÑÆËÂ.½w™½–ÓÌ.õ¬ */ - $"D2ED DE5E F19D 5CFC B2B0 5407 0386 32C6" /* ÒíÞ^ñ\ü²°T..†2Æ */ - $"5F49 7BAD 3270 BF81 CF97 C934 7E23 7237" /* _I{­2p¿Ï—É4~#r7 */ - $"727B 0FA2 6DB0 D717 8C73 B109 E089 AAC5" /* r{.¢m°×.Œs±Æà‰ªÅ */ - $"7D98 9061 2956 EA75 0135 E870 3430 4E9B" /* }˜a)Vêu.5èp40N› */ - $"C76C D3D6 7EEB 83DB 9EEB C9A0 983D 1327" /* ÇlÓÖ~ëƒÛžëÉ ˜=.' */ - $"62D8 FD62 CA51 7135 80B0 ABFF 431B 9843" /* bØýbÊQq5€°«ÿC.˜C */ - $"68B4 A929 44E4 1F3E E3A1 22AA 5E87 579C" /* h´©)Dä.>ã¡"ª^‡Wœ */ - $"745B 9CA4 438C BFC2 9A1B 17BE BA75 06E4" /* t[œ¤CŒ¿Âš..¾ºu.ä */ - $"0108 698C E4F2 341C 24CC 7913 6237 ED48" /* ..iŒäò4.$Ìy.b7íH */ - $"E797 4D7A 0D5A D1EA ACDF F974 4F9F 9139" /* ç—Mz.ZÑê¬ßùtOŸ‘9 */ - $"6A87 3972 A1C8 0A2B 1E8B 6DB7 B811 4AB0" /* j‡9r¡ÈÂ+.‹m·¸.J° */ - $"EEE8 BB23 959C 239D 4165 DBED ACE4 F133" /* îè»#•œ#AeÛí¬äñ3 */ - $"8276 40BB C447 29FE 3EB6 5BA4 A6D0 2441" /* ‚v@»ÄG)þ>¶[¤¦Ð$A */ - $"1431 8B2D 8BFD 96B7 C8C2 9F9B DFB9 2B06" /* .1‹-‹ý–·ÈŸ›ß¹+. */ - $"E191 00FF 7E4B 8281 D609 D163 B8CB AF9A" /* á‘.ÿ~K‚ÖÆÑc¸Ë¯š */ - $"0995 7385 27FC 3C6A 5310 024D BAD1 8013" /* Æ•s…'ü—âx.(.“õeø> */ - $"4161 0037 E0AA D0CC 3AED 4E56 04E8 4456" /* Aa.7àªÐÌ:íNV.èDV */ - $"6E50 4626 C7E0 0790 014E 329B 0DDB D87D" /* nPF&Çà..N2›.ÛØ} */ - $"4532 6482 3F51 D651 3F62 D6EB 3BCA 75EB" /* E2d‚?QÖQ?bÖë;Êuë */ - $"5444 A42F 3CFB 4146 19FB 5376 876F 6BC1" /* TD¤/<ûAF.ûSv‡okÁ */ - $"B80B 7787 71DF 4CAA D70A 98BC 98E1 15A1" /* ¸.w‡qßLª×˜¼˜á.¡ */ - $"7996 F17F FF7A 91CF 350C FA04 5753 7ECB" /* y–ñ.ÿz‘Ï5.ú.WS~Ë */ - $"29F1 A4AD F335 59DB A580 EAA3 98AD FEB0" /* )ñ¤­ó5YÛ¥€ê£˜­þ° */ - $"275E BABE 6679 9AD4 B246 75F2 ECAA B042" /* '^º¾fyšÔ²Fuò쪰B */ - $"92C9 745E 1C58 58FF 2570 9228 4EAF 6F65" /* ’Ét^.XXÿ%p’(N¯oe */ - $"56F3 1D0C 85AA 9468 8000 0000 0101 3082" /* Vó..…ª”h€.....0‚ */ - $"08FD E30F FF75 70BF FCCA 2225 E5FC 3464" /* .ýã.ÿup¿üÊ"%åü4d */ - $"00CA 6C43 E833 80DE 2895 5F84 4B08 CEFA" /* .ÊlCè3€Þ(•_„K.Îú */ - $"AA94 EE33 24E7 CA20 A668 4717 FD5F F7F2" /* ª”î3$çÊ ¦hG.ý_÷ò */ - $"59E7 D6C6 6D0D 8E0F 1AC3 BBFA 3890 8ACB" /* YçÖÆm.Ž..ûú8ŠË */ - $"9250 6D82 E892 D4B9 1F14 D987 9818 877A" /* ’Pm‚è’Ô¹..Ù‡˜.‡z */ - $"66F0 905A B088 D761 B529 F02A 6964 6C65" /* fðZ°ˆ×aµ)ð*idle */ - $"8FB8 9A87 7771 9A12 C8A6 7F9C 9905 D643" /* ¸š‡wqš.Ȧ.œ™.ÖC */ - $"E554 91F5 0C26 4299 30C6 BC87 B38C 86FB" /* åT‘õ.&B™0Ƽ‡³Œ†û */ - $"ED50 C019 3822 52A8 97C6 1F49 176D FB8C" /* íPÀ.8"R¨—Æ.I.mûŒ */ - $"87B7 E37C 196E 3695 357A E2B8 FDE5 736E" /* ‡·ã|.n6•5zâ¸ýåsn */ - $"DF11 6026 3CD9 51CF 2A50 6F8A 53B0 0F16" /* ß.`&<ÙQÏ*PoŠS°.. */ - $"938B 745A F84D 571C A582 9723 90B4 49D7" /* “‹tZøMW.¥‚—#´I× */ - $"B11D 7BA6 45C1 2AFA D519 A471 60A3 17A9" /* ±.{¦EÁ*úÕ.¤q`£.© */ - $"2C13 6E04 D58E 3F37 0115 E4AE F51C 1BA8" /* ,.n.ÕŽ?7..ä®õ..¨ */ - $"EF7F 4C9F 7B47 8C5A D1D6 CAC7 D416 D6D4" /* ï.LŸ{GŒZÑÖÊÇÔ.ÖÔ */ - $"7F05 9504 5685 0D6D E0E8 6809 9307 7864" /* ..•.V….màèhÆ“.xd */ - $"1A86 1BA6 A321 D08C 1B0C 0981 9395 6DC0" /* .†.¦£!ÐŒ..Æ“•mÀ */ - $"C74F ECF7 CA1B FF4B 1896 BDBE 4876 8A4B" /* ÇOì÷Ê.ÿK.–½¾HvŠK */ - $"519F CC3C 7813 BE21 C40C B001 30F4 4FC7" /* QŸÌüU»œ³@¤Ê.¡. */ - $"3E83 51D4 9D13 DE0D F86D 3384 AAE7 9074" /* >ƒQÔ.Þ.øm3„ªçt */ - $"F7CF 4509 F99A 70B2 2E74 43C3 1363 021F" /* ÷ÏEÆùšp².tCÃ.c.. */ - $"6482 E471 22FA 6265 2DF9 C302 43F8 9053" /* d‚äq"úbe-ùÃ.CøS */ - $"0AE9 15A2 28D4 FD7C 05AF C7B8 26D5 7C0F" /* Âé.¢(Ôý|.¯Ç¸&Õ|. */ - $"22E0 4735 518D BE4B 4E83 1EF8 3FFA BA23" /* "àG5Q¾KNƒ.ø?úº# */ - $"3AE8 F76B 1D92 2038 64C1 EA73 30FC CE72" /* :è÷k.’ 8dÁês0üÎr */ - $"0CA5 6697 157E 55C4 8BAE E703 6FF5 F743" /* .¥f—.~UÄ‹®ç.oõ÷C */ - $"B456 C85F 3BFF 2629 95B7 02F4 F580 A49B" /* ´VÈ_;ÿ&)•·.ôõ€¤› */ - $"1587 2316 D131 66C1 C6DB F3DC C409 D801" /* .‡#.Ñ1fÁÆÛóÜÄÆØ. */ - $"E2DA 30B6 73FD 99EF AA26 25D7 DF07 FBEB" /* âÚ0¶sý™ïª&%×ß.ûë */ - $"094E 2E8E BD11 3C49 81BA E6BE 7666 ECBE" /* ÆN.޽.sÄW.6ÿ<%‚1 */ - $"2C25 ACE4 F084 E842 60E8 355D 22BE 6FEE" /* ,%¬äð„èB`è5]"¾oî */ - $"93F9 DDE6 DAED 4E44 545A FE4E 5EA4 0487" /* “ùÝæÚíNDTZþN^¤.‡ */ - $"36F1 52AF 8683 2DE8 F30B 72DE E807 2068" /* 6ñR¯†ƒ-èó.rÞè. h */ - $"742B 7262 BF7E 516C D41F CA56 9DE1 E3B8" /* t+rb¿~QlÔ.ÊVá㸠*/ - $"8D72 2993 C073 516D A343 DDE0 984D F06A" /* r)“ÀsQm£CÝà˜Mðj */ - $"CD83 D22D C161 30D7 2E9A FED4 4E85 5D2E" /* ̓Ò-Áa0×.šþÔN…]. */ - $"CF72 2181 7F23 BC37 FF83 C30D 43E0 DBC7" /* Ïr!.#¼7ÿƒÃ.CàÛÇ */ - $"A277 B4D9 4E68 1FB1 AF7B 6D8B 8F43 2A1B" /* ¢w´ÙNh.±¯{m‹C*. */ - $"9FE4 6CCC E826 C4AA 96C9 98A9 4D3B 981F" /* ŸälÌè&Ī–ɘ©M;˜. */ - $"8786 8633 89B0 2B42 4266 BC27 0098 D2B3" /* ‡††3‰°+BBf¼'.˜Ò³ */ - $"E8E4 0D2C 6E14 D34D 3613 4568 4A1E 8E5E" /* èä.,n.ÓM6.EhJ.Ž^ */ - $"E328 D89C 85D3 D8C2 C15B 3533 989F F015" /* ã(Øœ…ÓØÂÁ[53˜Ÿð. */ - $"1B49 871D 031B 2DBE D49E 880D A557 0694" /* .I‡...-¾Ôžˆ.¥W.” */ - $"60C3 47A1 CD2A 961B F73C 94A3 6B17 4268" /* `ÃG¡Í*–.÷<”£k.Bh */ - $"F766 81DC 33BC 8C1D 5571 D2D7 FB1C 9378" /* ÷fÜ3¼Œ.UqÒ×û.“x */ - $"01B7 BDCC 5DD0 9171 5FA1 50DA 7EBF 1586" /* .·½Ì]Бq_¡PÚ~¿.† */ - $"FA82 9E6F CBE4 0977 9C9C 2373 E789 5A3E" /* ú‚žoËäÆwœœ#sç‰Z> */ - $"8743 EB0E ED13 7955 DB28 2874 8065 2078" /* ‡Cë.í.yUÛ((t€e x */ - $"97A7 6C13 2283 729A CCF9 E449 A627 7652" /* —§l."ƒršÌùäI¦'vR */ - $"E821 2F1F 574E 6887 1830 6E01 5A8D 02FB" /* è!/.WNh‡.0n.Z.û */ - $"DB61 8EEF 4E08 B607 26FA 2B4C FF47 38FE" /* ÛaŽïN.¶.&ú+LÿG8þ */ - $"9B7C A3E4 DB46 F898 CFE9 8F3C 8717 2975" /* ›|£äÛFø˜Ïé<‡.)u */ - $"9BA2 582E 86D1 D882 C127 EFD7 E71A B5DD" /* ›¢X.†ÑØ‚Á'ï×ç.µÝ */ - $"7772 6391 2722 2884 AA0F 9C72 9A96 F4F8" /* wrc‘'"(„ª.œrš–ôø */ - $"BFF8 869A FD00 3B41 A8C7 DCD0 2834 270C" /* ¿ø†šý.;A¨ÇÜÐ(4'. */ - $"B93C 8702 5B16 8A32 0289 979B 0A35 3A7B" /* ¹<‡.[.Š2.‰—›Â5:{ */ - $"5870 6189 03C2 DD00 FAB2 B137 AB93 3EF5" /* Xpa‰.ÂÝ.ú²±7«“>õ */ - $"24E3 1FE1 A206 963E 1344 FE12 285A 5C52" /* $ã.á¢.–>.Dþ.(Z\R */ - $"692E D315 6C73 2CBE 7ADC 81BC EBC8 13EA" /* i.Ó.ls,¾zܼëÈ.ê */ - $"796B 6056 E9E7 D971 6E09 7086 252C 6A19" /* yk`VéçÙqnÆp†%,j. */ - $"7351 153D F4C4 FE01 6235 917F B203 171A" /* sQ.=ôÄþ.b5‘.²... */ - $"1822 B42B 9226 D163 5572 7E7E C508 BEBA" /* ."´+’&ÑcUr~~Å.¾º */ - $"D0D2 1C24 8D62 565D C183 F78D 4726 0541" /* ÐÒ.$bV]Áƒ÷G&.A */ - $"F829 10C7 1B21 E59C C4E5 7688 6268 FABC" /* ø).Ç.!åœÄåvˆbhú¼ */ - $"C0B9 6C02 8820 3F44 54A7 8C83 F14F 61B8" /* À¹l.ˆ ?DT§ŒƒñOa¸ */ - $"707C AB32 9D59 F01E D18A 37FC 40F9 5C59" /* p|«2Yð.ÑŠ7ü@ù\Y */ - $"EEA8 E442 FDC8 CA73 970F 6EE0 1348 AC8E" /* î¨äBýÈÊs—.nà.H¬Ž */ - $"9D65 4DA9 2820 AEDB A7F3 C1B4 8E3F 8780" /* eM©( ®Û§óÁ´Ž?‡€ */ - $"8DA9 F7D9 F116 DD30 778E 4FB6 49D3 AFE8" /* ©÷Ùñ.Ý0wŽO¶IÓ¯è */ - $"74B1 EB63 92B8 4210 3B22 3613 6784 41A2" /* t±ëc’¸B.;"6.g„A¢ */ - $"5953 1EFF 16A9 1769 9852 73D0 B6C2 3523" /* YS.ÿ.©.i˜RsжÂ5# */ - $"854B 1247 531D 47C5 7AFC 1B6B F0C4 2E2F" /* …K.GS.GÅzü.kðÄ./ */ - $"6C60 82C9 9C4D 2FAD 25A5 BEC6 8590 7388" /* l`‚ÉœM/­%¥¾Æ…sˆ */ - $"5D15 9A65 E013 D48B 7D9C 34B2 A617 75A8" /* ].šeà.Ô‹}œ4²¦.u¨ */ - $"8E8E 2D91 1AEC 26D5 8B9C D03C A02A A829" /* ŽŽ-‘.ì&Õ‹œÐ< *¨) */ - $"738D 9A4E 8F31 82A9 39B7 7CFE D412 810E" /* sšN1‚©9·|þÔ.. */ - $"1372 6D79 8D49 BAC1 9FFB 5D52 56AD 488F" /* .rmyIºÁŸû]RV­H */ - $"4E1D A232 7348 1FE2 483F AB9F A23C 0997" /* N.¢2sH.âH?«Ÿ¢<Æ— */ - $"678D 1AB7 7F66 8927 7DED 2A66 E03B 05C9" /* g.·.f‰'}í*fà;.É */ - $"0420 66A2 E0AE E1B9 259E 64C9 FF0E A7C7" /* . f¢à®á¹%ždÉÿ.§Ç */ - $"5E9D 69F4 DD50 394C 344E 9DA9 6BCA 3D9F" /* ^iôÝP9L4N©kÊ=Ÿ */ - $"8FA9 C156 3248 2310 8AB9 6131 B94F FF36" /* ©ÁV2H#.йa1¹Oÿ6 */ - $"DF00 9E80 5713 E9AD 3B07 879E C876 E063" /* ß.ž€W.é­;.‡žÈvàc */ - $"38D8 2776 3081 5810 1760 927C D93C EE88" /* 8Ø'v0X..`’|Ù<îˆ */ - $"518B 755A EBF1 B276 C65B 98DD 1421 8AA1" /* Q‹uZëñ²vÆ[˜Ý.!Š¡ */ - $"27D2 A8B2 5E3E B7B7 8F73 CDCB 9896 D80F" /* 'Ò¨²^>··s͢–Ø. */ - $"1D50 2E28 4F54 26A9 E68F 822C 3031 0A5B" /* .P.(OT&©æ‚,01Â[ */ - $"213A 8ED8 B1B8 C32C F5EF 6784 3641 A888" /* !:ŽØ±¸Ã,õïg„6A¨ˆ */ - $"1AF9 941B E9B2 42C0 D9BE AAD7 2727 9E13" /* .ù”.é²BÀÙ¾ª×''ž. */ - $"284F A530 1F62 679B 7860 E677 9E24 3663" /* (O¥0.bg›x`æwž$6c */ - $"E7D1 E4B5 D37B C274 9ECB CFA2 CC95 8A75" /* çÑäµÓ{ÂtžËϢ̕Šu */ - $"0C3A FB7D F074 1433 5EC7 1FC4 330E F221" /* .:û}ðt.3^Ç.Ä3.ò! */ - $"AE39 4A04 097F 4B21 27CD C193 39CB 3AB2" /* ®9J.Æ.K!'ÍÁ“9Ë:² */ - $"0B6E D8E0 54EA 0F75 15F9 D75D 0D82 624D" /* .nØàTê.u.ù×].‚bM */ - $"7D19 8E11 1AD0 764F CEA8 F0FE 2913 6841" /* }.Ž..ÐvOΨðþ).hA */ - $"89B8 CA62 C997 34B9 5950 4842 4F13 1ACD" /* ‰¸ÊbÉ—4¹YPHBO..Í */ - $"39AD 30CA 4ED2 A17D 0B09 206B 9426 EF50" /* 9­0ÊNÒ¡}.Æ k”&ïP */ - $"63C6 386E 74BB BDE0 420F 6154 5260 E1A2" /* cÆ8nt»½àB.aTR`ᢠ*/ - $"8546 3192 76D1 1F38 268E 7AC6 049F 321D" /* …F1’vÑ.8&ŽzÆ.Ÿ2. */ - $"CB51 35C7 067C 961B DA2F 4BCB E065 A8DB" /* ËQ5Ç.|–.Ú/KËàe¨Û */ - $"16C9 1F05 ABAF 93FF 333A F049 3161 6838" /* .É..«¯“ÿ3:ðI1ah8 */ - $"6E1A FEF2 564C 3F48 3800 BC9C F009 AF34" /* n.þòVL?H8.¼œðƯ4 */ - $"2241 15D4 764F 4764 CEDF 6D7D 2E9C 8141" /* "A.ÔvOGdÎßm}.œA */ - $"1E00 E109 D827 DDAA A47C 2854 9229 8998" /* ..áÆØ'ݪ¤|(T’)‰˜ */ - $"9175 1FFB 496B 36C7 3695 3631 390B 06E6" /* ‘u.ûIk6Ç6•619..æ */ - $"EB0D 3BA7 F1BE A2FF 6D3A 9FB6 FCFD ADEF" /* ë.;§ñ¾¢ÿm:Ÿ¶üý­ï */ - $"EDBA 3FDB 632F EDB1 BF6D BE7E DB9F 97ED" /* íº?Ûc/í±¿m¾~ÛŸ—í */ - $"45FD AB93 F6E8 7FED A7F7 DAC3 FC34 6F43" /* Eý«“öè.í§÷ÚÃü4oC */ - $"E1DB 5507 762F DB7E 5F51 DDF5 1DFE DD07" /* áÛU.v/Û~_QÝõ.þÝ. */ - $"E1FD A67F B4E6 7EDB 8BF6 AE3F B6BC D3E4" /* áý¦.´æ~Û‹ö®?¶¼Óä */ - $"D00B 0F87 A0FF 2AC3 3F6D 84F8 7475 99F2" /* Ð..‡ ÿ*Ã?m„øtu™ò */ - $"F382 BE95 100F 8FEE C1C8 D086 E345 E973" /* 󂾕..îÁÈІãEés */ - $"0FE4 06B6 7813 7115 B8D0 D91B C698 D10D" /* .ä.¶x.q.¸ÐÙ.ƘÑ. */ - $"A370 844F 9330 E047 0201 F880 D146 6522" /* £p„O“0àG..ø€ÑFe" */ - $"8E52 12DE 3D1A 9231 5315 682E 4706 8685" /* ŽR.Þ=.’1S.h.G.†… */ - $"DA39 C538 9828 7ED0 714F 3E27 532A 3840" /* Ú9Å8˜(~ÐqO>'S*8@ */ - $"C912 3E46 8205 3243 7835 7284 12D6 CCF5" /* É.>F‚.2Cx5r„.ÖÌõ */ - $"36AF 0975 8A27 4F44 3857 B5A3 160D 1391" /* 6¯ÆuŠ'OD8Wµ£...‘ */ - $"8005 2453 86CB 51B3 E493 EA9C 707F 7047" /* €.$S†ËQ³ä“êœp.pG */ - $"1DA8 1386 91D1 6105 7D84 1563 FC52 D5D3" /* .¨.†‘Ña.}„.cüRÕÓ */ - $"EDA7 D4A0 4AC1 BB4E 49D6 62F4 CA92 CE8E" /* í§Ô JÁ»NIÖbôÊ’ÎŽ */ - $"8DE0 84DC 418D ACE2 71AD 9206 3C98 3281" /* à„ÜA¬âq­’.<˜2 */ - $"104E A1F2 8982 6ED6 223E B67B BE6A C51F" /* .N¡ò‰‚nÖ">¶{¾jÅ. */ - $"4BF8 6C35 B6A4 5EC8 87BB 4834 7CF3 16AC" /* Køl5¶¤^ȇ»H4|ó.¬ */ - $"2453 B3DA 3503 94D6 2E70 2B6F 975E 21DB" /* $S³Ú5.”Ö.p+o—^!Û */ - $"F409 0368 9A2E DFB2 7A4B 9A6F 4165 1173" /* ôÆ.hš.ß²zKšoAe.s */ - $"A53E 329A 7925 FB80 9664 2C09 A9E5 715C" /* ¥>2šy%û€–d,Æ©åq\ */ - $"E42F 8E14 EC68 05A8 D565 53C2 9C98 86A2" /* ä/Ž.ìh.¨ÕeSœ˜†¢ */ - $"2C2D 6443 A1D0 A619 2320 6CD3 FE48 8006" /* ,-dC¡Ð¦.# lÓþH€. */ - $"FC0F 3690 DF76 1FD8 2E16 0705 D91F EEBE" /* ü.6ßv.Ø....Ù.î¾ */ - $"E961 32B9 E252 4F0E EE4A 6F73 AEBB 014A" /* éa2¹âRO.îJos®».J */ - $"8F45 1551 9123 7C3A 13F8 1B57 EB6A 0AFB" /* E.Q‘#|:.ø.WëjÂû */ - $"9AE9 65F5 9FDE 5F1C 7C23 84F1 6DCD CC52" /* šéeõŸÞ_.|#„ñmÍÌR */ - $"97DD 03E6 C571 0C23 F06B 9F21 2E2C 79D5" /* —Ý.æÅq.#ðkŸ!.,yÕ */ - $"1827 1436 E6FB C5FB BA11 617B 9B32 3DCD" /* .'.6æûÅûº.a{›2=Í */ - $"B0AD AA8F 53D0 2F20 849C D667 9436 A677" /* °­ªSÐ/ „œÖg”6¦w */ - $"38C9 1B5A 26E2 B4D4 29BB 2D9E 56D4 652D" /* 8É.Z&â´Ô)»-žVÔe- */ - $"9A12 FC7E FBD5 0075 3EC9 64FE D0CE 06A2" /* š.ü~ûÕ.u>ÉdþÐÎ.¢ */ - $"B63F 8731 DB8A 6917 26EA CCFC C1E6 10AA" /* ¶?‡1ÛŠi.&êÌüÁæ.ª */ - $"704E 20EA 7518 0416 6BBE 2867 9470 9FE6" /* pN êu...k¾(g”pŸæ */ - $"3D2A D178 6CD1 0B7D E518 4682 FC48 EA03" /* =*ÑxlÑ.}å.F‚üHê. */ - $"EFA0 ADEE B643 CDFD 796D C309 E13B 9DD3" /* ï ­î¶CÍýymÃÆá;Ó */ - $"82CC 1237 8D6B 9CB9 0438 AF1A 6190 136E" /* ‚Ì.7kœ¹.8¯.a.n */ - $"A170 6109 4BA8 FD0B 4C10 DE61 71A9 A5FF" /* ¡paÆK¨ý.L.Þaq©¥ÿ */ - $"5AD1 3895 15D0 912A BC62 5344 A7FD 7B9B" /* ZÑ8•.Б*¼bSD§ý{› */ - $"0360 8C71 DD04 20C7 4685 E6B7 7941 7BD7" /* .`ŒqÝ. ÇF…æ·yA{× */ - $"DBBB 3F61 742B D692 AD3D B778 6442 3DD1" /* Û»?at+Ö’­=·xdB=Ñ */ - $"A97E 1312 9AF4 05C1 7B33 9FE2 B3F5 D16C" /* ©~..šô.Á{3Ÿâ³õÑl */ - $"875D 7109 13EC BB96 0664 DF60 1958 8DE5" /* ‡]qÆ.ì»–.dß`.Xå */ - $"5B3F 3E75 9D21 0415 CE9C 3172 87C7 FF05" /* [?>u!..Μ1r‡Çÿ. */ - $"F787 4F14 E63B 4DCE 247D B3A3 475C 5336" /* ÷‡O.æ;MÎ$}³£G\S6 */ - $"C794 AF23 6415 68C6 B893 1B16 8C81 3F43" /* Ç”¯#d.hƸ“..Œ?C */ - $"C455 6EB8 8D5A 6919 4C3A D980 BFB1 3699" /* ÄUn¸Zi.L:Ù€¿±6™ */ - $"C790 C7D1 7B05 12AA 803A 172B DEF2 00CC" /* ÇÇÑ{..ª€:.+Þò.Ì */ - $"FF38 62C8 1815 1D3A F60D 2B9B 87A0 05C5" /* ÿ8bÈ...:ö.+›‡ .Å */ - $"3587 0181 8754 06D7 2CFC 78B8 0C65 D5BC" /* 5‡.‡T.×,üx¸.eÕ¼ */ - $"2903 C07C 0631 A0B9 E94E 192F DE4B 4924" /* ).À|.1 ¹éN./ÞKI$ */ - $"A4F0 BB9A 49C5 B751 38EB 7289 9806 FC5C" /* ¤ð»šIÅ·Q8ër‰˜.ü\ */ - $"D822 ED93 CA92 14B6 5056 017F 7826 CDE1" /* Ø"í“Ê’.¶PV..x&Íá */ - $"8401 9F6C A7F7 4AD5 E86F FDC3 05AF 6AE3" /* „.Ÿl§÷JÕèoýÃ.¯jã */ - $"5EED 07E3 E5ED 7EE7 FB97 0B99 E191 605B" /* ^í.ãåí~çû—.™á‘`[ */ - $"955A 6A3C 33C6 2BB8 9562 0E38 09C1 1ED9" /* •Zj<3Æ+¸•b.8ÆÁ.Ù */ - $"8914 73AF E9AA 7B2F 214E 7EEA 98E8 B976" /* ‰.s¯éª{/!N~ê˜è¹v */ - $"E058 E0B5 6DB4 5B1C F212 2C8E 0AE5 7100" /* àXàµm´[.ò.,ŽÂåq. */ - $"BC1E 84CD 0598 7CF9 EA4E 1E96 2B4A DE9E" /* ¼.„Í.˜|ùêN.–+JÞž */ - $"6CE9 E79B 0336 9059 E109 DF83 A2AE 9E74" /* léç›.6YáÆßƒ¢®žt */ - $"5BB1 0236 590C 66CD 0658 ECE5 50A2 EDDD" /* [±.6Y.fÍ.XìåP¢íÝ */ - $"D7BB DAF7 548B 7F21 2A40 7821 FDA2 62B6" /* ×»Ú÷T‹.!*@x!ý¢b¶ */ - $"C862 B0B2 96CF 27D5 EC9D F5C8 42D8 F42A" /* Èb°²–Ï'ÕìõÈBØô* */ - $"5962 F21A D191 6744 1AE2 64B4 6744 A1B2" /* Ybò.Ñ‘gD.âd´gD¡² */ - $"7625 FF0D F0CF A1F8 3273 C4B8 FCCE C2BC" /* v%ÿ.ðÏ¡ø2sĸüμ */ - $"EDD5 F0C6 765F 2446 5EF5 2195 04EE C94B" /* íÕðÆv_$F^õ!•.îÉK */ - $"C9C2 4F82 0D0F 6034 3560 64A8 C372 4E17" /* ÉÂO‚..`45`d¨ÃrN. */ - $"D4F6 B2DC 2162 A6DC 9B35 5F36 628E EA58" /* Ôö²Ü!b¦Ü›5_6bŽêX */ - $"B2EF D0B8 79FF 3F60 39DC 34C9 8DD1 C7DA" /* ²ïиyÿ?`9Ü4ÉÑÇÚ */ - $"BFFD 9220 B977 42CD 1F4E 00C7 1A7B F29F" /* ¿ý’ ¹wBÍ.N.Ç.{òŸ */ - $"9738 8D5E 3E5F BA1F D4BD 0592 2006 1216" /* —8^>_º.Ô½.’ ... */ - $"D478 DE72 171A A49D 9C4A 0691 CD59 6FB3" /* ÔxÞr..¤œJ.‘ÍYo³ */ - $"F3C5 B3CD DCC8 5794 133C 85B3 176A 0C6A" /* óųÍÜÈW”.<…³.j.j */ - $"323E C74F 7CE3 4042 38AB E9CA 5700 E39B" /* 2>ÇO|ã@B8«éÊW.ã› */ - $"26D3 62B7 59F8 966D A789 35AA C72D 9943" /* &Ób·Yø–m§‰5ªÇ-™C */ - $"C884 2E53 30B3 D351 EFCC 6BF8 9889 8AB6" /* È„.S0³ÓQïÌkø˜‰Š¶ */ - $"E284 F5A4 64BD F89F 98A4 8082 6292 48EB" /* â„õ¤d½øŸ˜¤€‚b’Hë */ - $"2039 4A80 D5D7 BEFC 2DC1 69A9 F484 9B4E" /* 9J€Õ×¾ü-Ái©ô„›N */ - $"94C9 6E87 31A6 6D4E 23DB 77A9 37D5 CEE9" /* ”Én‡1¦mN#Ûw©7ÕÎé */ - $"10B5 22DB 58B2 3DFB 973A E321 F02A 2985" /* .µ"ÛX²=û—:ã!ð*)… */ - $"AE7E F964 9A23 4B8D 90FD 75F4 9944 3CEB" /* ®~ùdš#Kýuô™D<ë */ - $"C5C5 B0BA DA1C AA0A B59A EFCA 903A 972B" /* ÅŰºÚ.ªÂµšïÊ:—+ */ - $"10E9 2A66 2BAB 3E63 8312 E494 A82C AEE8" /* .é*f+«>cƒ.䔨,®è */ - $"DE3B 902F 4DE5 A934 7FA5 59D8 B355 75C7" /* Þ;/Må©4.¥YسUuÇ */ - $"DC51 6208 6D60 DE89 F04A F698 FC35 5341" /* ÜQb.m`Þ‰ðJö˜ü5SA */ - $"A8C7 894B 5E8F 0638 0F21 36AB 23FF 37BF" /* ¨Ç‰K^.8.!6«#ÿ7¿ */ - $"CA6E C0CE 1C93 9BB1 FEA7 49E8 9BA5 7F32" /* ÊnÀÎ.“›±þ§I蛥.2 */ - $"4C9D C8BA 821C 1E07 F277 BE63 241C D5F6" /* LȺ‚...òw¾c$.Õö */ - $"07CB 7A98 E51E B0FC B312 223C 21BF 5DEE" /* .Ëz˜å.°ü³."Î.5" */ - $"1088 A628 490C 5F8D 64C4 7E17 CBD3 290D" /* .ˆ¦(I._dÄ~.ËÓ). */ - $"91B1 B073 AD4A BF5B A1E9 6306 3E9A F87E" /* ‘±°s­J¿[¡éc.>šø~ */ - $"2DEC 7390 2CF5 3305 93C2 15DA 7FFF 7FC6" /* -ìs,õ3.“Â.Ú.ÿ.Æ */ - $"0578 C93E BF93 5B69 25D4 E0F9 5726 0D7E" /* .xÉ>¿“[i%ÔàùW&.~ */ - $"9C06 C76B 1BF5 3206 F26C 4F57 6A13 7488" /* œ.Çk.õ2.òlOWj.tˆ */ - $"07F4 1787 316E 19B5 2CB4 D7B8 23EE BF15" /* .ô.‡1n.µ,´×¸#î¿. */ - $"84F7 C141 CE7E 358F F83B 081D 2680 C5CB" /* „÷ÁAÎ~5ø;..&€ÅË */ - $"2002 0FFB D329 10E3 1880 E0F6 29FF 14F6" /* ..ûÓ).ã.€àö)ÿ.ö */ - $"1447 24FF 4BDD 371B 00F3 0334 6FE5 D217" /* .G$ÿKÝ7..ó.4oåÒ. */ - $"8E7D 3CCB EC04 D019 0583 0792 D4F4 59E5" /* Ž}<Ëì.Ð..ƒ.’ÔôYå */ - $"0914 52FB CE7A 2EFD B899 ED16 38FB E1D4" /* Æ.RûÎz.ý¸™í.8ûáÔ */ - $"3312 BAAE 3EF3 45B7 2A77 62F3 4787 8900" /* 3.º®>óE·*wbóG‡‰. */ - $"050D 5A64 92D3 64E7 7950 4234 FCC0 0EC6" /* ..Zd’ÓdçyPB4üÀ.Æ */ - $"004C 8652 616B B5FF 87F6 72D0 400B 9574" /* .L†Rakµÿ‡örÐ@.•t */ - $"7ADD 2EE6 F979 EE70 393F 5E65 09EC 561B" /* zÝ.æùyîp9?^eÆìV. */ - $"2FF4 F6FA 9226 2AA7 C2D2 4517 2258 15C7" /* /ôöú’&*§ÂÒE."X.Ç */ - $"D27E DE80 0000 0009 BB69 0154 3C66 FD24" /* Ò~Þ€...Æ»i.TÃEijÀfŠ'ÃÓ */ - $"7A8A 6368 2F2C 3F2F 5D43 59ED 5E40 9E4F" /* zŠch/,?/]CYí^@žO */ - $"59BB 6A03 B7F8 083A 021D F8F0 79AF 43B0" /* Y»j.·ø.:..øðy¯C° */ - $"2270 F775 B8D8 FB59 371A 8B22 9F0B 55FA" /* "p÷u¸ØûY7.‹"Ÿ.Uú */ - $"C9B1 5565 0914 AA67 2D9E 81B2 60FC 1333" /* ɱUeÆ.ªg-ž²`ü.3 */ - $"318F 21E9 97E4 1400 F69E F709 7AE3 82A5" /* 1!é—ä..öž÷Æzã‚¥ */ - $"C9DE 7D16 1DF8 EDF8 FC5E DB3E FC2A F822" /* ÉÞ}..øíøü^Û>ü*ø" */ - $"886E F247 9BC1 250E 905C 4AF7 4B22 3595" /* ˆnòG›Á%.\J÷K"5• */ - $"0835 2567 EEC1 C4C8 B70D D782 6A22 C9DA" /* .5%gîÁÄÈ·.ׂj"ÉÚ */ - $"ADA3 0370 EED9 E428 E163 963A E6F0 5D4A" /* ­£.pîÙä(ác–:æð]J */ - $"F42A D11F B46D 7FBC 2D87 4274 4756 896E" /* ô*Ñ.´m.¼-‡BtGV‰n */ - $"C489 80C0 62F6 88A8 184A 79BE 3068 A9AF" /* ĉ€Àböˆ¨.Jy¾0h©¯ */ - $"D703 390B 1A76 3136 B799 726A AAA8 C23D" /* ×.9..v16·™rjª¨Â= */ - $"EEB0 E0F1 49E1 A6B7 204F 7BF3 6E44 F25E" /* î°àñIᦷ O{ónDò^ */ - $"7E0A 5125 CA89 B477 15CD 83CC CD21 C6BE" /* ~ÂQ%ʉ´w.̓ÌÍ!ƾ */ - $"F20B 99F3 C30C 5113 2E0A FF7E 1034 1BFF" /* ò.™óÃ.Q..Âÿ~.4.ÿ */ - $"0378 72CF B0EE D132 2A2D 14A9 E37F 6B10" /* .xrϰîÑ2*-.©ã.k. */ - $"B5CE 0500 0000 0000 0000 0160 A7E3 A715" /* µÎ.........`§ã§. */ - $"0C13 DE44 025B 9720 0000 0000 0000 0001" /* ..ÞD.[— ........ */ - $"E0F5 5A21 77FB C1F6 EAF0 244A EE78 B6FA" /* àõZ!wûÁöêð$Jîx¶ú */ - $"1769 3D98 AA28 2EB6 9826 A16B D6B8 BA89" /* .i=˜ª(.¶˜&¡kÖ¸º‰ */ - $"26C6 25C9 9E66 FD9C 6D2D FCDA FCB9 6AB2" /* &Æ%Éžfýœm-üÚü¹j² */ - $"B42A 7008 5069 CB61 D530 B47A FCFF 7F95" /* ´*p.PiËaÕ0´züÿ.• */ - $"FA58 2D11 111A 53BF FB17 59E1 63E7 0FAD" /* úX-...S¿û.Yácç.­ */ - $"B016 A862 3107 8DF0 7112 DD6A B6E3 2477" /* °.¨b1.ðq.Ýj¶ã$w */ - $"3162 94F0 6826 75B0 D0B8 4C13 21C7 E4BC" /* 1b”ðh&u°Ð¸L.!Çä¼ */ - $"FB86 7A83 DF1C A4D9 C3B4 E3DE C334 1633" /* û†zƒß.¤ÙôãÞÃ4.3 */ - $"DC27 76B9 7ADF 50CA F95E C7C9 D5EB 402C" /* Ü'v¹zßPÊù^ÇÉÕë@, */ - $"276F A0B0 D88B CF4A 0FD2 380A E3E7 2BA5" /* 'o °Ø‹ÏJ.Ò8Âãç+¥ */ - $"DD24 A247 B631 75B1 6D3A 4C60 9BAB E4C5" /* Ý$¢G¶1u±m:L`›«äÅ */ - $"BBCB 2972 36B9 AC74 5FF5 B5DB 231B 95F3" /* »Ë)r6¹¬t_õµÛ#.•ó */ - $"7CFF 8E5F 86E9 1906 B3DF 75C7 0364 6192" /* |ÿŽ_†é..³ßuÇ.da’ */ - $"A000 0000 0000 0000 0000 003B B1A0 0000" /*  ..........;± .. */ - $"0000 0000 0000 0000 0000 0016 D51B CEEA" /* ............Õ.Îê */ - $"0406 C003 4E50 C0B8 8DB2 F37C FF8E 5F86" /* ..À.NPÀ¸²ó|ÿŽ_† */ - $"E919 06B3 DF75 C703 6461 92A0 0000 0000" /* é..³ßuÇ.da’ .... */ - $"0000 0000 0000 3BB1 A000 0000 0000 0000" /* ......;± ....... */ - $"0000 0000 0000 16D5 1BCE EA04 06C0 034E" /* .......Õ.Îê..À.N */ - $"50C0 B88D B2F4 4BED 0C57 2F64 38E7 DFE6" /* PÀ¸²ôKí.W/d8çßæ */ - $"95DB 93EF B9ED 1250 6A6A A6E3 4478 1E7E" /* •Û“ï¹í.Pjj¦ãDx.~ */ - $"F105 8E1B 961B 230C 9500 0000 0000 0C18" /* ñ.Ž.–.#.•....... */ - $"0EA3 5F13 6306 E1B5 4B22 3D26 79A1 06E4" /* .£_.c.áµK"=&y¡.ä */ - $"228F F320 0B74 8820 0000 0000 0000 0007" /* "ó .tˆ ........ */ - $"9F62 443B 9A51 EAB0 7C1A A374 E7F1 52F3" /* ŸbD;šQê°|.£tçñRó */ - $"3BB8 C1E0 5919 6C04 A2E2 1032 6917 1394" /* ;¸ÁàY.l.¢â.2i..” */ - $"CCBE 472A 0652 C144 6D1E 755C ECF9 9725" /* ̾G*.RÁDm.u\ìù—% */ - $"A84A 55AE 7A0E 6730 FCA7 B6E0 FF31 08C0" /* ¨JU®z.g0ü§¶àÿ1.À */ - $"3E76 4DDC 9E24 A60B C4A7 4CDD C221 1941" /* >vMÜž$¦.ħLÝÂ!.A */ - $"0810 2DE3 206F C551 4910 77AA 762A 1FF2" /* ..-ã oÅQI.wªv*.ò */ - $"D39A 0ADC 1089 90F8 D098 1E77 BDD1 AF74" /* ÓšÂÜ.‰øÐ˜.w½Ñ¯t */ - $"4DEF D00D 0B2C CA2F 9EDC 27C4 35F9 F924" /* MïÐ..,Ê/žÜ'Ä5ùù$ */ - $"67FF 74E5 A746 B627 6267 F6D0 9B94 22D4" /* gÿtå§F¶'bgöЛ”"Ô */ - $"5FFE DF67 A7A9 E3CA 02A5 44D1 E926 DCA4" /* _þßg§©ãÊ.¥DÑé&ܤ */ - $"7490 4AB8 E094 7037 FF7C 8CF7 2A9B B784" /* tJ¸à”p7ÿ|Œ÷*›·„ */ - $"794E 9026 D48F FF7F F013 AABF F874 63DA" /* yN&Ôÿ.ð.ª¿øtcÚ */ - $"0302 FBFA AA6A 31D5 E2DF 85F7 2ACD D98C" /* ..ûúªj1Õâß…÷*ÍÙŒ */ - $"175D 1243 F1C0 CEA2 344C B6FC ADCF C6AA" /* .].CñÀ΢4L¶ü­Ïƪ */ - $"5CAE FA82 783F 58DD 754D 5C63 A018 19F8" /* \®ú‚x?XÝuM\c ..ø */ - $"7EFE 8953 AE16 22B9 4ED7 43D2 8A0B FA52" /* ~þ‰S®."¹N×CÒŠ.úR */ - $"5703 08CA 555B E51E 307B 0565 E165 22F3" /* W..ÊU[å.0{.eáe"ó */ - $"7130 0CEC CA23 576D 8D58 BED1 FEB6 9A2F" /* q0.ìÊ#WmX¾Ñþ¶š/ */ - $"DCEA 3288 3EEC B12A D43C B191 2627 7723" /* Üê2ˆ>ì±*Ô<±‘&'w# */ - $"F40F 1B7A F1E3 9A7E 366D 7490 EE80 3570" /* ô..zñãš~6mtî€5p */ - $"CB59 D05D F384 AA96 71FE 68E8 4D32 F9D2" /* ËYÐ]󄪖qþhèM2ùÒ */ - $"48BC 7B03 EA3B 879E 2E96 671F 8098 CE76" /* H¼{.ê;‡ž.–g.€˜Îv */ - $"87D8 0336 5C88 91F4 3C69 D76B 4DEF 29DA" /* ‡Ø.6\ˆ‘ô`H ‰{. */ - $"BCA8 E157 DFD5 E879 C14C 1B1A 3431 2856" /* ¼¨áWßÕèyÁL..41(V */ - $"0E74 D87F 7691 A923 632A 5EBC 6E95 6A46" /* .tØ.v‘©#c*^¼n•jF */ - $"8E68 7118 3704 6E41 37CB C9AC 7F84 1005" /* Žhq.7.nA7Ëɬ.„.. */ - $"C308 7C90 C6E0 B56C 8CF8 3C33 A97E C46C" /* Ã.|ÆàµlŒø<3©~Äl */ - $"E373 91A9 4A3F 7331 481D 843F 0472 59DC" /* ãs‘©J?s1H.„?.rYÜ */ - $"0837 85BA 4867 C202 6BFC 7433 F093 530F" /* .7…ºHgÂ.küt3ð“S. */ - $"D721 8927 26CF AA6B B4E1 7981 FCE4 9F4E" /* ×!‰'&Ϫk´áyüäŸN */ - $"1105 9E7B 7F68 1CE7 D811 E270 FCA3 9CDE" /* ..ž{.h.çØ.âpü£œÞ */ - $"BFE6 48BA AC07 B55E 4E7F 5946 115B B1DC" /* ¿æHº¬.µ^N.YF.[±Ü */ - $"F694 3A9B EADD 7971 E0F1 B6E1 C6FF 4337" /* ö”:›êÝyqàñ¶áÆÿC7 */ - $"F543 A074 FC74 AD1F 45BF 7867 C472 7605" /* õC tüt­.E¿xgÄrv. */ - $"1786 E496 2D22 22BE 5760 9ACE A5C9 22B9" /* .†ä–-""¾W`šÎ¥É"¹ */ - $"9A14 4136 93E4 3E4A 715C 6F69 8447 5764" /* š.A6“ä>Jq\oi„GWd */ - $"D761 77A8 2C3F E200 ACAD 8331 11D0 ABE6" /* ×aw¨,?â.¬­ƒ1.Ыæ */ - $"EA7B 5A22 58CF 097E 732F 894B E99C 6BAF" /* ê{Z"XÏÆ~s/‰Kéœk¯ */ - $"B36C 68AA 5668 EF92 66E9 DDF9 FF78 DB89" /* ³lhªVhï’féÝùÿxÛ‰ */ - $"FC78 2032 99D9 62F0 1380 3FE8 41DF F341" /* üx 2™Ùbð.€?èAßóA */ - $"F1FD 7F08 CE2E F09A 9335 6735 0FAD 8093" /* ñý..Î.ðš“5g5.­€“ */ - $"B6B1 53A2 964F EA7E 72A2 9A29 794D 98F0" /* ¶±S¢–Oê~r¢š)yM˜ð */ - $"DD57 AE65 C61E DDEC BDB4 35C2 D050 E063" /* ÝW®eÆ.Ýì½´5ÂÐPàc */ - $"5F54 BCA5 928D 786D CAE3 8F96 BFEB 027E" /* _T¼¥’xmÊã–¿ë.~ */ - $"6BBC 8795 7C88 1A2C 9908 36A1 6CAB 9268" /* k¼‡•|ˆ.,™.6¡l«’h */ - $"EB0D 816F F34D 55F5 B562 BCFF 4190 EE42" /* ë.oóMUõµb¼ÿAîB */ - $"F195 E7F3 E220 7E51 74A2 FA23 23F7 20F0" /* ñ•çóâ ~Qt¢ú##÷ ð */ - $"985F 011C 34B8 C988 C519 C623 81BC D026" /* ˜_..4¸ÉˆÅ.Æ#¼Ð& */ - $"A8C5 B82C 7A7F 86F7 E60E 44F2 CD53 6FAB" /* ¨Å¸,z.†÷æ.DòÍSo« */ - $"2D69 1FD4 75B7 A011 80E7 09B3 B9CF 4503" /* -i.Ôu· .€çƳ¹ÏE. */ - $"F4A5 1DE3 AE8A 96F7 E245 0DF9 3859 24FA" /* ô¥.㮊–÷âE.ù8Y$ú */ - $"7B43 665F B15E D4D3 FB2A 666E FB6A 6CA8" /* {Cf_±^ÔÓû*fnûjl¨ */ - $"9CAF C052 D658 6DC3 BDD1 C752 21FA 6426" /* œ¯ÀRÖXmýÑÇR!úd& */ - $"857C D05D 41C2 0241 306C 6FD4 81E3 69F7" /* …|Ð]AÂ.A0loÔãi÷ */ - $"A6F5 227F 39F9 780E 829A 17A9 C649 2BF5" /* ¦õ".9ùx.‚š.©ÆI+õ */ - $"01DD E500 A973 E599 890C A548 CE34 2877" /* .Ýå.©s噉.¥HÎ4(w */ - $"D160 A2EE 4B3B CC7A 0C87 6723 51FD C222" /* Ñ`¢îK;Ìz.‡g#QýÂ" */ - $"9BFB E72D 2769 6250 2054 22C9 ABB2 3125" /* ›ûç-'ibP T"É«²1% */ - $"7DA0 73A3 C083 1AAD 90F2 F0A8 C22D 9DF5" /* } s£Àƒ.­òð¨Â-õ */ - $"3FFB 6B56 18BE 61A6 B198 F1BC 1E4E 0CFE" /* ?ûkV.¾a¦±˜ñ¼.N.þ */ - $"B323 8275 A644 CAC4 D36B 9AF9 FCC8 5DEC" /* ³#‚u¦DÊÄÓkšùüÈ]ì */ - $"292B CC9B A0B6 9148 09DF E46D 1B2C 4EDF" /* )+Ì› ¶‘HÆßäm.,Nß */ - $"EDB9 2DB4 BAD5 C50B 2115 C476 E09A F407" /* í¹-´ºÕÅ.!.Ävàšô. */ - $"5EE8 2E9F 870F A319 32D4 EBEC CB7B FDE9" /* ^è.Ÿ‡.£.2ÔëìË{ýé */ - $"FB5C 0D41 61F3 BA97 0F9E 558F 6E39 C213" /* û\.Aaóº—.žUn9Â. */ - $"3101 A5E8 ECEC 15E5 4F29 F69A 58CD D82D" /* 1.¥èìì.åO)öšXÍØ- */ - $"986E E8E0 6898 17CC 98C4 C851 AC75 9306" /* ˜nèàh˜.̘ÄÈQ¬u“. */ - $"5241 0350 E2EB 38CA 1682 6132 FF45 578A" /* RA.Pâë8Ê.‚a2ÿEWŠ */ - $"FA7F 7557 AC2C 9A18 3835 A62B 7D09 0992" /* ú.uW¬,š.85¦+}ÆÆ’ */ - $"EF78 BD49 5317 373A B07D 6420 DC30 5067" /* ïx½IS.7:°}d Ü0Pg */ - $"A659 F316 4436 8E8E 9786 1163 A6A5 B841" /* ¦Yó.D6ŽŽ—†.c¦¥¸A */ - $"99AA 4E1C 6163 309A 3C23 0208 FF4B 2967" /* ™ªN.ac0š<#..ÿK)g */ - $"B7F7 37E4 A337 D0DC C48A A742 FB2D C529" /* ·÷7ä£7ÐÜÄŠ§Bû-Å) */ - $"BC6C 5BBE BC5C 03B1 F87F D7EA F5AC B94B" /* ¼l[¾¼\.±ø.×êõ¬¹K */ - $"5A88 84AB E44E BE6A F337 96B0 7CB6 1140" /* Zˆ„«äN¾jó7–°|¶.@ */ - $"25CB 45D6 BE02 A9D4 7868 1EDD F660 7963" /* %ËEÖ¾.©Ôxh.Ýö`yc */ - $"B438 C030 3EA5 51FA F451 FA84 A6FF 2E5A" /* ´8À0>¥QúôQú„¦ÿ.Z */ - $"EA95 2300 C0F4 39AA 42BA 4120 4EEC AFDD" /* ê•#.Àô9ªBºA Nì¯Ý */ - $"20B4 6C42 0552 1177 6F1A AC6D FE8B 98E1" /* ´lB.R.wo.¬mþ‹˜á */ - $"D3FB F52E BCE3 5BB1 7235 F597 3E0D 8C46" /* Óûõ.¼ã[±r5õ—>.ŒF */ - $"7361 1E2A C081 CA97 C8EA CD3F E91D 823F" /* sa.*ÀÊ—ÈêÍ?é.‚? */ - $"73A7 5EA1 F641 9CBD 219D D7E4 EE0D 270E" /* s§^¡öAœ½!×äî.'. */ - $"14DF F756 B4E5 062C 8251 4AD0 B090 A0AF" /* .ß÷V´å.,‚QJа ¯ */ - $"CD2A 3C80 6068 C9CD C3D7 3D7F 258B 365A" /* Í*<€`hÉÍÃ×=.%‹6Z */ - $"5E1A 90DC D058 4ED9 DF50 6F40 07A9 2BDE" /* ^.ÜÐXNÙßPo@.©+Þ */ - $"8486 5404 AB9C E323 0C4E D3DB 8352 0C0F" /* „†T.«œã#.NÓÛƒR.. */ - $"CD59 A5F5 56CC 0BB2 B603 85C3 C709 7D6E" /* ÍY¥õVÌ.²¶.…ÃÇÆ}n */ - $"A10E 33C2 AE0F D52F 5AD7 2279 E6EB 7E6C" /* ¡.3®.Õ/Z×"yæë~l */ - $"1757 589D C6DC B4FD 470C FFD9" /* .WXÆÜ´ýG.ÿÙ */ -}; - diff --git a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store b/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store deleted file mode 100644 index 495ec37f53..0000000000 Binary files a/indra/newview/installers/darwin/publicnightly-dmg/_DS_Store and /dev/null differ diff --git a/indra/newview/installers/darwin/publicnightly-dmg/_VolumeIcon.icns b/indra/newview/installers/darwin/publicnightly-dmg/_VolumeIcon.icns deleted file mode 100644 index da5307e389..0000000000 Binary files a/indra/newview/installers/darwin/publicnightly-dmg/_VolumeIcon.icns and /dev/null differ diff --git a/indra/newview/installers/darwin/publicnightly-dmg/background.jpg b/indra/newview/installers/darwin/publicnightly-dmg/background.jpg deleted file mode 100644 index 55294dcc9a..0000000000 Binary files a/indra/newview/installers/darwin/publicnightly-dmg/background.jpg and /dev/null differ diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/Applications-alias.r b/indra/newview/installers/darwin/releasecandidate-dmg/Applications-alias.r deleted file mode 100644 index aa3cfb87d8..0000000000 --- a/indra/newview/installers/darwin/releasecandidate-dmg/Applications-alias.r +++ /dev/null @@ -1,6996 +0,0 @@ -data 'alis' (0) { - $"0000 0000 0112 0002 0001 036D 6277 0000" /* ...........mbw.. */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 C135 A717 482B 0000 0000" /* ......Á5§.H+.... */ - $"0002 0C41 7070 6C69 6361 7469 6F6E 7300" /* ...Applications. */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 00E2 4F18 C2E8 9FB0 0000 0000 0000" /* ...âO.Â蟰...... */ - $"0000 FFFF FFFF 0000 0920 0000 0000 0000" /* ..ÿÿÿÿ..Æ ...... */ - $"0000 0000 0000 0000 0003 6D62 7700 0010" /* ..........mbw... */ - $"0008 0000 C136 0987 0000 0011 0008 0000" /* ....Á6Ƈ........ */ - $"C2E9 0220 0000 0001 0000 0002 0010 6D62" /* Âé. ..........mb */ - $"773A 4170 706C 6963 6174 696F 6E73 000E" /* w:Applications.. */ - $"001A 000C 0041 0070 0070 006C 0069 0063" /* .....A.p.p.l.i.c */ - $"0061 0074 0069 006F 006E 0073 000F 0008" /* .a.t.i.o.n.s.... */ - $"0003 006D 0062 0077 0012 000C 4170 706C" /* ...m.b.w....Appl */ - $"6963 6174 696F 6E73 0013 0001 2F00 FFFF" /* ications..../.ÿÿ */ - $"0000" /* .. */ -}; - - -data 'icns' (-16455) { - $"6963 6E73 0001 B3AC 6973 3332 0000 0224" /* icns..³¬is32...$ */ - $"9F00 005F 8061 005D 8700 055D 9AA2 A0A4" /* Ÿ.._€a.]‡..]𢠤 */ - $"8986 0008 557D B3B2 B1B3 A881 8081 8104" /* ‰†..U}³²±³¨€. */ - $"826F 577E AF82 A801 B3AE 82AD 03AF 7B7A" /* ‚oW~¯‚¨.³®‚­.¯{z */ - $"A781 A203 9EB7 C89D 81A2 03A6 776E 9A80" /* §¢.ž·È¢.¦wnš€ */ - $"9705 959F D3DC A295 8097 5899 6C67 8F8D" /* —.•ŸÓÜ¢•€—X™lg */ - $"8E89 85C9 BCA9 C883 898D 8D8E 6561 8585" /* މ…ɼ©Èƒ‰Žea…… */ - $"83A8 B7F3 BAB4 DFB6 AA84 8585 605E 7B7D" /* ƒ¨·óº´ß¶ª„……`^{} */ - $"79D0 F9E0 F0F2 DAE1 D87C 7D7B 5D5B 7476" /* yÐùàðòÚáØ|}{][tv */ - $"7099 D876 7373 76CA 8A72 7673 5B5A 6D70" /* p™ØvssvÊŠrvs[Zmp */ - $"6B9B 816C 6F6F 67B3 C567 706C 5A59 686B" /* k›loog³ÅgplZYhk */ - $"6B67 686B 806A 056B 6F6A 6B67 5A88 5900" /* kghk€j.kojkgZˆY. */ - $"5882 598A 5801 0059 9F00 0482 8383 8480" /* X‚YŠX..YŸ..‚ƒƒ„€ */ - $"8700 057F B7BE BDC0 A786 0008 799E D0CE" /* ‡...·¾½À§†..yžÐÎ */ - $"CECF C5A1 A081 A105 A390 7AA0 D0CA 80C9" /* ÎÏÅ¡ ¡.£z ÐÊ€É */ - $"01CA D183 CE03 D09C 9ECD 81C9 03C7 D4DE" /* .ÊуÎ.МžÍÉ.ÇÔÞ */ - $"C681 C903 CD9A 94C5 80C2 05C1 C6E3 E9C8" /* ÆÉ.Íš”Å€Â.ÁÆãéÈ */ - $"C180 C20D C491 8DBD BBBC B9B6 DDD7 CCDD" /* Á€Â.Ä‘½»¼¹¶Ý×ÌÝ */ - $"B5B9 80BC 468B 87B4 B4B3 C8D1 F7D3 CFEA" /* µ¹€¼F‹‡´´³ÈÑ÷ÓÏê */ - $"D0C9 B4B4 B385 83AA ABA9 E0FB EAF5 F6E5" /* ÐÉ´´³…ƒª«©àûêõöå */ - $"EAE5 AAAB A981 80A0 A39E BAE4 A2A0 A1A2" /* ê媫©€ £žºä¢ ¡¢ */ - $"DAAF 9FA3 9F7F 7E97 9B97 B8A6 979A 9A94" /* Ú¯Ÿ£Ÿ.~—›—¸¦—šš” */ - $"CAD6 949B 977D 7D90 9493 9091 8293 0496" /* ÊÖ”›—}}”“‘‚“.– */ - $"9294 907D 8E7C 8A7B 0100 7C9F 0000 7A80" /* ’”}Ž|Š{..|Ÿ..z€ */ - $"7C00 7887 0005 77B1 B8B7 BBA0 8600 0871" /* |.x‡..w±¸·» †..q */ - $"97CB C9C8 CAC0 9B99 819A 049C 8972 99CA" /* —ËÉÈÊÀ›™š.œ‰r™Ê */ - $"82C3 00CB 83C8 03CA 9596 C681 C203 BFCF" /* ‚Ã.˃È.Ê•–ÆÂ.¿Ï */ - $"DABF 81C2 03C6 938C BD80 BA05 B9BF E0E7" /* Ú¿Â.Æ“Œ½€º.¹¿àç */ - $"C1B9 80BA 57BC 8985 B5B3 B3B0 ADD9 D2C6" /* Á¹€ºW¼‰…µ³³°­ÙÒÆ */ - $"D9AC B0B3 B3B4 827F ACAB AAC2 CCF6 CECA" /* Ù¬°³³´‚.¬«ªÂÌöÎÊ */ - $"E8CB C3AB ACAA 7D7B A1A3 A0DD FAE9 F4F5" /* èË묪}{¡£ Ýúéôõ */ - $"E3E8 E3A2 A3A0 7A78 989B 96B3 E29A 9898" /* ãè㢣 zx˜›–³âš˜˜ */ - $"9AD7 A897 9B97 7776 8F93 8FB2 9F8F 9292" /* š×¨—›—wv“²Ÿ’’ */ - $"8BC5 D28C 938F 7575 888C 8B89 8982 8B04" /* ‹ÅÒŒ“uuˆŒ‹‰‰‚‹. */ - $"8F8A 8C88 758E 748A 7301 0074 7338 6D6B" /* ŠŒˆuŽtŠs..ts8mk */ - $"0000 0108 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 0000 0000 0000 0000 0000" /* ................ */ - $"0000 0000 0000 1E24 2424 1600 0000 0000" /* .......$$$...... */ - $"0000 0000 0011 BDC8 C8C8 9600 0000 0000" /* ......½ÈÈÈ–..... */ - $"0000 0000 048C FFFF FFFF F5A7 9C9E 9E9E" /* .....Œÿÿÿÿõ§œžžž */ - $"9E9E 6003 8AFF FCFC FCFC FEFF FFFF FFFF" /* žž`.Šÿüüüüþÿÿÿÿÿ */ - $"FFFF FF7A 89FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿz‰ÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF7A 73FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿzsÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF64 62FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿdbÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF53 53FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿSSÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF45 48FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿEHÿÿÿÿÿÿÿÿÿÿÿ */ - $"FFFF FF3C 41FF FFFF FFFF FFFF FFFF FFFF" /* ÿÿÿdçYJ¢ý */ - $"5CF9 2D3F 6F47 4854 7085 62C1 C65D C07C" /* \ù-?oGHTp…bÁÆ]À| */ - $"86A0 3E43 500F 90D0 4787 8CE8 726C 5109" /* † >CP.ÐG‡ŒèrlQÆ */ - $"FD68 8099 E8FE 2A66 2F02 78F5 C78B 6A34" /* ýh€™èþ*f/.xõÇ‹j4 */ - $"0A9E 25FE 0DE3 E3C8 BD7B 3530 98D5 CF03" /* ž%þ.ããȽ{50˜ÕÏ. */ - $"CE64 A57D 620C 87C5 65B4 7BE1 34BC 3058" /* Îd¥}b.‡Åe´{á4¼0X */ - $"572A 9EBF 5E0C 5A01 80A3 B334 DF5A E1B8" /* W*ž¿^.Z.€£³4ßZḠ*/ - $"08C3 5C30 2CC4 C1F5 1341 F516 40FA 8A00" /* .Ã\0,ÄÁõ.Aõ.@úŠ. */ - $"477D B516 AD2F 4DD3 BE8C 58F0 7C77 A236" /* G}µ.­/MÓ¾ŒXð|w¢6 */ - $"DD43 6611 D582 F050 DC31 59D0 194D A6FD" /* ÝCf.Õ‚ðPÜ1YÐ.M¦ý */ - $"652E FA16 4BA7 25FE 0DE3 E3D9 B950 06E2" /* e.ú.K§%þ.ããÙ¹P.â */ - $"3A8A DA86 827A 4C68 5798 55FC FD46 A583" /* :ŠÚ†‚zLhW˜UüýF¥ƒ */ - $"064D 8FB0 29D9 8DAD 53CC 5229 B675 ACAB" /* .M°)Ù­SÌR)¶u¬« */ - $"8EED 34BC 2F12 142E 446C 0DF7 0BC3 D6E7" /* Ží4¼/...Dl.÷.ÃÖç */ - $"A086 8D72 6AE7 9270 B97C D981 C7F1 C38A" /*  †rjç’p¹|ÙÇñÊ */ - $"47EE E585 FC19 FCE3 668C C7E0 471F 813C" /* Gîå…ü.üãfŒÇàG.< */ - $"3F02 0005 B422 0345 FC66 9A91 446D DDCA" /* ?...´".Eüfš‘DmÝÊ */ - $"449B CCDB 8E8F A0B8 3942 A8FC 6409 F7F3" /* D›ÌÛŽ ¸9B¨üdÆ÷ó */ - $"ED01 353A 2B01 1B0C 2939 619B 9890 94E7" /* í.5:+...)9a›˜”ç */ - $"5FDA 75F2 7323 BF3A 7AED 757E 42D6 C336" /* _Úuòs#¿:zíu~BÖÃ6 */ - $"E74E 6B5F 2D43 4780 CA1C C462 6507 4801" /* çNk_-CG€Ê.Äbe.H. */ - $"EDEF 5B2A 7297 8FC6 1E13 E7FA 56B5 4279" /* íï[*r—Æ..çúVµBy */ - $"5BB4 B307 F4DE E273 4FC3 E9B1 72C3 EDA2" /* [´³.ôÞâsOÃé±rÃí¢ */ - $"A3F0 A9E0 FB5D C018 B35C 8B45 CD63 99FE" /* £ð©àû]À.³\‹EÍc™þ */ - $"11FB 8993 21D1 BA8B 69EB 5CB9 F258 468F" /* .û‰“!Ѻ‹ië\¹òXF */ - $"73D4 6804 C6E6 045E AE54 954C D0E5 D836" /* sÔh.Ææ.^®T•LÐåØ6 */ - $"EA0D DB9A 2806 36FA B3E9 5973 789D 6591" /* ê.Ûš(.6ú³éYsxe‘ */ - $"1EC2 F271 E9E2 5681 C542 A2FC F4EF 8111" /* .ÂòqéâVÅB¢üôï. */ - $"59D5 FC91 9749 52A3 EA37 B239 4939 8625" /* YÕü‘—IR£ê7²9I9†% */ - $"F248 18D2 075A 80A1 8005 9ED2 437F C705" /* òH.Ò.Z€¡€.žÒC.Ç. */ - $"2BFD 308C F1F0 E1BC 8FDA F5D5 50D9 9770" /* +ý0Œñðá¼ÚõÕPÙ—p */ - $"7EF5 213F 91F6 5B8B 189D EE67 70EF F40A" /* ~õ!?‘ö[‹.îgpïô */ - $"2E24 C54B F37D 4941 FCD2 7779 5C8B 59CC" /* .$ÅKó}IAüÒwy\‹YÌ */ - $"F284 3377 A496 0399 6F17 47AC B5EA 3A84" /* ò„3w¤–.™o.G¬µê:„ */ - $"844E DC13 D058 BE9F 1BBE 8CE0 E615 D2E1" /* „NÜ.ÐX¾Ÿ.¾Œàæ.Òá */ - $"88A5 9DA6 9FB4 4EDE B804 ED14 A7EA 54E0" /* ˆ¥¦Ÿ´NÞ¸.í.§êTà */ - $"5A87 311B 5E69 70F5 EDA3 2E78 8862 7603" /* Z‡1.^ipõí£.xˆbv. */ - $"7761 094D 4A69 5AB0 A9BB 3F4F 92BE 205B" /* waÆMJiZ°©»?O’¾ [ */ - $"A226 24D5 C8B2 CCF7 E064 31C7 E727 6E2C" /* ¢&$ÕȲÌ÷àd1Çç'n, */ - $"D6A1 347F 41CD 5F70 E1C0 1AFC 4FBC 81A9" /* Ö¡4.AÍ_páÀ.üO¼© */ - $"A884 F03A CD84 B581 1F03 A523 838B 8038" /* ¨„ð:Í„µ..¥#ƒ‹€8 */ - $"02F4 6DE8 98FC EDD6 B331 21F7 4AC5 A31E" /* .ômè˜üíÖ³1!÷JÅ£. */ - $"9EB4 E770 D465 386E 18A6 D1BE EF6D B008" /* ž´çpÔe8n.¦Ñ¾ïm°. */ - $"63E6 1066 1374 4D10 3270 8C7F F297 F91D" /* cæ.f.tM.2pŒ.ò—ù. */ - $"DA61 677B 29FD A878 B122 E33C 17E3 8ED1" /* Úag{)ý¨x±"ã<.ãŽÑ */ - $"FB8E 4407 8B82 32AD 1B50 09DF BDA8 C80E" /* ûŽD.‹‚2­.PÆß½¨È. */ - $"7E28 ED9D A005 4297 B9C1 8D66 CA77 C41D" /* ~(í .B—¹ÁfÊwÄ. */ - $"41C5 E3B3 F94D 96E5 1308 7C59 1EB8 0871" /* AÅã³ùM–å..|Y.¸.q */ - $"C7A4 FED7 47F2 F800 6889 A21D 1FF4 9E93" /* Ǥþ×Gòø.h‰¢..ôž“ */ - $"1321 7377 D96E 86F5 A0CB EB17 C77A 81C0" /* .!swÙn†õ Ëë.ÇzÀ */ - $"7C8D A01F 0E91 00F9 1D00 94FD 4D32 E5DB" /* | ..‘.ù..”ýM2åÛ */ - $"0482 DEB8 CF1C 792A EA3B DECA 4470 4898" /* .‚Þ¸Ï.y*ê;ÞÊDpH˜ */ - $"81C0 5457 FE66 63DD CAF3 0B98 08E1 DC3F" /* ÀTWþfcÝÊó.˜.áÜ? */ - $"CF68 7F31 9BEE 73EF A3A5 8D57 8969 EEC3" /* Ïh.1›îsW‰iîà */ - $"0F13 3ED9 390D FC4C B37F C4F7 01E4 B115" /* ..>Ù9.üL³.Ä÷.ä±. */ - $"E9F9 9526 00FA 10D0 0D64 4CC5 8481 D231" /* éù•&.ú.Ð.dLÅ„Ò1 */ - $"DE6D 483E 8046 7F58 5BD3 1FFC CF82 297A" /* ÞmH>€F.X[Ó.üÏ‚)z */ - $"88A1 7E78 0668 3222 9E8B A287 30A3 DB10" /* ˆ¡~x.h2"ž‹¢‡0£Û. */ - $"A77F A842 87FC 164E 92B8 96DF 4920 EEC2" /* §.¨B‡ü.N’¸–ßI î */ - $"47B6 83F1 F68F 9309 63CE FAAC 3C8F 9FCF" /* G¶ƒñö“ÆcÎú¬<ŸÏ */ - $"A166 9621 ADC0 0ABB 7F1A 7E3C A4AD 3755" /* ¡f–!­À»..~<¤­7U */ - $"E2D8 E26D CAD1 6F24 F808 BC0D E94B EEBC" /* âØâmÊÑo$ø.¼.éKî¼ */ - $"D601 C1F5 30C1 F53B C0FA 97C0 90E6 901B" /* Ö.Áõ0Áõ;Àú—Àæ. */ - $"71C2 1EAB 8A4C 52A4 4431 058C DFB9 4148" /* qÂ.«ŠLR¤D1.Œß¹AH */ - $"185C 1E93 01C6 82D3 C81B 6398 8173 189D" /* .\.“.Æ‚ÓÈ.c˜s. */ - $"F73C 4887 5155 0C95 0088 4C69 0A27 3F39" /* ÷«×j */ - $"A227 4F09 072C 4682 9B0F 995C 7551 94E7" /* ¢'OÆ.,F‚›.™\uQ”ç */ - $"419A 0098 0283 19E8 0489 687B 4F66 B74C" /* Aš.˜.ƒ.è.‰h{Of·L */ - $"7F59 C07A A552 B04D 628F E401 E55C A4ED" /* .YÀz¥R°Mbä.å\¤í */ - $"390F C34D 81BB 9F88 0C50 F50F 9FBD A377" /* 9.ÃM»Ÿˆ.Põ.Ÿ½£w */ - $"F538 3F9C E243 FF47 D346 87F2 444B C479" /* õ8?œâCÿGÓF‡òDKÄy */ - $"F6B3 1C76 5125 F487 0FAF 294A DA20 EC56" /* ö³.vQ%ô‡.¯)JÚ ìV */ - $"07AB DE07 14C2 1721 F3E0 D687 1F67 039D" /* .«Þ..Â.!óàÖ‡.g. */ - $"461F 0D82 9CAA B2D4 DFC6 6AA5 D31E 4D01" /* F..‚œª²Ô߯j¥Ó.M. */ - $"5AC2 B2BD FD97 7D6E 00D1 7ADF 377C 15A7" /* Z²½ý—}n.Ñzß7|.§ */ - $"9681 C7B2 8168 D706 425B 35EF 7298 C053" /* –Dzh×.B[5ïr˜ÀS */ - $"E198 B5E2 B835 712B 1AD8 BA77 CF86 83A3" /* ᘵâ¸5q+.غwφƒ£ */ - $"B0B9 C5E6 F37A A3DE D93B 8EC8 132F A52A" /* °¹Åæóz£ÞÙ;ŽÈ./¥* */ - $"AB20 E166 F719 7130 6482 5BE2 605B D78E" /* « áf÷.q0d‚[â`[׎ */ - $"672D 7AE6 3906 DA75 0E3D 1962 8A60 9294" /* g-zæ9.Úu.=.bŠ`’” */ - $"1FC8 C0F3 216D 815D 4DDE 5DDE D8AB 3F9C" /* .ÈÀó!m]MÞ]ÞØ«?œ */ - $"7F9F 24B3 7BBF CCB9 2F80 19B6 70AE 1B3D" /* .Ÿ$³{¿Ì¹/€.¶p®.= */ - $"C71A 1F7C 81D2 639F 0D03 24EA D4B1 D351" /* Ç..|ÒcŸ..$êÔ±ÓQ */ - $"DD10 FBD5 EA3F 4957 A7ED 04C6 384D C10F" /* Ý.ûÕê?IW§í.Æ8MÁ. */ - $"8A55 0C03 694F 0D18 70D8 0AC3 33C0 17D1" /* ŠU..iO..pØÂÃ3À.Ñ */ - $"73BB E85F 5204 090F FDFE 8AC5 9AD6 22D5" /* s»è_R.Æ.ýþŠÅšÖ"Õ */ - $"CA31 A6DE EF44 D910 B34A 0E59 7866 536F" /* Ê1¦ÞïDÙ.³J.YxfSo */ - $"9B0B A341 3AB8 C06C C64F 3F86 8160 DFB9" /* ›.£A:¸ÀlÆO?†`ß¹ */ - $"A709 59D8 88C3 3316 9FFA F83F 5120 E40E" /* §ÆY؈Ã3.Ÿúø?Q ä. */ - $"4DEA C88F C418 37F6 4C0B 7606 9632 EEC5" /* MêÈÄ.7öL.v.–2îÅ */ - $"6380 FB25 A69F AAE2 0888 B722 008F 35CB" /* c€û%¦Ÿªâ.ˆ·".5Ë */ - $"F6A7 90BF D0DB 6367 A14B 5A86 EE98 FD18" /* ö§¿ÐÛcg¡KZ†î˜ý. */ - $"A629 1BAB 3BE2 920D E99D BEC2 88B4 F909" /* ¦).«;â’.é¾Âˆ´ùÆ */ - $"66B1 535D 3940 AF78 8200 0C46 142A EA2A" /* f±S]9@¯x‚..F.*ê* */ - $"A991 95E8 FD2B D30B 0E4A 76E2 A97B FAA7" /* ©‘•èý+Ó..Jvâ©{ú§ */ - $"97E2 9B30 54FA 5E97 962A 7E83 5711 A707" /* —â›0Tú^—–*~ƒW.§. */ - $"2A21 3729 2046 9C41 8282 A161 E5F6 AB24" /* *!7) FœA‚‚¡aåö«$ */ - $"3324 74CF 1AF6 C935 D884 0008 DC18 663C" /* 3$tÏ.öÉ5Ø„..Ü.f< */ - $"3A00 25E4 92D7 8F23 4C07 3C63 DB6E 4924" /* :.%ä’×#L.X>q.㣷«* */ - $"A998 FE5A 74DB 537A CE3D CD46 49B6 DB6D" /* ©˜þZtÛSzÎ=ÍFI¶Ûm */ - $"B6DB 6DB2 8EE9 1D6F 6480 8613 D8D2 7D8F" /* ¶Ûm²Žé.od€†.ØÒ} */ - $"5615 3EAB B25B 722D ECB8 ED12 70F2 BA06" /* V.>«²[r-ì¸í.pòº. */ - $"E5A2 45C1 547C F861 A7D5 8E1C 08BC 346B" /* å¢EÁT|øa§ÕŽ..¼4k */ - $"2730 C670 2FD8 F159 6ABE 2092 ED98 AC34" /* '0Æp/ØñYj¾ ’혬4 */ - $"B4CA 8565 90CF 0034 6E68 F777 9672 F29D" /* ´Ê…eÏ.4nh÷w–rò */ - $"4621 6E73 9C90 5C3D A8DB F5B0 CACF A63E" /* F!nsœ\=¨Ûõ°ÊϦ> */ - $"861E 8B9E F490 8E15 69BC A01D EF59 E898" /* †.‹žôŽ.i¼ .ïYè˜ */ - $"7040 B817 5AA9 BFB1 09A0 FE74 D2F7 BEA8" /* p@¸.Z©¿±Æ þtÒ÷¾¨ */ - $"A4F3 FEAC 38A4 409E B504 9CC9 EAA3 533B" /* ¤óþ¬8¤@žµ.œÉê£S; */ - $"153D F710 FC9E 2055 A395 C374 2AF9 E7C5" /* .=÷.üž U£•Ãt*ùçÅ */ - $"E1E8 7F74 3CDB D568 B606 A9D5 B7AE E207" /* áè.t<ÛÕh¶.©Õ·®â. */ - $"947E 2E65 1C27 336D 927A 4F86 5422 0E04" /* ”~.e.'3m’zO†T".. */ - $"42C7 668A 9403 EAB7 21A3 C9F1 18BC 5380" /* BÇfŠ”.ê·!£Éñ.¼S€ */ - $"BED7 07B5 F9B1 B798 8727 D54A 7A6E E493" /* ¾×.µù±·˜‡'ÕJznä“ */ - $"5271 F27D 7C35 DCEE D0BC CB31 C1FB 879F" /* Rqò}|5ÜîмË1Áû‡Ÿ */ - $"E074 9EB9 D7BE C9ED D2C8 BD00 C7FC D05B" /* àtž¹×¾ÉíÒȽ.ÇüÐ[ */ - $"2B2C 9647 A924 9F22 A06D 62B4 A946 77B7" /* +,–G©$Ÿ" mb´©Fw· */ - $"AD6D 60EE C841 997D A7E8 7AD2 AFA8 EEC4" /* ­m`îÈA™}§èzÒ¯¨îÄ */ - $"D61F FC06 FD7A E761 AA33 0F74 A08F 8E5B" /* Ö.ü.ýzçaª3.t Ž[ */ - $"B7C0 7C9A 1201 F0F5 6403 E4D0 60D8 92D9" /* ·À|š..ðõd.äÐ`Ø’Ù */ - $"84ED 064F 1B29 D7A7 1D77 F4B3 61D6 2651" /* „í.O.)×§.wô³aÖ&Q */ - $"329E 2CA5 53B4 956D 1061 3A3A A73B FC8E" /* 2ž,¥S´•m.a::§;üŽ */ - $"DD3C 60C9 F855 32FB 3C04 6287 50F7 6BB3" /* Ý<`ÉøU2û<.b‡P÷k³ */ - $"B84A 05A6 3145 A832 3BBC CA56 115B 9D7F" /* ¸J.¦1E¨2;¼ÊV.[. */ - $"8ADB 5660 429D 1FF6 4E6D 4899 EFDA 592F" /* ŠÛV`B.öNmH™ïÚY/ */ - $"19DC 9790 802A 1C17 2250 ADEC 0312 2C23" /* .Ü—€*.."P­ì..,# */ - $"223B 1EC8 482C 6E26 DD67 528F 7CDC 1841" /* ";.ÈH,n&ÝgR|Ü.A */ - $"DBCB CF9E 6D26 B564 4FD4 0AB5 DA0B ADE2" /* ÛËÏžm&µdOÔµÚ.­â */ - $"C129 D895 00FF 105B 0D0B F4DB 286A B347" /* Á)Ø•.ÿ.[..ôÛ(j³G */ - $"A261 30A9 0A9B 7A0D 585B 3991 3217 6FF7" /* ¢a0©Â›z.X[9‘2.o÷ */ - $"A368 D6A8 E862 161A 3584 613E 04D9 DBCB" /* £hÖ¨èb..5„a>.ÙÛË */ - $"4D96 66A3 B736 F802 D67A 309F 04E6 AFD8" /* M–f£·6ø.Öz0Ÿ.æ¯Ø */ - $"888E A8A5 4461 F1F0 1B6B 2DC4 0DFE C676" /* ˆŽ¨¥Dañð.k-Ä.þÆv */ - $"8D4E 3750 C3E6 C233 EFC5 368B 6113 5B53" /* N7PÃæÂ3ïÅ6‹a.[S */ - $"08E0 C259 1B88 AA0C 74B0 862E 1024 BB3F" /* .àÂY.ˆª.t°†..$»? */ - $"2816 B320 715C 5DFA 9FF0 CBC3 6A85 777A" /* (.³ q\]úŸðËÃj…wz */ - $"23CB F89B D813 6706 313E 2CF5 A163 0848" /* #Ëø›Ø.g.1>,õ¡c.H */ - $"94C9 3288 B556 53DD 2A45 2302 F28E 7ED1" /* ”É2ˆµVSÝ*E#.òŽ~Ñ */ - $"B5A0 67C8 53BB 4CE4 45D9 317F 92AB B13B" /* µ gÈS»LäEÙ1.’«±; */ - $"7246 F6DE 5348 49C9 42A1 CA62 64B0 209E" /* rFöÞSHIÉB¡Êbd° ž */ - $"43F2 DF7C 9BBC 097F C94A EA52 8D01 ADEF" /* Còß|›¼Æ.ÉJêR.­ï */ - $"5241 7C9B 2876 75F4 D748 AF9D 6FBB 3306" /* RA|›(vuô×H¯o»3. */ - $"0AD1 3953 6C99 5BB7 F1F5 1C1F BCE7 CA83" /* ÂÑ9Sl™[·ñõ..¼çʃ */ - $"08C1 6811 FBC5 AE18 343C C6F5 E515 F9CF" /* .Áh.ûÅ®.4<Æõå.ùÏ */ - $"FE48 C6E9 956E 6712 DDCA D62C 7F37 6DFE" /* þHÆé•ng.ÝÊÖ,.7mþ */ - $"2465 A8EE 1BAF E106 CA62 101F 0144 31DC" /* $e¨î.¯á.Êb...D1Ü */ - $"029E ED0F 9E47 F22E 0C17 0D31 E60B 1662" /* .ží.žGò....1æ..b */ - $"C1F5 5C90 7D5A 6D03 EAB6 C0C8 1653 E821" /* Áõ\}Zm.ê¶ÀÈ.Sè! */ - $"5860 ED0B C711 39E5 E5C8 268D 2246 E3FB" /* X`í.Ç.9ååÈ&"Fãû */ - $"68A4 3B12 A487 350D FE94 3722 65AC 949B" /* h¤;.¤‡5.þ”7"e¬”› */ - $"2526 7CD5 0E28 E093 CFE8 314C BE18 5B60" /* %&|Õ.(à“Ïè1L¾.[` */ - $"827E 154B 9609 2536 F890 A361 BA29 8211" /* ‚~.K–Æ%6ø£aº)‚. */ - $"AF42 BEC6 1BCB CE6D 2910 8083 C890 D7FF" /* ¯B¾Æ.ËÎm).€ƒÈ×ÿ */ - $"6F04 CEF4 F47C 0D92 00BD D90F 4095 0A48" /* o.Îôô|.’.½Ù.@•ÂH */ - $"4DC6 210C 351D 34A5 5FDA E576 1E1B 1684" /* MÆ!.5.4¥_Úåv...„ */ - $"F2A0 B30A 589C 1DBC 4831 E906 0D67 0CDD" /* ò ³ÂXœ.¼H1é..g.Ý */ - $"876B 994F 6D66 47DD AF40 7158 4385 738E" /* ‡k™OmfGݯ@qXC…sŽ */ - $"82F8 E637 9B5C 7389 0AA5 2A04 D105 5E88" /* ‚øæ7›\s‰Â¥*.Ñ.^ˆ */ - $"C2A2 2943 E125 6C2F 0AD1 1E5C AF1F CFF6" /* ¢)Cá%l/ÂÑ.\¯.Ïö */ - $"B39B C799 0F39 6151 6625 BB66 C3C3 418B" /* ³›Ç™.9aQf%»fÃÃA‹ */ - $"90A4 F6F7 BD30 7A04 88E6 0F8A 3F0B FF2C" /* ¤ö÷½0z.ˆæ.Š?.ÿ, */ - $"D18B 1D88 1442 EB54 A6FC D226 251A 015D" /* Ñ‹.ˆ.BëT¦üÒ&%..] */ - $"4DA8 32CA 371B 86EB 4E89 1415 9A41 6AD2" /* M¨2Ê7.†ëN‰..šAjÒ */ - $"1F0F 7656 41E5 B874 72E7 5F88 ABDA 28D7" /* ..vVAå¸trç_ˆ«Ú(× */ - $"37D5 EE40 567F F751 2591 01A3 03B9 EFCD" /* 7Õî@V.÷Q%‘.£.¹ïÍ */ - $"E0A8 8CC8 8C8E 0945 3036 453A 1787 59C4" /* à¨ŒÈŒŽÆE06E:.‡YÄ */ - $"B99C 02D2 D5F6 1B5E E34C 551E 8C43 9A20" /* ¹œ.ÒÕö.^ãLU.ŒCš */ - $"981D 0B44 C6D1 E6AA 2B92 5F33 8016 C4F1" /* ˜..DÆÑæª+’_3€.Äñ */ - $"7AA6 E605 4676 A533 1D38 6ADA 9BC6 2C13" /* z¦æ.Fv¥3.8jÚ›Æ,. */ - $"385A 3DCE 7E2E B9A1 81BB 27C6 AFF8 FF5D" /* 8Z=Î~.¹¡»'Ưøÿ] */ - $"A511 4C25 DC70 082C B597 3EC4 004C D4B8" /* ¥.L%Üp.,µ—>Ä.LÔ¸ */ - $"BE6A B79D EF70 2610 B57B FEFE 6ACC 9EEE" /* ¾j·ïp&.µ{þþjÌžî */ - $"B94A 73A8 4B30 C207 7391 789E C0FE 6992" /* ¹Js¨K0Â.s‘xžÀþi’ */ - $"AB13 E2AA FF53 4B22 A338 0EA3 B476 D732" /* «.âªÿSK"£8.£´v×2 */ - $"EDA3 2009 3422 B4AA 64DE 26C3 5894 D6DD" /* í£ Æ4"´ªdÞ&ÃX”ÖÝ */ - $"F7A9 5A3B 6F31 5D2C EC22 1FAC 928B 647F" /* ÷©Z;o1],ì".¬’‹d. */ - $"1600 A961 11C3 FD11 E594 81F9 E0AC 20D4" /* ..©a.Ãý.å”ùà¬ Ô */ - $"0DCA 9CE0 FF14 3BE3 3010 00E1 9DFE F0C8" /* .Êœàÿ.;ã0..áþðÈ */ - $"70E7 D3A5 A7F9 884E 6941 CBCB FEBE 0C27" /* pçÓ¥§ùˆNiAËËþ¾.' */ - $"B3F5 BAA4 3068 BFC1 DB20 1E5F 9E83 BF7D" /* ³õº¤0h¿ÁÛ ._žƒ¿} */ - $"8EA3 8FB0 F355 FF02 DED2 5CC8 2B4D 4DA5" /* Ž£°óUÿ.ÞÒ\È+MM¥ */ - $"8122 C96A CDAB B130 2D35 B73E 2EE9 0AA9" /* "ÉjÍ«±0-5·>.é© */ - $"7DB8 B81D 7B0A 776B DFF3 2B02 1F6A EF5B" /* }¸¸.{Âwkßó+..jï[ */ - $"E6A6 177F D8C0 1C3B A88C 2154 18F3 BFB3" /* æ¦..ØÀ.;¨Œ!T.ó¿³ */ - $"F7EF 1249 860B F87F 60D6 AE06 B5B2 7824" /* ÷ï.I†.ø.`Ö®.µ²x$ */ - $"E601 91D7 1436 80CF 054C 9691 1321 B299" /* æ.‘×.6€Ï.L–‘.!²™ */ - $"11F3 2BA3 51F6 447E 1BC0 28CB 666B 9BA0" /* .ó+£QöD~.À(Ëfk›  */ - $"425A E39B 066C 1B7C 340B 950A BDCC E05D" /* BZã›.l.|4.•½Ìà] */ - $"C8DC 568C BDC6 54E9 0AA2 2D89 6E22 37E4" /* ÈÜVŒ½ÆTé¢-‰n"7ä */ - $"3508 39CC EE8F 8EE6 F926 626B E33F 4A06" /* 5.9ÌîŽæù&bkã?J. */ - $"4CD1 AE16 9063 3119 5554 58CA BB53 4A73" /* LÑ®.c1.UTXÊ»SJs */ - $"AA2B 2A71 B86B 3E95 BED6 D9D2 9D59 3E60" /* ª+*q¸k>•¾ÖÙÒY>` */ - $"C5D1 FA4C E6A7 880F 30D8 A679 6467 697E" /* ÅÑúL槈.0ئydgi~ */ - $"F327 EAA4 E0D1 01F9 9B74 AAA1 6CDD 7DA7" /* ó'ê¤àÑ.ù›tª¡lÝ}§ */ - $"D2AB C9CB 63D6 D3DF C778 C6ED 71A5 0571" /* Ò«ÉËcÖÓßÇxÆíq¥.q */ - $"C7E1 4EC7 E16C 43F0 75B1 3C9E 91EA AAAC" /* ÇáNÇálCðu±<ž‘ꪬ */ - $"9A2E A47E 8DF0 873E 2275 3F71 F986 DF3D" /* š.¤~ð‡>"u?qù†ß= */ - $"DBE5 1F4C 0D83 C3F5 F2D4 5A7C 0BFB E4FC" /* Ûå.L.ƒÃõòÔZ|.ûäü */ - $"C83E D8A4 FAF4 F589 09F2 4909 40AA 2AA8" /* È>ؤúôõ‰ÆòIÆ@ª*¨ */ - $"C190 BE4D D484 1408 6EAD 722F 6BA6 7502" /* Á¾MÔ„..n­r/k¦u. */ - $"A53F 1B9A BE86 841A FC60 53F3 8AE9 2E4C" /* ¥?.𾆄.ü`SóŠé.L */ - $"4B8E 1D09 F47C 3BAA CFB7 80DE 6A41 F007" /* KŽ.Æô|;ªÏ·€ÞjAð. */ - $"80A3 413A C568 5C02 6166 E8AF 9B6C EF86" /* €£A:Åh\.af诛lï† */ - $"F178 273B A803 89E9 520A ACFC 0E98 6198" /* ñx';¨.‰éR¬ü.˜a˜ */ - $"6ECE D094 76D1 8AF8 1035 D0C8 B9E5 ECC9" /* nÎДvÑŠø.5ÐȹåìÉ */ - $"08E6 748A F28B B0E0 F9AB 71B4 7971 9626" /* .ætŠò‹°àù«q´yq–& */ - $"5397 5D5A 31CB 5F9E 7C98 8300 72B1 2C67" /* S—]Z1Ë_ž|˜ƒ.r±,g */ - $"A38D 0C02 C603 C0C2 2000 E528 0CAA 9472" /* £..Æ.À .å(.ª”r */ - $"3115 8C05 0EE6 3F33 3F6D B6DB 64C7 AAB2" /* 1.Œ..æ?3?m¶ÛdǪ² */ - $"94EA DD85 D3DF F14E FF3F D3A2 778B 3749" /* ”êÝ…ÓßñNÿ?Ó¢w‹7I */ - $"B31B 6DB6 C5B6 5311 C782 3FCF 2880 6695" /* ³.m¶Å¶S.Ç‚?Ï(€f• */ - $"085A 35C2 3938 420E 8705 50BD 51C3 BD21" /* .Z5Â98B.‡.P½Qý! */ - $"41B9 C3ED 3A76 367F 40F5 DA53 3618 DF7A" /* A¹Ãí:v6.@õÚS6.ßz */ - $"EE11 B2D6 D9AD 4351 7D8F BC5A 7217 9352" /* î.²ÖÙ­CQ}¼Zr.“R */ - $"D43F 54B9 F618 3E0E 5FF8 1599 CD00 5489" /* Ô?T¹ö.>._ø.™Í.T‰ */ - $"459D 1B65 0538 7A92 D8EC 6AD5 E756 776E" /* E.e.8z’ØìjÕçVwn */ - $"5B66 A07C 36D6 A4B0 2E00 21E0 ABFC 2AB8" /* [f |6Ö¤°..!à«ü*¸ */ - $"F387 5784 0DB9 1978 67FE DEFF 0CCC CCCC" /* ó‡W„.¹.xgþÞÿ.ÌÌÌ */ - $"CCCC CCCC CCCC CCD3 5F84 850A F245 C370" /* ÌÌÌÌÌÌÌÓ_„…ÂòEÃp */ - $"786E 76C5 56A5 8C9B FC7F 6869 3085 EB26" /* xnvÅV¥Œ›ü.hi0…ë& */ - $"6162 A234 8BF4 868D 0BA5 77FA 56D2 31FD" /* ab¢4‹ô†.¥wúVÒ1ý */ - $"7436 0147 944C 2AAE C8C1 DE46 2A3A 2449" /* t6.G”L*®ÈÁÞF*:$I */ - $"EAD0 8E9E FF0B 129F 7F9C 1436 A6BC 10E6" /* êÐŽžÿ..Ÿ.œ.6¦¼.æ */ - $"3116 7A98 5FF6 97E9 FC84 7136 FEA5 C122" /* 1.z˜_ö—éü„q6þ¥Á" */ - $"E58F 44D6 D7A4 0AD3 E9B4 7C91 B833 1F91" /* åDÖפÂÓé´|‘¸3.‘ */ - $"5F0F D8F7 8A80 6560 B332 081A C68D 0FF9" /* _.Ø÷Š€e`³2..Æ.ù */ - $"899F 2CC7 E1D6 FC7E 1DEB C3ED EA04 F55D" /* ‰Ÿ,ÇáÖü~.ëÃíê.õ] */ - $"017D B775 48A1 A844 EAB2 8E3A 5FF2 20AF" /* .}·uH¡¨D겎:_ò ¯ */ - $"6231 D1B0 D4D9 D308 999B 09F2 95B1 7071" /* b1ѰÔÙÓ.™›Æò•±pq */ - $"F57C 1F1E 7960 4639 6A62 5BC6 9E5A D45D" /* õ|..y`F9jb[ÆžZÔ] */ - $"F339 9597 BF1B 62EB D128 B3D8 9BD3 52BF" /* ó9•—¿.bëÑ(³Ø›ÓR¿ */ - $"0703 43F9 E1C7 940E EA41 F4B1 75E4 891F" /* ..CùáÇ”.êAô±uä‰. */ - $"09A4 D439 7DFF 6AB7 EB4F 1253 A9C0 8BBE" /* ƤÔ9}ÿj·ëO.S©À‹¾ */ - $"40A0 3CE6 965D F886 A9EF 7E69 712D 41C2" /* @ <æ–]ø†©ï~iq-A */ - $"0062 6917 5D06 6548 9FD6 1470 4A0C 8545" /* .bi.].eHŸÖ.pJ.…E */ - $"8417 6C73 0C2D DF44 0E4A D5F9 7443 D629" /* „.ls.-ßD.JÕùtCÖ) */ - $"E62D DE53 CCFA EAEA E08A F0E1 9D37 9616" /* æ-ÞSÌúêêàŠðá7–. */ - $"C0DA 1FD4 6A42 6CE6 1D10 AB6A 911A 19D2" /* ÀÚ.ÔjBlæ..«j‘..Ò */ - $"47A0 4AC5 6A3C 12FF 0FE8 3AFB 7DFD 3D27" /* G JÅj<.ÿ.è:û}ý=' */ - $"42C6 E2BA 6DDE D1ED 21CE 1EA0 F444 055B" /* BÆâºmÞÑí!Î. ôD.[ */ - $"122A 41EE D8C1 144C B39C 0EEA 014E 7448" /* .*AîØÁ.L³œ.ê.NtH */ - $"0B72 7C2C 92B6 0CAC 3CB5 ADA7 8BF8 0C56" /* .r|,’¶.¬<µ­§‹ø.V */ - $"1DD5 B763 907F 6B60 8A85 ED4A F87D FBDC" /* .Õ·c.k`Š…íJø}ûÜ */ - $"391D 822B CBF5 7266 0E6B B2D4 32DE 606C" /* 9.‚+Ëõrf.k²Ô2Þ`l */ - $"014E 64BF F969 E3A5 C8E4 09EC B205 6391" /* .Nd¿ùiã¥ÈäÆì².c‘ */ - $"3081 96F5 9A80 0599 50D2 38FF 635B 9C35" /* 0–õš€.™PÒ8ÿc[œ5 */ - $"97CF A325 D94F B8E1 A794 EABC DA8A 7CC3" /* —Ï£%ÙO¸á§”ê¼ÚŠ|à */ - $"8713 2EBB 1EA6 69B0 9A72 A93D 874A 1F30" /* ‡..».¦i°šr©=‡J.0 */ - $"4C7B B341 B8CF F61E 7CEE 60CC E9B0 6D85" /* L{³A¸Ïö.|î`Ìé°m… */ - $"4F96 977D F85D F85A 08AF 46EF F259 FD70" /* O–—}ø]øZ.¯FïòYýp */ - $"E364 C54D 1F3D C951 B1DD 2CB4 8B94 9350" /* ãdÅM.=ÉQ±Ý,´‹”“P */ - $"8FFC CD4E D39E 2FF5 DC65 9DB7 2133 6E97" /* üÍNÓž/õÜe·!3n— */ - $"9705 2AA6 2625 534E B2A2 D775 FCFA 60E0" /* —.*¦&%SN²¢×uüú`à */ - $"4929 3681 2E72 5087 F3CD FB3A 6386 36A2" /* I)6.rP‡óÍû:c†6¢ */ - $"5E62 8705 57E4 8441 1986 1487 E88F C834" /* ^b‡.Wä„A.†.‡èÈ4 */ - $"C59D D57C CCA2 D56F 3889 44AC 0E4D 0E88" /* ÅÕ|Ì¢Õo8‰D¬.M.ˆ */ - $"2592 A50A F98D DF1D 17F2 78BD D4AB FDB4" /* %’¥Âùß..òx½Ô«ý´ */ - $"4249 FBDE 3E56 BE58 B587 88B4 8D75 299F" /* BIûÞ>V¾Xµ‡ˆ´u)Ÿ */ - $"4C92 6D9A 6B17 6153 9A65 4770 E0EC BBEF" /* L’mšk.aSšeGpàì»ï */ - $"2F91 8C35 8FFA 04AF 880C D9B6 204A D65E" /* /‘Œ5ú.¯ˆ.Ù¶ JÖ^ */ - $"68DD DBE7 63BC E1C5 CCDD E994 3796 10EF" /* hÝÛçc¼áÅÌÝé”7–.ï */ - $"354D C0E7 7A72 E57E EFAC 7C75 E4CE F47F" /* 5MÀçzrå~ï¬|uäÎô. */ - $"2E82 A8D0 6401 3CC4 1ACC 4513 1211 DCC9" /* .‚¨Ðd.<Ä.ÌE...ÜÉ */ - $"BD7A 47CA F093 83C7 38EB 866D 1ED5 AC6C" /* ½zGÊð“ƒÇ8ë†m.Õ¬l */ - $"FF01 C348 CFA1 2532 DAD5 2BDD 8CCC 71C1" /* ÿ.ÃHÏ¡%2ÚÕ+ÝŒÌqÁ */ - $"1208 75AA 308B 4796 A89E 0EAF AB67 422A" /* ..uª0‹G–¨ž.¯«gB* */ - $"AA43 8162 68BC 9878 8578 419C AB2E 9518" /* ªCbh¼˜x…xAœ«.•. */ - $"A9E0 4298 DB46 36D7 ADD0 DE21 DC41 AEA7" /* ©àB˜ÛF6×­ÐÞ!ÜA®§ */ - $"A05D 795D AB14 E247 6750 3EA8 0A31 5A06" /*  ]y]«.âGgP>¨Â1Z. */ - $"FAEC AD07 ECF7 C636 A068 22AA E179 7613" /* úì­.ì÷Æ6 h"ªáyv. */ - $"30F9 831C 0AFA 38C0 E20B 96A9 464E B57A" /* 0ùƒ.Âú8Àâ.–©FNµz */ - $"5AF3 D612 DC70 2A8D 1D09 C7C9 967F 7F7B" /* ZóÖ.Üp*.ÆÇÉ–..{ */ - $"F47F 4017 A722 9853 37C2 DE55 34CF 104E" /* ô.@.§"˜S7ÂÞU4Ï.N */ - $"9DD3 35DF DEE2 589C FAF1 07DE 1803 86B1" /* Ó5ßÞâXœúñ.Þ..†± */ - $"2DE6 6B46 FC45 F24E 8718 3B6E D557 8008" /* -ækFüEòN‡.;nÕW€. */ - $"FF3B 8EC2 28BD 6146 3EF6 A0FB 0BCA 37C1" /* ÿ;ŽÂ(½aF>ö û.Ê7Á */ - $"749B 49F2 F419 9EC5 DC0A A6DE 0CFC 1BD2" /* t›Iòô.žÅܦÞ.ü.Ò */ - $"AAF5 4920 1AB3 842A 1813 606E 97CD 0EC2" /* ªõI .³„*..`n—Í. */ - $"50D4 84CD F427 569F 776D 940A A6F7 68D7" /* PÔ„Íô'VŸwm”¦÷h× */ - $"2A18 4C6D 2056 D254 1226 7F3C 1ED0 7AB8" /* *.Lm VÒT.&.<.Ðz¸ */ - $"BEFE 2050 50E6 C5FB 173C 1857 FF7F 86D9" /* ¾þ PPæÅû.<.Wÿ.†Ù */ - $"6CE3 E235 1AFA CBB4 D2BE 4E64 9713 B880" /* lãâ5.úË´Ò¾Nd—.¸€ */ - $"0C41 2E14 401B D14F 5BA4 AD20 7060 C05E" /* .A..@.ÑO[¤­ p`À^ */ - $"2011 000E C557 2951 009C A584 6178 50E8" /* ...ÅW)Q.œ¥„axPè */ - $"6E0D 922F BFF7 EC41 A907 0D2B EF09 3CE0" /* n.’/¿÷ìA©..+ïÆ<à */ - $"6344 B3D6 742A 0448 042D 44C3 390B 089B" /* cD³Öt*.H.-DÃ9..› */ - $"B0FF 2877 1C62 BE1E AC48 09B0 4667 19BC" /* °ÿ(w.b¾.¬HưFg.¼ */ - $"319D 1FEA ABB5 1EE9 02D8 C845 A20C 2E3F" /* 1.ꫵ.é.ØÈE¢..? */ - $"7010 FA38 E2A0 1F01 2933 0557 19BD 9DCD" /* p.ú8â ..)3.W.½Í */ - $"5486 F044 5838 C953 CC32 2DF8 6A04 30ED" /* T†ðDX8ÉSÌ2-øj.0í */ - $"2C42 0A7D 1B38 7F94 4936 5908 39F1 424F" /* ,BÂ}.8.”I6Y.9ñBO */ - $"2BFF 7F46 F53E 11D3 DA1E 41B4 67AB 296E" /* +ÿ.Fõ>.ÓÚ.A´g«)n */ - $"0B59 6213 9E16 1568 8787 ED75 8822 A102" /* .Yb.ž..h‡‡íuˆ"¡. */ - $"DAAC D7D6 FA63 ED91 52D2 E98C 6EEB ABBB" /* Ú¬×Öúcí‘RÒéŒnë«» */ - $"5465 7C7C 0CEB 3016 0CC6 5793 D7FF 7FFB" /* Te||.ë0..ÆW“×ÿ.û */ - $"34E7 7BDE 794E 6D8C 392D 051A 478B 4AD7" /* 4ç{ÞyNmŒ9-..G‹J× */ - $"028C 3119 EDCA 833C 2F1B A23A 5C69 908F" /* .Œ1.íʃ.u¬%û³–.† */ - $"5EF0 4C11 ACE0 90D2 6568 EB55 75AB FF24" /* ^ðL.¬àÒehëUu«ÿ$ */ - $"54B8 0E77 3110 5C67 3138 8369 5BEA 3458" /* T¸.w1.\g18ƒi[ê4X */ - $"7FFE 6000 9940 0044 18C6 1A34 14B6 9CD2" /* .þ`.™@.D.Æ.4.¶œÒ */ - $"C039 2A00 00CC 8F27 9EFE FF80 1CAA 8000" /* À9*..Ì'žþÿ€.ª€. */ - $"0000 0000 D9B1 C1D0 BFE1 D01D 2DD4 E3DF" /* ....Ù±ÁпáÐ.-Ôãß */ - $"949B 6DB6 DB6D B83D 6B98 82BC 446D 0CB3" /* ”›m¶Ûm¸=k˜‚¼Dm.³ */ - $"55A5 C140 D9E5 5E98 37AF 0E38 4474 B8DC" /* U¥Á@Ùå^˜7¯.8Dt¸Ü */ - $"FCFA B14E BD14 730B DAA0 4B18 1B4D 81E7" /* üú±N½.s.Ú K..Mç */ - $"B8A8 26E7 EFB0 8272 4619 2A00 0000 0000" /* ¸¨&çï°‚rF.*..... */ - $"0000 0000 0000 060D CD91 05BE 3A07 80DE" /* ........Í‘.¾:.€Þ */ - $"29D6 2680 7867 5359 9411 F430 48D9 A22D" /* )Ö&€xgSY”.ô0HÙ¢- */ - $"DF74 0855 C0C4 C5AA D3F4 FC40 5815 C5FC" /* ßt.UÀÄŪÓôü@X.Åü */ - $"B741 3001 FF7F FDC6 00B8 F1BA FEC9 B662" /* ·A0.ÿ.ýÆ.¸ñºþɶb */ - $"4973 2EE9 5029 E237 296D D4A4 04DE 4DB9" /* Is.éP)â7)mÔ¤.ÞM¹ */ - $"5305 FD42 9A82 6842 EF09 9DA2 201D C6EF" /* S.ýBš‚hBïÆ¢ .Æï */ - $"4078 4FC3 038C B201 A1C0 0791 7B09 CF18" /* @xOÃ.Œ².¡À.‘{ÆÏ. */ - $"D61B DABD 0409 372B F69D 3CF8 E2E1 31A1" /* Ö.Ú½.Æ7+ö<øâá1¡ */ - $"023B B0FD 60B3 3933 16F2 C716 9259 82F8" /* .;°ý`³93.òÇ.’Y‚ø */ - $"77BB 3A47 46D2 D998 7AA1 01E1 DF78 8000" /* w»:GFÒÙ˜z¡.áßx€. */ - $"0000 0001 D8FD 4FB2 C620 0000 005A CD78" /* ....ØýO²Æ ...ZÍx */ - $"B755 53CD E910 3B50 96A8 4000 0000 0003" /* ·USÍé.;P–¨@..... */ - $"FD6F 5DD1 31D8 A087 6BC5 09F3 E81E B49F" /* ýo]Ñ1Ø ‡kÅÆóè.´Ÿ */ - $"5A88 0DB9 2492 4924 9234 EE49 0E46 EE5B" /* Zˆ.¹$’I$’4îI.Fî[ */ - $"8D2A E866 7AD0 1F3C 936D 50EF 6EF5 FDE7" /* *èfzÐ.<“mPïnõýç */ - $"BFFE 6EFF 82AD 0EDF 556D B01D C573 CA68" /* ¿þnÿ‚­.ßUm°.ÅsÊh */ - $"985A F307 82C5 D933 4C26 B9EE EEF7 D4C6" /* ˜Zó.‚ÅÙ3L&¹îî÷ÔÆ */ - $"BFB5 4130 F610 4AFE 602E 3723 0C95 0000" /* ¿µA0ö.Jþ`.7#.•.. */ - $"0000 0000 0000 0000 0002 7F7E DE44 DDEB" /* ...........~ÞDÝë */ - $"B8B1 0AB8 BA80 7F79 D59C 851A 0244 B8D1" /* ¸±Â¸º€.yÕœ…..D¸Ñ */ - $"6B92 AB1A 4997 5556 C0C7 5935 05AD B380" /* k’«.I—UVÀÇY5.­³€ */ - $"318D A387 1E5F 1523 0170 B5DB D9FA 0E80" /* 1£‡._.#.pµÛÙú.€ */ - $"7342 6634 1E36 FB10 615A 1862 FF53 1545" /* sBf4.6û.aZ.bÿS.E */ - $"C795 B42C 8282 534C 3AFD D370 7621 820E" /* Ç•´,‚‚SL:ýÓpv!‚. */ - $"9EDA AF3A 476B 3537 E327 52DE 4A99 73D1" /* žÚ¯:Gk57ã'RÞJ™sÑ */ - $"0718 7C16 82D5 99A5 32DD 0E83 9C4F 60F8" /* ..|.‚Õ™¥2Ý.ƒœO`ø */ - $"0743 325D 2056 84FF 06BC C6BB 338C 64CF" /* .C2] V„ÿ.¼Æ»3ŒdÏ */ - $"B7B9 C4C7 9800 E4DA EE0A 6636 DEE8 B8F8" /* ·¹Äǘ.äÚîÂf6Þè¸ø */ - $"739E 1EBD 408C C620 9790 A337 E987 2E54" /* sž.½@ŒÆ —£7é‡.T */ - $"DD4A E501 C0BF 44E6 E8EF ACCF 028F 253C" /* ÝJå.À¿Dæèï¬Ï.%< */ - $"F466 FA92 BEE6 A066 F4B6 5B41 CA80 3567" /* ôfú’¾æ fô¶[AÊ€5g */ - $"A079 E31D CEE9 CD64 0AED 265D E591 B98C" /*  yã.ÎéÍdÂí&]呹Œ */ - $"DF22 C203 3C43 E1D8 5D64 CA99 E6C7 EF30" /* ß"Â.Ãɺ9ìÛâûšÅ¯.CÜ-®dÀ§ 9 */ - $"A6C9 6079 72D6 0BC7 C501 A3A4 5EF4 A060" /* ¦É`yrÖ.ÇÅ.£¤^ô ` */ - $"C46E FCB9 1958 AD83 1176 0776 81C2 13C2" /* Änü¹.X­ƒ.v.vÂ. */ - $"DF08 4A76 137F DC5C 4867 0493 EE96 8373" /* ß.Jv..Ü\Hg.“î–ƒs */ - $"4644 13A4 F789 39FF 813B D226 575A 5A18" /* FD.¤÷‰9ÿ;Ò&WZZ. */ - $"3AF5 4B88 2747 3D47 681F 9670 0069 DD02" /* :õKˆ'G=Gh.–p.iÝ. */ - $"4252 ADB0 D6FB F1F1 1432 C24B D920 7290" /* BR­°Öûññ.2ÂKÙ r */ - $"3709 3D60 15D9 0C49 23EC 77F8 F791 F132" /* 7Æ=`.Ù.I#ìwø÷‘ñ2 */ - $"046E 0D05 9AFA 210A 9992 29D9 7AA6 F18E" /* .n..šú!™’)Ùz¦ñŽ */ - $"E245 75E0 018F BCEB 8D1B C2D0 083E 985F" /* âEuà.¼ë.ÂÐ.>˜_ */ - $"B791 554D F5F5 AD71 E064 75E6 1F3A D463" /* ·‘UMõõ­qàduæ.:Ôc */ - $"9A59 0A43 3457 BD7C 44A7 5C5E 9D19 C5D8" /* šYÂC4W½|D§\^.ÅØ */ - $"5880 C2CC 5DF0 2964 C0FD ABA1 004B 008D" /* X€ÂÌ]ð)dÀý«¡.K. */ - $"5205 7F2E 0843 E484 2D37 9C34 2425 7AFF" /* R....Cä„-7œ4$%zÿ */ - $"7021 D907 B6E1 F5E5 02C3 F3DD 44C8 2252" /* p!Ù.¶áõå.ÃóÝDÈ"R */ - $"0649 3C1A 1A80 449A 64D1 1720 76D6 4987" /* .I<..€DšdÑ. vÖI‡ */ - $"B4B1 E749 E899 BF69 5B35 F925 2EE6 6CE6" /* ´±çI虿i[5ù%.ælæ */ - $"B4FD CEB3 54C0 7C9D 4380 F93B 5701 F274" /* ´ýγTÀ|C€ù;W.òt */ - $"C4F3 CC20 F972 1FD1 56B3 911D 2995 5FC9" /* ÄóÌ ùr.ÑV³‘.)•_É */ - $"1F35 BAE0 9AC7 3082 1372 C1D5 4B23 D79E" /* .5ºàšÇ0‚.rÁÕK#מ */ - $"EF63 A93F 8E74 26FB AC68 CDBE BD3E 9720" /* ïc©?Žt&û¬h;½>— */ - $"DF71 956D 5D26 559E 2795 2F1B F798 7821" /* ßq•m]&Už'•/.÷˜x! */ - $"F3CB 1E6F 2351 11BD 0EFF 19B2 40A2 1C7F" /* óË.o#Q.½.ÿ.²@¢.. */ - $"267D D302 F6AE 5410 1E96 40DC 386E CB7B" /* &}Ó.ö®T..–@Ü8nË{ */ - $"7EA3 5CF7 46BA 8758 D0EE 12B3 34DF 46FE" /* ~£\÷Fº‡XÐî.³4ßFþ */ - $"517B E0F8 7E28 83A5 E93A C06D 7C3F 254B" /* Q{àø~(ƒ¥é:Àm|?%K */ - $"53DF 91ED F6AB FD0A 53A0 5257 F9B8 E8B7" /* Sß‘íö«ýÂS RWù¸è· */ - $"5A14 6036 C6DA E3FE C29D 799F 8B43 46D6" /* Z.`6ÆÚãþÂyŸ‹CFÖ */ - $"94DF 1954 073C 7C30 40F4 A00D 93D4 AADF" /* ”ß.T.<|0@ô .“ﻧ */ - $"4839 EF36 F92A 3758 97CE 955A 3521 3CB5" /* H9ï6ù*7X—ΕZ5!<µ */ - $"8269 30A7 2A93 6A40 07BE DCC3 50B6 C86B" /* ‚i0§*“j@.¾ÜÃP¶Èk */ - $"CE9A AF28 3B80 4FE6 873C DB8E A29C 15DC" /* Κ¯(;€Oæ‡<ÛŽ¢œ.Ü */ - $"81A8 F841 4F77 6237 7267 55C4 1289 2DA1" /* ¨øAOwb7rgUÄ.‰-¡ */ - $"8392 424A 398F 9FA7 8DBE 2CC6 44E9 A005" /* ƒ’BJ9Ÿ§¾,ÆDé . */ - $"0E57 6638 ADDD 9F15 D32E 13A9 F752 67BA" /* .Wf8­ÝŸ.Ó..©÷Rgº */ - $"9F1D 753C 0023 2BC1 2C48 19AF FF28 66E6" /* Ÿ.u<.#+Á,H.¯ÿ(fæ */ - $"0A05 1D62 536F C372 7DEC 5069 B44D AFD4" /* Â..bSoÃr}ìPi´M¯Ô */ - $"BE3C 9C16 161E 95B4 89E7 B034 4524 E373" /* ¾<œ...•´‰ç°4E$ãs */ - $"D4A2 2F82 F1BB 8F20 7861 0F95 7CDF C184" /* Ô¢/‚ñ» xa.•|ßÁ„ */ - $"5B65 6015 001B F6BD 5D52 D4BC 3A42 FD56" /* [e`...ö½]RÔ¼:BýV */ - $"D48F 3358 7432 09BD FF19 625D 3A11 13DA" /* Ô3Xt2ƽÿ.b]:..Ú */ - $"F222 12E8 5A1B 12BF 9B3B A234 A367 8FB6" /* ò".èZ..¿›;¢4£g¶ */ - $"4BF2 EE99 DB11 5D13 7021 71B4 2280 A1BC" /* Kòî™Û.].p!q´"€¡¼ */ - $"2AEF ECB5 D7EC 047C 0860 9676 78B1 CA76" /* *ïìµ×ì.|.`–vx±Êv */ - $"9AFB C995 D4EB 900A AD98 6423 E572 B68C" /* šûÉ•Ôë­˜d#år¶Œ */ - $"A271 A30B D157 8E95 8250 29BB 0323 E26C" /* ¢q£.ÑWŽ•‚P)».#âl */ - $"9223 91C7 0CD4 F0B0 442E 1BD3 1473 C699" /* ’#‘Ç.Ôð°D..Ó.sÆ™ */ - $"2D1C 8791 C699 920E 72C0 0D3E F6E9 9E2B" /* -.‡‘Æ™’.rÀ.>öéž+ */ - $"60B6 A87F 6CBE 146C 1224 90FC BF7B C6A9" /* `¶¨.l¾.l.$ü¿{Æ© */ - $"090E 3EAD C89D 5065 414B 3A1C F271 9327" /* Æ.>­ÈPeAK:.òq“' */ - $"D490 CD2B FBB3 BEFF 768D 4601 635B A746" /* ÔÍ+û³¾ÿvF.c[§F */ - $"8A4B 0981 8B8F EA85 D255 2113 8792 CC76" /* ŠKÆ‹ê…ÒU!.‡’Ìv */ - $"DE84 B950 C5F4 A4C1 D4EF 7D52 CC74 CCEE" /* Þ„¹PÅô¤ÁÔï}RÌtÌî */ - $"B40E B94F 9467 15CA 1DE0 3557 BF09 D787" /* ´.¹O”g.Ê.à5W¿Æ×‡ */ - $"ED66 345A E153 B4DC EF7C 2952 3161 5A99" /* íf4ZáS´Üï|)R1aZ™ */ - $"A193 D5EB 40F5 1300 65FA 8DFD 621A AE94" /* ¡“Õë@õ..eúýb.®” */ - $"30CD 6D25 A0FC 942E 37AC 52C8 CEAD 2D1F" /* 0Ím% ü”.7¬RÈέ-. */ - $"87D5 D078 F173 F5AD 7A56 DD1B 10C3 F9BF" /* ‡ÕÐxñsõ­zVÝ..Ãù¿ */ - $"69C1 9E6B E021 A0C7 84BF D87A 8AA8 327C" /* iÁžkà! Ç„¿ØzЍ2| */ - $"7D48 0D97 E584 FF7F AE07 2001 BF6C 2691" /* }H.—å„ÿ.®. .¿l&‘ */ - $"3032 E118 8741 42AD 7709 3086 8488 F9D3" /* 02á.‡AB­wÆ0†„ˆùÓ */ - $"0353 D79E 2E21 8F21 46CC 005C DA8A 0229" /* .Sמ.!!FÌ.\ÚŠ.) */ - $"A56B A72A C69E FCF7 7558 5D72 0050 2BDE" /* ¥k§*Æžü÷uX]r.P+Þ */ - $"0F36 E4F0 C744 89FC 37F0 7ECA F488 FE8C" /* .6äðÇD‰ü7ð~ÊôˆþŒ */ - $"1B6B 0158 B34D 1EA6 9B1F 154E FF79 01D4" /* .k.X³M.¦›..Nÿy.Ô */ - $"725F D9CF D9BF CCFF 439D 8F5C A92D D20D" /* r_ÙÏÙ¿ÌÿC\©-Ò. */ - $"0613 88F8 5C1C B6BD 07B9 9078 151D 8353" /* ..ˆø\.¶½.¹x..ƒS */ - $"0E68 8495 D521 92D8 E92D CF9B 10E6 ABDC" /* .h„•Õ!’Øé-Ï›.æ«Ü */ - $"53D9 DFB2 F2AF F964 14E3 74D6 3D64 01E2" /* SÙß²ò¯ùd.ãtÖ=d.â */ - $"FAFB 2D0B D303 DCF7 7718 E6CF 30DB 3FAE" /* úû-.Ó.Ü÷w.æÏ0Û?® */ - $"2873 3339 54A3 1E48 04D2 FDF2 E863 6201" /* (s39T£.H.Òýòècb. */ - $"01D1 182C 4C2A D85D AE26 DE15 9796 494C" /* .Ñ.,L*Ø]®&Þ.—–IL */ - $"82EA B4C0 2D3C 3D3E 1732 2ACA AC27 B7DB" /* ‚ê´À-<=>.2*ʬ'·Û */ - $"5CED 6F9D 3EDB FF04 5E83 BE60 1636 AE2C" /* \ío>Ûÿ.^ƒ¾`.6®, */ - $"754D 2928 7128 ACFD 15E8 C1A0 30A5 1063" /* uM)(q(¬ý.èÁ 0¥.c */ - $"1E6F 10F7 A946 B9B4 D921 5DB3 113F 332E" /* .o.÷©F¹´Ù!]³.?3. */ - $"61B8 AB3D 2F87 E081 C9D9 32B7 1060 785A" /* a¸«=/‡àÉÙ2·.`xZ */ - $"EFDD F472 0283 E235 4D42 E903 A06B 51CB" /* ïÝôr.ƒâ5MBé. kQË */ - $"39DC A412 A492 918E 235E F57C E4CE 4E0F" /* 9ܤ.¤’‘Ž#^õ|äÎN. */ - $"6BE6 7036 FA8A 7B2C 21FE 60B1 6FCA 7654" /* kæp6úŠ{,!þ`±oÊvT */ - $"C9FD DCDF E497 B2A6 D6D5 87ED 9D3B 5B86" /* ÉýÜßä—²¦ÖÕ‡í;[† */ - $"DA51 6B5B AE3E 520B 1DB3 5A6B 2B4D A777" /* ÚQk[®>R..³Zk+M§w */ - $"4F13 A04C 7D4F 819B 1FEB 086D 5F34 6643" /* O. L}O›.ë.m_4fC */ - $"0208 693A D70C 55B2 7A07 BC27 3A41 B739" /* ..i:×.U²z.¼':A·9 */ - $"C1F5 7425 07D5 D74C 1F56 F680 F1C4 B0CB" /* Áõt%.Õ×L.Vö€ñÄ°Ë */ - $"F3E0 DE80 53FC 256D EFD0 6B64 028C EC70" /* óàÞ€Sü%mïÐkd.Œìp */ - $"4973 06D4 242C DAAA 8373 DFAC B0C9 14A1" /* Is.Ô$,Úªƒs߬°É.¡ */ - $"BFBC 0BB4 E250 919E 3D2B B388 3A89 FB02" /* ¿¼.´âP‘ž=+³ˆ:‰û. */ - $"9796 86E6 20F8 C26C 8120 349C 757A 6875" /* —–†æ øÂl 4œuzhu */ - $"F63E AE68 84C3 03A3 6F64 F9EE F892 2CF8" /* ö>®h„Ã.£odùîø’,ø */ - $"61C1 B13A E941 0D67 DA36 4C05 9565 DC85" /* aÁ±:éA.gÚ6L.•eÜ… */ - $"D7F8 6EB9 D903 D428 F59A 3EBF C73E 5E95" /* ×øn¹Ù.Ô(õš>¿Ç>^• */ - $"764D 15FB 98F2 BECE 0FC8 EA3C 4E51 E1DD" /* vM.û˜ò¾Î.Èêw' */ - $"DDEE 0A95 231F 04AC B6EF D134 C09D 1540" /* Ýî•#..¬¶ïÑ4À.@ */ - $"0E94 57E2 8418 C208 1F26 7396 96A0 D08F" /* .”Wâ„.Â..&s–– Ð */ - $"0CC0 40C8 C596 39BA 0CAE A6ED F8E8 7D6B" /* .À@ÈÅ–9º.®¦íøè}k */ - $"A76C 391B 6113 555F 62E0 6E14 5D27 E7BC" /* §l9.a.U_bàn.]'ç¼ */ - $"EDB7 D038 DED2 7BEE FC9D 6211 241E 0795" /* í·Ð8ÞÒ{îüb.$..• */ - $"9CDE 1607 B4C7 828E 24D2 4E9F FCA0 36EA" /* œÞ..´Ç‚Ž$ÒNŸü 6ê */ - $"004C C960 1680 01CE 7FF6 A201 EDAB 1ADF" /* .LÉ`.€.Î.ö¢.í«.ß */ - $"80D8 4524 390C 23DD EA8E 062C 5DDB 3C57" /* €ØE$9.#ÝêŽ.,]Û6 */ - $"00C2 0E05 134F 4802 3846 3575 1902 676D" /* .Â...OH.8F5u..gm */ - $"1006 D8AE 0D5F 1934 78F6 0721 F3C4 1000" /* ..Ø®._.4xö.!óÄ.. */ - $"8991 FA85 45B5 37A9 5A0C 54EE 014B 297B" /* ‰‘ú…Eµ7©Z.Tî.K){ */ - $"52F2 5ADD 7422 C97B EAA9 D291 45A7 A44A" /* RòZÝt"É{ê©Ò‘E§¤J */ - $"40FE AE73 5086 C7D3 85FD D734 67F2 8909" /* @þ®sP†ÇÓ…ý×4gò‰Æ */ - $"506D 36D8 2361 990C 802F A59E B603 9C94" /* Pm6Ø#a™.€/¥ž¶.œ” */ - $"F7BD AED9 8518 8651 DFFE 3D0E E920 E874" /* ÷½®Ù….†Qßþ=.é èt */ - $"FEB0 EE3C 3242 C249 4704 EEA8 9EFA DC61" /* þ°î<2BÂIG.úÜa */ - $"49C6 929E 2A9D 51CD FE0A FF02 3DDB 01EC" /* IÆ’ž*QÍþÂÿ.=Û.ì */ - $"80E8 630A B0C8 C9FC 7693 C60B 07E8 5D2F" /* €èc°ÈÉüv“Æ..è]/ */ - $"B97A 9F04 444E C836 DD68 FF12 EC9C 7E4F" /* ¹zŸ.DNÈ6Ýhÿ.ìœ~O */ - $"3CE9 83A8 191A 1E61 05F8 90FF 67E8 011A" /* <部...a.øÿgè.. */ - $"71EA 3EE8 AFBD 6328 ED84 9807 788D F3BC" /* qê>诽c(턘.xó¼ */ - $"2FA0 A210 7FFF 1D02 2519 4EC7 2A80 7FD0" /* / ¢..ÿ..%.NÇ*€.Ð */ - $"2064 A8F4 CC78 5EC8 88AF F1AB 868B 9F8D" /* d¨ôÌx^Ȉ¯ñ«†‹Ÿ */ - $"883E 3FDA D188 FBB7 3AFC 0C72 E01A CEF3" /* ˆ>?Úшû·:ü.rà.Îó */ - $"21E1 1718 4FDB 9A43 3767 424A 639B DFFE" /* !á..OÛšC7gBJc›ßþ */ - $"CA5F 7BA9 8F82 3EA6 6D4E 6986 6945 80DE" /* Ê_{©‚>¦mNi†iE€Þ */ - $"8274 4927 166A 6062 DF1D 0A72 F23B FA5A" /* ‚tI'.j`bß.Ârò;úZ */ - $"4DE4 5D19 54FC 488B 5237 FF5F 7B81 62C5" /* Mä].TüH‹R7ÿ_{bÅ */ - $"F6B7 B580 3016 11B6 22CF 63B8 428A D39A" /* ö·µ€0..¶"Ïc¸BŠÓš */ - $"5AC3 80FF 7310 8386 FF54 F361 304F 3BB5" /* ZÀÿs.ƒ†ÿTóa0O;µ */ - $"A7EB 0419 7DFB 6E56 20A8 3670 9018 9CB3" /* §ë..}ûnV ¨6p.œ³ */ - $"4B35 7082 32A7 E917 9CF8 FF7F FF80 0A6C" /* K5p‚2§é.œøÿ.ÿ€Âl */ - $"A48C 447E 3ECF 411D 89E4 F923 373B DCBE" /* ¤ŒD~>ÏA.‰äù#7;ܾ */ - $"2CE8 6580 0F87 1A23 1D93 62AE 48EF DEB8" /* ,èe€.‡.#.“b®HïÞ¸ */ - $"5DE8 DB68 1CA3 8D4B D3FE A476 7B3D ACAA" /* ]èÛh.£KÓþ¤v{=¬ª */ - $"284F 83EB 428F A201 D122 CB1A CCB2 C1FE" /* (OƒëB¢.Ñ"Ë.̲Áþ */ - $"367F 60D3 155D 8C00 22D8 ED33 D56B 1DE2" /* 6.`Ó.]Œ."Øí3Õk.â */ - $"98B0 A4A9 E041 2BF1 AA58 E78D 47E5 929F" /* ˜°¤©àA+ñªXçGå’Ÿ */ - $"85DA 699E C45A 0064 B931 CF2B 4169 44F0" /* …ÚižÄZ.d¹1Ï+AiDð */ - $"4B4F 083B 3D7C B2B2 D87B 785E 91A8 C614" /* KO.;=|²²Ø{x^‘¨Æ. */ - $"6EE6 A63C C8A7 B9E3 839D E245 4128 3BF9" /* næ¦<ȧ¹ãƒâEA(;ù */ - $"98CD 0C23 72EB E3A9 D21F 1BC2 4E13 274B" /* ˜Í.#rëã©Ò..ÂN.'K */ - $"19C8 CB39 5E7A D218 FBDB 0C42 51A1 1203" /* .ÈË9^zÒ.ûÛ.BQ¡.. */ - $"C0EB CDC2 9249 E461 1DE4 3DB6 FDFE 1334" /* ÀëÍÂ’Iäa.ä=¶ýþ.4 */ - $"1952 8231 CD71 A170 C55B 1FD0 6706 57F0" /* .R‚1Íq¡pÅ[.Ðg.Wð */ - $"282D 09A2 0893 A5BA 0314 43DD 32AF 3478" /* (-Æ¢.“¥º..CÝ2¯4x */ - $"EF6C 15F0 55C9 6A47 ECFE 3F3F 4DB4 5ED8" /* ïl.ðUÉjGìþ??M´^Ø */ - $"EFF8 8CA5 71F9 6669 078C 550C 943A 7046" /* ïøŒ¥qùfi.ŒU.”:pF */ - $"C031 6CE2 4681 4177 2913 CFE7 D857 C62A" /* À1lâFAw).ÏçØWÆ* */ - $"4652 88E2 8830 DF42 9C3D 2D76 E710 A8F1" /* FRˆâˆ0ßBœ=-vç.¨ñ */ - $"3626 45F2 55CC 008C EAB8 B891 A5F3 1AD2" /* 6&EòUÌ.Œê¸¸‘¥ó.Ò */ - $"AB11 6C48 3F18 40C0 51F0 DB88 0BD1 168C" /* «.lH?.@ÀQðÛˆ.Ñ.Œ */ - $"2E54 2DA6 CC60 BB05 4700 2C4E 179B 271B" /* .T-¦Ì`».G.,N.›'. */ - $"688C 1EE9 4D9A C781 8108 296B FE4F 028A" /* hŒ.éMšÇ.)kþO.Š */ - $"63D6 6EDF 6FEB FC17 BDFE 7A70 B48E D94E" /* cÖnßoëü.½þzp´ŽÙN */ - $"D985 3384 1BD2 B4C9 5213 B0D1 041B 876C" /* Ù…3„.Ò´ÉR.°Ñ..‡l */ - $"131C 4A9C 947B A79C A466 9779 E7C9 D2E1" /* ..Jœ”{§œ¤f—yçÉÒá */ - $"4E9F 0509 30E0 1115 E5C7 CAED 197B 818A" /* NŸ.Æ0à..åÇÊí.{Š */ - $"324D 8F8E ED44 BF44 5340 D647 1776 B983" /* 2MŽíD¿DS@ÖG.v¹ƒ */ - $"6D8C 88B1 6976 F7EB AFDB 6638 CAD3 F275" /* mŒˆ±iv÷ë¯Ûf8ÊÓòu */ - $"D93A 6CD3 9D6E C617 3969 D8E5 3059 947B" /* Ù:lÓnÆ.9iØå0Y”{ */ - $"6AFA 0E9B A19C 24C9 E1DC 089D 3545 89E4" /* jú.›¡œ$ÉáÜ.5E‰ä */ - $"E860 FB54 068C B464 EE9B 66B7 F267 34CF" /* è`ûT.Œ´dî›f·òg4Ï */ - $"1276 C6B2 47E6 8284 300B D1A9 1409 0C93" /* .vƲGæ‚„0.Ñ©.Æ.“ */ - $"E36A 8095 409A 7352 FF7A 0F50 A5E2 E678" /* ãj€•@šsRÿz.P¥âæx */ - $"C195 0898 E51E EB15 8D7A E918 29A6 D5CE" /* Á•.˜å.ë.zé.)¦ÕÎ */ - $"4DBC 978B 2CAA 9BA7 8727 EA1C 1C7A 6CC2" /* M¼—‹,ª›§‡'ê..zl */ - $"D172 DDF5 4BD4 9C69 607B 609F AEC8 FD84" /* ÑrÝõKÔœi`{`Ÿ®Èý„ */ - $"1DDA A076 C7E1 A7B1 F86C BC7E 1720 EB83" /* .Ú vÇá§±øl¼~. ëƒ */ - $"095B F1C8 7239 10FD 6A26 D10E 534B E257" /* Æ[ñÈr9.ýj&Ñ.SKâW */ - $"B691 5D92 6949 E7D8 7470 AA8C 421F F945" /* ¶‘]’iIçØtpªŒB.ùE */ - $"99F6 9492 B806 E264 47B0 4EF5 6206 734E" /* ™ö”’¸.âdG°Nõb.sN */ - $"944B 102F A688 23A4 EAB0 CCEA 0017 0156" /* ”K./¦ˆ#¤ê°Ìê...V */ - $"A8C9 2A3F FF49 4137 E23A 09D0 97BB 0E5F" /* ¨É*?ÿIA7â:ÆÐ—»._ */ - $"E2A2 2247 4980 6A20 B443 3E0B 0465 B9EF" /* â¢"GI€j ´C>..e¹ï */ - $"C490 B954 3AEA ABB7 3D53 111D 8897 551C" /* ĹT:ê«·=S..ˆ—U. */ - $"B865 1EA2 33F2 AD50 D488 1D6D 9733 27F3" /* ¸e.¢3ò­PÔˆ.m—3'ó */ - $"78AC C946 FB3C 4D2F 6580 1B3A 3368 3D54" /* x¬ÉFû1¤ ÀÌ»À²žwqOÞ */ - $"1679 23F1 DE12 5574 68E3 60A1 9C00 CBEC" /* .y#ñÞ.Uthã`¡œ.Ëì */ - $"9C44 9009 0000 08DE 28C3 2776 AAA2 829A" /* œDÆ...Þ(Ã'vª¢‚š */ - $"05E0 47E9 0001 48A9 672C 0775 EE58 F075" /* .àGé..H©g,.uîXðu */ - $"7458 B48A 5455 DB33 3524 BE73 1D7C E223" /* tX´ŠTUÛ35$¾s.|â# */ - $"4EC4 732C EC4B 128D 341C 790C 00A2 1309" /* NÄs,ìK.4.y..¢.Æ */ - $"2D0B 5EA7 B07B C82C 976B 68C2 642A F095" /* -.^§°{È,—khÂd*ð• */ - $"A1C4 010E C94E D8A9 34BB FD3E 2B2F 92EC" /* ¡Ä..ÉNØ©4»ý>+/’ì */ - $"30E1 A7B3 040B C920 3FFF 7FA1 317B 90F7" /* 0á§³..É ?ÿ.¡1{÷ */ - $"C744 40B8 8325 4036 82FB 0C6C D800 19C4" /* ÇD@¸ƒ%@6‚û.lØ..Ä */ - $"2631 C4B8 3160 8649 2492 4924 9248 A747" /* &1ĸ1`†I$’I$’H§G */ - $"3D41 A17D 23A6 9AC7 9000 0000 0000 0000" /* =A¡}#¦šÇ....... */ - $"0000 0019 1A70 8823 BB21 7C62 4556 F257" /* .....pˆ#»!|bEVòW */ - $"62C0 CF0B 72EE F37E 64EC 43C2 AE04 9F58" /* bÀÏ.rîó~dìC®.ŸX */ - $"94DC E128 91EC BAA2 DADD 57A7 D5F7 1972" /* ”Üá(‘캢ÚÝW§Õ÷.r */ - $"7543 9A9A 0DB3 C3FD 42E0 19A3 8F45 7FDF" /* uCšš.³ÃýBà.£E.ß */ - $"CEB1 A7E5 8A09 5B4A F9E6 294B C5DC 80C9" /* α§åŠÆ[Jùæ)KÅÜ€É */ - $"9AEE 0729 374F 04FD 79D6 7170 D940 14F0" /* šî.)7O.ýyÖqpÙ@.ð */ - $"830F 0B71 50E7 3C76 97AF 0F71 A32D DC5A" /* ƒ..qPçF2£• */ - $"57A3 0EC0 B3A3 969D 9DF0 6ACC 859F FF7F" /* W£.À³£–ðjÌ…Ÿÿ. */ - $"FF27 DAA0 AF8E 216C E5D8 874A 530F 555E" /* ÿ'Ú ¯Ž!l娇JS.U^ */ - $"AF3F E231 5BAF F7B6 8E73 5742 2717 4031" /* ¯?â1[¯÷¶ŽsWB'.@1 */ - $"175D 5FDA F402 B756 AEAE 7E7E BFEE CE68" /* .]_Úô.·V®®~~¿îÎh */ - $"7878 870D 01C2 C2A4 61D5 64E3 E195 B914" /* xx‡..¤aÕdãᕹ. */ - $"A45F FF52 DC14 F5E9 E037 65E3 5477 62A5" /* ¤_ÿRÜ.õéà7eãTwb¥ */ - $"3EEC CA32 6558 5965 8B6E 3F13 9DB2 1361" /* >ìÊ2eXYe‹n?.².a */ - $"8426 9FD7 B329 4E75 FF1D 9B78 9735 4B1B" /* „&Ÿ×³)Nuÿ.›x—5K. */ - $"D80E 1781 192F 6777 8F94 F6A2 5016 726D" /* Ø.../gw”ö¢P.rm */ - $"1E0D D2CB 6F87 B3C6 09A2 1FE3 915E 8943" /* ..ÒËo‡³ÆÆ¢.ã‘^‰C */ - $"FE6C 6743 4733 D5BC A9DD 5338 C9E1 AF50" /* þlgCG3Õ¼©ÝS8Éá¯P */ - $"3634 C26C 0C1F 94E7 50B2 4310 DD62 4F09" /* 64Âl..”çP²C.ÝbOÆ */ - $"ABCD 7821 8B7B 7B87 2EEA 25A1 9D3C 55CC" /* «Íx!‹{{‡.ê%¡Òúq%éø‡±‡ºÛ±... */ - $"93B3 4206 45ED 7238 3F80 1441 50CA CCBA" /* “³B.Eír8?€.APÊ̺ */ - $"EF59 3BC5 4236 2ABF 9150 7335 49C5 0216" /* ïY;ÅB6*¿‘Ps5IÅ.. */ - $"F97B D5A5 1EF5 A69D 8B34 C25B 73E1 DA52" /* ù{Õ¥.õ¦‹4Â[sáÚR */ - $"79E5 9EB1 9CB1 0952 B3F5 E221 D426 4759" /* yåž±œ±ÆR³õâ!Ô&GY */ - $"D5CF 2D18 CC2A 270A 859D F10C 8108 52FF" /* ÕÏ-.Ì*'Â…ñ..Rÿ */ - $"2A7D D39E EFFD 568C 2DB3 7BD5 62D0 2403" /* *}ÓžïýVŒ-³{ÕbÐ$. */ - $"69D1 A4B6 2D24 E485 973D F6A5 E6DC 1DB5" /* iѤ¶-$ä…—=ö¥æÜ.µ */ - $"BF0B E185 5592 E3A0 6046 E050 5151 9546" /* ¿.á…U’ã `FàPQQ•F */ - $"17F7 0CF6 222F 17E0 40E5 3EF5 74EE BAB6" /* .÷.ö"/.à@å>õt */ - $"55BD 76C1 DD80 39C8 BAE0 37B8 398A B370" /* U½vÁÝ€9Ⱥà7¸9гp */ - $"D400 0C29 5DC9 94FF 069B 36E2 CD79 195F" /* Ô..)]É”ÿ.›6âÍy._ */ - $"5B9B 1237 1F18 C560 C901 F9A4 184B 7570" /* [›.7..Å`É.ù¤.Kup */ - $"433E 75BE 0297 C641 7D9B 7092 8D64 96F5" /* C>u¾.—ÆA}›p’d–õ */ - $"D70C 9B66 71D3 09B1 F635 0FC3 0B49 7D6E" /* ×.›fqÓÆ±ö5.Ã.I}n */ - $"660C 8E1D 0257 672B 97EE C2A5 7B84 729E" /* f.Ž..Wg+—îÂ¥{„rž */ - $"6516 585E 354F 2E22 88A7 A515 B945 3745" /* e.X^5O."ˆ§¥.¹E7E */ - $"F6A5 5CB2 E212 10AD AB6F 07F5 FDA3 09EB" /* ö¥\²â..­«o.õý£Æë */ - $"A053 313B 9A8E 757D E132 D483 DC78 0882" /*  S1;šŽu}á2ÔƒÜx.‚ */ - $"A63C 95E0 036C 4626 F66B 5F6C 39A1 9401" /* ¦<•à.lF&ök_l9¡”. */ - $"7276 4DCE 4487 7D8C 12A3 B713 9139 AC0A" /* rvMÎD‡}Œ.£·.‘9¬Â */ - $"18AD 4DFD 2A3D 69E7 E76E 593C 8DAB FD56" /* .­Mý*=iççnY<«ýV */ - $"F959 BA6B FBA3 2853 D610 4DB0 7A30 3A09" /* ùYºkû£(SÖ.M°z0:Æ */ - $"916B DFF7 B3B4 F8D3 9619 0FD9 8FBC FC6B" /* ‘kß÷³´øÓ–..Ù¼ük */ - $"D73D ABD2 4C41 6AD0 6584 AF19 3074 AF6E" /* ×=«ÒLAjÐe„¯.0t¯n */ - $"369C BEB1 76D5 D311 6172 F157 D522 DDED" /* 6œ¾±vÕÓ.arñWÕ"Ýí */ - $"D4ED 0230 0BB5 E881 0E6B 9C4F 111F 4F6E" /* Ôí.0.µè.kœO..On */ - $"7CAD 4745 7BBF DA70 A9C4 051E FDEA 206C" /* |­GE{¿Úp©Ä..ýê l */ - $"9983 0E2D 4A4A A4DE 82E9 DAAF 5748 37AE" /* ™ƒ.-JJ¤Þ‚éÚ¯WH7® */ - $"4046 DCCB 0D1A 80DA 1804 20E2 F7CF AD69" /* @FÜË..€Ú.. â÷Ï­i */ - $"F9D8 5106 D02D 16E9 4437 9560 B618 1126" /* ùØQ.Ð-.éD7•`¶..& */ - $"95A2 4B23 89C4 78EE 898E D80C 8E49 5201" /* •¢K#‰ÄxØ.ŽIR. */ - $"2095 ABAF 9CA5 0F8E CB22 00D4 4289 59B3" /* •«¯œ¥.ŽË".ÔB‰Y³ */ - $"1835 1395 8AE5 3A88 7185 E7DD 57F3 4CE4" /* .5.•Šå:ˆq…çÝWóLä */ - $"1465 C878 6B72 7146 2AF1 F053 5B31 7697" /* .eÈxkrqF*ñðS[1v— */ - $"7300 A777 3919 099E BD1C 79C3 24C4 A355" /* s.§w9.Æž½.yÃ$Ä£U */ - $"0C88 C727 1831 D498 E513 47A5 F25F DDBE" /* .ˆÇ'.1Ô˜å.G¥ò_ݾ */ - $"46E7 40B5 EBCC 080F 6915 3FDF EDB9 A9B1" /* Fç@µëÌ..i.?ßí¹©± */ - $"39ED D794 60E1 A5A2 0EEC 7A09 46BF 201E" /* 9í×”`ᥢ.ìzÆF¿ . */ - $"311F EEEE 88EF C6C1 C10D E238 50C9 7F01" /* 1.îîˆïÆÁÁ.â8PÉ.. */ - $"DFF1 17BA D8F4 0017 47E7 75F2 4D82 679E" /* ßñ.ºØô..GçuòM‚gž */ - $"6867 60A4 6222 77B9 319B 186D FCB3 168A" /* hg`¤b"w¹1›.mü³.Š */ - $"EAF3 C227 1082 D7ED 2C70 E619 8676 0186" /* êóÂ'.‚×í,pæ.†v.† */ - $"8C23 5DE5 D4A0 61CB CDE4 AED5 E008 6F3C" /* Œ#]åÔ aËÍä®Õà.o< */ - $"D894 AC14 6FEC 5D4C C2FF 3A6C 512F E475" /* Ø”¬.oì]LÂÿ:lQ/äu */ - $"FCB8 DFA4 EB46 2DF4 E133 5858 364B 54E1" /* ü¸ß¤ëF-ôá3XX6KTá */ - $"A6E1 5D0C 157E D987 DF95 B1FB 3723 4F2F" /* ¦á]..~هߕ±û7#O/ */ - $"C9BF C6D4 D979 412E D0EB B285 8DFF 7CAC" /* É¿ÆÔÙyA.Ðë²…ÿ|¬ */ - $"F1BF 1825 8B89 9992 3848 C666 4184 4906" /* ñ¿.%‹‰™’8HÆfA„I. */ - $"0D61 6B58 9355 A5D9 C940 B6F2 6918 82E1" /* .akX“U¥ÙÉ@¶òi.‚á */ - $"FF7D 4F5F FE94 5208 650B B780 0D2B DD4F" /* ÿ}O_þ”R.e.·€.+ÝO */ - $"5874 3627 2353 6328 06B9 908C 6C95 D898" /* Xt6'#Sc(.¹Œl•ؘ */ - $"8C24 1D0F 641B 7763 CFBE E88A BB05 8639" /* Œ$..d.wcϾ芻.†9 */ - $"D91C 4A38 3A3F 75C6 61BD BFED CA10 2A73" /* Ù.J8:?uÆa½¿íÊ.*s */ - $"E3C5 E85C BF5B 0346 2105 4286 300D D812" /* ãÅè\¿[.F!.B†0.Ø. */ - $"8BE4 DAE4 292B A765 338E 7E42 50F1 8046" /* ‹äÚä)+§e3Ž~BPñ€F */ - $"3FDC 1A85 4616 61E5 7321 18D9 5AB9 8903" /* ?Ü.…F.aås!.ÙZ¹‰. */ - $"90BD 6F89 E7D0 35D1 0AA3 BBAE 3CF8 A7B7" /* ½o‰çÐ5Ñ£»®<ø§· */ - $"73C8 8B94 B409 16EC 60A6 E819 BCA7 BA66" /* sÈ‹”´Æ.ì`¦è.¼§ºf */ - $"2245 524C 718C 635D E4F7 ACA0 02C3 E0A7" /* "ERLqŒc]ä÷¬ .Ãà§ */ - $"B542 0FF5 7029 FF4D 1D88 E3B3 D657 802B" /* µB.õp)ÿM.ˆã³ÖW€+ */ - $"8068 9BD4 B17F 9A6B CC1C 4B53 246F 81E5" /* €h›Ô±.škÌ.KS$oå */ - $"9168 48EC 4B44 3FFF 7B8B 5777 5677 134E" /* ‘hHìKD?ÿ{‹WwVw.N */ - $"1B8E 8C91 429F CE85 86EF 62B4 71AF EAE7" /* .ŽŒ‘BŸÎ…†ïb´q¯êç */ - $"E333 7BD3 2825 7230 C950 0000 1B8D 8BA6" /* ã3{Ó(%r0ÉP...‹¦ */ - $"04C1 56DC 30F0 619E DD6C D196 C91E 1ED4" /* .ÁVÜ0ðažÝlÑ–É..Ô */ - $"1285 94A8 F775 05A9 3440 78FF 7E52 8833" /* .…”¨÷u.©4@xÿ~Rˆ3 */ - $"E8A1 A4E4 4580 38DD ADE1 3BD5 AD19 74E6" /* 衤äE€8Ý­á;Õ­.tæ */ - $"EEA1 B4B1 0B0B 9BE9 08EC DB78 E6AA 37E5" /* î¡´±..›é.ìÛxæª7å */ - $"AD06 72A6 51FC 0004 4737 BF1A 89FF 7E11" /* ­.r¦Qü..G7¿.‰ÿ~. */ - $"0A68 EAD7 BDA5 4D5B 2C8D 0C7A 952E 2190" /* Âhê×½¥M[,.z•.! */ - $"8451 1B38 CEFD 2835 5ADD BDA2 01C2 A3D6" /* „Q.8Îý(5Zݽ¢.壅 */ - $"6046 4BD8 41DF D8B6 D9B1 1F96 5FF8 CC56" /* `FKØAߨ¶Ù±.–_øÌV */ - $"A63B 6E14 5035 26D6 946D 1F59 4D17 5507" /* ¦;n.P5&Ö”m.YM.U. */ - $"85F7 2DAF A737 4E30 9097 2E2E DAF8 37D1" /* …÷-¯§7N0—..Úø7Ñ */ - $"D987 4E59 ABFD CDF3 AAC3 30D1 8616 FAB3" /* Ù‡NY«ýÍóªÃ0ц.ú³ */ - $"2914 92AA 6913 C36F 66DA 4B0B 18FE DD55" /* ).’ªi.ÃofÚK..þÝU */ - $"1D2A 3F00 D80C 2423 D923 95C6 E11D 0069" /* .*?.Ø.$#Ù#•Æá..i */ - $"B5C9 0803 0907 B950 13DF 48EC F794 3D36" /* µÉ..Æ.¹P.ßHì÷”=6 */ - $"5249 2492 4924 9249 2489 9EF6 DC36 9A6B" /* RI$’I$’I$‰žöÜ6šk */ - $"1751 415E A37F 47EC A4EA 67AC A222 733C" /* .QA^£.Gì¤êg¬¢"s< */ - $"467D 1FFE C727 E6AA 6E99 C584 A87E DFFF" /* F}.þÇ'æªn™Å„¨~ßÿ */ - $"7FC3 7592 8204 71A2 6088 C38B 6E65 868E" /* .Ãu’‚.q¢`ˆÃ‹ne†Ž */ - $"5A3F FF7F F919 4069 CF10 A302 5125 525C" /* Z?ÿ.ù.@iÏ.£.Q%R\ */ - $"A443 88AF 4104 7807 1410 84BA E955 76E8" /* ¤Cˆ¯A.x...„ºéUvè */ - $"5F35 B612 A668 5694 9249 2492 4924 9249" /* _5¶.¦hV”’I$’I$’I */ - $"2492 4924 4C25 1941 A4EB 1996 7A28 19C1" /* $’I$L%.A¤ë.–z(.Á */ - $"A1B0 01D7 ACB2 3F83 42DC D154 27C9 F11F" /* ¡°.׬²?ƒBÜÑT'Éñ. */ - $"FC46 90B1 89C4 F78A 4C6F 5C2A 833D 8425" /* üF±‰Ä÷ŠLo\*ƒ=„% */ - $"D837 CA14 E4C7 7F8A 9833 99B7 E589 1376" /* Ø7Ê.äÇ.Š˜3™·å‰.v */ - $"C867 FF1D 200A 4C9B 624E 68E3 11AE C8AF" /* Ègÿ. ÂL›bNhã.®È¯ */ - $"1723 C741 CEAC 16CE C548 72FF 15CD 3E67" /* .#ÇAά.ÎÅHrÿ.Í>g */ - $"AF2C 323F 0FD0 6752 4973 55BD CC10 05B4" /* ¯,2?.ÐgRIsU½Ì..´ */ - $"AB3F 9302 00C3 EE70 1BA4 B650 FAB2 5821" /* «?“..Ãîp.¤¶Pú²X! */ - $"3856 3872 1B02 7D70 F1F9 0B28 A9DC CAE7" /* 8V8r..}pñù.(©ÜÊç */ - $"D9E7 6252 A768 A7DE 0FB1 FCB1 F54B 98C4" /* ÙçbR§h§Þ.±ü±õK˜Ä */ - $"7B6E 5E24 BC53 F945 741F 66A0 A51E EE5A" /* {n^$¼SùEt.f ¥.îZ */ - $"2A0D B951 4EEE A88B 4F2F C326 F326 1D12" /* *.¹QNO/Ã&ó&.. */ - $"524A 9E48 CC53 44EF C54F 1737 8505 46CF" /* RJžHÌSDïÅO.7….FÏ */ - $"351E 4354 05C7 C832 2A7D 8899 D009 E617" /* 5.CT.ÇÈ2*}ˆ™ÐÆæ. */ - $"0334 305D 9497 D845 E6D3 2CD2 178F 1316" /* .40]”—ØEæÓ,Ò... */ - $"65AD 239E 2ED5 ECCB 402A E728 09B5 E847" /* e­#ž.ÕìË@*ç(ƵèG */ - $"65BD 3F31 CAC5 F9D8 6606 B8AF 4F84 89FE" /* e½?1ÊÅùØf.¸¯O„‰þ */ - $"9004 4730 30BC E58F 5FB3 38CF 36B9 38FC" /* .G00¼å_³8Ï6¹8ü */ - $"FB9D 07EA D13F 9DB9 7185 0E88 0E3B 06E5" /* û.êÑ?¹q….ˆ.;.å */ - $"D476 CFCA 1587 3067 9257 B5DF 1E83 E7FF" /* ÔvÏÊ.‡0g’Wµß.ƒçÿ */ - $"7FFF 7FFF 0E68 E181 AC15 B980 2AFB 1D80" /* .ÿ.ÿ.há¬.¹€*û.€ */ - $"C5BB A88D E36A 4DC5 94CF 6DB2 0694 F977" /* Å»¨ãjMÅ”Ïm².”ùw */ - $"D708 02D1 F380 6773 016A CA84 3B1C 6A33" /* ×..Ñó€gs.jÊ„;.j3 */ - $"5AAC BA2D FEC5 7542 51FC 68D0 CDDD EA44" /* Z¬º-þÅuBQühÐÍÝêD */ - $"788E 2F96 D80C F159 FF45 3316 1494 A7F5" /* xŽ/–Ø.ñYÿE3..”§õ */ - $"98B4 FC39 0062 D59B 52A6 32CB F97C ABD6" /* ˜´ü9.bÕ›R¦2Ëù|«Ö */ - $"42AE AE46 6AA7 D986 0A4E DCDD 717E 8B7C" /* B®®Fj§Ù†ÂNÜÝq~‹| */ - $"8FB8 B396 65A6 83FF 6A4A A5C1 597F 70AF" /* ¸³–e¦ƒÿjJ¥ÁY.p¯ */ - $"DC96 E2EC 0C1D 7A00 3428 2C60 DE32 8DB8" /* Ü–âì..z.4(,`Þ2¸ */ - $"1604 C249 5E82 1F5B 6C23 E562 B2D4 754E" /* ..ÂI^‚.[l#åb²ÔuN */ - $"7F73 442A 25D3 C42A 6A6D 5D09 0E8C 2E67" /* .sD*%ÓÄ*jm]Æ.Œ.g */ - $"95EC 08FE B505 8B5A A4A8 0000 0000 0000" /* •ì.þµ.‹Z¤¨...... */ - $"0000 0000 6121 26B3 27C3 AEC0 FF52 2FEE" /* ....a!&³'îÀÿR/î */ - $"D4F3 92BB 06E2 ABE4 35DC A278 9084 B2F0" /* Ôó’».â«ä5Ü¢x„²ð */ - $"EE1A ADB2 F770 3D4E 120A FD01 B042 CD00" /* î.­²÷p=N.Âý.°BÍ. */ - $"B9C2 B661 40B0 E5FC DC59 59F0 61C5 53A7" /* ¹Â¶a@°åüÜYYðaÅS§ */ - $"7AC1 7EDC 77B7 1C84 0F9A E321 389C E693" /* zÁ~Üw·.„.šã!8œæ“ */ - $"AC98 5160 DDD0 C9A9 BE17 ED52 A10A 300C" /* ¬˜Q`ÝÐÉ©¾.íR¡Â0. */ - $"88ED BB5A 80DA C23B 1196 0C7C 6BA8 D4EA" /* ˆí»Z€ÚÂ;.–.|k¨Ôê */ - $"4FAB 08A9 EBE3 1CC9 6782 F6A9 85A4 1829" /* O«.©ëã.Ég‚ö©…¤.) */ - $"48BB D188 41E8 65BA 28BB 8AC1 8368 DC2F" /* H»ÑˆAèeº(»ŠÁƒhÜ/ */ - $"B2DE 61FE 95C0 BD88 C027 9CD9 3819 8A81" /* ²Þaþ•À½ˆÀ'œÙ8.Š */ - $"20FF 616C DEAE C6EA 15A3 D12F 764A B4E2" /* ÿalÞ®Æê.£Ñ/vJ´â */ - $"ECA3 AF32 36FF 29B0 E3CD 5046 527E 39B7" /* 죯26ÿ)°ãÍPFR~9· */ - $"921A ABF8 F0CB 7040 5FCD A182 4C57 986D" /* ’.«øðËp@_Í¡‚LW˜m */ - $"1115 DD94 687C 3663 7CFB 6C40 642D C8CA" /* ..Ý”h|6c|ûl@d-ÈÊ */ - $"1117 B5A9 8025 123D 9406 58F9 96B5 321E" /* ..µ©€%.=”.Xù–µ2. */ - $"7646 4BFD 48DE 0B9B DBEF B79F B6C7 031E" /* vFKýHÞ.›Ûï·Ÿ¶Ç.. */ - $"1D3B 1D18 B35D 2813 5601 3924 6AE1 FC21" /* .;..³](.V.9$jáü! */ - $"60B9 0B9F 6B4B AFB9 15D8 C57A 5345 7461" /* `¹.ŸkK¯¹.ØÅzSEta */ - $"0EF9 4B6B 88D1 7833 02DF 4FB8 DBEC 836A" /* .ùKkˆÑx3.ßO¸Ûìƒj */ - $"BEA7 3972 93C0 F973 37B5 C84F 1655 031C" /* ¾§9r“Àùs7µÈO.U.. */ - $"674D 741E 308E E3BA 6684 5BB0 4506 AB40" /* gMt.0Žãºf„[°E.«@ */ - $"14DE BFF2 9B38 4026 C5C2 3A44 FDFF 25CB" /* .Þ¿ò›8@&ÅÂ:Dýÿ%Ë */ - $"072E 1D99 62E3 22B8 DE8D 9CF1 79FA 1D38" /* ...™bã"¸Þœñyú.8 */ - $"8900 17CB A72B 8124 7EAF CF2F FC8D 34D6" /* ‰..˧+$~¯Ï/ü4Ö */ - $"E0AC 58ED 8BC1 0DAA 7964 FB91 BF08 EFA6" /* à¬Xí‹Á.ªydû‘¿.ï¦ */ - $"42FF 7FFF 7FE3 AF13 7C4B 1CF4 D643 3CD3" /* Bÿ.ÿ.ã¯.|K.ôÖC<Ó */ - $"5F1A 08BB 7C56 5CFB 6D27 04DE C66A 9AF1" /* _..»|V\ûm'.ÞÆjšñ */ - $"2053 D4B2 EE60 44FF 2A89 1FFC DFCC 57C1" /* SÔ²î`Dÿ*‰.üßÌWÁ */ - $"3800 1290 7854 7902 FF7A 9A36 D71E F8D1" /* 8..xTy.ÿzš6×.øÑ */ - $"D439 471B D02F 4A39 E5BC D25F FDF0 8B54" /* Ô9G.Ð/J9å¼Ò_ýð‹T */ - $"AE0A 3677 2625 B286 7DEC 8FF7 2457 2B25" /* ®Â6w&%²†}ì÷$W+% */ - $"C066 2A4E A605 EE16 7244 CCFD D3D3 FDA1" /* Àf*N¦.î.rDÌýÓÓý¡ */ - $"F3B8 76C3 1C5F 491C 0165 8735 D71D 19AD" /* ó¸vÃ._I..e‡5×..­ */ - $"9BB1 A40D E5BA 9D1C E34B B71C 9CF0 EC7A" /* ›±¤.åº.ãK·.œðìz */ - $"5E87 C4F0 A326 0913 9E2C 6517 50A3 E72B" /* ^‡Äð£&Æ.ž,e.P£ç+ */ - $"87FE D348 2E5D 0A00 0000 0000 0000 0000" /* ‡þÓH.]Â......... */ - $"0002 2C86 A73D 4030 2FE4 D32C 2B56 C74C" /* ..,†§=@0/äÓ,+VÇL */ - $"0869 A5C9 151A 69B9 9390 DA50 4411 8FFF" /* .i¥É..i¹“ÚPD.ÿ */ - $"4938 4E36 F9DD 09FB E4A0 C339 2431 ED8B" /* I8N6ùÝÆûä Ã9$1í‹ */ - $"793D 6354 12C0 97F9 C379 ADA9 7DEE E5EF" /* y=cT.À—ùÃy­©}îåï */ - $"2366 FF4F E2A2 F01A C90F 02E3 51CD B477" /* #fÿOâ¢ð.É..ãQÍ´w */ - $"2230 690A B47C E28B 463C 2E88 7579 7943" /* "0i´|â‹F<.ˆuyyC */ - $"5055 6D0A EEC5 F3BF 2404 37D8 EFE1 71AC" /* PUmÂîÅó¿$.7Øïáq¬ */ - $"6AFE A3E4 A7EB 28BF BFFE 4373 E5FF 7E4A" /* jþ£ä§ë(¿¿þCsåÿ~J */ - $"2D5D 1ED3 6D78 1657 9914 A061 7958 972C" /* -].Ómx.W™. ayX—, */ - $"56FB D5B0 1FFD A18B 7A29 0C81 295B DF7C" /* VûÕ°.ý¡‹z).)[ß| */ - $"83E3 CD36 0E66 7E2B D8FA 3096 AA44 7F9B" /* ƒãÍ6.f~+Øú0–ªD.› */ - $"F0B9 EA48 8CC7 0FFF 7E1C F394 CC5B 6A25" /* ð¹êHŒÇ.ÿ~.ó”Ì[j% */ - $"FD4C CECC 630B 38B7 D621 F081 73EE 9D40" /* ýLÎÌc.8·Ö!ðsî@ */ - $"7FAD FADD 8111 6492 599E DD2C 3600 FF6C" /* .­úÝ.d’YžÝ,6.ÿl */ - $"5A8D B0B8 2AE7 668D C5A0 826B FA0D C5B1" /* Z°¸*çfÅ ‚kú.ű */ - $"6873 D749 B533 9627 C2F6 4922 63F7 8944" /* hs×Iµ3–'ÂöI"c÷‰D */ - $"15C5 A1F9 8539 A21A 1CEB 1C2D 7D1B 0516" /* .Å¡ù…9¢..ë.-}... */ - $"FD6C 5D4F 92A3 14D9 126F C5FC 4116 B499" /* ýl]O’£.Ù.oÅüA.´™ */ - $"D878 D889 9123 D3C8 4637 36E3 8644 6F0B" /* Øx؉‘#ÓÈF76ã†Do. */ - $"D2C6 A599 B793 1367 B548 23BD 8836 11E5" /* ÒÆ¥™·“.gµH#½ˆ6.å */ - $"C323 7AD5 0534 3D05 A4E6 70B3 0376 2B0C" /* Ã#zÕ.4=.¤æp³.v+. */ - $"A964 173B F0BC 2A52 7FE4 2A53 85C2 22B2" /* ©d.;ð¼*R.ä*S…Â"² */ - $"B83F 7185 FB4C 3769 5B3E 4A24 E7E1 D0FD" /* ¸?q…ûL7i[>J$çáÐý */ - $"9B17 8737 FE8B E4C7 9FC1 0E30 D904 D0C5" /* ›.‡7þ‹äÇŸÁ.0Ù.ÐÅ */ - $"D2F5 05E4 3CD6 5FA7 B9AF FB98 755E 0BAF" /* Òõ.ä<Ö_§¹¯û˜u^.¯ */ - $"E4EE 408D A8BE 5E58 07A6 059D 1B33 37F3" /* äî@¨¾^X.¦..37ó */ - $"8D14 871A 7FC6 43ED 6A6F 8F41 9681 095E" /* .‡..ÆCíjoA–Æ^ */ - $"EE46 5BA4 1E15 F5F2 3063 E524 A62A 7C7F" /* îF[¤..õò0cå$¦*|. */ - $"0E38 5D00 A378 8F6D 3861 2088 EDD7 AC24" /* .8].£xm8a ˆí׬$ */ - $"D3B6 B052 DE10 357D B65A 1414 4596 8E3D" /* Ó¶°RÞ.5}¶Z..E–Ž= */ - $"97E3 D838 9ACC 3C84 AF82 EA8D 8BD3 0180" /* —ãØ8šÌ<„¯‚ê‹Ó.€ */ - $"1582 0654 BB61 1047 ACA1 29D3 7CFA 00C8" /* .‚.T»a.G¬¡)Ó|ú.È */ - $"BABC 146B 250C 8D19 8A4E A8B3 50D6 B986" /* º¼.k%..ŠN¨³PÖ¹† */ - $"2AD6 CEFA 02D6 AE11 FF7C B0A2 E6E0 30E9" /* *ÖÎú.Ö®.ÿ|°¢æà0é */ - $"D904 4C03 3BC1 8B68 5892 30B8 7D69 C2D6" /* Ù.L.;Á‹hX’0¸}iÂÖ */ - $"A9F8 56A2 7417 1E31 186F 09A1 4C11 6DCA" /* ©øV¢t..1.oÆ¡L.mÊ */ - $"A62E 5FCC F59A CCE8 6A29 B0DF E2BC E8BF" /* ¦._ÌõšÌèj)°ßâ¼è¿ */ - $"92DF 70C1 8B09 21DF 1440 1684 4413 2A60" /* ’ßpÁ‹Æ!ß.@.„D.*` */ - $"E033 6D92 8573 E63C 2746 6F40 D8F0 D0C9" /* à3m’…sæ<'Fo@ØðÐÉ */ - $"10AF 85A2 CFBF 373B B250 85E4 C1D3 85D2" /* .¯…¢Ï¿7;²P…äÁÓ…Ò */ - $"E167 1222 DF4A 67D9 B3D6 55B4 B047 8675" /* ág."ßJgÙ³ÖU´°G†u */ - $"C803 6AE5 E5AE AF92 C4B7 591A A040 98AC" /* È.jå宯’Ä·Y. @˜¬ */ - $"4412 45F8 BBC8 6482 F7BD 81B2 98FE 9D0B" /* D.Eø»Èd‚÷½²˜þ. */ - $"DAB1 2959 952C 9115 3504 9A24 BBA4 A04C" /* Ú±)Y•,‘.5.š$»¤ L */ - $"4125 5810 54F5 C268 63C2 1DB9 11CF 85BB" /* A%X.TõÂhcÂ.¹.Ï…» */ - $"D941 F5A1 0239 DED3 856D BBE5 7CF3 49C3" /* ÙAõ¡.9ÞÓ…m»å|óIà */ - $"C9CF 1BD1 A953 F58A F9AF E704 E70E 43B7" /* ÉÏ.Ñ©SõŠù¯ç.ç.C· */ - $"2B51 BE14 4FF3 262C 914B 90AF F2A9 E060" /* +Q¾.Oó&,‘K¯ò©à` */ - $"6A24 6553 B776 C48D 19AD ECD3 2DD3 8ECF" /* j$eS·vÄ.­ìÓ-ÓŽÏ */ - $"9EC7 8A0D 97F4 3C69 6E56 0881 1136 C147" /* žÇŠ.—ôù.yzSº¤ôz */ - $"6926 DAD2 72F9 5D4B 1014 8BD5 A4FA 68EA" /* i&ÚÒrù]K..‹Õ¤úhê */ - $"D9F9 F684 BFD5 F2ED FB9E 4C18 91C3 FF17" /* Ùùö„¿ÕòíûžL.‘Ãÿ. */ - $"2D17 D99A DE29 FE6E 63A4 C901 8642 9357" /* -.ÙšÞ)þnc¤É.†B“W */ - $"3120 4386 1938 E7D2 572D 0C59 E3C9 7FED" /* 1 C†.8çÒW-.YãÉ.í */ - $"30FA E54A CEF8 A94C F92D AF19 76EA 3372" /* 0úåJÎø©Lù-¯.vê3r */ - $"B4E1 E7C5 8239 A4AC A247 4838 55E8 EB9B" /* ´áçÅ‚9¤¬¢GH8Uèë› */ - $"DE7D 94E9 DBD7 07FB D488 1672 E61D 9E4C" /* Þ}”éÛ×.ûÔˆ.ræ.žL */ - $"6DF2 97D5 4936 F89A 5CBC D37A 8C2C F7ED" /* mò—ÕI6øš\¼ÓzŒ,÷í */ - $"9755 19F2 0350 AB2E D851 F0B7 78B5 9770" /* —U.ò.P«.ØQð·xµ—p */ - $"4DF3 4212 9C9C CA3B 403A BA7B D497 9410" /* MóB.œœÊ;@:º{Ô—”. */ - $"04C6 288B 5058 5DC9 EB79 AB85 622C 9A55" /* .Æ(‹PX]Éëy«…b,šU */ - $"2DA7 C113 9315 7CAE D84E 6B50 4062 AE94" /* -§Á.“.|®ØNkP@b®” */ - $"8F5E 7969 4BA5 56B2 E881 8C02 ED3B 5259" /* ^yiK¥V²èŒ.í;RY */ - $"24CE C98A 4348 12B1 314F E3E3 B6A3 4E61" /* $ÎÉŠCH.±1Oãã¶£Na */ - $"A426 6350 E380 B0B5 DEFF 64CF 72D6 D4B9" /* ¤&cP〰µÞÿdÏrÖÔ¹ */ - $"907C 9BE0 7E4D 39F9 2BB7 C3DE D7C3 DCD8" /* |›à~M9ù+·ÃÞ×ÃÜØ */ - $"1F93 775F 0F44 DF0F A717 C3E9 D603 F269" /* .“w_.Dß.§.ÃéÖ.òi */ - $"FBE1 D36F 87B3 6F87 B280 E8AB DECC AF0D" /* ûáÓo‡³o‡²€è«Þ̯. */ - $"6C8A C695 8734 87EB A75F 5130 05EC 9BA8" /* lŠÆ•‡4‡ë§_Q0.웨 */ - $"78DB 85A2 680C 75A0 EDD1 4AA2 7E1B BAFF" /* xÛ…¢h.u íÑJ¢~.ºÿ */ - $"5AFC FD6C 3E36 A6D9 923A 2DCE 24BC 35EF" /* Züýl>6¦Ù’:-Î$¼5ï */ - $"27F4 8813 7CC4 0141 3CD9 9568 BFE6 BBB3" /* 'ôˆ.|Ä.A<Ù•h¿æ»³ */ - $"219B 0442 5227 3796 635D 0DE7 499A A701" /* !›.BR'7–c].çIš§. */ - $"7F74 FB13 F9DF E737 08AB 0A91 3D9E B77D" /* .tû.ùßç7.«Â‘=ž·} */ - $"E616 57BB 8BAF 7A0D 1B28 42E6 D653 6BD3" /* æ.W»‹¯z..(BæÖSkÓ */ - $"D7A8 9A2B 0905 6198 8809 E5D0 D0A4 F589" /* רš+Æ.a˜ˆÆåÐФõ‰ */ - $"3D04 8161 C4CB 7BC9 96E2 9DA4 1C59 C982" /* =.aÄË{É–â¤.YÉ‚ */ - $"4705 B1BE 1E05 E391 5E89 43FE 6C67 4342" /* G.±¾..ã‘^‰CþlgCB */ - $"636F 80C5 6A98 16E6 6B80 27C8 D0D9 B28C" /* co€Åj˜.æk€'ÈÐÙ²Œ */ - $"6FD4 E109 61AB 8FCB D4CB 19ED 2BE7 B510" /* oÔáÆa«ËÔË.í+çµ. */ - $"C0E8 5883 0642 92A1 6094 7E45 5D3F 819A" /* ÀèXƒ.B’¡`”~E]?š */ - $"4B6F AE8E ED0B 4B30 ABB1 2789 5C58 EEFD" /* Ko®Ží.K0«±'‰\Xîý */ - $"06C9 EF2B 2A12 1731 7581 4428 C72D 2501" /* .Éï+*..1uD(Ç-%. */ - $"2C14 0DA4 2C98 035F FEA8 51A2 0E61 4C50" /* ,..¤,˜._þ¨Q¢.aLP */ - $"4A65 60DE FA1C F36C 62D9 A3FA 93A6 4CAC" /* Je`Þú.ólbÙ£ú“¦L¬ */ - $"C1D0 079D 912F A133 724B 13CC AFF4 1382" /* ÁÐ.‘/¡3rK.̯ô.‚ */ - $"D61F 8AF2 A48B CCA6 5D66 4F61 E6BE 657B" /* Ö.Šò¤‹Ì¦]fOaæ¾e{ */ - $"7F5B 6F20 397A BBC2 3F23 86DF 2355 4A18" /* .[o 9z»Â?#†ß#UJ. */ - $"15DB CB3E 201F FF7C 4AC9 C764 B098 CA46" /* .ÛË> .ÿ|JÉÇd°˜ÊF */ - $"C2CF 44C6 42E7 D30A FD05 380F 6BD3 24C1" /* ÂÏDÆBçÓÂý.8.kÓ$Á */ - $"3998 C5C1 E7D5 0E2C 8D50 7FBB 7A11 6CB7" /* 9˜ÅÁçÕ.,P.»z.l· */ - $"B80F 5A84 44BE E746 C43C 6B5D F055 7A3B" /* ¸.Z„D¾çFÄ=.Èý.‡'Ç */ - $"F936 55E0 D0CE BF1A 50D8 51CE 6253 0293" /* ù6UàÐο.PØQÎbS.“ */ - $"1958 3FA2 BF6C 54A5 B158 4236 7F88 7DE4" /* .X?¢¿lT¥±XB6.ˆ}ä */ - $"C231 6D0B 62F1 2C6C 1A1D F8AA 0317 C52D" /* Â1m.bñ,l..øª..Å- */ - $"D9D5 0B61 312B A074 B2B8 1905 FCF9 A102" /* ÙÕ.a1+ t²¸..üù¡. */ - $"6188 616D 74E6 8232 245D 9C8A 4FD8 E2FD" /* aˆamtæ‚2$]œŠOØâý */ - $"0C6C 8F2E 5C82 5724 C542 3AE5 BA0A EE0B" /* .l.\‚W$ÅB:åºÂî. */ - $"2A14 BCDE 8005 4446 25B1 CF8A 6744 9F5C" /* *.¼Þ€.DF%±ÏŠgDŸ\ */ - $"9B09 6571 3003 9F52 A42A 7669 CCAA 7A75" /* ›Æeq0.ŸR¤*vi̪zu */ - $"F807 2530 7BA9 1474 F318 5A7B E64A 5DD7" /* ø.%0{©.tó.Z{æJ]× */ - $"A6F2 13B0 AFA5 7BF8 46DC CABF 4D80 CC26" /* ¦ò.°¯¥{øFÜÊ¿M€Ì& */ - $"5838 4016 3C05 4550 C62F 1504 5B79 0816" /* X8@.<.EPÆ/..[y.. */ - $"556C 8524 5DDA E914 92F1 3124 5C5B 3213" /* Ul…$]Úé.’ñ1$\[2. */ - $"7851 D9B8 EE79 46CF 3F06 1EAB 662A FD9E" /* xQÙ¸îyFÏ?..«f*ýž */ - $"E7D8 2E8C 938F 43FA B1B1 34B0 9207 34EC" /* çØ.Œ“Cú±±4°’.4ì */ - $"7A09 46BF 201E 311F EEEE 88EF C6C1 C10D" /* zÆF¿ .1.îîˆïÆÁÁ. */ - $"E238 50C9 7F01 DFF0 2170 EDD1 7471 8C14" /* â8PÉ..ßð!píÑtqŒ. */ - $"FB17 6678 A8B9 6611 9713 D8BB 8840 427C" /* û.fx¨¹f.—.Ø»ˆ@B| */ - $"8E5E 1608 D5E6 79B6 0BD7 3592 5D97 3864" /* Ž^..Õæy¶.×5’]—8d */ - $"71DF 6137 C0E6 2EB0 F71D 466C CFFF 50EF" /* qßa7Àæ.°÷.FlÏÿPï */ - $"FE99 2E4D 0DBB 537F 32F1 DECB D5D4 39DF" /* þ™.M.»S.2ñÞËÕÔ9ß */ - $"4FCC 2FC2 C399 8EB9 FC8B 2806 3FB7 F227" /* OÌ/ÂÃ™Ž¹ü‹(.?·ò' */ - $"BA12 A288 9858 9159 B6ED 0DBF 3DCC 8FA1" /* º.¢ˆ˜X‘Y¶í.¿=Ì¡ */ - $"9CF5 836D 499F B9E7 DB4E 497F D3A4 57BF" /* œõƒmIŸ¹çÛNI.Ó¤W¿ */ - $"9F0A EECE 8E29 127A 82FF 4222 75AC 32D4" /* ŸÂîÎŽ).z‚ÿB"u¬2Ô */ - $"6540 8040 4137 9EB4 EFFF 7FEC 9D37 60B4" /* e@€@A7ž´ïÿ.ì7`´ */ - $"184A 9567 71E4 F5FE 1C55 BB95 9FD8 BE6D" /* .J•gqäõþ.U»•ŸØ¾m */ - $"037F 052C 035B 91D7 903B 6EEC 1642 3D18" /* ...,.[‘×;nì.B=. */ - $"0B05 FEC5 4C0C 9ED3 BFA5 94AF CBB1 E725" /* ..þÅL.žÓ¿¥”¯Ë±ç% */ - $"DFC3 AF74 2485 D5A2 7F79 1275 C7DD ADE1" /* ßït$…Õ¢.y.uÇÝ­á */ - $"3BD5 AD19 74E6 EE9F 6846 7900 C09D 090B" /* ;Õ­.tæîŸhFy.ÀÆ. */ - $"C17C FB0F 2C9F 4DEB B9FE 7152 A47E B1CB" /* Á|û.,ŸMë¹þqR¤~±Ë */ - $"FB0E 7108 21C7 EFAB 8FA3 8AF0 2FDC 17A9" /* û.q.!Çï«£Šð/Ü.© */ - $"2565 5082 BEBF 4DDD 0699 3265 82AE D421" /* %eP‚¾¿MÝ.™2e‚®Ô! */ - $"3776 341F C56C ECDA B302 0306 AE5F 37FF" /* 7v4.ÅlìÚ³...®_7ÿ */ - $"7FB7 1192 8D68 5475 EE0B 4D80 6149 DEBB" /* .·.’hTuî.M€aIÞ» */ - $"F9A7 D7E7 A35D 9515 8000 4F04 C4D6 670C" /* ù§×ç£]•.€.O.ÄÖg. */ - $"54B7 93BB D264 43E0 E8D4 2D4D D3E2 AEB0" /* T·“»ÒdCàèÔ-MÓâ®° */ - $"FBAE F5BD A155 A8F2 07B4 AAA6 CE0A 84CC" /* û®õ½¡U¨ò.´ª¦ÎÂ„Ì */ - $"907F D5C4 9900 8FE2 0E0D F385 55A0 CDFF" /* .ÕÄ™.â..ó…U Íÿ */ - $"7FFE D776 193F A5C4 0334 DD15 7A6A 0890" /* .þ×v.?¥Ä.4Ý.zj. */ - $"DE98 5707 7799 9A5B D638 31B9 982B 5623" /* Þ˜W.w™š[Ö81¹˜+V# */ - $"3AFA A84A 20E7 417C F56E 7776 0C54 0765" /* :ú¨J çA|õnwv.T.e */ - $"91DE A19E 3DD2 4D8B F9F9 0D61 6343 0746" /* ‘Þ¡ž=ÒM‹ùù.acC.F */ - $"7D72 600B 4E15 FC8F 60FA A273 4348 A86E" /* }r`.N.ü`ú¢sCH¨n */ - $"E11A CD6B 3FFF 7ED1 E486 AAAA A380 045A" /* á.Ík?ÿ~Ñ䆪ª£€.Z */ - $"70E5 3753 4FFF 7FC6 ADBE 8E71 66FF 8165" /* på7SOÿ.Æ­¾Žqfÿe */ - $"D782 24E8 7399 0C15 03BF 29B5 5685 FDA1" /* ׂ$ès™...¿)µV…ý¡ */ - $"5BAD 5751 6D53 799A A7C6 572E 6A37 B46A" /* [­WQmSyš§ÆW.j7´j */ - $"B9BF 05BF 3131 F7DB E3B8 8F11 EE2F 13D6" /* ¹¿.¿11÷Ûã¸.î/.Ö */ - $"7DE9 D552 0B25 FEAF AEFE F0A7 FBE9 487F" /* }éÕR.%þ¯®þð§ûéH. */ - $"9085 0FFA 23FE A9DB 0494 B0E1 FEFD 1D50" /* ….ú#þ©Û.”°áþý.P */ - $"15B4 6548 AAA0 0182 C5FF 7D24 05C8 B15E" /* .´eHª .‚Åÿ}$.ȱ^ */ - $"E45F A508 3C68 CA73 3A57 A35E 462D 9213" /* ä_¥.^¥Fl¾.³äÞH.©}Æn. */ - $"05B3 2AD0 EF87 EFB1 6D03 06E4 85AB 36C6" /* .³*Ðï‡ï±m..ä…«6Æ */ - $"9BF6 8382 74F2 F321 62DF 269C 8D95 8FBD" /* ›öƒ‚tòó!bß&œ•½ */ - $"C4CA 7278 FDBA C51B A4FC C224 BD43 5F76" /* ÄÊrxýºÅ.¤üÂ$½C_v */ - $"F9D9 0970 5EAA 5F05 FDCB 50DE 35E7 A82E" /* ùÙÆp^ª_.ýËPÞ5ç¨. */ - $"1E7E 584D 33D8 EF90 B221 622F 778E 460D" /* .~XM3Øï²!b/wŽF. */ - $"6DC9 383F CF41 7B89 7414 97EF EFE2 CC75" /* mÉ8?ÏA{‰t.—ïïâÌu */ - $"8895 6AFD C6E8 610E 5E29 7AE1 FAAF 9FD5" /* ˆ•jýÆèa.^)záú¯ŸÕ */ - $"435F 3F61 6F9F AC78 7EAD 62BE 7DF7 7CFD" /* C_?aoŸ¬x~­b¾}÷|ý */ - $"D3FD 5BAF 83F5 5B37 CF6D BE7E 9DDF 3F4D" /* Óý[¯ƒõ[7Ïm¾~ß?M */ - $"80E8 ABDE CCAF 0D6C 8AC6 9587 348A 7A5A" /* €è«Þ̯.lŠÆ•‡4ŠzZ */ - $"21F6 5D05 F6A4 1727 AC99 8E36 4607 A805" /* !ö].ö¤.'¬™Ž6F.¨. */ - $"1CA8 FB12 6979 4216 6FCF DF65 6135 AFF9" /* .¨û.iyB.oÏßea5¯ù */ - $"5A1E 01C1 15A0 4F38 E547 6F65 858D 0788" /* Z..Á. O8åGoe….ˆ */ - $"49E3 07A2 D476 B767 EC21 FF65 559D 3B3F" /* Iã.¢Ôv·gì!ÿeU;? */ - $"B8A5 C1A8 6496 5183 24E6 93A6 DF2F 52F1" /* ¸¥Á¨d–Qƒ$擦ß/Rñ */ - $"19CA BFD7 1479 8040 2F9C 0DB9 00F0 49C5" /* .Ê¿×.y€@/œ.¹.ðIÅ */ - $"3D32 5B0C 9453 8D1F 452F D9E7 75FD CD61" /* =2[.”S.E/ÙçuýÍa */ - $"44A9 62C3 F0C8 BAF0 6A66 A4D4 AA8B 73B0" /* D©bÃðȺðjf¤Ôª‹s° */ - $"C942 686A 4A1E E3A7 2343 A0ED D595 9AFC" /* ÉBhjJ.ã§#C íÕ•šü */ - $"5546 0ACB FD23 6F2E DCEE ABBD 70E7 FA93" /* UFÂËý#o.Üpçú“ */ - $"3FFF 7FC5 7D31 FA1C D910 1C70 6CDC 3362" /* ?ÿ.Å}1ú.Ù..plÜ3b */ - $"B0A1 C6F3 16D1 BE51 73D2 4697 37CA 8197" /* °¡Æó.ѾQsÒF—7Ê— */ - $"A8C6 89C1 FF78 99EB 31B8 5F88 7B08 C557" /* ¨Æ‰Áÿx™ë1¸_ˆ{.ÅW */ - $"5483 A35C 0713 94D5 D2DF B84C 36CA D9EC" /* Tƒ£\..”ÕÒ߸L6ÊÙì */ - $"8FC7 A305 814F 8B04 07D2 E391 5E89 43FE" /* Ç£.O‹..Òã‘^‰Cþ */ - $"6C67 4343 91DB DD56 C1D2 FEA6 9F1F 346F" /* lgCC‘ÛÝVÁÒþ¦Ÿ.4o */ - $"714B 79E1 7AC7 53A1 9934 69F4 E886 5A9C" /* qKyázÇS¡™4iôè†Zœ */ - $"6F9A D26F DD48 5F60 A72A 7E20 77F8 1BE8" /* ošÒoÝH_`§*~ wø.è */ - $"91B9 9018 8124 7694 3664 4202 7B94 1007" /* ‘¹.$v”6dB.{”.. */ - $"4234 15FC 04A2 6DE0 DC6B 5EDE 4332 F592" /* B4.ü.¢màÜk^ÞC2õ’ */ - $"779A A3BD 8E84 5464 DE08 6BAE AE2F 6EEF" /* wš£½Ž„TdÞ.k®®/nï */ - $"CB75 5862 59D8 1362 5D60 79D2 137C 7606" /* ËuXbYØ.b]`yÒ.|v. */ - $"F2B1 06DE 8A2F B76A A7D9 84DB 8F52 1107" /* ò±.ÞŠ/·j§Ù„ÛR.. */ - $"A42C 9803 2476 0448 42C9 A9E5 D0F5 9110" /* ¤,˜.$v.HBÉ©åÐõ‘. */ - $"2FAB AAF4 0752 81C9 6064 B8F7 6CEB 438E" /* /«ªô.RÉ`d¸÷lëCŽ */ - $"DC4B 916C 21F0 1C8F 2A6A 1919 9E26 2B36" /* ÜK‘l!ð.*j..ž&+6 */ - $"3E51 F543 F7C5 2549 66D0 2F14 D18F 42F1" /* >QõC÷Å%IfÐ/.ÑBñ */ - $"397B BA52 99ED 853C E07D 629B 92A1 2589" /* 9{ºR™í…<à}b›’¡%‰ */ - $"B3A9 B812 DC8D A368 3204 F8AA 7549 AF2B" /* ³©¸.Ü£h2.øªuI¯+ */ - $"2DE7 529C 1ECB 9747 A4B8 F6EC 8DDC 0AC4" /* -çRœ.Ë—G¤¸öìÜÂÄ */ - $"2C31 F042 C407 3F18 FD32 9280 60E4 60D8" /* ,1ðBÄ.?.ý2’€`ä`Ø */ - $"77B5 C019 A5FF 6E0D 8E35 A78E C7AA E95B" /* wµÀ.¥ÿn.Ž5§ŽÇªé[ */ - $"D37C D883 5DD2 756B 385A 08BB 7708 AA5E" /* Ó|؃]Òuk8Z.»w.ª^ */ - $"5B89 0628 F831 7775 3555 A523 BF2F 721A" /* [‰.(ø1wu5U¥#¿/r. */ - $"099B E6B4 5128 9EA6 41E1 9B8B 18C1 928C" /* Æ›æ´Q(ž¦Aᛋ.Á’Œ */ - $"72A0 BD1E 84D6 836A C947 0982 284A 9238" /* r ½.„ÖƒjÉGÆ‚(J’8 */ - $"A06F E390 1BD5 BBFD 323F BA86 2091 BAD5" /*  oã.Õ»ý2?º† ‘ºÕ */ - $"351D 16C5 1D44 E8C7 66C7 D469 047D 5548" /* 5..Å.DèÇfÇÔi.}UH */ - $"7049 7B42 B682 DF4C 68DE B5D2 2EDC C105" /* pI{B¶‚ßLhÞµÒ.ÜÁ. */ - $"4047 9A7E 0403 F48B 6215 C3ED 8DBA 12E9" /* @Gš~..ô‹b.Ãíº.é */ - $"EEFB B61B 906E F6F6 DDFD D030 CD1C 47FD" /* îû¶.nööÝýÐ0Í.Gý */ - $"7C37 E7C7 DC08 213E 3C33 08E6 74A0 F400" /* |7çÇÜ.!><3.æt ô. */ - $"7CFC 3B85 1A2E 5ACA 573F F24C 7D2C 0E3B" /* |ü;…..ZÊW?òL},.; */ - $"2A6D CEDC 6C9C 6E97 A572 915F A892 3833" /* *mÎÜlœn—¥r‘_¨’83 */ - $"A08F 0070 A602 FB49 0EA6 62FC 4237 C568" /*  .p¦.ûI.¦büB7Åh */ - $"E937 1DC1 1FC2 C3F1 AA30 AC4D DDB8 E747" /* é7.Á.ÂÃñª0¬MݸçG */ - $"5EE4 FD73 8124 56EB ADBE 6DB3 F27B 80C0" /* ^äýs$Vë­¾m³ò{€À */ - $"E536 971B 511B C76B AB20 8BA4 4DCD BFCB" /* å6—.Q.Çk« ‹¤MÍ¿Ë */ - $"4A0C 34DC 3DDC 9BEF 5122 89D0 99D1 9BE7" /* J.4Ü=Ü›ïQ"‰Ð™Ñ›ç */ - $"8840 002A A77A 25E2 9C2C F9BC 78F9 FB0E" /* ˆ@.*§z%âœ,ù¼xùû. */ - $"0DB7 4F14 B07A 12F6 65D3 ABE1 660D A84A" /* .·O.°z.öeÓ«áf.¨J */ - $"EFF9 A799 1852 8ED0 9582 B79A D812 1BE6" /* ïù§™.RŽÐ•‚·šØ..æ */ - $"F3D0 D5FA 9C76 5EBD DBFD 42A9 F7B3 885E" /* óÐÕúœv^½ÛýB©÷³ˆ^ */ - $"4A68 DBE7 9663 FB7F 1AC4 5004 197F 97F0" /* JhÛç–cû..ÄP...—ð */ - $"F57B 135D 19ED E0E0 1C84 139C BA3B 2493" /* õ{.].íàà.„.œº;$“ */ - $"D997 333D B6A7 9E83 619C FCE9 9875 134D" /* Ù—3=¶§žƒaœüé˜u.M */ - $"4B31 FCB3 5808 B917 C8BB 0B67 4564 488E" /* K1ü³X.¹.È».gEdHŽ */ - $"3554 8125 C3A4 DB4A 0BB2 E501 244C 1F49" /* 5T%äÛJ.²å.$L.I */ - $"C6A7 51E4 6C51 A134 3DF4 CE21 2993 FF3B" /* ƧQälQ¡4=ôÎ!)“ÿ; */ - $"80F6 AE0B B9F8 D1D5 8853 4531 6806 4F3E" /* €ö®.¹øÑÕˆSE1h.O> */ - $"D2B6 5F62 796A 683C D3C9 A22B 6D56 C497" /* Ò¶_byjh<ÓÉ¢+mVÄ— */ - $"D854 2E14 C281 0F94 0220 BEE7 3754 D077" /* ØT..Â.”. ¾ç7TÐw */ - $"EDB0 0F0E 95C1 A40B 55C9 B5AE 4DA8 A8A6" /* í°..•Á¤.Uɵ®M¨¨¦ */ - $"ADD6 4A11 DE81 B148 70D3 FA4F 795C 9171" /* ­ÖJ.Þ±HpÓúOy\‘q */ - $"C72E 7EF2 454C 0336 BE4A EE68 960E 25BA" /* Ç.~òEL.6¾Jîh–.%º */ - $"E686 01F4 6FF5 3C7C 8B33 60D8 24D3 70A1" /* æ†.ôoõ<|‹3`Ø$Óp¡ */ - $"06C6 E616 29D4 63D6 3334 379F 743E 745D" /* .Ææ.)ÔcÖ347Ÿt>t] */ - $"4EF5 ECB5 072E 9F62 0750 F7BA 6FDE B6B0" /* Nõìµ..Ÿb.P÷ºoÞ¶° */ - $"0BD0 4FCC 8F59 9B13 0C77 0A30 9BAE DF36" /* .ÐOÌY›..wÂ0›®ß6 */ - $"B13D D861 E92A 12C7 EC7A 0946 BF20 1E31" /* ±=Øaé*.ÇìzÆF¿ .1 */ - $"1FEE EE88 EFC6 C1C1 0DE2 3850 C97F 01DF" /* .îîˆïÆÁÁ.â8PÉ..ß */ - $"F021 605A D52A 570D 7089 0C1B B3FE 8B4D" /* ð!`ZÕ*W.p‰..³þ‹M */ - $"E441 70AC 5F71 3FCE 527F EBF4 048A A307" /* äAp¬_q?ÎR.ëô.Š£. */ - $"CEFD 4EB0 87ED BFE2 A36C 51B9 EAD3 37C6" /* ÎýN°‡í¿â£lQ¹êÓ7Æ */ - $"E8F0 9A3D 8F78 8747 81D4 33F0 9EEB 5EA0" /* èðš=x‡GÔ3ðžë^  */ - $"6FE0 A580 6B6B C126 1CE3 F1B2 DC9C CFCE" /* oीkkÁ&.ãñ²ÜœÏÎ */ - $"42EE 7E91 EF2F 0DDF CFDE 75EB 554D 6941" /* Bî~‘ï/.ßÏÞuëUMiA */ - $"07A5 21BE AD52 7CC1 49B5 FE74 AE40 F70F" /* .¥!¾­R|ÁIµþt®@÷. */ - $"AB3B 0C16 98F5 7742 3DCE 842D 0B2B 2FEB" /* «;..˜õwB=΄-.+/ë */ - $"5E90 DEBC 8BA9 81AC 40CC 0030 2853 FE9C" /* ^Þ¼‹©¬@Ì.0(Sþœ */ - $"6FC2 569B 2CD1 6200 2881 802D 7697 8442" /* oÂV›,Ñb.(€-v—„B */ - $"92C8 666B BC90 3252 F4D3 9BD2 AD14 0027" /* ’Èfk¼2RôÓ›Ò­..' */ - $"CE11 F5A4 437B 3F80 B250 AA4C 23B6 AD83" /* Î.õ¤C{?€²PªL#¶­ƒ */ - $"277E 5EF0 8132 6331 9325 D1A3 CFB6 6F73" /* '~^ð2c1“%ѣ϶os */ - $"D37D 780F 91CC CD40 6234 2FE2 F097 1681" /* Ó}x.‘ÌÍ@b4/âð—. */ - $"6097 88BD BFFF 18F5 2CBB FF67 FDBC 2F07" /* `—ˆ½¿ÿ.õ,»ÿgý¼/. */ - $"67FF 7FFF 1946 84C7 A551 03FF 7F52 A7C2" /* gÿ.ÿ.F„Ç¥Q.ÿ.R§Â */ - $"8AC8 1080 56FF 0C48 1804 A884 A5A2 08FF" /* ŠÈ.€Vÿ.H..¨„¥¢.ÿ */ - $"7FF5 3220 8043 9005 C25D DE15 02FB 7F2B" /* .õ2 €C.Â]Þ..û.+ */ - $"8205 5CA8 40BE EFB1 78F0 2656 2AD4 14FF" /* ‚.\¨@¾ï±xð&V*Ô.ÿ */ - $"7505 20CD 8BE2 8B15 47BB 9E26 105E 15DD" /* u. Í‹â‹.G»ž&.^.Ý */ - $"21A7 82AE E19D FE27 5D8B DDAD E13B D5AD" /* !§‚®áþ']‹Ý­á;Õ­ */ - $"1974 E6EE 9F68 4679 00C0 9D09 0BC1 7CFB" /* .tæîŸhFy.ÀÆ.Á|û */ - $"0F2C 9F4E 082C 2CB4 569B A7B0 0009 E098" /* .,ŸN.,,´V›§°.Æà˜ */ - $"9AB0 9892 B1FF 6957 1D78 2613 4289 24C6" /* š°˜’±ÿiW.x&.B‰$Æ */ - $"12BC E2EF C9AE E6D9 784F C157 77AB 3470" /* .¼âïÉ®æÙxOÁWw«4p */ - $"D8C7 C746 1978 322D D4E9 FA24 B8B2 5054" /* ØÇÇF.x2-Ôéú$¸²PT */ - $"D643 8270 9090 D6D8 0C24 16E5 1146 421C" /* ÖC‚pÖØ.$.å.FB. */ - $"D6A2 40D9 1864 A800 0000 0000 0001 4554" /* Ö¢@Ù.d¨.......ET */ - $"031E 793B 33D3 FD4A CE0A 3D8A 9D46 37B0" /* ..y;3ÓýJÎÂ=ŠF7° */ - $"4D2C 6F04 2BFF 071C 023F E153 6688 1815" /* M,o.+ÿ...?áSfˆ.. */ - $"BA20 BF61 DDDF 2979 84E3 3348 50F6 E9B8" /* º ¿aÝß)y„ã3HPöé¸ */ - $"634A 8937 FF7F F1AE E84B C95A 771F 4C9C" /* cJ‰7ÿ.ñ®èKÉZw.Lœ */ - $"3FFE 0734 7D7F 6E35 4A2E 21E0 E52F FF7E" /* ?þ.4}.n5J.!àå/ÿ~ */ - $"8532 8513 7869 A6E6 495D 3E58 F349 1EF5" /* …2….xi¦æI]>XóI.õ */ - $"886C 6441 9091 82E8 0C24 1507 0E02 A105" /* ˆldA‘‚è.$....¡. */ - $"95C5 1409 096C 9A37 F758 F13A 5ABF 149E" /* •Å.ÆÆlš7÷Xñ:Z¿.ž */ - $"DA31 52E9 0DA9 0BFF 45EB 20C7 1A1C E54C" /* Ú1Ré.©.ÿEë Ç..åL */ - $"29D1 6C8E D1EC 9D59 F945 4303 373F FF7F" /* )ÑlŽÑìYùEC.7?ÿ. */ - $"CE95 B027 88F7 AB06 28B9 92E7 D540 BC2B" /* Ε°'ˆ÷«.(¹’çÕ@¼+ */ - $"7167 8C6C C87E 32B0 C904 7D7D 278E E519" /* qgŒlÈ~2°É.}}'Žå. */ - $"707D 2C42 1714 C425 F9D0 DC01 D910 23DB" /* p},B..Ä%ùÐÜ.Ù.#Û */ - $"E7F3 391C A4E6 FAE1 C850 5A1F 456A 6690" /* çó9.¤æúáÈPZ.Ejf */ - $"3F37 F970 3841 73D3 1095 39CF 10A3 40F8" /* ?7ùp8AsÓ.•9Ï.£@ø */ - $"4CCC 4985 E3D5 127F 7CF4 92BC DCE9 2335" /* LÌI…ãÕ..|ô’¼Üé#5 */ - $"43FB 7460 8D5C C121 CFF2 1165 1CCE BBB2" /* Cût`\Á!Ïò.e.λ² */ - $"5EA8 0279 2C97 E45B A43D 328C 7A6C 5EBC" /* ^¨.y,—ä[¤=2Œzl^¼ */ - $"61DD BB2C E34E 25E4 1725 3C6B EC12 BFEF" /* aÝ»,ãN%ä.%^ÂÏvmN‰x*Åñ8uZ */ - $"CBDD 8421 F74E 9A07 A070 16ED 100C 769A" /* ËÝ„!÷Nš. p.í..vš */ - $"6571 1FA0 4D62 8ADC A3F1 0AAA 2253 1A39" /* eq. MbŠÜ£ñª"S.9 */ - $"0006 DF51 B09A 2267 BA13 3AD9 0120 8520" /* ..ßQ°š"gº.:Ù. … */ - $"7375 BB11 0715 9FFF 7FFF 276F 9A44 4D02" /* su»...Ÿÿ.ÿ'ošDM. */ - $"9DF2 BE32 729A 8C71 FBC9 4C73 FA4B 1D24" /* ò¾2ršŒqûÉLsúK.$ */ - $"4115 B69E 4FFF 7FFF 45B5 7091 9925 CEBD" /* A.¶žOÿ.ÿEµp‘™%ν */ - $"6A4E 1AA3 BFFF 7FFD AA3B 4043 EE5A 76B0" /* jN.£¿ÿ.ýª;@CîZv° */ - $"A073 CF17 7A58 3A06 649C B972 3CB8 897B" /*  sÏ.zX:.dœ¹r<¸‰{ */ - $"31E2 637A 05AC 83FA B94C 0F75 7113 FF7B" /* 1âcz.¬ƒú¹L.uq.ÿ{ */ - $"E690 225A FB16 A961 626A B7FE 22EF 864B" /* æ"Zû.©abj·þ"ï†K */ - $"F464 1D62 4127 02B3 DB08 1C01 3ECE 1326" /* ôd.bA'.³Û...>Î.& */ - $"CF03 BF05 5771 4992 75FE 29FC 5FFF 60D5" /* Ï.¿.WqI’uþ)ü_ÿ`Õ */ - $"DCC3 1B1F 40FF 6990 DC69 3E47 D09A 6E6A" /* ÜÃ..@ÿiÜi>GКnj */ - $"2866 9BA8 D74C BAAA 204E 05F9 DBFE E679" /* (f›¨×Lºª N.ùÛþæy */ - $"E76C 383D 9F92 BB32 1E14 2CA1 CBD5 E93C" /* çl8=Ÿ’»2..,¡ËÕé< */ - $"6C00 DFA2 B04F D650 3F14 60FF 7F73 29C3" /* l.ߢ°OÖP?.`ÿ.s)à */ - $"E20E 5672 C31B 6D72 FDCF 8097 B8B0 1482" /* â.VrÃ.mrýÏ€—¸°.‚ */ - $"C37E 4C4A 28FA 6E67 F061 E00C 371B 8655" /* Ã~LJ(úngðaà.7.†U */ - $"BDCB 2942 6AB1 0E31 38D3 6948 0D3F 6FEF" /* ½Ë)Bj±.18ÓiH.?oï */ - $"C2AB 669A E502 2490 C158 FC07 05F0 348A" /* «fšå.$ÁXü..ð4Š */ - $"0505 F0B2 E7E3 F934 19DA 2DB9 9686 603E" /* ..ð²çãù4.Ú-¹–†`> */ - $"C2C3 4B2F EB95 FB4E 62D2 F085 4364 9DCA" /* ÂÃK/ë•ûNbÒð…CdÊ */ - $"A6E8 94F8 CC41 2603 5BFC 4E90 C05F 068D" /* ¦è”øÌA&.[üNÀ_. */ - $"414C 618C 8860 58B1 7059 0B4C 39E8 FB58" /* ALaŒˆ`X±pY.L9èûX */ - $"C413 43C6 BF39 CC12 6E5B F65C F671 DD29" /* Ä.CÆ¿9Ì.n[ö\öqÝ) */ - $"8A03 BC15 FF06 2028 49E4 BF04 E6FC D4FD" /* Š.¼.ÿ. (Iä¿.æüÔý */ - $"401A CB9C 5F7F EFE7 8F41 E707 7803 9F1A" /* @.Ëœ_.ïçAç.x.Ÿ. */ - $"715F 951E E63A 9B4C 1404 32AA B5B7 98B0" /* q_•.æ:›L..2ªµ·˜° */ - $"D5F4 CD69 DD15 9E81 D2FD 09F7 462D AF3E" /* ÕôÍiÝ.žÒýÆ÷F-¯> */ - $"31DA 85C4 5053 8460 C06C 7018 908C 4821" /* 1Ú…ÄPS„`Àlp.ŒH! */ - $"D8AB AC44 7666 44D1 EA04 8979 3A4A A0FE" /* Ø«¬DvfDÑê.‰y:J þ */ - $"27D7 B0C3 DBAA 5233 F376 3CA8 4968 DF8A" /* '×°ÃÛªR3óv<¨Ihߊ */ - $"874C 2117 6A15 4664 03FF 7FFF 7F7C 2D12" /* ‡L!.j.Fd.ÿ.ÿ.|-. */ - $"B28B 8A4C 6D72 1106 16E0 BF7F 9822 2424" /* ²‹ŠLmr...à¿.˜"$$ */ - $"3C1B CBC8 2F76 1AC7 FF7F FF7F EB42 22AA" /* <.ËÈ/v.Çÿ.ÿ.ëB"ª */ - $"F30A 0C9D 6086 E561 E1BC C1D9 4E7F FADF" /* óÂ.`†åaá¼ÁÙN.úß */ - $"A85C B34C E2D4 FCF6 1A29 34F3 3B42 1DFC" /* ¨\³LâÔüö.)4ó;B.ü */ - $"C6BD 370B D203 B0C4 1C7D C348 1EE7 EAD9" /* ƽ7.Ò.°Ä.}ÃH.çêÙ */ - $"3145 E7FB 36CC 8E64 AB70 81DC 65E1 2C1D" /* 1Eçû6ÌŽd«pÜeá,. */ - $"9CB5 18A0 1C95 7DE2 96DF C185 7A40 50C7" /* œµ. .•}â–ßÁ…z@PÇ */ - $"E32C FCC1 FF6B 14F5 05FE 0E1C 8757 8D82" /* ã,üÁÿk.õ.þ..‡W‚ */ - $"3A41 284E 2906 8316 564F F479 4DCF FF7E" /* :A(N).ƒ.VOôyMÏÿ~ */ - $"5F11 3745 AC7F ED8D BC93 4205 7E12 E036" /* _.7E¬.í¼“B.~.à6 */ - $"0BE4 4B4F F99C F369 6B38 263E 63EC 6311" /* .äKOùœóik8&>cìc. */ - $"D577 8B5D 7957 D24D 7D64 A2B5 1107 4625" /* Õw‹]yWÒM}d¢µ..F% */ - $"E1EB 2460 41A2 E878 5967 CEAE AE16 D8D5" /* áë$`A¢èxYgή®.ØÕ */ - $"F960 B484 0B49 7253 26F2 714E 6A13 03E4" /* ù`´„.IrS&òqNj..ä */ - $"A0C3 3924 31ED 8B79 3D63 5412 C097 F9C3" /*  Ã9$1í‹y=cT.À—ùà */ - $"79AD A97D EEE5 EF23 66FF 15BD C854 5DFB" /* y­©}îåï#fÿ.½ÈT]û */ - $"5921 E05C 6A39 B68E 6444 6D55 3B7D 6DDA" /* Y!à\j9¶ŽdDmU;}mÚ */ - $"9003 8F53 5C49 D978 31CD 41C5 DD62 7DE4" /* .S\IÙx1ÍAÅÝb}ä */ - $"2F24 5932 A14F 9C9C 97B6 2652 5988 7970" /* /$Y2¡Oœœ—¶&RYˆyp */ - $"F890 8A5C 9614 EBF4 DAC8 15D1 6F3C 07E4" /* øŠ\–.ëôÚÈ.Ño<.ä */ - $"7B8B F763 6803 394F 2291 8D88 EB1B 3136" /* {‹÷ch.9O"‘ˆë.16 */ - $"10C9 5077 060A 7DB0 A890 CB7B 947F AD8B" /* .ÉPw.Â}°¨Ë{”.­‹ */ - $"0AAF 67FF 5D78 615A E459 013B 6923 5E0E" /* ¯gÿ]xaZäY.;i#^. */ - $"900D BA9C DFF2 37D0 0508 B5F3 EA48 FADE" /* .ºœßò7Ð..µóêHúÞ */ - $"D348 3F2F 8E71 E6CD B6BE 8941 8773 0E17" /* ÓH?/ŽqæÍ¶¾‰A‡s.. */ - $"E97A B699 5A4F 21C1 0766 538B B29A B8CA" /* éz¶™ZO!Á.fS‹²š¸Ê */ - $"FBAE 21FA 76A0 B197 C613 E523 B127 1FE4" /* û®!úv ±—Æ.å#±'.ä */ - $"0AA8 798D 688E 8F27 E386 446F 0BD2 C6A5" /* ¨yhŽ'ã†Do.ÒÆ¥ */ - $"99B7 9313 67B5 4823 BD88 3611 E5A8 8054" /* ™·“.gµH#½ˆ6.娀T */ - $"3C15 C120 1B02 5B2A 2195 DD25 F90A 48A6" /* <.Á ..[*!•Ý%ùÂH¦ */ - $"BF92 56B9 4639 F2BD AC5F 3350 9699 14A7" /* ¿’V¹F9ò½¬_3P–™.§ */ - $"30A2 4B91 C33D 3175 F806 15AA 4B01 558F" /* 0¢K‘Ã=1uø..ªK.U */ - $"400B 8148 DAF5 29FD 0561 1CA8 7239 51F4" /* @.HÚõ)ý.a.¨r9Qô */ - $"A169 A92B EE2F 4F3D 2F96 029B 186B 7219" /* ¡i©+î/O=/–.›.kr. */ - $"C673 0E85 6FAC 9889 C64A 90AE DBAF E8E3" /* Æs.…o¬˜‰ÆJ®Û¯èã */ - $"6607 DF2A C332 C690 840A 817A ABFF 3302" /* f.ß*Ã2Æ„Âz«ÿ3. */ - $"1464 A65F E1B3 04B0 90C6 51E5 6A2E 7EA2" /* .d¦_á³.°ÆQåj.~¢ */ - $"9222 EABA 0632 2F13 B1A3 2337 85B4 E390" /* ’"êº.2/.±£#7…´ã */ - $"766A 98DB BDDD 9813 F7BD 8AEA 1AB2 BEEC" /* vj˜Û½Ý˜.÷½Šê.²¾ì */ - $"BEE3 F4B7 EE35 6BB8 ADE1 E772 AEB0 7E66" /* ¾ãô·î5k¸­áçr®°~f */ - $"3F99 05C1 3339 69B2 C1D5 4CC7 DB0B 3C67" /* ?™.Á39i²ÁÕLÇÛ.üv¡œ®.Èh._Æ */ - $"A1BE 16D4 3BF4 91C9 6CF1 DBE0 E0CA 0DAA" /* ¡¾.Ô;ô‘ÉlñÛààÊ.ª */ - $"EFCB 2A06 908B 7BAC CCF3 4CF8 179A 615E" /* ïË*.‹{¬ÌóLø.ša^ */ - $"590D AB18 CB49 E032 B8ED 2A8E 584A ACDC" /* Y.«.ËIà2¸í*ŽXJ¬Ü */ - $"4797 F732 B8C9 24A4 0E5C 85A0 FED8 E30A" /* G—÷2¸É$¤.\… þØã */ - $"ECBF 08FB CDC1 E09D 9556 837A E086 95AC" /* ì¿.ûÍÁà•Vƒzà†•¬ */ - $"BA2C E411 756E F132 9CE6 EDC4 6C90 B09E" /* º,ä.unñ2œæíÄl°ž */ - $"3C59 DE78 44D0 E445 BCA0 3AE0 05D9 7440" /* ÞÞGi */ - $"289C 5523 9792 EFAC 19A6 A945 B504 9446" /* (œU#—’ï¬.¦©Eµ.”F */ - $"A4DF BAA6 B5EB BAEF 7B92 3E08 6D17 870F" /* ¤ßº¦µëºï{’>.m.‡. */ - $"9E0A 487E 8A60 90B5 E555 CD4F D2F1 FE67" /* žÂH~Š`µåUÍOÒñþg */ - $"88DE BB6A E653 A2B6 F9C7 B226 2544 A167" /* ˆÞ»jæS¢¶ùDz&%D¡g */ - $"5DF7 5F35 F38B DB99 30F8 C210 AF41 C7A4" /* ]÷_5ó‹Û™0øÂ.¯AǤ */ - $"167B 30B4 8B8D 0821 4ADB EFC6 5728 A86D" /* .{0´‹.!JÛïÆW(¨m */ - $"99A8 2A1D 51E2 4CE5 AEA5 7ECC 23CB 628B" /* ™¨*.QâL宥~Ì#Ëb‹ */ - $"E438 F41A A280 CF2E 8E51 5004 A9BA 64AB" /* ä8ô.¢€Ï.ŽQP.©ºd« */ - $"B0AA 608C 8C19 38F7 567B 0C45 B7C5 0E2D" /* °ª`ŒŒ.8÷V{.E·Å.- */ - $"0F3D A192 B0F5 A567 4EE1 9FF5 F085 979A" /* .=¡’°õ¥gNáŸõð…—š */ - $"13DA 6FC3 89D0 0370 C986 5F44 AADD CAB9" /* .ÚoÉÐ.pɆ_DªÝʹ */ - $"FBD0 8CDE 18D9 8FED 715E 264F 0D69 2CEF" /* ûÐŒÞ.Ùíq^&O.i,ï */ - $"63F0 7A64 D65B 094A 6976 E6D4 E3DC 1583" /* cðzdÖ[ÆJivæÔãÜ.ƒ */ - $"FE8C BD22 992E 3FDB AF18 03A7 0A74 8333" /* þŒ½"™.?Û¯..§Âtƒ3 */ - $"76E3 5195 C7FA A180 5123 7E0C 544B 9C8C" /* vãQ•Çú¡€Q#~.TKœŒ */ - $"928D 3DF6 F330 4D6E 8049 11AF 064E 4E3B" /* ’=öó0Mn€I.¯.NN; */ - $"B937 EE03 A4D2 F530 4513 47F0 5E98 E060" /* ¹7î.¤Òõ0E.Gð^˜à` */ - $"72C6 46EC B761 FAB4 B0FA 9A80 FF78 5408" /* rÆFì·aú´°úš€ÿxT. */ - $"9152 452E 0111 2383 5E5F 6C4F FC53 0EDE" /* ‘RE...#ƒ^_lOüS.Þ */ - $"1092 66D3 5F38 1AC8 1412 561A 4017 9110" /* .’fÓ_8.È..V.@.‘. */ - $"CA19 3E6F 8803 0908 5F57 A2E2 4744 E3C4" /* Ê.>oˆ.Æ._W¢âGDãÄ */ - $"F1BF 49F6 836F E294 610B 4098 2761 1502" /* ñ¿Iöƒoâ”a.@˜'a.. */ - $"CCB2 0C11 81DD 05B4 ACD8 8F28 C5DD 1DD8" /* ̲..Ý.´¬Ø(ÅÝ.Ø */ - $"58E0 C1E1 70A8 42BF 456F FE20 1261 1F81" /* XàÁáp¨B¿Eoþ .a. */ - $"08AC FEB1 F89C 3576 EF94 A20C 255F 3B3F" /* .¬þ±øœ5v.%_;? */ - $"5E6B B0C0 4B3F EADC 8536 55E9 8144 C946" /* ^k°ÀK?êÜ…6UéDÉF */ - $"7613 8662 DCB1 C761 2BDA 412D C7D6 2D5C" /* v.†bܱÇa+ÚA-ÇÖ-\ */ - $"BCC0 F84E 54E4 9B0B BDF7 4F45 FCA6 D6AE" /* ¼ÀøNTä›.½÷OEü¦Ö® */ - $"1754 31D1 E6CB 94F4 D163 2B1D 017D 4171" /* .T1ÑæË”ôÑc+..}Aq */ - $"ABE0 0285 395D 3D23 42D7 E641 348A 0C2E" /* «à.…9]=#B׿A4Š.. */ - $"9C16 42C9 8E99 B654 8046 C365 EA71 CE64" /* œ.BÉŽ™¶T€FÃeêqÎd */ - $"B762 0E4D 7C48 617B CDB9 6264 2C81 4A9F" /* ·b.M|Ha{͹bd,JŸ */ - $"8600 50B2 B985 EB73 DB96 82EA FF7D 1E50" /* †.P²¹…ësÛ–‚êÿ}.P */ - $"6A49 AEA3 78E3 2DFD 0D59 3013 F257 AAA9" /* jI®£xã-ý.Y0.òWª© */ - $"0E5D 81DA E983 8D48 41BE DF0B FB34 AEA5" /* .]ÚéƒHA¾ß.û4®¥ */ - $"07B6 B0AA 1E53 1D9F B9C7 4CE5 8D46 6151" /* .¶°ª.S.Ÿ¹ÇLåFaQ */ - $"8000 0C24 1D66 1946 1073 4456 2361 E486" /* €..$.f.F.sDV#aä† */ - $"120F 29F0 6121 2D6A AF51 0C82 F68C B571" /* ..)ða!-j¯Q.‚öŒµq */ - $"77AD BE59 9145 D105 DE8C 9500 0000 0000" /* w­¾Y‘EÑ.ÞŒ•..... */ - $"0000 0032 BC9A BD52 00B4 6C6F 3753 1A96" /* ...2¼š½R.´lo7S.– */ - $"9B00 FCD3 F055 A11A AFB1 FB95 1610 88D0" /* ›.üÓðU¡.¯±û•..ˆÐ */ - $"8D32 9653 FC10 55FD B965 C1A9 B6BD 2245" /* 2–Sü.Uý¹eÁ©¶½"E */ - $"D48B 8230 2EF5 56F1 6618 9F91 FEC4 4106" /* Ô‹‚0.õVñf.Ÿ‘þÄA. */ - $"F23B 7C8A 0320 79EA D7A0 D75F 09BD B985" /* ò;|Š. yê× ×_ƽ¹… */ - $"C22B E2F0 0508 64BA AA2F 2414 19D7 311D" /* Â+âð..dºª/$..×1. */ - $"F709 E05C 809B 9E62 83F8 FF13 2DE3 01D6" /* ÷Æà\€›žbƒøÿ.-ã.Ö */ - $"8ADC F118 5A80 77C8 DABC 2FB5 CEF6 FCFB" /* ŠÜñ.Z€wÈÚ¼/µÎöüû */ - $"7A94 2773 6CEC FAE2 7865 753C E612 E4AF" /* z”'slìúâxeu<æ.ä¯ */ - $"657C 5C67 8FB3 1E56 A319 1ED1 FE48 0D8D" /* e|\g³.V£..ÑþH. */ - $"2431 B10B 8E15 0A4B FF7F 7EB8 D068 5015" /* $1±.Ž.ÂKÿ.~¸ÐhP. */ - $"151E C37C 0390 F6CC 64A8 0000 0000 0000" /* ..Ã|.öÌd¨...... */ - $"0000 0002 5991 79E8 2B17 082C ABCB DA90" /* ....Y‘yè+..,«ËÚ */ - $"CE92 8CB0 E992 0710 2B8F CAAB D217 C4E9" /* Î’Œ°é’..+Ê«Ò.Äé */ - $"E55E 11D2 6200 B530 5EF4 6932 1CBF EA6C" /* å^.Òb.µ0^ôi2.¿êl */ - $"E58D 2AA9 68C2 89FF 7903 A6ED D674 F1FC" /* å*©h‰ÿy.¦íÖtñü */ - $"A256 3564 F7E0 4DDF CDA1 2729 F7FF 6EB2" /* ¢V5d÷àMßÍ¡')÷ÿn² */ - $"9D35 70A9 5447 924B B8E1 71D3 4A8A DECB" /* 5p©TG’K¸áqÓJŠÞË */ - $"93E1 8FA0 140E C9B7 6124 8020 D660 3D22" /* “á ..É·a$€ Ö`=" */ - $"C708 222E 7289 B890 0002 00E1 2BC6 84B9" /* Ç.".r‰¸...á+Æ„¹ */ - $"25DF 442F 97FF 7FEF 68EC 7325 B92C A150" /* %ßD/—ÿ.ïhìs%¹,¡P */ - $"EE19 48C3 2540 0000 0000 0000 0000 0749" /* î.HÃ%@.........I */ - $"DD4A 9891 375B B0E0 C176 A698 672E F295" /* ÝJ˜‘7[°àÁv¦˜g.ò• */ - $"0311 7B3E 2B87 B4B8 7FB3 5DF7 9C67 CBEA" /* ..{>+‡´¸.³]÷œgËê */ - $"6A19 4107 C9F4 2B19 6829 179A 3FFF 7E8C" /* j.A.Éô+.h).š?ÿ~Œ */ - $"44A2 15E8 8E37 B422 F825 1862 58FF 7FFE" /* D¢.èŽ7´"ø%.bXÿ.þ */ - $"8EA1 D38C 727A 3071 1FF0 541F 6AB4 EA83" /* Ž¡ÓŒrz0q.ðT.j´êƒ */ - $"44A0 086A BAD7 6966 FC5D 0E72 A66C C301" /* D .jº×ifü].r¦lÃ. */ - $"3E1F B82C 9192 20D5 0322 858F 224C 87F5" /* >.¸,‘’ Õ."…"L‡õ */ - $"E940 85ED 7B36 EC96 D05C 21FF 7B10 59E1" /* é@…í{6ì–Ð\!ÿ{.Yá */ - $"E125 6C79 7852 2031 F3BA 34FB 6E57 BC3B" /* á%lyxR 1óº4ûnW¼; */ - $"69F0 C303 3A2A A573 D1E0 9836 C703 D02C" /* iðÃ.:*¥sÑà˜6Ç.Ð, */ - $"58CC 3DA7 FF0D 4301 F607 07C1 31FA 7F66" /* XÌ=§ÿ.C.ö..Á1ú.f */ - $"89BD A759 90CD 107A E5BD 6398 D7BE F7BB" /* ‰½§YÍ.zå½c˜×¾÷» */ - $"E273 D09A F8EE D21B 1015 A513 18F5 5C7D" /* âsКøîÒ...¥..õ\} */ - $"FD20 E7C9 C6BE 3105 7A4B 831D 251B 4C36" /* ý çÉÆ¾1.zKƒ.%.L6 */ - $"2A49 3EAC 1A86 9F87 09CC 0B00 2CF4 643C" /* *I>¬.†Ÿ‡ÆÌ..,ôd< */ - $"7012 8574 D28F 952D E959 1093 FE7E F021" /* p.…tÒ•-éY.“þ~ð! */ - $"028C 74ED 0E90 8DCD 5F06 B4BE EA1A 4C53" /* .Œtí.Í_.´¾ê.LS */ - $"A47F 3706 93CB 8FAB 7864 D123 4A39 B6BA" /* ¤.7.“Ë«xdÑ#J9¶º */ - $"CDCB 8AA9 2128 54FA CFB5 C4E1 F470 AD6E" /* ÍËŠ©!(TúϵÄáôp­n */ - $"6A05 07C9 72AA 562E F22F C922 BCF9 7DDF" /* j..ÉrªV.ò/É"¼ù}ß */ - $"3565 1AD4 F707 7DC0 1038 129E 4EA0 297E" /* 5e.Ô÷.}À.8.žN )~ */ - $"1037 3516 64BB FF75 539A 5C03 F7A3 C14D" /* .75.d»ÿuSš\.÷£ÁM */ - $"C617 50C8 14F1 7C95 0372 1443 C3F0 7ED4" /* Æ.PÈ.ñ|•.r.CÃð~Ô */ - $"EFDA FA88 BDD2 E947 7A43 A4A3 2339 CD58" /* ïÚúˆ½ÒéGzC¤£#9ÍX */ - $"526C 8407 8211 1949 6431 DB89 390B EB27" /* Rl„.‚..Id1Û‰9.ë' */ - $"9975 F04F D507 AC80 5D51 95B0 992A 1AC6" /* ™uðOÕ.¬€]Q•°™*.Æ */ - $"8699 86CC E64E 441C 2EFD 4F8C 70C1 DB2A" /* †™†ÌæND..ýOŒpÁÛ* */ - $"5395 8DF7 E279 AA65 BA32 2FD1 48C9 F400" /* S•÷âyªeº2/ÑHÉô. */ - $"D0EA 663D 92FF 053E 130C A1A9 491B E583" /* Ðêf=’ÿ.>..¡©I.åƒ */ - $"6133 2EE1 AFBE 86B8 D218 B698 906D A5B9" /* a3.᯾†¸Ò.¶˜m¥¹ */ - $"ACD3 9DC7 8720 C668 E134 1A1C 9C71 EA49" /* ¬ÓLJ Æhá4..œqêI */ - $"7AE9 9276 56E9 78BB 5679 18E2 6044 2763" /* zé’vVéx»Vy.â`D'c */ - $"2342 64F4 3952 2712 F704 B2E8 C1D2 35CC" /* #Bdô9R'.÷.²èÁÒ5Ì */ - $"F0AB 5ABD 61A0 1CD5 5316 0E78 22E6 B807" /* ð«Z½a .ÕS..x"æ¸. */ - $"8774 CA36 91EF 0BFF D969 6330 3900 00D1" /* ‡tÊ6‘ï.ÿÙic09..Ñ */ - $"2300 0000 0C6A 5020 200D 0A87 0A00 0000" /* #....jP .‡Â... */ - $"1466 7479 706A 7032 2000 0000 006A 7032" /* .ftypjp2 ....jp2 */ - $"2000 0000 4F6A 7032 6800 0000 1669 6864" /* ...Ojp2h....ihd */ - $"7200 0002 0000 0002 0000 0407 0701 0000" /* r............... */ - $"0000 0F63 6F6C 7201 0000 0000 0010 0000" /* ...colr......... */ - $"0022 6364 6566 0004 0000 0000 0001 0003" /* ."cdef.......... */ - $"0001 0000 0001 0000 0002 0002 0000 0003" /* ................ */ - $"0000 0000 6A70 3263 FF4F FF51 0032 0000" /* ....jp2cÿOÿQ.2.. */ - $"0000 0200 0000 0200 0000 0000 0000 0000" /* ................ */ - $"0000 0200 0000 0200 0000 0000 0000 0000" /* ................ */ - $"0004 0701 0107 0101 0701 0107 0101 FF52" /* ..............ÿR */ - $"000C 0000 0001 0105 0404 0001 FF5C 0013" /* ............ÿ\.. */ - $"2050 5858 6058 5860 5858 6058 5858 5050" /* PXX`XX`XX`XXXPP */ - $"58FF 6400 1100 014B 616B 6164 752D 7635" /* Xÿd....Kakadu-v5 */ - $"2E32 2E31 FF90 000A 0000 0000 D036 0001" /* .2.1ÿ.Â....Ð6.. */ - $"FF93 CFC2 DC03 54F9 36EC A8DC 2A8C 3701" /* ÿ“ÏÂÜ.Tù6ì¨Ü*Œ7. */ - $"118B 95C3 F2B2 5A7A 0428 C30A 2C64 B704" /* .‹•Ãò²Zz.(ÃÂ,d·. */ - $"5C3C 6DED 8696 4890 6404 5638 430C 59C5" /* \VFK)D.Ž */ - $"CB0C F4C7 E144 47E1 47C1 F6BD 8089 21DB" /* Ë.ôÇáDGáGÁö½€‰!Û */ - $"8279 4533 01BF B9CC C444 AD53 5F75 D706" /* ‚yE3.¿¹ÌÄD­S_u×. */ - $"3FDD CA27 5D6C 9F54 1CCF F838 38E4 B2E4" /* ?ÝÊ']lŸT.Ïø88ä²ä */ - $"F9FF 429F 59FE D27B 4A5E A69F 2C21 38F6" /* ùÿBŸYþÒ{J^¦Ÿ,!8ö */ - $"5A74 D405 2FEE 50B8 E5F1 C489 2693 5B33" /* ZtÔ./îP¸åñĉ&“[3 */ - $"D2C2 9DEC 68ED F55C 1FAC 1401 8D66 795A" /* ÒÂìhíõ\.¬..fyZ */ - $"F5F3 27A3 5874 6681 9AC6 F41D A4E6 40DA" /* õó'£XtfšÆô.¤æ@Ú */ - $"3EE5 CCEE 340C AF72 87FD 6B2A EB94 88EC" /* >åÌî4.¯r‡ýk*딈ì */ - $"A61D A536 7AC2 C6B8 85D9 CEBD 146C 83B5" /* ¦.¥6zÂÆ¸…Ùν.lƒµ */ - $"F5E0 A3C7 B524 BC64 B6B5 91A6 BF91 C547" /* õà£Çµ$¼d¶µ‘¦¿‘ÅG */ - $"BD87 811F D58E 8E51 BB89 FA6C 5257 33D9" /* ½‡.ÕŽŽQ»‰úlRW3Ù */ - $"A964 A4AB 3BB9 9608 BECC 0D9C D6B9 3D3A" /* ©d¤«;¹–.¾Ì.œÖ¹=: */ - $"CB64 28BE 3B07 6318 DF9D C134 9F16 567A" /* Ëd(¾;.c.ßÁ4Ÿ.Vz */ - $"8127 5FFD F396 BA0C B86F AA17 2301 022A" /* '_ýó–º.¸oª.#..* */ - $"3742 CE95 B1AF F858 C503 8156 35E0 8F2C" /* 7BΕ±¯øXÅ.V5à, */ - $"67D7 2D41 1F0B 5284 1535 AF16 6540 FB65" /* g×-A..R„.5¯.e@ûe */ - $"65BC 5F6B 136D 73A5 1C5D 3D92 FF5F 8494" /* e¼_k.ms¥.]=’ÿ_„” */ - $"FDBF E0C5 821F 072A 0EEB B855 6B42 CEE8" /* ý¿àÅ‚..*.ë¸UkBÎè */ - $"ABEE 381E 894E DF1E 29DD 4B78 3F0A F5EB" /* «î8.‰Nß.)ÝKx?Âõë */ - $"B9F8 61B8 8266 3BD8 A2AC 5BC1 38F4 5098" /* ¹øa¸‚f;Ø¢¬[Á8ôP˜ */ - $"3951 2437 1798 7BF9 EA00 12BF CF3E 9166" /* 9Q$7.˜{ùê..¿Ï>‘f */ - $"8253 6FF0 B942 70D7 C729 0866 33F7 3484" /* ‚Soð¹Bp×Ç).f3÷4„ */ - $"ADF8 C3D2 4EF6 1DF4 0E6F 8E64 B470 1D5E" /* ­øÃÒNö.ô.oŽd´p.^ */ - $"F311 9BD1 EDE1 BA5D 7601 2053 D70A FDCD" /* ó.›Ñíáº]v. S×ÂýÍ */ - $"82C0 1BDA A35C FAD2 67AD E569 7851 10A7" /* ‚À.Ú£\úÒg­åixQ.§ */ - $"EF9A 3533 EC03 E813 08B6 D984 1A1D 3DC0" /* ïš53ì.è..¶Ù„..=À */ - $"7C8E E03E 4A44 03E4 7894 FF1F 080E 2BFD" /* |Žà>JD.äx”ÿ...+ý */ - $"EEB4 E64A C757 389B 5780 3AF8 248C 580D" /* î´æJÇW8›W€:ø$ŒX. */ - $"461B D417 66BA CEB2 2042 3C84 DAF9 C127" /* F.Ô.fºÎ² B<„ÚùÁ' */ - $"63E9 168C A9E3 D418 61E8 C46C CF01 F59B" /* cé.Œ©ãÔ.aèÄlÏ.õ› */ - $"4518 8833 3E62 5B14 BFD1 41A8 45D6 D311" /* E.ˆ3>b[.¿ÑA¨EÖÓ. */ - $"8431 80DB 1FD5 5839 DE81 BCD9 EAFB EE26" /* „1€Û.ÕX9Þ¼Ùêûî& */ - $"33DD 9E73 0B6F F957 26EE E7BA E0DA FF22" /* 3Ýžs.oùW&îçºàÚÿ" */ - $"EA50 24BF A182 089D 749A 6AAF BFF2 224D" /* êP$¿¡‚.tšj¯¿ò"M */ - $"30D4 11D0 E07A A012 587A 0633 92B4 CBFC" /* 0Ô.Ðàz .Xz.3’´Ëü */ - $"8E1B E5AC 9025 A74D 2819 3F9D 8132 B795" /* Ž.å¬%§M(.?2·• */ - $"458E 4651 1589 158D D24C A5B0 CBFA 359E" /* EŽFQ.‰.ÒL¥°Ëú5ž */ - $"BDB0 E4FB BFE3 5854 3E88 A646 71B1 9CB2" /* ½°äû¿ãXT>ˆ¦Fq±œ² */ - $"BB4E BA8E E170 8CBF C1F5 3141 F537 C0FA" /* »NºŽápŒ¿Áõ1Aõ7Àú */ - $"9780 6448 BA3B 94D6 3E8B 7AF0 0B5A C7A2" /* —€dHº;”Ö>‹zð.ZÇ¢ */ - $"4D05 C6BB 7F47 7102 F66E E4E8 3681 1C97" /* M.Æ».Gq.önäè6.— */ - $"0996 4491 F713 2A24 3756 2715 4B55 762F" /* Æ–D‘÷.*$7V'.KUv/ */ - $"78CB 2608 0563 73F7 5626 9F35 0C54 6822" /* xË&..cs÷V&Ÿ5.Th" */ - $"F061 792A 4AFC 163A 9F83 8F82 638B 524D" /* ðay*Jü.:Ÿƒ‚c‹RM */ - $"C21C 3735 DB76 6F4B 01F2 3E7E 5755 5945" /* Â.75ÛvoK.ò>~WUYE */ - $"6149 AAEE 1A88 7748 DC47 79E4 0660 318C" /* aIªî.ˆwHÜGyä.`1Œ */ - $"AA94 E92D 9879 C9C1 AC17 C828 7BBB 997A" /* ª”é-˜yÉÁ¬.È({»™z */ - $"315E 858F F31D 3522 A6D2 B3BD E548 DBA2" /* 1^…ó.5"¦Ò³½åHÛ¢ */ - $"3274 749B 11C1 9570 D715 0350 4CC4 6820" /* 2tt›.Á•p×..PLÄh */ - $"560A 8542 A38D 913B 3863 FF5C 97F2 9BA5" /* VÂ…B£‘;8cÿ\—ò›¥ */ - $"893F 6C9B 15A2 EE40 BCD6 2676 80A9 AC89" /* ‰?l›.¢î@¼Ö&v€©¬‰ */ - $"9054 849D 859C 8DCD 181B 64F4 6D7B 71B4" /* T„…œÍ..dôm{q´ */ - $"FBD3 0C84 21D4 CC6C CF84 F40A A3CD C958" /* ûÓ.„!ÔÌlÏ„ô£ÍÉX */ - $"928E 97E5 346C 6497 2888 7903 5B0B 3277" /* ’Ž—å4ld—(ˆy.[.2w */ - $"B4D6 9AA4 86C3 C691 CA1A 3C92 FCFB 02DE" /* ´Öš¤†ÃÆ‘Ê.<’üû.Þ */ - $"A25E 5C5C C6A8 1CE2 F5B5 88AB 3673 F912" /* ¢^\\ƨ.âõµˆ«6sù. */ - $"96AF E6BC 67FF 40CC 068D C6E3 8435 48AF" /* –¯æ¼gÿ@Ì.Æã„5H¯ */ - $"B929 F509 0F59 3410 A9A6 1087 8352 11EC" /* ¹)õÆ.Y4.©¦.‡ƒR.ì */ - $"23CF CD2E 3F05 487E 0740 9BE7 236F 56FB" /* #ÏÍ.?.H~.@›ç#oVû */ - $"D0F4 677F 9514 C6E9 50BB A61A 6135 73FB" /* Ðôg.•.ÆéP»¦.a5sû */ - $"37AA FA5C 0967 671C 8485 5326 6EB5 4955" /* 7ªú\Ægg.„…S&nµIU */ - $"1AAE 5FCE C271 D992 9E8C B0DF 7795 E0F2" /* .®_ÎÂqÙ’žŒ°ßw•àò */ - $"A17A B50F E53A FE12 756F D1A1 5CE1 7C9B" /* ¡zµ.å:þ.uoÑ¡\á|› */ - $"D185 2C1A 9224 BC62 5C98 FA35 1649 6EA7" /* Ñ…,.’$¼b\˜ú5.In§ */ - $"4C7C C191 DF92 9D7A 6FE9 71D9 9A11 5A19" /* L|Á‘ß’zoéqÙš.Z. */ - $"214D F951 38FA C459 E39A 6DAE 1253 31DF" /* !MùQ8úÄYãšm®.S1ß */ - $"B335 3337 39D2 7591 BFC1 31E6 887A 8BAB" /* ³5379Òu‘¿Á1æˆz‹« */ - $"ECCD 7A58 8E4A AD65 A7E1 5FC6 8EB0 DA82" /* ìÍzXŽJ­e§á_ÆŽ°Ú‚ */ - $"0F81 6849 5CE5 AB32 B763 1227 3F4C 5691" /* .hI\å«2·c.'?LV‘ */ - $"43C7 DD24 E8D9 C4F3 7BB0 4666 7A24 1C5B" /* CÇÝ$èÙÄó{°Ffz$.[ */ - $"F57D 719F 2BDB 3794 66BA BBB6 9D8D A662" /* õ}qŸ+Û7”fº»¶¦b */ - $"CF99 4DDC E533 96D6 EEE0 3FC7 BFB8 B1B7" /* Ï™MÜå3–Öîà?Ç¿¸±· */ - $"9AE3 57C7 E1A8 B1F8 6C5C 3F0D 19C1 812D" /* šãWÇᨱøl\?..Á- */ - $"8D31 C88B C396 B5E7 3CE0 4E2C AE73 7876" /* 1ȋÖµç<àN,®sxv */ - $"0436 A295 BEC6 BDF1 C604 C41C 94E6 E7C1" /* .6¢•¾Æ½ñÆ.Ä.”æçÁ */ - $"AC78 356A B92A DB37 3360 3372 6638 0C5C" /* ¬x5j¹*Û73`3rf8.\ */ - $"F388 7CDE 4045 060F E713 C4C3 321E E08B" /* óˆ|Þ@E..ç.ÄÃ2.à‹ */ - $"0810 71EE A6AB C032 2B85 C34C 2671 8143" /* ..qÀ2+…ÃL&qC */ - $"AFDE 07D1 A40C D86A ADBE B961 EAA3 54BD" /* ¯Þ.Ѥ.Øj­¾¹aê£T½ */ - $"804D 6FA9 AA3F 7FBE BCD9 E785 A230 EA4E" /* €Mo©ª?.¾¼Ùç…¢0êN */ - $"1C08 1DF6 8373 7754 5039 7854 1192 1512" /* ...öƒswTP9xT.’.. */ - $"B956 E9A7 575E E3DB F5F9 4B02 F739 F2BB" /* ¹Vé§W^ãÛõùK.÷9ò» */ - $"91B2 73E1 3D19 EBB6 AD2F 291C 5BAC 5EEA" /* ‘²sá=.ë¶­/).[¬^ê */ - $"EEDF 8DA7 5FCA 8E8C 952D 8FD0 441C 5BA4" /* îß§_ÊŽŒ•-ÐD.[¤ */ - $"8AF6 21BE 1FAF DAE3 DADD EA91 EF73 58A0" /* Šö!¾.¯ÚãÚÝê‘ïsX  */ - $"29E6 89B2 E279 B02A D092 DD08 6187 9095" /* )扲ây°*Ð’Ý.a‡• */ - $"5C85 C903 0DD2 9ED3 538B D9BB E936 8ABB" /* \…É..ÒžÓS‹Ù»é6Š» */ - $"E203 DD03 2944 5317 7BC3 0297 2125 F198" /* â.Ý.)DS.{Ã.—!%ñ˜ */ - $"D117 8DDB E382 71F8 D0A7 14B1 6D7A A0EB" /* Ñ.Ûã‚qøÐ§.±mz ë */ - $"7C6F 7651 D2EC ECA7 F670 D09F 6CF6 30DB" /* |ovQÒìì§öpПlö0Û */ - $"0830 39B5 BC45 3915 4054 4490 A7BA 5CEC" /* .09µ¼E9.@TD§º\ì */ - $"D37B FBC2 7890 B18F DEEA 4966 D46D 5FD2" /* Ó{ûÂx±ÞêIfÔm_Ò */ - $"7811 AAD0 8EBF FB40 0F30 D8A4 2B71 5A03" /* x.ªÐŽ¿û@.0ؤ+qZ. */ - $"636A C360 C889 891D D420 A828 E337 41CC" /* cjÃ`ȉ‰.Ô ¨(ã7AÌ */ - $"3314 5473 B91F 7B78 2B3B AC7A 1127 F2DE" /* 3.Ts¹.{x+;¬z.'òÞ */ - $"E997 2101 6008 26AE 43D5 7CE7 8532 B9CE" /* é—!.`.&®CÕ|ç…2¹Î */ - $"A81A 710E 5D87 49D7 3EF6 65A3 D533 977E" /* ¨.q.]‡I×>öe£Õ3—~ */ - $"7BE9 0CA7 8B28 9ADA AF4F 45A5 99BD E21D" /* {é.§‹(šÚ¯OE¥™½â. */ - $"D4B1 BB33 2508 C8D1 31E5 E9FB F917 A8E1" /* Ô±»3%.ÈÑ1åéûù.¨á */ - $"2955 9008 F531 9010 575A 3AFB 59F4 CD63" /* )U.õ1.WZ:ûYôÍc */ - $"3EEE 2409 BCD4 E5F1 1418 6155 B6D7 A94B" /* >î$ƼÔåñ..aU¶×©K */ - $"1D48 79A8 2F32 0770 476B CE28 023A DC86" /* .Hy¨/2.pGkÎ(.:܆ */ - $"E008 813B E64A 39F5 58CE 3E75 DAA6 BD7A" /* à.;æJ9õXÎ>uÚ¦½z */ - $"1528 FF50 0738 C132 5569 3C99 C4BC A20F" /* .(ÿP.8Á2Ui<™Ä¼¢. */ - $"6DED 9310 6FE1 8BE4 BF4D D0B1 993E 0FD3" /* mí“.oá‹ä¿Mб™>.Ó */ - $"4938 1302 E4A8 FDA2 A7D2 4615 CD89 1E52" /* I8..ä¨ý¢§ÒF.͉.R */ - $"4160 51F8 BABB FEED 4281 0E0C 31CD 91D7" /* A`Qøº»þíB..1Í‘× */ - $"C7CF E302 E155 4188 0F06 097F 6906 2EC9" /* ÇÏã.áUAˆ..Æ.i..É */ - $"BE00 A1FB 0D99 8FB1 3B3D E3D3 70B8 4296" /* ¾.¡û.™±;=ãÓp¸B– */ - $"F199 E066 15B5 920C 38A2 695F F2E8 81E1" /* ñ™àf.µ’.8¢i_òèá */ - $"E0EC 34E5 97B3 9580 459F A2D9 E267 B847" /* àì4å—³•€EŸ¢Ùâg¸G */ - $"E302 3AA0 8631 8C61 5F8E 88DE 2FBB 394B" /* ã.: †1Œa_ŽˆÞ/»9K */ - $"B9EC 234B 6515 BDF3 BA80 AA30 3D50 2F90" /* ¹ì#Ke.½óº€ª0=P/ */ - $"C26A D743 2198 707A 2DC1 9C64 1647 1FA3" /* Âj×C!˜pz-Áœd.G.£ */ - $"43A2 B1C7 C95D 1E19 9650 E616 F24B C118" /* C¢±ÇÉ]..–Pæ.òKÁ. */ - $"FB68 CE23 485E BF50 ACF8 F669 B5A3 92AA" /* ûhÎ#H^¿P¬øöiµ£’ª */ - $"5625 BF48 8584 A6E7 DAC0 E203 2AF0 89A0" /* V%¿H…„¦çÚÀâ.*ð‰  */ - $"DB92 4924 9249 1BF5 D855 0470 51D0 AAE2" /* Û’I$’I.õØU.pQЪâ */ - $"A1E5 FBC9 CB80 1798 2EB3 EB1E 9FD4 46E7" /* ¡åûÉË€.˜.³ë.ŸÔFç */ - $"63DB F02E 204B D35F 54DE 0FD3 2F81 FB63" /* cÛð. KÓ_TÞ.Ó/ûc */ - $"9CEC 37F1 C9FF 5B63 B13D BFBD 1169 0415" /* œì7ñÉÿ[c±=¿½.i.. */ - $"0E97 DA89 25E3 92C7 01F5 50E6 2181 A536" /* .—Ú‰%ã’Ç.õPæ!¥6 */ - $"4020 C49B 1977 1BF5 5226 FD7D 668A D76F" /* @ Ä›.w.õR&ý}fŠ×o */ - $"2954 58F1 F44F 2935 F136 18BD C844 05FD" /* )TXñôO)5ñ6.½ÈD.ý */ - $"E325 9012 9E92 6EC3 E822 D06F A958 C54C" /* ã%.ž’nÃè"Ðo©XÅL */ - $"6A4D 0A98 093C 481D 1424 7964 E810 7A60" /* jMÂ˜Æ */ - $"C450 03B7 E8DE 17B3 9CE7 02E1 BE72 100B" /* ÄP.·èÞ.³œç.á¾r.. */ - $"2EF5 787D 0D12 FC3B 855A 3F97 1850 05EF" /* .õx}..ü;…Z?—.P.ï */ - $"A05D 7CC2 405B BA6D 9175 7C99 BE1C 2370" /*  ]|Â@[ºm‘u|™¾.#p */ - $"1F57 2085 13F8 B672 728D 1152 8232 1EE4" /* .W ….ø¶rr.R‚2.ä */ - $"A666 BFD0 06A8 6CFF 3D73 D895 5968 A54A" /* ¦f¿Ð.¨lÿ=sØ•Yh¥J */ - $"3219 63AB D4CD 8E7D 52F3 D260 CE4D E329" /* 2.c«ÔÍŽ}RóÒ`ÎMã) */ - $"F554 C837 34CC 2866 FA1E 1F34 B209 B8C3" /* õTÈ74Ì(fú..4²Æ¸Ã */ - $"097B 8DBC 8788 F621 2A57 5468 5FD8 852B" /* Æ{¼‡ˆö!*WTh_Ø…+ */ - $"08A9 45F3 71A8 A26B F63C 2DB1 750F A833" /* .©Eóq¨¢kö<-±u.¨3 */ - $"4767 6D8A B551 FF10 9E54 AD5D EE2E 2207" /* GgmеQÿ.žT­]î.". */ - $"44EA 0D21 75D4 779D E96D 49FF 47CE D775" /* Dê.!uÔwémIÿGÎ×u */ - $"D7B0 2380 5F1C 4185 EF0B BECB 1A55 9696" /* ×°#€_.A…ï.¾Ë.U–– */ - $"81B8 94F2 4F5B 07D8 D5EC 9E2A 049D 5E87" /* ¸”òO[.ØÕìž*.^‡ */ - $"2601 FB44 4AD5 C57B A7B0 8088 B723 134E" /* &.ûDJÕÅ{§°€ˆ·#.N */ - $"0B8A 375E B972 F34F F25A 2B68 3F15 4496" /* .Š7^¹róOòZ+h?.D– */ - $"5734 FE10 D742 67F9 9FFF 639C FAFD 23DB" /* W4þ.×BgùŸÿcœúý#Û */ - $"B90C F402 17F0 81C6 2656 EFD0 E011 C866" /* ¹.ô..ðÆ&VïÐà.Èf */ - $"15C8 4927 3415 BEC1 7876 E693 74CB DBEA" /* .ÈI'4.¾Áxvæ“tËÛê */ - $"7206 2246 23EC DCCA 51CD 72C1 8C41 1B85" /* r."F#ìÜÊQÍrÁŒA.… */ - $"AE9B 6FA5 4286 03FB 7000 D94F 5A8B 8A85" /* ®›o¥B†.ûp.ÙOZ‹Š… */ - $"2F34 7575 E7AB 08FF 3CBD 328D D95D BDF5" /* /4uuç«.ÿ<½2Ù]½õ */ - $"8070 0FAD B573 A91E 5F83 D32D 3337 A5B7" /* €p.­µs©._ƒÓ-37¥· */ - $"C6A7 3048 8D7C 3F01 F6BF 1BAB D684 0585" /* Ƨ0H|?.ö¿.«Ö„.… */ - $"798A A28D 68A6 4993 22BC F35C E3A7 BABE" /* yŠ¢h¦I“"¼ó\㧺¾ */ - $"0D5B 7E43 2B91 5DA6 6821 0495 4B22 33C0" /* .[~C+‘]¦h!.•K"3À */ - $"1217 1302 A7EB 1093 C8BD 3622 F0FD 14C3" /* ....§ë.“Ƚ6"ðý.à */ - $"EDBA 60FA B4C2 07D5 6D80 C177 9C23 24FE" /* íº`ú´Â.Õm€Áwœ#$þ */ - $"C9E7 77A7 1945 4C1A 8945 129A 2581 498D" /* Éçw§.EL.‰E.š%I */ - $"F2BD 5AD6 EF89 4D80 3EC2 DA29 E093 A726" /* ò½ZÖï‰M€>ÂÚ)à“§& */ - $"88F1 0796 E9F0 8F36 D342 7AD3 DEC2 2CCA" /* ˆñ.–éð6ÓBzÓÞÂ,Ê */ - $"45B9 35A0 DE31 D18B 2954 C38C 4B3A EEA2" /* E¹5 Þ1Ñ‹)TÃŒK:î¢ */ - $"5CD5 333D 6C59 23C7 17B3 C98C 65EE 8117" /* \Õ3=lY#Ç.³ÉŒeî. */ - $"22A2 574D D223 581B D09B 6473 3F85 6E2A" /* "¢WMÒ#X.Лds?…n* */ - $"81B5 F600 CAB6 1A02 3B24 D726 4344 536F" /* µö.ʶ..;$×&CDSo */ - $"99AB 09C8 96EA B41B 01C9 7AC8 9478 B8AB" /* ™«ÆÈ–ê´..ÉzÈ”x¸« */ - $"69E3 1BF1 1100 AFF3 C59C 01FB 8EF9 047D" /* iã.ñ..¯óÅœ.ûŽù.} */ - $"21EF 11DE D2CA BEE2 8372 5DDB C39C DE6E" /* !ï.ÞÒʾâƒr]ÛÜÞn */ - $"B652 35FE FDFB F1E8 2E91 778A 86C3 3117" /* ¶R5þýûñè.‘wІÃ1. */ - $"87D8 A7D5 7862 68B7 30C1 3B32 D209 0256" /* ‡Ø§Õxbh·0Á;2ÒÆ.V */ - $"2BF7 DFEF 17C3 FC30 EF1D 9327 7041 FC3C" /* +÷ßï.Ãü0ï.“'pAü< */ - $"674F 3069 DAB2 0EA5 BB48 DC2C DC66 F660" /* gO0iÚ².¥»HÜ,Üfö` */ - $"9C9B C7C8 3734 C68B 7D5A 60A1 DF3D D3A8" /* œ›ÇÈ74Æ‹}Z`¡ß=Ó¨ */ - $"E60C D15A 11C7 FB3B F75A 358E A7F7 16CB" /* æ.ÑZ.Çû;÷Z5ާ÷.Ë */ - $"67B5 097E E2A2 DE6C E40A FD52 8F75 43EF" /* gµÆ~â¢ÞläÂýRuCï */ - $"F5DF 5A51 BBF5 A074 791F F54F 9724 23C3" /* õßZQ»õ ty.õO—$#à */ - $"F5E6 C4A3 E22C 1E06 3B71 A9A2 1C17 0109" /* õæÄ£â,..;q©¢...Æ */ - $"1B59 2742 AB03 0497 3E5A AD73 7FD3 DA51" /* .Y'B«..—>Z­s.ÓÚQ */ - $"9F17 A10E B9CF 7503 3395 8788 9D9D 4A58" /* Ÿ.¡.¹Ïu.3•‡ˆJX */ - $"F9B8 4A61 3DDA 7489 8086 9EAC 4D7D 62DD" /* ù¸Ja=Út‰€†ž¬M}bÝ */ - $"BF8B 9462 1CC0 6912 69BE 3BFE FED7 3174" /* ¿‹”b.Ài.i¾;þþ×1t */ - $"CAA6 A806 FF59 B963 ABEE 508B F428 D15C" /* ʦ¨.ÿY¹c«îP‹ô(Ñ\ */ - $"82FC BA30 6907 C572 F2BD C0DB E9A2 44AF" /* ‚üº0i.Årò½ÀÛé¢D¯ */ - $"EED6 81F7 C602 F802 0374 CD1D 0F41 5E2E" /* îÖ÷Æ.ø..tÍ..A^. */ - $"F54F E7AB C492 54F8 C570 48A6 1603 35D3" /* õOç«Ä’TøÅpH¦..5Ó */ - $"EA1A 6A6D FD79 27E3 F928 4E16 3A2D 43FE" /* ê.jmýy'ãù(N.:-Cþ */ - $"6C3D AFC6 FA1C 578C 7BA9 7343 5B2C 7BB9" /* l=¯Æú.WŒ{©sC[,{¹ */ - $"0614 915A 24C4 CAC1 A2D3 0EAF EAE8 7257" /* ..‘Z$ÄÊÁ¢Ó.¯êèrW */ - $"EA2D 1ED2 3FFE 26A7 3E28 28D0 1AE1 D790" /* ê-.Ò?þ&§>((Ð.á× */ - $"A25D 1C6C BA20 E196 1EEC 9720 92EE 6E62" /* ¢].lº á–.ì— ’înb */ - $"E218 5609 944E 9A2E 9228 117A 6065 93FF" /* â.VÆ”Nš.’(.z`e“ÿ */ - $"2B32 B2C1 7876 E657 E39E 8641 F202 62B4" /* +2²ÁxvæW㞆Aò.b´ */ - $"20C5 99D9 F9E5 7D83 D807 EDB7 9A34 475B" /* Å™Ùùå}ƒØ.í·š4G[ */ - $"4F45 9AE8 ACD6 3098 A0C2 8D14 CBDB 9A2B" /* OEšè¬Ö0˜ Â.ËÛš+ */ - $"0EF7 CB30 8B49 169F 1ECD 6F33 F063 65DA" /* .÷Ë0‹I.Ÿ.Ío3ðceÚ */ - $"2A2F F0B0 EE29 91F7 CA11 748C 5E4E A447" /* *.ð°î)‘÷Ê.tŒ^N¤G */ - $"0F7F 4B32 DB7A 366C 27C4 F178 33B7 5E9B" /* ..K2Ûz6l'Äñx3·^› */ - $"BAAF 29CD A3EF 39BB 5FAD AD2B 5DCA 09E8" /* º¯)Í£ï9»_­­+]ÊÆè */ - $"DB9A DD07 84DD 870E 2A4C 850B BD04 7F9A" /* ÛšÝ.„݇.*L….½..š */ - $"1354 1DAA 0819 F583 1F47 5905 6597 5F07" /* .T.ª..õƒ.GY.e—_. */ - $"7ED6 DFFA BA65 FA6C D01D F65F F833 D479" /* ~ÖßúºeúlÐ.ö_ø3Ôy */ - $"BFD3 F3D8 57BB 3718 EBC8 5A2D 732E 464E" /* ¿ÓóØW»7.ëÈZ-s.FN */ - $"6B46 9512 778B 8066 D5DA D21A 819D 5384" /* kF•.w‹€fÕÚÒ.S„ */ - $"A84C AE56 92E2 2E9A 4D27 8A21 E02D 67FC" /* ¨L®V’â.šM'Š!à-gü */ - $"EAA4 B3D5 9306 1D06 CC9A 84C8 D6C4 C7E1" /* ꤳՓ...Ìš„ÈÖÄÇá */ - $"4F47 E168 43F0 6EB1 9276 ED11 2C29 F1CB" /* OGáhCðn±’ví.,)ñË */ - $"90AB 1975 3405 422B 78EC 7776 FA5C 0A2C" /* «.u4.B+xìwvú\Â, */ - $"F4B1 4F40 32CE D338 8911 EAB4 4CFC 7765" /* ô±O@2ÎÓ8‰.ê´Lüwe */ - $"D9ED C10E 114B 0909 1122 6832 A41E 3365" /* ÙíÁ..KÆÆ."h2¤.3e */ - $"96EF FC81 A398 2FE8 0464 5D18 0C9F C1AF" /* –ïü£˜/è.d]..ŸÁ¯ */ - $"8E6F 42CA BDC9 1DC4 770E 1C2E 01BD 62DB" /* ŽoBʽÉ.Äw....½bÛ */ - $"7798 4167 FC4F B27D D7E6 32CE 7F95 954F" /* w˜AgüO²}׿2Î.••O */ - $"653C 833E B4F1 C6C2 307E 0796 686E 6F5C" /* e<ƒ>´ñÆÂ0~.–hno\ */ - $"6EE2 6260 4C0B 5329 36D8 839E 5F08 319C" /* nâb`L.S)6؃ž_.1œ */ - $"4CAE 85DE 6B64 F427 1358 C9FF 57B9 AF78" /* L®…Þkdô'.XÉÿW¹¯x */ - $"332B 82A6 0EBF 0F83 7A3C 8004 1402 6A12" /* 3+‚¦.¿.ƒz<€...j. */ - $"FEE8 1612 2D8A 47FE 5BDE 2714 B393 E32F" /* þè..-ŠGþ[Þ'.³“ã/ */ - $"013E BD7E 14FA 285D BF61 7CDA 3A92 734A" /* .>½~.ú(]¿a|Ú:’sJ */ - $"520E 978D 8736 6AA9 847B 05C9 F28B 3D9A" /* R.—‡6j©„{.Éò‹=š */ - $"9B2E 721C 9082 3EC1 362C D516 D306 1EB9" /* ›.r.‚>Á6,Õ.Ó..¹ */ - $"A95C EC63 3111 4ED2 054A EFF8 F26A 0E36" /* ©\ìc1.NÒ.Jïøòj.6 */ - $"7445 26A0 464F CEDC 924D B183 FAEF 28F7" /* tE& FOÎÜ’M±ƒúï(÷ */ - $"AF76 2DBA F15C 4F45 4BFD E003 CDC1 A878" /* ¯v-ºñ\OEKýà.ÍÁ¨x */ - $"6FB4 207C 2A45 1ED9 CE49 2495 F6A9 77E8" /* o´ |*E.ÙÎI$•ö©wè */ - $"E7FF 7FFF 7FFF 7FFF 70EC F373 E872 28BA" /* çÿ.ÿ.ÿ.ÿpìósèr(º */ - $"A0BB 38E4 AC79 94DA 6562 832A 9A7B EEA8" /*  »8ä¬y”Úebƒ*š{î¨ */ - $"6B09 FEA7 9249 2005 E7D1 D721 4761 B6DB" /* kÆþ§’I .çÑ×!Ga¶Û */ - $"6DB6 DB6D 98C5 C208 FD98 41AA F430 3EAE" /* m¶Ûm˜ÅÂ.ý˜Aªô0>® */ - $"7118 7229 50B1 07D8 C5CA 010D 4AB4 DE82" /* q.r)P±.ØÅÊ..J´Þ‚ */ - $"53D3 E184 6561 DE5F 7236 BBF5 550D 4A83" /* SÓá„eaÞ_r6»õU.Jƒ */ - $"555B 5C0F 9C0E F052 0080 F4AC 3912 DD30" /* U[\.œ.ðR.€ô¬9.Ý0 */ - $"47C9 B77E C632 15D7 8EB6 CD51 0454 A805" /* GÉ·~Æ2.׎¶ÍQ.T¨. */ - $"2DAD F687 6CB7 B37F 2289 759F F7D5 8839" /* -­ö‡l·³."‰uŸ÷Õˆ9 */ - $"B3E6 BCA5 AA89 9D9D 599A 5BDD 54B9 7F7D" /* ³æ¼¥ª‰Yš[ÝT¹.} */ - $"2770 11ED 2217 C539 0204 16FF 728A C52A" /* 'p.í".Å9...ÿrŠÅ* */ - $"2D24 5FC7 E1D7 C47E 1DE8 C3F0 EA38 E730" /* -$_Çá×Ä~.èÃðê8ç0 */ - $"2D9D 0AC5 991A F5DD 38EC 007B A963 8B4D" /* -ÂÅ™.õÝ8ì.{©c‹M */ - $"51BA A9FC AE25 908A 1B70 9145 EBA2 38C4" /* Qº©ü®%Š.p‘Eë¢8Ä */ - $"168F 70BB 10A5 CAA5 A249 1974 03F3 AB57" /* .p».¥Ê¥¢I.t.ó«W */ - $"3611 30C5 1F14 529F 040A A8EC EBDF F2FF" /* 6.0Å..RŸ.¨ìëßòÿ */ - $"232B 83FE C2D0 59D9 93C2 2A8A F86A 997F" /* #+ƒþÂÐYÙ“Â*Šøj™. */ - $"3207 03A7 C406 E96C C96F 23F1 1490 95DF" /* 2..§Ä.élÉo#ñ.•ß */ - $"4024 67DC 3DE6 E1B1 EB60 1026 8786 531C" /* @$gÜ=æá±ë`.&‡†S. */ - $"9A51 378D EE86 881F 496C 8854 9459 7799" /* šQ7.IlˆT”Yw™ */ - $"11EC 4196 0C22 0F05 3762 D8F4 C348 7299" /* .ìA–."..7bØôÃHr™ */ - $"793E 0718 14D3 D09C C192 80E1 9F7C 5CFA" /* y>...ÓМÁ’€áŸ|\ú */ - $"429C 7960 2F8B 9063 C7E1 1447 7F52 D850" /* Bœy`/‹cÇá.G.RØP */ - $"B80A F1D8 BE98 DC3C 9C44 3AB7 3DA7 E08C" /* ¸Âñؾ˜Ü<œD:·=§àŒ */ - $"E7B6 07CE 2B69 C0E9 0C21 6133 1EC5 DAB5" /* ç¶.Î+iÀé.!a3.ÅÚµ */ - $"B079 413B FBA4 0259 78B8 DA3A E6D1 4AAC" /* °yA;û¤.Yx¸Ú:æÑJ¬ */ - $"2459 93C8 AD9A D69C AC40 5CF7 7385 1B18" /* $Y“È­šÖœ¬@\÷s….. */ - $"D67D 82BD 5E44 3DF8 5D2F E6D3 CE47 0191" /* Ö}‚½^D=ø]/æÓÎG.‘ */ - $"6E57 0F2F E8E8 9FF0 14BC 21F1 7720 6F34" /* nW./èèŸð.¼!ñw o4 */ - $"1EEE 5EF6 F8FD 5481 44E3 AB6B B06E 2556" /* .î^öøýTDã«k°n%V */ - $"6F07 AD65 FC95 7C32 7487 10A0 3C20 9CA7" /* o.­eü•|2t‡. < œ§ */ - $"B0EB F703 2D09 F0A6 D3FD 55F6 354B EDB0" /* °ë÷.-Æð¦ÓýUö5Kí° */ - $"179B B267 B9EB 8DA1 ED8E 7D0F 1AFF 4D50" /* .›²g¹ë¡íŽ}..ÿMP */ - $"C1C7 A686 586C 6A26 3B0B 4292 60A0 A804" /* ÁǦ†Xlj&;.B’` ¨. */ - $"04F6 5FDB 0F76 E2BC D680 20B5 46AE 399D" /* .ö_Û.vâ¼Ö€ µF®9 */ - $"CC54 82A4 1DCA 08E7 E2B4 6710 ABD8 FC18" /* ÌT‚¤.Ê.çâ´g.«Øü. */ - $"949B 7076 11CD 598E 2A8B 99FC CC28 EC17" /* ”›pv.ÍYŽ*‹™üÌ(ì. */ - $"451C DE31 F7F4 C47E 3ABB AF03 FDC6 D875" /* E.Þ1÷ôÄ~:»¯.ýÆØu */ - $"BD0C AB3E B78F F942 A53E E5F8 CA09 414D" /* ½.«>·ùB¥>åøÊÆAM */ - $"7544 D5B4 8367 3256 6D8C CB66 6DE7 E99C" /* uDÕ´ƒg2VmŒËfmçéœ */ - $"88E9 FCDC EB55 F67B 20E7 F44D 7616 6B29" /* ˆéüÜëUö{ çôMv.k) */ - $"124A C9AB 95C7 E9A8 209D EDA5 499F 2D2F" /* .JÉ«•Çé¨ í¥IŸ-/ */ - $"20E5 DE8C 2EEE 92AF 4BD6 484B 7E18 2D81" /* åÞŒ.î’¯KÖHK~.- */ - $"0502 F439 C742 BA21 693B 43C5 60DF 8BA0" /* ..ô9ÇBº!i;CÅ`ß‹  */ - $"9EAC 0A98 DFE4 DB4B 0BE1 E526 9B74 5982" /* ž¬Â˜ßäÛK.áå&›tY‚ */ - $"1817 EA6B 067A D3E4 8786 883D 26DB D361" /* ..êk.zÓ䇆ˆ=&ÛÓa */ - $"C40F 89F4 B31F 2AF3 1369 FDA9 889A 5620" /* Ä.‰ô³.*ó.iý©ˆšV */ - $"9AE7 4384 7184 9D7F 6C37 F79B 9422 ADF3" /* šçC„q„.l7÷›”"­ó */ - $"2BEA A620 14CF 0267 110E AB20 594B F1DA" /* +ê¦ .Ï.g..« YKñÚ */ - $"9D7F DB53 3723 1A4E 0DEC DF68 3A10 078F" /* .ÛS7#.N.ìßh:.. */ - $"8CA5 471B 4400 0975 92AA A351 8C66 5DDA" /* Œ¥G.D.Æu’ª£QŒf]Ú */ - $"0E4E C7B1 286F 2F7C E0EB 24CC 0A8B CAF8" /* .NDZ(o/|àë$ÌÂ‹Êø */ - $"4F0F 75E5 CACF 26F5 0FFE 86A8 1E77 5F03" /* O.uåÊÏ&õ.þ†¨.w_. */ - $"A8B5 A544 F04B A521 B3FA 854A 64FA 70CD" /* ¨µ¥DðK¥!³ú…JdúpÍ */ - $"526F 97AE 807A 05FC 3F67 2471 61E5 2715" /* Ro—®€z.ü?g$qaå'. */ - $"5774 E452 7E4A CDDA 6E48 0DA2 04B3 3A29" /* WtäR~JÍÚnH.¢.³:) */ - $"DE10 8F75 3A3A 559D A881 B948 74F3 AB92" /* Þ.u::U¨¹Htó«’ */ - $"B154 0F88 A11B A00B 25ED 9A59 B894 618E" /* ±T.ˆ¡. .%íšY¸”aŽ */ - $"AD45 3D59 9C08 49EA 076C CD63 8F49 B714" /* ­E=Yœ.Iê.lÍcI·. */ - $"32B3 8743 2506 F55A C011 CBEF C94A 8606" /* 2³‡C%.õZÀ.ËïÉJ†. */ - $"EDE4 BE7D 2DC9 8830 6C23 91E0 0209 440C" /* íä¾}-Ɉ0l#‘à.ÆD. */ - $"9409 1457 6CA0 2201 8FF4 7573 54F8 CCEC" /* ”Æ.Wl ".ôusTøÌì */ - $"D201 4A3A 66A6 B191 4E14 4CB1 08B4 2100" /* Ò.J:f¦±‘N.L±.´!. */ - $"BCF2 3A0D 696F 4582 F8B0 3A60 2D09 E9A7" /* ¼ò:.ioE‚ø°:`-Æé§ */ - $"8E83 CF44 A16A 6516 31C1 B51E 2DFE BDAC" /* ŽƒÏD¡je.1Áµ.-þ½¬ */ - $"356B F402 856C BEA0 109C A125 A759 E580" /* 5kô.…l¾ .œ¡%§Yå€ */ - $"3501 F500 F252 9533 F180 6E7D 30A8 FD62" /* 5.õ.òR•3ñ€n}0¨ýb */ - $"7FD6 B4EB 9120 8504 493A DD87 D79A 0CB1" /* .Ö´ë‘ ….I:݇ך.± */ - $"B674 7010 830D 8A38 5B44 B11D 3632 3FA5" /* ¶tp.ƒ.Š8[D±.62?¥ */ - $"CE31 CE9A 1670 AF20 16F6 BDA6 4980 002E" /* Î1Κ.p¯ .ö½¦I€.. */ - $"3E9E 8AB0 8B1F 63C5 28C3 7914 2833 137F" /* >žŠ°‹.cÅ(Ãy.(3.. */ - $"0915 DD39 7D38 49A3 6054 B5DC 2509 EE11" /* Æ.Ý9}8I£`TµÜ%Æî. */ - $"D68A 5C2A C75B 5B9F 7A9A FF3A D06F 3331" /* ÖŠ\*Ç[[Ÿzšÿ:Ðo31 */ - $"29E6 A9F4 8AD5 E0D9 7FB9 84B1 F403 8910" /* )æ©ôŠÕàÙ.¹„±ô.‰. */ - $"1168 1270 19E2 E385 0353 0FFF 697F 96BE" /* .h.p.âã….S.ÿi.–¾ */ - $"EF55 21CA 25A1 CE5E 0CD7 03A9 094F 51FE" /* ïU!Ê%¡Î^.×.©ÆOQþ */ - $"5314 E59F 90EB 907A E37A DD9D 182A E41C" /* S.åŸëzãzÝ.*ä. */ - $"CFFB 7262 0D9E B904 8D95 2DE3 E02B F5CB" /* Ïûrb.ž¹.•-ãà+õË */ - $"BF61 6012 924E 50D3 2D8D 6C25 FC60 8D19" /* ¿a`.’NPÓ-l%ü`. */ - $"9855 8BF2 5400 0000 04E3 7684 B40E 9EE7" /* ˜U‹òT....ãv„´.žç */ - $"21F8 CB76 250B 7CE0 2605 7C84 7E9F F226" /* !øËv%.|à&.|„~Ÿò& */ - $"6B94 0DB5 02AA 61E7 A9FF 5D9F A9F2 B546" /* k”.µ.ªaç©ÿ]Ÿ©òµF */ - $"2417 2E4D B238 ADDF 9233 5911 1D61 D35A" /* $..M²8­ß’3Y..aÓZ */ - $"8788 DF34 284A 9664 B91E 7A11 4568 B395" /* ‡ˆß4(J–d¹.z.Eh³• */ - $"7C74 C891 2A46 C056 EE92 0459 D81C A41F" /* |tÈ‘*FÀVî’.YØ.¤. */ - $"CA5E 4752 3ADE 89AB 995B 2BF2 D070 41B1" /* Ê^GR:Þ‰«™[+òÐpA± */ - $"EBFE 65BF FF61 55F5 5460 A4E0 33CF 7F1E" /* ëþe¿ÿaUõT`¤à3Ï.. */ - $"691A 0DA4 9372 4DCD 4A7C FF30 7DA5 4AD0" /* i..¤“rMÍJ|ÿ0}¥JÐ */ - $"1236 3C90 00C2 4517 FF78 771E DA05 952D" /* .6<.ÂE.ÿxw.Ú.•- */ - $"1085 D433 FD50 1E6F D583 2585 CBD6 5CFC" /* .…Ô3ýP.oÕƒ%…ËÖ\ü */ - $"9EF2 539B BE7A CCA1 ABF6 5AED 484B FF78" /* žòS›¾zÌ¡«öZíHKÿx */ - $"D6BD 435E E56E 5510 3047 49DE C511 72CF" /* Ö½C^ånU.0GIÞÅ.rÏ */ - $"72A0 B2CE 5E4D E2DA 0AFA FEDE BDFD 3167" /* r ²Î^MâÚÂúþÞ½ý1g */ - $"02FE 3FBE A1B9 7A5F 205B 7D60 1BA3 C975" /* .þ?¾¡¹z_ [}`.£Éu */ - $"5949 A641 5A3E 5AF2 F237 53BE FCAC 71F1" /* YI¦AZ>Zòò7S¾ü¬qñ */ - $"E3E3 6AEB 35B9 41BD C4B6 3400 DBA0 4B7F" /* ããjë5¹A½Ä¶4.Û K. */ - $"FF79 17FD 23F9 918D E532 F6BD F949 B633" /* ÿy.ý#ù‘å2ö½ùI¶3 */ - $"6A36 7600 17D8 C912 DB72 6F48 869C 0D66" /* j6v..ØÉ.ÛroH†œ.f */ - $"1410 074A 8F5B 629C 5B8B F293 6DB6 DB6D" /* ...J[bœ[‹ò“m¶Ûm */ - $"B6DB 6740 B8F8 BF85 2938 ECDA 6390 6537" /* ¶Ûg@¸ø¿…)8ìÚce7 */ - $"5986 A2A6 B52C A20D F057 C41F 660A C203" /* Y†¢¦µ,¢.ðWÄ.fÂÂ. */ - $"E5C1 68B0 9D56 DAD8 F20C 665C 5D04 4BA2" /* åÁh°VÚØò.f\].K¢ */ - $"46FF 7DB5 4880 6121 2EA3 5D2A 82F4 B18A" /* Fÿ}µH€a!.£]*‚ô±Š */ - $"50FC 2D12 DEFE 1F4D 01BF 3315 10D3 5D94" /* Pü-.Þþ.M.¿3..Ó]” */ - $"11B1 0221 28B8 56D9 4CED 012D D9C9 4005" /* .±.!(¸VÙLí.-ÙÉ@. */ - $"316F E887 29A8 3E83 9E25 FF1F A4C1 5D25" /* 1oè‡)¨>ƒž%ÿ.¤Á]% */ - $"8893 36E0 73BE DE25 456A 4678 B7C5 AD7A" /* ˆ“6às¾Þ%EjFx·Å­z */ - $"90C9 3950 942F 1459 C737 31EF 991F 241B" /* É9P”/.YÇ71ï™.$. */ - $"C294 7CFB 9461 B43A 8D37 8A6D BBC8 D7F6" /* ”|û”a´:7Šm»È×ö */ - $"A128 281D DF2B EAC5 A154 E6D9 FF53 984D" /* ¡((.ß+êÅ¡TæÙÿS˜M */ - $"550E 9C70 3F64 0E0E 0940 0AFC 5CC9 CF43" /* U.œp?d..Æ@Âü\ÉÏC */ - $"7184 3D0F 9FDE 08DF EC31 B86E 0D38 AF71" /* q„=.ŸÞ.ßì1¸n.8¯q */ - $"29F1 A21D 7847 7150 6DCA 9211 C778 F1A4" /* )ñ¢.xGqPmÊ’.Çxñ¤ */ - $"26AA B90D 1A39 DB92 4924 9249 2493 36D2" /* &ª¹..9Û’I$’I$“6Ò */ - $"4924 9249 2492 49FE 069C E7B9 CB0D 4E87" /* I$’I$’Iþ.œç¹Ë.N‡ */ - $"7D9E 9D29 FC64 8A6F 6185 2BD9 806F 760B" /* }ž)üdŠoa…+Ù€ov. */ - $"464D 4732 BD90 0E7D CABF 2B6F 2A78 8608" /* FMG2½.}Ê¿+o*x†. */ - $"DEF5 406F D401 3FD4 AE82 058D D6C8 B980" /* Þõ@oÔ.?Ô®‚.Öȹ€ */ - $"FECA D9B9 E7B6 3982 9FD3 81EA 544B 30BD" /* þÊÙ¹ç¶9‚ŸÓêTK0½ */ - $"7E56 FD78 66FD 5A41 D0BD 7714 5FAF 2A1E" /* ~VýxfýZAнw._¯*. */ - $"8FDA B705 EAAE F6F2 D69C 9812 7194 A56E" /* Ú·.ê®öòÖœ˜.q”¥n */ - $"DB55 BF75 C4E4 BDCD 9FC2 ACAD C428 829F" /* ÛU¿uÄä½ÍŸÂ¬­Ä(‚Ÿ */ - $"2409 3BB2 A894 8020 A8E7 FC16 F4FF 4E84" /* $Æ;²¨”€ ¨çü.ôÿN„ */ - $"C06E 889C 1C74 96AD 5420 F825 1A2B 015C" /* Ànˆœ.t–­T ø%.+.\ */ - $"6BC2 31EE 64AB 7A44 15E5 3458 8040 AEEF" /* kÂ1îd«zD.å4X€@®ï */ - $"F6BD 7D58 6478 8344 018F D3C6 2E33 69A4" /* ö½}XdxƒD.ÓÆ.3i¤ */ - $"E5E8 721A 5B2F 777B C0D8 0A05 2CE7 EEC8" /* åèr.[/w{ÀØÂ.,çîÈ */ - $"69EF 417B A960 D320 842E 84DE D442 AB2F" /* iïA{©`Ó „.„ÞÔB«/ */ - $"3B31 84FE DCFC A608 2E09 AA42 60F6 DB2E" /* ;1„þÜü¦..ƪB`öÛ. */ - $"DA5B C95D D10A 77BE AD48 B5FF 0557 A5AC" /* Ú[É]ÑÂw¾­Hµÿ.W¥¬ */ - $"327B F763 FDA1 32BF 7308 3EFC 0C2B 2D22" /* 2{÷cý¡2¿s.>ü.+-" */ - $"584A F9CA BFB4 78FF 6E67 42CC B491 492B" /* XJùÊ¿´xÿngBÌ´‘I+ */ - $"17C3 C746 9966 5780 BA6C 2798 472E 1CFF" /* .ÃÇF™fW€ºl'˜G..ÿ */ - $"6A32 69A0 86E0 44C6 1679 08F9 9928 48D9" /* j2i †àDÆ.y.ù™(HÙ */ - $"3DA0 CBA0 1E5E 2618 7162 51C9 DEF0 56A0" /* = Ë .^&.qbQÉÞðV  */ - $"1924 F126 CAAD F248 A1A4 2816 13A7 FE76" /* .$ñ&Ê­òH¡¤(..§þv */ - $"594E 647C 36C4 C014 CDC7 5C89 DBAB 9854" /* YNd|6ÄÀ.ÍÇ\‰Û«˜T */ - $"9094 FC96 5FED 7476 AA3C DF0B B47B C123" /* ”ü–_ítvª<ß.´{Á# */ - $"BE6D CD5A BA07 CC19 94FC DC37 B85C 0FD2" /* ¾mÍZº.Ì.”üÜ7¸\.Ò */ - $"9FED 62E6 F910 2F49 529E CE10 9738 D296" /* Ÿíbæù./IRžÎ.—8Ò– */ - $"A81C 1A0D 0FBF 7CAE DB93 40C0 3BC9 5A0C" /* ¨....¿|®Û“@À;ÉZ. */ - $"B23D FBD4 3863 C520 03A0 D966 5327 A0A2" /* ²=ûÔ8cÅ . ÙfS' ¢ */ - $"DD06 B7A1 942B 0A75 CB23 8664 4159 8647" /* Ý.·¡”+ÂuË#†dAY†G */ - $"2725 DAF6 693A 58D7 7A7D B34A 393D FE7A" /* '%Úöi:X×z}³J9=þz */ - $"C105 C374 193C 123C 130E 062C 8AB2 32FD" /* Á.Ãt.<.<...,в2ý */ - $"80E0 72E3 6AEA 2078 5D7C D3E5 4E20 D927" /* €àrãjê x]|ÓåN Ù' */ - $"157E 9DC5 1A29 2F0F C326 AFE3 3ACF C361" /* .~Å.)/.Ã&¯ã:ÏÃa */ - $"8C45 D79C EB27 7441 E4C7 8BFD 5832 DB93" /* ŒEלë'tAäÇ‹ýX2Û“ */ - $"78F5 B9DB BA4E 329E A262 C467 88DC C540" /* xõ¹ÛºN2ž¢bÄgˆÜÅ@ */ - $"78E0 4E55 34F3 806E 2DEA B371 E9B5 D8DF" /* xàNU4ó€n-ê³qéµØß */ - $"5EDA B5B9 1C48 5A11 ECAB E4F8 67B7 C76E" /* ^Úµ¹.HZ.ì«äøg·Çn */ - $"460F 8E6A C7BA B5F8 75F2 9105 1480 FD1A" /* F.ŽjǺµøuò‘..€ý. */ - $"80EB DB48 6115 AA6E 9AEA A07C 57B0 1A7F" /* €ëÛHa.ªnšê |W°.. */ - $"0CBF D5DE 47A7 89BE 4CAE 19FE 7B79 5839" /* .¿ÕÞG§‰¾L®.þ{yX9 */ - $"232D 495E 476C E267 D9D2 5257 F0E6 3EB5" /* #-I^GlâgÙÒRWðæ>µ */ - $"F140 AAAF 1E36 BA04 086A EEC5 3232 7958" /* ñ@ª¯.6º..jîÅ22yX */ - $"72E3 FCC3 9488 B44C 0C15 EF6B 811B CF97" /* rãüÔˆ´L..ïk.Ï— */ - $"0532 2B88 663D 8675 6050 AB94 A435 C0FC" /* .2+ˆf=†u`P«”¤5Àü */ - $"9E08 9873 92AF 6859 F7F5 64B0 0BA5 FA68" /* ž.˜s’¯hY÷õd°.¥úh */ - $"3557 0898 9E0D 5795 BF67 2866 5FB6 63C6" /* 5W.˜ž.W•¿g(f_¶cÆ */ - $"4F82 42CE A682 DC8D CB18 D4FE 6252 95D1" /* O‚BΦ‚ÜË.ÔþbR•Ñ */ - $"C85C 6B2C 0FC0 7C9D 5A80 F93B 8900 F93A" /* È\k,.À|Z€ù;‰.ù: */ - $"8EE6 7513 4AFA 1609 3CEE D5EB B420 A1CE" /* Žæu.Jú.Æ<îÕë´ ¡Î */ - $"318D 6F67 720A 7F84 4127 C0F2 9193 35CE" /* 1ogrÂ.„A'Àò‘“5Î */ - $"6D97 9682 5E5D B9FC 5A97 3B71 AB1F 64AA" /* m—–‚^]¹üZ—;q«.dª */ - $"3383 1F0E C0E9 26BE E6EB 24CD 499F F2BA" /* 3ƒ..Àé&¾æë$ÍIŸòº */ - $"997D E886 6FF8 C6B5 0607 1259 7715 7539" /* ™}è†oøÆµ...Yw.u9 */ - $"4B57 F7A9 56A7 A04B 031F 0786 6C02 E7BC" /* KW÷©V§ K...†l.ç¼ */ - $"8256 7F27 A39A B66D 6B95 6C11 CDE4 C580" /* ‚V.'£š¶mk•l.ÍäÅ€ */ - $"54DE 7E26 129C EB67 ABC8 455E 6CC3 453E" /* TÞ~&.œëg«ÈE^lÃE> */ - $"F9A8 3ED5 9B43 4EB8 384E 0F7B 28E0 16FF" /* ù¨>Õ›CN¸8N.{(à.ÿ */ - $"1342 18B1 31B6 EAEF 4C40 36F7 0CFF 6AFF" /* .B.±1¶êïL@6÷.ÿjÿ */ - $"8059 5D1C 275B 4F7D B392 4DB0 5E5D 4304" /* €Y].'[O}³’M°^]C. */ - $"4848 2A3A C93F BAD6 638D 315A 8771 1150" /* HH*:É?ºÖc1Z‡q.P */ - $"1D41 B6A7 C9B8 782E 19D8 F8E7 07EB ED20" /* .A¶§É¸x..Øøç.ëí */ - $"7D4E AFFF 5FD2 4FA0 2B48 B549 6A50 AD81" /* }N¯ÿ_ÒO +HµIjP­ */ - $"F11D 357F 7CB2 4B8B F28B 6C97 2C23 58A3" /* ñ.5.|²K‹ò‹l—,#X£ */ - $"92E8 2BFB 77F2 1ECE 7A2A C437 47E3 A833" /* ’è+ûwò.Îz*Ä7Gã¨3 */ - $"D60C C3CA 168A 85B8 620C 109C 4134 35BF" /* Ö.ÃÊ.Š…¸b..œA45¿ */ - $"ECCB 3629 944F AD29 444A C4B6 F019 F19B" /* ìË6)”O­)DJĶð.ñ› */ - $"4189 B1D3 8F28 65B9 85D8 C715 2E1A 267D" /* A‰±Ó(e¹…ØÇ...&} */ - $"A7DB 4C90 9829 BC86 E14C 9F44 757D 5436" /* §ÛL˜)¼†áLŸDu}T6 */ - $"9C38 979D 3654 9A63 E572 7864 E513 A083" /* œ8—6Tšcårxdå. ƒ */ - $"C943 97C5 A88B 23A2 4ECC E4F1 AEED F3EC" /* ÉC—Ũ‹#¢NÌäñ®íóì */ - $"C57D F254 B087 7E1F 81B3 59E6 E2A0 E5CB" /* Å}òT°‡~.³Yæâ åË */ - $"B710 EF71 0598 01BF 1400 3814 0759 EDA8" /* ·.ïq.˜.¿..8..Yí¨ */ - $"386C 3DF0 F1C5 CA93 612F C58D 71BA 6ED6" /* 8l=ðñÅÊ“a/ÅqºnÖ */ - $"FE35 90B4 9C10 A938 33B6 6987 E407 AE7B" /* þ5´œ.©83¶i‡ä.®{ */ - $"5B1A 8E0E BE53 1C94 D747 9303 2ED9 13FA" /* [.Ž.¾S.”×G“..Ù.ú */ - $"226C F38A 7134 3CF6 1923 B85F A254 0048" /* "lóŠq4<ö.#¸_¢T.H */ - $"A765 B678 FC9C 1E2C E183 FC80 CA83 9572" /* §e¶xüœ.,áƒü€Êƒ•r */ - $"E573 B224 9894 7316 C931 4A49 C28F 6E33" /* ås²$˜”s.É1JIÂn3 */ - $"B579 EE14 84BC 61CC 351B 41FB 7095 5F8C" /* µyî.„¼aÌ5.Aûp•_Œ */ - $"1B15 6DAF FF7F F8EA 5A11 5453 6ECA 1C02" /* ..m¯ÿ.øêZ.TSnÊ.. */ - $"C8A4 F40F AD00 7BC9 EDFD AC3A 28E4 546F" /* Ȥô.­.{Éíý¬:(äTo */ - $"1E36 BE45 897E F5D5 BE25 E84B 57C6 9080" /* .6¾E‰~õÕ¾%èKWÆ€ */ - $"B6C4 79B8 153B 110F D90B 215D 401C 0453" /* ¶Äy¸.;..Ù.!]@..S */ - $"8243 BF4A CDAE 9270 0658 462F E0C7 82A8" /* ‚C¿JÍ®’p.XF/àÇ‚¨ */ - $"E155 C547 D144 EBAD 74EC EAFF 7799 6D50" /* áUÅGÑDë­tìêÿw™mP */ - $"D0F9 6BA4 D8B3 0FBB B75B BC48 D5BA 8EAB" /* Ðùk¤Ø³.»·[¼HÕºŽ« */ - $"FF7F 3A2A 820F D817 FB8B 7590 ED4A 3D7B" /* ÿ.:*‚.Ø.û‹uíJ={ */ - $"DAF8 C05F BDCF 1B7C 8862 53A8 95D6 C0DF" /* ÚøÀ_½Ï.|ˆbS¨•ÖÀß */ - $"4069 36DA 0739 783C C432 1E0C 7DA6 2D70" /* @i6Ú.9x<Ä2..}¦-p */ - $"B33A C5AD 810A FBBD E9BB B776 6463 9FDC" /* ³:Å­Âû½é»·vdcŸÜ */ - $"B401 211D 81BA A9FA 8761 ED36 A1EF 439D" /* ´.!.º©ú‡aí6¡ïC */ - $"9880 BE88 E045 3068 F59F 7AD7 EFFF 7FFC" /* ˜€¾ˆàE0hõŸz×ïÿ.ü */ - $"5562 1F00 0818 22D6 5002 F762 7A20 0DC0" /* Ub...."ÖP.÷bz .À */ - $"3ADD FF5D 1851 D391 F011 0000 0000 0000" /* :Ýÿ].QÓ‘ð....... */ - $"0000 0000 0138 5715 ED61 F2C5 2C28 30C0" /* .....8W.íaòÅ,(0À */ - $"F669 9389 6153 3A95 E010 CCA0 2FEF B36F" /* öi“‰aS:•à.Ì /ï³o */ - $"9576 F8C0 F17B 27F6 F6FA 412C 70C7 CF14" /* •vøÀñ{'ööúA,pÇÏ. */ - $"7625 6871 7FE2 16C9 B6E9 5BF1 1A16 E2F0" /* v%hq.â.ɶé[ñ..âð */ - $"945D E51E CCF9 0970 E586 517C 475F 8856" /* ”]å.ÌùÆpå†Q|G_ˆV */ - $"CA0C 1DD9 E001 D7BC 1876 745C 8077 672D" /* Ê..Ùà.×¼.vt\€wg- */ - $"CECA FF0B 01D1 76FA 32F5 C047 26FB 451F" /* ÎÊÿ..Ñvú2õÀG&ûE. */ - $"5261 79B6 5990 79C9 4DF7 5B69 D548 E894" /* Ray¶YyÉM÷[iÕHè” */ - $"F249 0C84 D3F0 9555 7B99 EA27 FA38 184E" /* òI.„Óð•U{™ê'ú8.N */ - $"F863 AFA1 CE80 AEBC CB89 DD99 B8E2 0BEC" /* øc¯¡Î€®¼Ë‰Ý™¸â.ì */ - $"2F74 E534 3FF4 B50A 4B04 02B1 C178 B189" /* /tå4?ôµÂK..±Áx±‰ */ - $"D30F 77DC 8A15 8C9E AF87 1DCD D545 AC6B" /* Ó.wÜŠ.Œž¯‡.ÍÕE¬k */ - $"CAFB 832B E240 6752 8EF2 9BDF 76E8 621D" /* Êûƒ+â@gRŽò›ßvèb. */ - $"892E 384C 7BF0 4DE8 F910 7689 C3F0 E7E9" /* ‰.8L{ðMèù.v‰Ãðçé */ - $"E401 C781 F341 A84F 6922 E97B FC22 E259" /* ä.ÇóA¨Oi"é{ü"âY */ - $"6B26 9B03 14A7 DFA1 B7BD CBED 9539 5DE3" /* k&›..§ß¡·½Ëí•9]ã */ - $"2041 2F5F A37A 2F23 00FC 6424 D7F8 902E" /* A/_£z/#.üd$×ø. */ - $"7261 227B B4EC F4D1 9C18 22C3 8CA5 EFF8" /* ra"{´ìôÑœ."ÃŒ¥ïø */ - $"5701 6734 9110 8B4E D9E0 EE8F 7FEA 202F" /* W.g4‘.‹NÙàî.ê / */ - $"CFF7 5CC7 6107 0B22 B0BE A87B 32EF 0FA8" /* Ï÷\Ça.."°¾¨{2ï.¨ */ - $"3D2D 794E 556E 6089 ACBA D46C 17EC A9DC" /* =-yNUn`‰¬ºÔl.ì©Ü */ - $"0F4E D57D B8C8 EED1 F9D4 F96A 7BEE 3794" /* .NÕ}¸ÈîÑùÔùj{î7” */ - $"49DE 3AA7 EE2E 0B25 A47C 966A D90D C792" /* IÞ:§î..%¤|–jÙ.Ç’ */ - $"6304 7C05 C6EB A26D 83B8 3E0C AAF5 AFFE" /* c.|.Æë¢mƒ¸>.ªõ¯þ */ - $"FDC3 F7C4 C0A3 C3ED E8D2 0FAB AC58 1F56" /* ýÃ÷ÄÀ£ÃíèÒ.«¬X.V */ - $"FF40 F44B 4289 C6D7 CC17 A019 AD4A C889" /* ÿ@ôKB‰Æ×Ì. .­Jȉ */ - $"67AD 0673 32A0 B6BA 087E 7279 19C2 025F" /* g­.s2 ¶º.~ry.Â._ */ - $"DB0E 0E97 02D9 2268 5BCA CDE6 B94E 8D9B" /* Û..—.Ù"h[ÊÍæ¹N› */ - $"03EB D786 1698 2D8A 2ECD 432E D615 931F" /* .ë׆.˜-Š.ÍC.Ö.“. */ - $"452B 5D40 0950 5BBE A70F BD95 9F0E 8B95" /* E+]@ÆP[¾§.½•Ÿ.‹• */ - $"86B7 47DE 0757 BFE4 9775 3082 9D22 863A" /* †·GÞ.W¿ä—u0‚"†: */ - $"E404 B84C 5E88 8424 31DD 689A D234 88E2" /* ä.¸L^ˆ„$1ÝhšÒ4ˆâ */ - $"971F 9E59 429C 6C7E 3670 8F7C 8F86 A80D" /* —.žYBœl~6p|†¨. */ - $"848E E78B 5331 058E E444 FEC2 269A 7E23" /* „Žç‹S1.ŽäDþÂ&š~# */ - $"608D 0502 E075 F7A4 DACF 515F AA08 31C1" /* `..àu÷¤ÚÏQ_ª.1Á */ - $"1275 02C0 F37E F465 ADE9 1918 F1F0 0E4F" /* .u.Àó~ôe­é..ñð.O */ - $"E5A4 41A5 F655 22D9 946A 7FEC 0720 3D3A" /* å¤A¥öU"Ù”j.ì. =: */ - $"4961 05B2 F02D 51D2 1212 084B B3EA 5DC9" /* Ia.²ð-QÒ...K³ê]É */ - $"F986 5763 A2AC E2AC 1144 5DC3 E6A5 D092" /* ù†Wc¢¬â¬.D]Ãæ¥Ð’ */ - $"3654 3737 A598 21C2 34FF 097C B8B8 5934" /* 6T77¥˜!Â4ÿÆ|¸¸Y4 */ - $"C947 05C9 B4BA F52B 99FF 3AFE 6B15 2CAE" /* ÉG.É´ºõ+™ÿ:þk.,® */ - $"06CF D962 CCDE D937 D4AE B3D9 7E92 E2AF" /* .ÏÙbÌÞÙ7Ô®³Ù~’⯠*/ - $"8F4E 31CE 06E7 0AD8 71DB 4456 7101 E221" /* N1Î.çÂØqÛDVq.â! */ - $"74AC 1159 9EDF 9841 CFA3 E04F DECF 6FD3" /* t¬.Yžß˜AÏ£àOÞÏoÓ */ - $"90CC C22F 63B0 45CC C98B 3125 33C0 CFBA" /* ÌÂ/c°EÌÉ‹1%3ÀϺ */ - $"4CE7 3FAD F2E4 85E7 0C74 35A5 97E9 8672" /* Lç?­òä…ç.t5¥—é†r */ - $"9180 E059 EF0F C416 E25F 0E83 095A 36AA" /* ‘€àYï.Ä.â_.ƒÆZ6ª */ - $"8E74 F1F7 11A8 49DD C47E 5098 D576 DC41" /* Žtñ÷.¨IÝÄ~P˜ÕvÜA */ - $"D6FC 7C37 E307 A2DB 997E A046 C114 CF04" /* Öü|7ã.¢Û™~ FÁ.Ï. */ - $"FD8E 32D1 2AC6 3A81 C8B6 C680 6E60 7826" /* ýŽ2Ñ*Æ:ȶƀn`x& */ - $"9A40 9C80 BA1B 4DE8 854B 09D9 33B3 95BE" /* š@œ€º.Mè…KÆÙ3³•¾ */ - $"7CE5 CCA3 C463 5D1C 1F2B A160 E208 AA0A" /* |åÌ£Äc]..+¡`â.ªÂ */ - $"D00F 1933 5FB5 2705 4E9C 3733 0FD0 2AA0" /* Ð..3_µ'.Nœ73.Ð*  */ - $"D116 F240 05EA 53BB 5A5A 0A4B 3D9E FCB7" /* Ñ.ò@.êS»ZZÂK=žü· */ - $"FE35 1D0B 1E56 C4AA 9B6C 8CE6 10CA DAA5" /* þ5...VĪ›lŒæ.ÊÚ¥ */ - $"6DF1 6F74 C332 BD93 556E 89F5 A94A 232D" /* mñotÃ2½“Un‰õ©J#- */ - $"E9EF C950 666C 7D3E D1BA C98F 4489 3C5D" /* éïÉPfl}>ѺÉD‰<] */ - $"F7FC 88D4 C90E EE9D 7691 C976 2CFE 6BA0" /* ÷üˆÔÉ.îv‘Év,þk  */ - $"B53E 5C59 749E FEBC 4AB4 490C A3B6 5187" /* µ>\Ytžþ¼J´I.£¶Q‡ */ - $"4A10 1076 6348 AEC1 054B 0A98 9196 29C3" /* J..vcH®Á.K˜‘–)à */ - $"F995 50E4 E003 F099 9495 7ECC 1C78 C536" /* ù•Päà.ð™”•~Ì.xÅ6 */ - $"AA8D 7305 BE7F FF72 99F7 25ED 4C38 0896" /* ªs.¾.ÿr™÷%íL8.– */ - $"A1BE F2D4 016E B744 CBB7 9CEE 1C88 5E3D" /* ¡¾òÔ.n·DË·œî.ˆ^= */ - $"1B9E E3CB 29D2 AAA7 C3F6 41F4 B6C0 5861" /* .žãË)Òª§ÃöAô¶ÀXa */ - $"93D3 4773 858E 3470 E670 4F94 E206 FBA3" /* “ÓGs…Ž4pæpO”â.û£ */ - $"7050 2A3D 6DC0 004E 32D7 6043 4E5E C44F" /* pP*=mÀ.N2×`CN^ÄO */ - $"284A 3214 97B7 19DE 41C4 6204 56CB 1695" /* (J2.—·.ÞAÄb.VË.• */ - $"BAD8 C308 0FFE BEB7 FE14 C6AC CEE8 5022" /* ºØÃ..þ¾·þ.ƬÎèP" */ - $"C27A 2CCA 4714 4C52 3975 615D A1C8 62BF" /* Âz,ÊG.LR9ua]¡Èb¿ */ - $"C477 FF7E 2637 3B89 8C43 6E09 285B 2D1A" /* Äwÿ~&7;‰ŒCnÆ([-. */ - $"8E9E 4110 CE7B E30A E21C A140 02C8 D0AD" /* ŽžA.Î{ãÂâ.¡@.ÈЭ */ - $"630B 5488 7CE7 B884 393A 6FDD 5A68 7FB9" /* c.Tˆ|縄9:oÝZh.¹ */ - $"60EC C73B 143E 3F61 3E31 1A3E 8438 7944" /* `ìÇ;.>?a>1.>„8yD */ - $"B652 14AE 63CA 803C 9B67 C6FE 2F5D 4CD0" /* ¶R.®cÊ€<›gÆþ/]LÐ */ - $"3A63 1328 8809 A4AB B4A1 8664 FE90 F03E" /* :c.(ˆÆ¤«´¡†dþð> */ - $"18E2 7982 7DDC A444 1306 4546 61B2 A710" /* .ây‚}ܤD..EFa²§. */ - $"CCED 529C 92CB D547 22F5 0DB0 B10F 8450" /* ÌíRœ’ËÕG"õ.°±.„P */ - $"E5AC 253A 6937 BFBD D0C6 8AED 14C7 787E" /* å¬%:i7¿½ÐÆŠí.Çx~ */ - $"21E7 860D 8567 633D A9E6 0466 93A5 6789" /* !ç†.…gc=©æ.f“¥g‰ */ - $"D643 2EEE 7542 7B02 086A 83C4 AD3C 785C" /* ÖC.îuB{..jƒÄ­úE¹ä¨.ßߎÕÿ */ - $"750C 2E52 4F3F 5960 B3B7 3DEB CFE3 4EC3" /* u..RO?Y`³·=ëÏãNà */ - $"676F D76A F8C3 67EB 383B 042A C000 1CF5" /* go×jøÃgë8;.*À..õ */ - $"FB57 51DF 4E0F 9709 4A58 F371 8A53 79CD" /* ûWQßN.—ÆJXóqŠSyÍ */ - $"B935 29C8 5953 BBFB B216 24F0 FF5C F1BE" /* ¹5)ÈYS»û².$ðÿ\ñ¾ */ - $"1649 C9BE 754A CC45 62C3 44A2 3E12 A872" /* .IɾuJÌEbÃD¢>.¨r */ - $"736B 05DD F77C C7C6 F33D 8224 147E D163" /* sk.Ý÷|ÇÆó=‚$.~Ñc */ - $"02B4 0BC6 297A FA75 03A7 BFDD 709A A878" /* .´.Æ)zúu.§¿Ýpš¨x */ - $"734A 7236 791A BFF6 9F21 CC67 268D 160D" /* sJr6y.¿öŸ!Ìg&.. */ - $"A6D0 7988 72CF 6475 146C 81EB 8249 518A" /* ¦ÐyˆrÏdu.lë‚IQŠ */ - $"49B7 0389 FDB6 9CEB DCA2 41ED 085D 4E85" /* I·.‰ý¶œëÜ¢Aí.]N… */ - $"03E4 3F4E D8CF 25E1 658D 38F6 8F88 A499" /* .ä?NØÏ%áe8öˆ¤™ */ - $"B64A DD79 FDF2 39FB 5CEC F29B 714A 733B" /* ¶JÝyýò9û\ìò›qJs; */ - $"76E4 94E5 F567 3A71 28F0 13A6 7A74 CD91" /* vä”åõg:q(ð.¦ztÍ‘ */ - $"5804 065E D3C7 09B7 ED19 51E5 0913 4436" /* X..^ÓÇÆ·í.QåÆ.D6 */ - $"9791 BB58 10F3 7183 5DB6 4874 65D2 AAD2" /* —‘»X.óqƒ]¶HteÒªÒ */ - $"DBA2 C761 A70F 3EEE 9256 2EF0 945D E52D" /* Û¢Ça§.>î’V.ð”]å- */ - $"34CF 10DF B2AF 8E14 A5A4 E24F 0051 F63E" /* 4Ï.ß²¯Ž.¥¤âO.Qö> */ - $"F11C 5DAC 6D8D DEDD A585 96FC A2AB A5FF" /* ñ.]¬mÞÝ¥…–ü¢«¥ÿ */ - $"5298 6349 DB41 9276 C1C6 F1E2 9ABF 822B" /* R˜cIÛA’vÁÆñâš¿‚+ */ - $"346F 8679 726C 666A 9638 246A EABE 54A9" /* 4o†yrlfj–8$jê¾T© */ - $"49DD F22A BC62 5867 51F2 FDBD B33B 40E0" /* IÝò*¼bXgQòý½³;@à */ - $"220F 075D 031C EAAE 3CDE 67CF 2269 E26D" /* "..]..ê®<ÞgÏ"iâm */ - $"BEF3 1873 E610 D43E 8F03 A14F F04F 980B" /* ¾ó.sæ.Ô>.¡OðO˜. */ - $"69FF 1E4A 1925 DDE6 B473 84B5 6F53 75DD" /* iÿ.J.%Ýæ´s„µoSuÝ */ - $"CF71 C4C0 72DC 5403 7E7B 1A9B 6F16 BA87" /* ÏqÄÀrÜT.~{.›o.º‡ */ - $"A44D D4A2 8029 E15A 8C17 BE55 A30B 87B3" /* ¤MÔ¢€)áZŒ.¾U£.‡³ */ - $"DC5B CED9 2E4C A8F3 939B 6F82 8885 9BD5" /* Ü[ÎÙ.L¨ó“›o‚ˆ…›Õ */ - $"905B 6EE2 E3C9 D45E DE91 DD46 7EDD 23BB" /* [nâãÉÔ^Þ‘ÝF~Ý#» */ - $"6852 2BD3 3D31 2755 2D1B 7431 35EB 6CBD" /* hR+Ó=1'U-.t15ël½ */ - $"638C 9E5D F0EB 9AE0 49BC D327 7536 BCB3" /* cŒž]ðëšàI¼Ó'u6¼³ */ - $"65F1 992B E073 9D25 980D A244 7F9E 749F" /* eñ™+às%˜.¢D.žtŸ */ - $"53BD D08A C5EF 64A2 D672 7A55 9146 5CAD" /* S½ÐŠÅïd¢ÖrzU‘F\­ */ - $"7839 E1B6 7543 4556 146E C347 33E3 2798" /* x9á¶uCEV.nÃG3ã'˜ */ - $"4752 6F78 AAA5 AE5E 7B02 CD92 D5F1 FD30" /* GRoxª¥®^{.Í’Õñý0 */ - $"F78A 7BFB 03AB CF34 58BF 3810 B8A7 CDAB" /* ÷Š{û.«Ï4X¿8.¸§Í« */ - $"A573 658E 260A 7C50 000F 00AC D13F 618E" /* ¥seŽ&Â|P...¬Ñ?aŽ */ - $"A241 9458 3945 9D59 3F9B 13C5 04CC 600E" /* ¢A”X9EY?›.Å.Ì`. */ - $"FC51 8C8D FBA0 4150 5832 4539 730B 4631" /* üQŒû APX2E9s.F1 */ - $"0598 EE14 817C B560 97C5 B953 64D4 980D" /* .˜î.|µ`—ŹSdÔ˜. */ - $"C379 6FFF 3E63 6746 7BE8 D3AB 5215 B47F" /* Ãyoÿ>cgF{èÓ«R.´. */ - $"3CAE 42E4 D4BF B7BF 6580 3319 6A71 C2E9" /* <®BäÔ¿·¿e€3.jqÂé */ - $"48AA 2C5E 9D78 B9C3 F8DA B858 D5AB 99F4" /* Hª,^x¹ÃøÚ¸XÕ«™ô */ - $"B04F EAAC D0DE 2302 F874 7E64 A69B 89CE" /* °Oê¬ÐÞ#.øt~d¦›‰Î */ - $"AEAB A73F F815 0D06 B24E 39EC D8E9 EFB7" /* ®«§?ø...²N9ìØéï· */ - $"ED32 55A0 8E21 B52A E55C 17AE E07B 42F4" /* í2U Ž!µ*å\.®à{Bô */ - $"D451 CB7C E941 1578 3EE3 9565 087E 9A05" /* ÔQË|éA.x>ã•e.~š. */ - $"B5FC 403A AAA2 25CE 5AC1 B658 1EE9 9A53" /* µü@:ª¢%ÎZÁ¶X.éšS */ - $"4000 51DF 95E8 C605 97AC C7E1 A8B1 F86C" /* @.Qß•èÆ.—¬Çᨱøl */ - $"7C3F 0BCC E410 8FA7 78C0 7964 BDD0 E341" /* |?.Ìä.§xÀyd½ÐãA */ - $"5DC5 D977 EF99 460C FC48 A51A B5CD DE47" /* ]ÅÙwï™F.üH¥.µÍÞG */ - $"F9E2 194D 1F2D B2B6 556B 0F68 BD1B 5BEA" /* ùâ.M.-²¶Uk.h½.[ê */ - $"9FDD 1280 92A3 EF96 132C 22F6 CA8A 1C20" /* ŸÝ.€’£ï–.,"öÊŠ. */ - $"54DA F163 6119 BC02 7AE6 10CA A16B 993A" /* TÚñca.¼.zæ.Ê¡k™: */ - $"E22B CC58 D181 40E6 EA99 0897 5166 4C1F" /* â+ÌXÑ@æê™.—QfL. */ - $"6D58 D092 5119 1AF5 0C2B 1DC6 029D F0E8" /* mXÐ’Q..õ.+.Æ.ðè */ - $"1F6F 9F5C 17D8 68A0 F600 5C68 5C16 4269" /* .oŸ\.Øh ö.\h\.Bi */ - $"F5A9 4D97 32DE 3A9C 6609 86C2 1D0F BA56" /* õ©M—2Þ:œfƆÂ..ºV */ - $"3C8C 1046 E0DC 2ECB 9BDB D61E 6955 CE38" /* <Œ.FàÜ.Ë›ÛÖ.iUÎ8 */ - $"DB97 859B 9E73 78BF FDEB ED74 0C4E 4203" /* Û—…›žsx¿ýëít.NB. */ - $"431D 69C4 635D D1EA 1A9A 6462 BE48 DDB9" /* C.iÄc]Ñê.šdb¾Hݹ */ - $"6E63 C4D8 8886 51CB 19E6 A7C9 5941 8443" /* ncÄØˆ†QË.æ§ÉYA„C */ - $"57E5 8C3B B907 FF17 4B41 08DA 7AFC 1B8B" /* WåŒ;¹.ÿ.KA.Úzü.‹ */ - $"9B05 622E 1F81 91D8 2C60 9C6A 3B23 608B" /* ›.b..‘Ø,`œj;#`‹ */ - $"F2EC E527 70F9 D963 D302 D7AC 18E2 2692" /* òìå'pùÙcÓ.׬.â&’ */ - $"AE0C D915 7E30 5B09 305C 8F5D 1346 3FF2" /* ®.Ù.~0[Æ0\].F?ò */ - $"8635 ECEC 1CB7 962D 0846 3FA9 5920 C1B0" /* †5ìì.·–-.F?©Y Á° */ - $"5582 FF3A 24E0 FAAE 8FAE 3843 DFCF B74F" /* U‚ÿ:$àú®®8CßÏ·O */ - $"CAEC 5602 D1C5 1760 5ECD 92C8 1DD1 4ABE" /* ÊìV.ÑÅ.`^Í’È.ÑJ¾ */ - $"2336 8A90 E444 6753 D3E0 0F02 8E99 7393" /* #6ŠäDgSÓà..Ž™s“ */ - $"8B26 6C9F BFB4 64DE 7867 73F7 10F0 477A" /* ‹&lŸ¿´dÞxgs÷.ðGz */ - $"8383 ADA5 49C3 722B 1FD7 0BB5 4118 4714" /* ƒƒ­¥IÃr+.×.µA.G. */ - $"D5F9 6C20 CDD0 8151 EAB4 457F FF4E 314C" /* Õùl ÍÐQê´E.ÿN1L */ - $"6E7F 04DB DE0C 611B 62AC 2A4E 869C 06FB" /* n..ÛÞ.a.b¬*N†œ.û */ - $"DB81 F238 C4FC 149E 8176 3F0C 4B83 0DFF" /* Ûò8Äü.žv?.Kƒ.ÿ */ - $"7FB4 A5F5 80C7 E4F0 47AD 8D3F 5426 B12A" /* .´¥õ€ÇäðG­?T&±* */ - $"8678 11E1 A0EF 5439 31D8 E97E 3AE9 E4DD" /* †x.á ïT91Øé~:éäÝ */ - $"3DB7 4A94 7FFF 7135 0C02 ACE2 70F5 626B" /* =·J”.ÿq5..¬âpõbk */ - $"271A 4401 DF00 AE70 E43B D3F8 75AD 0DAB" /* '.D.ß.®pä;Óøu­.« */ - $"794A C0C7 928F 8621 BE61 DA60 A89F 8E95" /* yJÀÇ’†!¾aÚ`¨ŸŽ• */ - $"64E1 4B82 9CA5 D1CB 26FA 3B49 2FDF 8007" /* dáK‚œ¥ÑË&ú;I/߀. */ - $"60B1 1C23 B192 973E 87DD 9323 E697 CA76" /* `±.#±’—>‡Ý“#æ—Êv */ - $"03D6 B09A 33FA 5CEC 856D 1D12 5249 2492" /* .Ö°š3ú\ì…m..RI$’ */ - $"4924 9249 2492 4924 9231 8B0A C6C2 C882" /* I$’I$’I$’1‹ÂÆÂÈ‚ */ - $"FC66 E59C E646 38B0 B26F A097 FEA2 30FE" /* üfåœæF8°²o —þ¢0þ */ - $"F5B9 90DC 3FEF 3116 73C4 7B20 6C09 EA40" /* õ¹Ü?ï1.sÄ{ lÆê@ */ - $"AB90 6257 8BAD 951C 002E 138D 7274 121D" /* «bW‹­•....rt.. */ - $"B91E 66F5 6038 8257 FD9A 18C9 0155 522C" /* ¹.fõ`8‚Wýš.É.UR, */ - $"D6CC 0F6A 6A4A 09F3 0C4A B702 47FF 7FFC" /* ÖÌ.jjJÆó.J·.Gÿ.ü */ - $"B504 0034 6682 CE19 CA7C 50BE F8B0 9DCB" /* µ..4f‚Î.Ê|P¾ø°Ë */ - $"0092 4924 9248 F298 B4D2 A612 6CEE 878F" /* .’I$’Hò˜´Ò¦.lî‡ */ - $"FF7F FF5F 8F59 B3E0 FE9F A74E 506D C924" /* ÿ.ÿ_Y³àþŸ§NPmÉ$ */ - $"9249 2492 4924 9249 2492 4924 924D 57A2" /* ’I$’I$’I$’I$’MW¢ */ - $"2CC8 426C 393A 96E4 50FB 0ACE 8874 7A86" /* ,ÈBl9:–äPûÂΈtz† */ - $"2B20 84D4 0F34 1532 DFF0 D633 0231 0F65" /* + „Ô.4.2ßðÖ3.1.e */ - $"91D1 8E19 A917 CD2A 8D35 89BE F64E D1A8" /* ‘ÑŽ.©.Í*5‰¾öNѨ */ - $"926C AE06 3A49 80F9 C1FE 0E81 52D8 5A8C" /* ’l®.:I€ùÁþ.RØZŒ */ - $"7A00 5EF2 9F04 3659 74EC D695 94B6 5B90" /* z.^òŸ.6YtìÖ•”¶[ */ - $"89C0 E661 DFC4 5E69 965B 4D1D 4B76 7C0E" /* ‰ÀæaßÄ^i–[M.Kv|. */ - $"89D2 C1E8 B1EF CF9E 5E96 3977 AEA6 532B" /* ‰ÒÁè±ïÏž^–9w®¦S+ */ - $"68B1 BD73 2BE6 BB5B 766E FA91 5C36 628C" /* h±½s+æ»[vnú‘\6bŒ */ - $"F45F FEEA C7DF 49F0 278F F459 E9B6 BDAC" /* ô_þêÇßIð'ôYé¶½¬ */ - $"1A28 F485 45C5 2761 DC37 C72A 8A17 2D08" /* .(ô…EÅ'aÜ7Ç*Š.-. */ - $"5130 E9D5 E1BD 2D59 07B5 2290 00F9 F737" /* Q0éÕá½-Y.µ".ù÷7 */ - $"C1F4 5C78 1058 C4C6 13AB AE5C 45DE ACB4" /* Áô\x.XÄÆ.«®\EÞ¬´ */ - $"7DC9 03C4 0F82 7850 6F9E 5FD3 9223 36FE" /* }É.Ä.‚xPož_Ó’#6þ */ - $"8A1D 1D99 FBB3 646B 206B FC7E 668E 4730" /* Š..™û³dk kü~fŽG0 */ - $"7C8C 79D9 A37A 427B 1E91 E7A1 DED2 E57D" /* |ŒyÙ£zB{.‘ç¡ÞÒå} */ - $"E167 967A 8B9F A6C0 A36F 68E8 D03C 84C6" /* ág–z‹Ÿ¦À£ohèÐ<„Æ */ - $"E952 3CAF 039F 18CD 236C 4AE1 FB74 D7F6" /* éR<¯.Ÿ.Í#lJáût×ö */ - $"DFBF B7A4 AFDB D27E 2FB7 7BBF 86F0 DF6F" /* ß¿·¤¯ÛÒ~/·{¿†ðßo */ - $"4F9F C3A7 EC7F 0D0F BEDB 1EFB 77AA FB77" /* OŸÃ§ì...¾Û.ûwªûw */ - $"2CED 1CDE F39E A2F3 567D 91E9 4703 B8A2" /* ,í.Þóž¢óV}‘éG.¸¢ */ - $"5006 2494 6271 81F3 3B95 0B89 EDD5 7FE8" /* P.$”bqó;•.‰íÕ.è */ - $"B864 3D84 75CD 7478 A5D6 28C8 D483 39EF" /* ¸d=„uÍtx¥Ö(ÈÔƒ9ï */ - $"86CA 5763 87CA 97CF A9D4 AFA9 0450 6744" /* †ÊWc‡Ê—ϩԯ©.PgD */ - $"16E3 8C0B 0015 88DA 5244 1AB2 9790 35B0" /* .ãŒ...ˆÚRD.²—5° */ - $"0489 B911 D871 2BB4 6576 C185 22B7 1F86" /* .‰¹.Øq+´evÁ…"·.† */ - $"230A 3CD3 ECB5 20A6 23BA A068 A53E 8EAD" /* #Â<Óìµ ¦#º h¥>Ž­ */ - $"3793 46B5 BA07 96A8 DF28 6A66 CE05 73CE" /* 7“Fµº.–¨ß(jfÎ.sÎ */ - $"1938 F9A6 9CBC 0D7F F193 E0D5 09CC 3426" /* .8ù¦œ¼..ñ“àÕÆÌ4& */ - $"4BB1 52B9 F337 0537 FA01 B010 5471 B015" /* K±R¹ó7.7ú.°.Tq°. */ - $"754C A1A6 E071 800C 1A26 243D 172B 1497" /* uL¡¦àq€..&$=.+.— */ - $"E5DF 1EB1 6A6C 6761 3BA6 52C0 C0B4 69BD" /* åß.±jlga;¦RÀÀ´i½ */ - $"E6B4 275E EB6E 42BF D693 8928 15A4 9DB2" /* æ´'^ënB¿Ö“‰(.¤² */ - $"D8FA E273 6C04 CBB5 06A9 8096 5E97 5D11" /* Øúâsl.˵.©€–^—]. */ - $"0B1B 8E93 BDCC 1AE8 4CBA 9413 A729 F6A7" /* ..Ž“½Ì.èLº”.§)ö§ */ - $"F24D 467F 0316 BF60 F777 C2E3 7FAA DC07" /* òMF...¿`÷wÂã.ªÜ. */ - $"148F 5C26 91C3 20B8 F3A0 9088 F893 6D47" /* .\&‘à ¸ó ˆø“mG */ - $"7AC1 A0D9 5483 8281 5B98 28AE 9EAB 94F0" /* zÁ ÙTƒ‚[˜(®ž«”ð */ - $"9B68 08E3 E3DA 7E3A AA84 9EED F083 117F" /* ›h.ããÚ~:ª„žíðƒ.. */ - $"FE75 781E E394 EEEC F9AC 21D6 FF5E DD57" /* þux.ã”îìù¬!Öÿ^ÝW */ - $"96CF A7DF 3C0D 7E2F F9E7 F212 83EE E629" /* –ϧß<.~/ùçò.ƒîæ) */ - $"9543 AA61 C10A 4B12 1DD8 6835 405A D739" /* •CªaÁÂK..Øh5@Z×9 */ - $"DBD7 1628 2816 909D 1DEB 81F2 16AF 8953" /* Û×.((..ëò.¯‰S */ - $"9239 B79D A64A 3275 E506 BFD3 0198 776C" /* ’9·¦J2uå.¿Ó.˜wl */ - $"F4C2 39CD 4CF8 2482 D781 526A 7D82 0B83" /* ôÂ9ÍLø$‚×Rj}‚.ƒ */ - $"120C B2AB 1FC0 2DAA 4A72 ACD9 B4C7 926A" /* ..²«.À-ªJr¬Ù´Ç’j */ - $"CE69 46FA C67E 904D 12D4 D6EC 2F77 AC43" /* ÎiFúÆ~M.ÔÖì/w¬C */ - $"0A82 A09A 8FAC 59F0 D192 4F8F E6D1 A8B3" /* ‚ š¬YðÑ’OæÑ¨³ */ - $"26FD EAD1 7727 E253 F826 580D 8786 8EAD" /* &ýêÑw'âSø&X.‡†Ž­ */ - $"4561 33FC 6C93 72E4 3F53 3E92 5E78 9597" /* Ea3ül“rä?S>’^x•— */ - $"895F 61B9 D382 514D 839E D4E8 A40B 6F99" /* ‰_a¹Ó‚QMƒžÔè¤.o™ */ - $"0BEC 889F F976 6F24 AEAC 2A18 479B 9CD0" /* .숟ùvo$®¬*.G›œÐ */ - $"A58D E4A8 4940 D7A9 26A7 8649 C387 22EB" /* ¥ä¨I@ש&§†IÇ"ë */ - $"10F3 AB7F 805D 57F4 6918 508A 429D FC32" /* .ó«.€]Wôi.PŠBü2 */ - $"0E49 3480 E5A6 0267 54A6 D677 422D 1B62" /* .I4€å¦.gT¦ÖwB-.b */ - $"4DFB C3A4 2E01 8C0D 029D D238 87B0 230E" /* Mûä..Œ..Ò8‡°#. */ - $"AB6E AEFD 64F3 F7AE 7BD7 DA13 2BCC DCFB" /* «n®ýdó÷®{×Ú.+ÌÜû */ - $"13EC E7EE A36F 86C6 A2D8 DD70 6174 04FA" /* .ìçî£o†Æ¢ØÝpat.ú */ - $"B7F7 A3BF 9C4C F99C C177 9B27 9148 3998" /* ·÷£¿œLùœÁw›'‘H9˜ */ - $"013A 4B0C E3A5 6905 6ADC 739C 3586 7009" /* .:K.ã¥i.jÜsœ5†pÆ */ - $"38DA 0496 C25E DFB2 F2AB 34C0 F138 4F81" /* 8Ú.–Â^ß²ò«4Àñ8O */ - $"7240 2774 4588 B153 267B DBBE DFDE AEAD" /* r@'tEˆ±S&{Û¾ßÞ®­ */ - $"1D90 BA71 2B83 D108 1CDB 8B36 7837 8AAA" /* .ºq+ƒÑ..Û‹6x7Šª */ - $"299C 2916 D66C CC2E 2FCF B0E3 228A 88C1" /* )œ).ÖlÌ./ϰã"ŠˆÁ */ - $"568F 12D8 D599 AB3F 29DE 1FA6 9336 132F" /* V.ØÕ™«?)Þ.¦“6./ */ - $"521E 8EB9 9BD4 30E4 362E 349E 209A 6EB6" /* R.޹›Ô0ä6.4ž šn¶ */ - $"D5CC 985B E51E 8A74 B9A0 1718 2753 A1E0" /* Õ̘[å.Št¹ ..'S¡à */ - $"BDCC 77CC 5697 641D B916 AB08 C12F 102F" /* ½ÌwÌV—d.¹.«.Á/./ */ - $"59A0 4283 27A8 9F9E 1980 381A 4785 E896" /* Y Bƒ'¨Ÿž.€8.G…è– */ - $"B9C8 A383 0C1E EBDE A8DC D1A0 00FB 61C2" /* ¹È£ƒ..ëÞ¨ÜÑ .ûa */ - $"70F1 84C8 8368 337E DA6C 7A1A 014F 77C3" /* pñ„ȃh3~Úlz..Owà */ - $"EFFF 0CCC F88E E539 B4FF 3187 54EA 4B2E" /* ïÿ.ÌøŽå9´ÿ1‡TêK. */ - $"27BF 1121 0DCD 456F 5AB4 E115 9E30 8B1C" /* '¿.!.ÍEoZ´á.ž0‹. */ - $"FCFB 8634 E35F E3F0 2A65 8EC0 775F C0EE" /* üû†4ã_ãð*eŽÀw_Àî */ - $"37B2 6C5A AA44 2B7C 889A 5854 FBB4 DC29" /* 7²lZªD+|ˆšXTû´Ü) */ - $"E875 94AB D4F4 19C2 5989 594D 6B55 CB5E" /* èu”«Ôô.ÂY‰YMkUË^ */ - $"012C A350 BF1C 322E 6DC6 6CFB 052A B48D" /* .,£P¿.2.mÆlû.*´ */ - $"2FFE D908 D443 2FB2 706F 13A8 B2BF 2E97" /* /þÙ.ÔC/²po.¨²¿.— */ - $"D7EF 6FE2 7D0B 4D6C 89E6 24BB D547 A266" /* ×ïoâ}.Ml‰æ$»ÕG¢f */ - $"3B92 FF58 BE83 0D95 D587 B51D B83A B360" /* ;’ÿX¾ƒ.•Õ‡µ.¸:³` */ - $"DF16 A55F 5D17 5ED7 C7D7 88FD D24B 89C4" /* ß.¥_].^×Ç׈ýÒK‰Ä */ - $"17FF 1CE0 2FC5 E332 79FF 6532 D599 2C36" /* .ÿ.à/Åã2yÿe2Õ™,6 */ - $"7360 56F2 6017 1165 F8CD AC09 6435 530F" /* s`Vò`..eøÍ¬Æd5S. */ - $"8E48 0152 06AE 7F31 9D5A A12E EC4A 26BD" /* ŽH.R.®.1Z¡.ìJ&½ */ - $"1D28 2D81 EBF2 625A 03C8 8240 FAB0 343C" /* .(-ëòbZ.È‚@ú°4< */ - $"3460 4650 A369 CBAF D533 EC55 DB4D 46F7" /* 4`FP£i˯Õ3ìUÛMF÷ */ - $"45C4 1B75 581D CC26 9E29 8B0F C424 5512" /* EÄ.uX.Ì&ž)‹.Ä$U. */ - $"9417 F11C 77C1 F3FD 57B1 487F D8F8 A086" /* ”.ñ.wÁóýW±H.Øø † */ - $"E60E 2356 E9E1 F3EC 7F31 52E1 E3DB C75E" /* æ.#Véáóì.1RáãÛÇ^ */ - $"7A4B 2D19 8F06 AB86 5A88 F23D C312 C565" /* zK-..«†Zˆò=Ã.Åe */ - $"1AF0 4B35 F0D9 D100 6634 A377 90C1 A69A" /* .ðK5ðÙÑ.f4£wÁ¦š */ - $"1C64 495A BEF2 5A5C 1714 0504 2639 71A2" /* .dIZ¾òZ\....&9q¢ */ - $"5989 FF6E F887 5ADD 9843 A719 60CC 5185" /* Y‰ÿnø‡ZݘC§.`ÌQ… */ - $"B308 2551 F63A 7543 2A92 3949 FCC5 5023" /* ³.%Qö:uC*’9IüÅP# */ - $"5A92 FE32 A26E FF00 9CFC 0CFF 4A08 60C7" /* Z’þ2¢nÿ.œü.ÿJ.`Ç */ - $"F76C 480A E682 3C58 66B8 7045 CDBA 616C" /* ÷lHÂæ‚¯.Ñáùõ¯Æ */ - $"6428 F517 1201 C3F1 1B80 0DD2 DCD9 CA31" /* d(õ...Ãñ.€.ÒÜÙÊ1 */ - $"B022 DAFB D990 A8B1 6FF1 004E 4847 E5C8" /* °"ÚûÙ¨±oñ.NHGåÈ */ - $"0580 DA86 704F E2FF 7E83 5167 5C3F ADB2" /* .€Ú†pOâÿ~ƒQg\?­² */ - $"4C44 A9D9 DB84 C360 68ED 1BF0 068E 04BF" /* LD©ÙÛ„Ã`hí.ð.Ž.¿ */ - $"D16E B55F 0701 3739 42FA E15C 0EA2 BF81" /* Ñnµ_..79Búá\.¢¿ */ - $"31C1 F1A3 A766 CAB8 C82E C96B 4868 D491" /* 1Áñ£§fʸÈ.ÉkHhÔ‘ */ - $"5ACB 6EED 4027 0C73 AACA 730C ECA6 DE42" /* ZËní@'.sªÊs.ì¦ÞB */ - $"38DA E07E CE64 BC49 7FDD FCCB 07B3 45BF" /* 8Úà~Îd¼I.ÝüË.³E¿ */ - $"B9DC FF13 039F D40E 43BB ACE4 B8F8 31F5" /* ¹Üÿ..ŸÔ.C»¬ä¸ø1õ */ - $"6743 9390 0B87 C9B1 194A 0200 FB53 29CD" /* gC“.‡É±.J..ûS)Í */ - $"3141 15F5 3C38 9F70 2B7E 0E46 B5A7 5C94" /* 1A.õ<8Ÿp+~.Fµ§\” */ - $"AED4 E415 1639 7B49 20DA 1541 9742 A3A6" /* ®Ôä..9{I Ú.A—B£¦ */ - $"B873 4C7C 9112 1322 7D7F 5F6E 14AB 57FC" /* ¸sL|‘.."}._n.«Wü */ - $"A01D 94EC BC05 F45B C4C4 1FC3 D61B F5D3" /*  .”ì¼.ô[ÄÄ.ÃÖ.õÓ */ - $"0E62 9C2F CAE6 C609 B0D2 803B AF5F CC7F" /* .bœ/ÊæÆÆ°Ò€;¯_Ì. */ - $"4085 5B49 F81B 0AB3 DB0C 27C1 7A95 45D6" /* @…[Iø.³Û.'Áz•EÖ */ - $"CDDD 4F06 1A20 A7FE 22F6 EA13 EB6E C723" /* ÍÝO.. §þ"öê.ënÇ# */ - $"87B9 A058 CAF9 9F59 C9C9 6AAD 8358 5147" /* ‡¹ XÊùŸYÉÉj­ƒXQG */ - $"2B3E 2FD8 506F A48B 305C 97C7 5D25 5C75" /* +>/ØPo¤‹0\—Ç]%\u */ - $"C5B1 E7B4 CBC7 C76A 2FE5 1669 302C 2318" /* űç´ËÇÇj/å.i0,#. */ - $"CB1D BB38 5B47 3563 F041 0F00 C23A B1E9" /* Ë.»8[G5cðA..Â:±é */ - $"1972 D9C9 2F2F 4013 F8EF A6CA 7E8E 705C" /* .rÙÉ//@.øï¦Ê~Žp\ */ - $"0CB6 1301 5ED4 25E6 F7D9 999D AB8F 4CAC" /* .¶..^Ô%æ÷Ù™«L¬ */ - $"6FF2 04C8 8307 016C 6E46 645B 5488 79C0" /* oò.ȃ..lnFd[TˆyÀ */ - $"C0E5 8A2A 46EB DB4C 65A0 27FC 6230 781C" /* ÀåŠ*FëÛLe 'üb0x. */ - $"EDB8 4666 1604 1937 9603 A2AA D8C3 43A6" /* í¸Ff...7–.¢ªØÃC¦ */ - $"E254 D745 866F D24A DD91 397E C575 F187" /* âT×E†oÒJÝ‘9~Åuñ‡ */ - $"193B F5F5 819B 7D57 EC83 0871 ED1B 64F6" /* .;õõ›}Wìƒ.qí.dö */ - $"E47A E1B0 65F9 67DF 5680 3642 52AA BB4B" /* äzá°eùgßV€6BRª»K */ - $"BA52 D8BA 8AF7 0A96 412A 92B2 045F 9739" /* ºRغŠ÷–A*’²._—9 */ - $"3A52 D961 6BC6 1D2E D90D 29A7 E9DE 2651" /* :RÙakÆ..Ù.)§éÞ&Q */ - $"CE3F 9921 03BC 7A7A CBFD 63E2 4C7C 9025" /* Î?™!.¼zzËýcâL|% */ - $"BCC3 D509 745E 9AE4 1675 0242 26EE E4F6" /* ¼ÃÕÆt^šä.u.B&îäö */ - $"B04B CFB3 E37F EADB 2840 E47E 0209 C8C5" /* °Kϳã.êÛ(@ä~.ÆÈÅ */ - $"56FC 6228 BB57 F43A BE32 0753 73FB EAE2" /* Vüb(»Wô:¾2.Ssûêâ */ - $"55B4 D581 42C8 10B8 AEA9 67C4 F685 982C" /* U´ÕBÈ.¸®©gÄö…˜, */ - $"3104 095F DCBD 3701 8749 9CBA A7A5 B714" /* 1.Æ_ܽ7.‡Iœº§¥·. */ - $"FDED FAA3 F034 54D8 728F 8640 4A61 560C" /* ýíú£ð4TØr†@JaV. */ - $"50D4 B224 A5F1 6715 6C8B 7EC6 BF5C 120D" /* PÔ²$¥ñg.l‹~Æ¿\.. */ - $"8797 B25E B0E1 C57E 69AF 1FF2 99C3 44B5" /* ‡—²^°áÅ~i¯.ò™ÃDµ */ - $"0508 0061 1F44 795F 27C0 511E 0796 9740" /* ...a.Dy_'ÀQ..–—@ */ - $"14FF 4C51 5651 34F3 658D 4CA8 3FBF 43CC" /* .ÿLQVQ4óeL¨?¿CÌ */ - $"8813 D372 1723 7DB5 6D44 4524 4E91 B644" /* ˆ.Ór.#}µmDE$N‘¶D */ - $"4B7D CDEC E0E0 8468 622D 87FE 80E3 E097" /* K}Íìàà„hb-‡þ€ãà— */ - $"303D 8894 1FFF 7FA6 9AAB C6E0 0B83 3EDD" /* 0=ˆ”.ÿ.¦š«Æà.ƒ>Ý */ - $"86A5 43D3 C650 0008 D364 A800 0000 0000" /* †¥CÓÆP..Ód¨..... */ - $"0000 07D7 8F92 61B9 E6E0 BCBF CD4A AB76" /* ...×’a¹æà¼¿ÍJ«v */ - $"5B6E 246A 8DFB D274 41F9 3583 773D 5165" /* [n$jûÒtAù5ƒw=Qe */ - $"2139 B773 476E DF91 33F0 8CDA F420 613F" /* !9·sGnß‘3ðŒÚô a? */ - $"9B35 33C9 8298 A661 A5DB 2CEF 1A1C BC3E" /* ›53É‚˜¦a¥Û,ï..¼> */ - $"09B4 5415 8511 4FE5 3FF8 B88C 339D C169" /* Æ´T.….Oå?ø¸Œ3Ái */ - $"9608 FF62 B2D6 285A 80A2 22C9 E4AA 5A99" /* –.ÿb²Ö(Z€¢"ÉäªZ™ */ - $"B3F5 E9D4 7FFF 7FF4 7D5C 4CC0 788F 0EB6" /* ³õéÔ.ÿ.ô}\LÀx.¶ */ - $"8024 0000 0A1E 1F40 0000 0000 0000 0000" /* €$..Â..@........ */ - $"CA54 CF6A 897B B6D7 9C90 87E9 FF6A 22A0" /* ÊTÏj‰{¶×œ‡éÿj"  */ - $"0765 4AE8 B827 B7A1 C412 4000 0000 0000" /* .eJè¸'·¡Ä.@..... */ - $"0000 2222 DAB7 AEED C4EB AFCB FF79 6610" /* ..""Ú·®íÄë¯Ëÿyf. */ - $"A362 D5F2 1401 DA9F 8978 3FC3 FF60 341C" /* £bÕò..ÚŸ‰x?Ãÿ`4. */ - $"524C CBF3 AF64 9BA4 637F F217 CA8C A4CE" /* RLËó¯d›¤c.ò.ÊŒ¤Î */ - $"A881 46DE C63F CB0B 4C86 F71C CDFF 6CDC" /* ¨FÞÆ?Ë.L†÷.ÍÿlÜ */ - $"3C86 AFD6 02EF 25B3 E392 0238 14ED F9FF" /* <†¯Ö.ï%³ã’.8.íùÿ */ - $"71EA 1A7B 7848 281D C18D 83C1 F0D1 C115" /* qê.{xH(.ÁƒÁðÑÁ. */ - $"C525 7E38 9E60 32A4 CED2 A5DE 8006 1212" /* Å%~8ž`2¤ÎÒ¥Þ€... */ - $"7136 14A1 74D1 9C7D F74C 708E 43DE 4154" /* q6.¡tÑœ}÷LpŽCÞAT */ - $"2939 179A 87BB 2AAF 7401 4404 CB30 458F" /* )9.š‡»*¯t.D.Ë0E */ - $"F1B7 EE42 3E46 458F B220 6F30 EE24 7D86" /* ñ·îB>FE² o0î$}† */ - $"2D28 3CA7 C184 60D3 4EBC 9C79 C402 02FC" /* -(<§Á„`ÓN¼œyÄ..ü */ - $"553C C62D DDC0 3D0C F12B C1FF 546D A4FF" /* U<Æ-ÝÀ=.ñ+ÁÿTm¤ÿ */ - $"5885 6B1B 9EF6 2206 8FB5 1CB0 2D3D B922" /* X…k.žö".µ.°-=¹" */ - $"644F D104 0152 70F8 BF41 4D6E 4F05 B928" /* dOÑ..Rpø¿AMnO.¹( */ - $"396A 4A92 9B1B 24AB 4611 6D95 87D6 2D7C" /* 9jJ’›.$«F.m•‡Ö-| */ - $"7546 B839 A3B1 C612 0F2A 796E 7911 5FF9" /* uF¸9£±Æ..*yny._ù */ - $"03C4 D13E EF00 2DEF 9CFE FDDE 3A2C FF3E" /* .ÄÑ>ï.-ïœþýÞ:,ÿ> */ - $"4567 F432 3673 3F84 8787 B65C 7A4F 2007" /* Egô26s?„‡‡¶\zO . */ - $"FF7C D894 A762 3872 8FA4 9563 D178 5039" /* ÿ|Ø”§b8r¤•cÑxP9 */ - $"C4BD 2EB4 0491 2A80 0000 0000 0000 0001" /* Ľ.´.‘*€........ */ - $"F172 6FA1 09F2 9F35 F3BC 2E0B 8E46 2557" /* ñro¡ÆòŸ5ó¼..ŽF%W */ - $"67C5 4F12 D1CF F08C BC61 0F89 E4A4 9249" /* gÅO.ÑÏðŒ¼a.‰ä¤’I */ - $"2492 4924 9249 221B 4708 65ED 84CA FDD2" /* $’I$’I".G.eí„ÊýÒ */ - $"D193 7C69 0CA3 95EF DDF2 33FF 556E D976" /* Ñ“|i.£•ïÝò3ÿUnÙv */ - $"2E4D FDCE E0FC 8669 83FF 768E 3CBB 179B" /* .MýÎàü†iƒÿvŽ<».› */ - $"DBB9 253D BFFF 79F1 5006 27BF 5548 40B9" /* Û¹%=¿ÿyñP.'¿UH@¹ */ - $"BADC F963 10BA 8BD9 367F E03A 6E29 5908" /* ºÜùc.º‹Ù6.à:n)Y. */ - $"0000 0000 0000 0000 0028 8080 0000 000A" /* .........(€€... */ - $"6370 D000 0142 83C0 0000 0011 CD3F D940" /* cpÐ..BƒÀ....Í?Ù@ */ - $"0022 C990 C912 501C 14FC 1926 5412 0E88" /* ."ÉÉ.P..ü.&T..ˆ */ - $"C32F B2ED E7A4 9249 2492 4924 9249 247E" /* Ã/²í礒I$’I$’I$~ */ - $"FB2C 999E D2ED 6DFF 783B 4C3A 3DB7 14A5" /* û,™žÒímÿx;L:=·.¥ */ - $"872C 2B85 8FC2 72EA 3412 FCA8 32E0 7A2E" /* ‡,+…Ârê4.ü¨2àz. */ - $"B109 F66C 3F99 7C32 2761 1522 7B9C 1851" /* ±Æöl?™|2'a."{œ.Q */ - $"B3CB 5373 0652 CE79 D8C5 B721 03D7 CD81" /* ³ËSs.RÎyØÅ·!.×Í */ - $"A03A CD5F CECF B58A 4122 7ED2 9FFF 7FFF" /*  :Í_ÎϵŠA"~ÒŸÿ.ÿ */ - $"1575 DF0B 430B 0A6C 6108 B421 B33F E9FA" /* .uß.C.Âla.´!³?éú */ - $"AC06 391C EB01 17F4 3BF4 4CDA 87DA 516F" /* ¬.9.ë..ô;ôLÚ‡ÚQo */ - $"EFA3 E7F9 651A 6902 C269 AF79 2EA4 D861" /* ï£çùe.i.Âi¯y.¤Øa */ - $"CBC1 7F37 146D 4163 38BB B16B AAD4 9AC2" /* ËÁ.7.mAc8»±kªÔšÂ */ - $"424A B3CE 1368 78EF B4B0 FE68 2FBA 0CB2" /* BJ³Î.hxï´°þh/º.² */ - $"E672 A89D 999E 64CD 417A 98A3 8458 0603" /* ær¨™ždÍAz˜£„X.. */ - $"C03D 9F9E B15E 8418 0FC6 F3E0 BA39 A3C1" /* À=Ÿž±^„..Æóàº9£Á */ - $"9929 0547 9C29 FC76 57CA B1E5 F887 AE73" /* ™).Gœ)üvWÊ±åø‡®s */ - $"78AA BA9F FF7F C07C 00F0 28E9 7533 0FC1" /* xªºŸÿ.À|.ð(éu3.Á */ - $"097C 4ABC F3CB 6604 EEC2 5194 A1F2 A201" /* Æ|J¼óËf.îÂQ”¡ò¢. */ - $"D6B0 C5F3 4AA3 8FD8 34DC A382 0CD4 134E" /* Ö°ÅóJ£Ø4Ü£‚.Ô.N */ - $"8275 37F5 2388 74C6 1A6C F889 1037 A348" /* ‚u7õ#ˆtÆ.lø‰.7£H */ - $"ACB4 EFF5 B446 564C C6DC 75F7 8445 013F" /* ¬´ïõ´FVLÆÜu÷„E.? */ - $"79FF 407B 05EE 9C66 8A53 FF7A 367A 6D06" /* yÿ@{.îœfŠSÿz6zm. */ - $"9ADF CBDD 25B5 0629 78A0 A071 35BA EE49" /* šßËÝ%µ.)x  q5ºîI */ - $"64E9 3EA3 9A07 917A 66E3 090C B916 3BF5" /* dé>£š.‘zfãÆ.¹.;õ */ - $"10D7 77D5 7281 248E 3F09 0C0F 319E 7F71" /* .×wÕr$Ž?Æ..1ž.q */ - $"98DA A34A C823 06A4 6BFD 8EA1 8C71 EB25" /* ˜Ú£JÈ#.¤kýŽ¡Œqë% */ - $"E5FC 0BA1 DB35 9514 A229 56F0 7E42 9FD0" /* åü.¡Û5•.¢)Vð~BŸÐ */ - $"5435 3CB7 AED9 0A4F 625B A493 D1B2 C654" /* T5<·®ÙÂOb[¤“ѲÆT */ - $"F691 87F9 F8E9 7459 1823 E06B 57D6 C638" /* ö‘‡ùøétY.#àkWÖÆ8 */ - $"7EE2 8CA0 1D79 4000 0000 0000 0000 0000" /* ~⌠.y@......... */ - $"0000 0000 442A 0D8C 8522 4E1A 3752 5040" /* ....D*.Œ…"N.7RP@ */ - $"E53D EE69 0B70 A6BF 9D0D D725 D66E 8D50" /* å=îi.p¦¿.×%ÖnP */ - $"10DB 966B 649B 0CA3 958B 6457 90CC 214A" /* .Û–kd›.£•‹dWÌ!J */ - $"C4C0 27A2 95F4 98AD 14C2 1892 EBE7 864B" /* ÄÀ'¢•ô˜­.Â.’ëç†K */ - $"18AA 55C7 50D2 4A15 7F4E 566A 9C13 9C52" /* .ªUÇPÒJ..NVjœ.œR */ - $"AC77 FE86 B3A2 5D92 D112 516C BA99 60EE" /* ¬wþ†³¢]’Ñ.Qlº™`î */ - $"221A F194 D9DF FF5F FF6B 77F9 4B01 4F8F" /* ".ñ”Ùßÿ_ÿkwùK.O */ - $"F681 8614 2F3E 31E3 EABB 7C34 6025 A491" /* ö†./>1ãê»|4`%¤‘ */ - $"9BC1 A348 628D 34AE 751A F8F7 7521 7F48" /* ›Á£Hb4®u.ø÷u!.H */ - $"68A4 6B9C F66F 252D 6021 9C97 39AB B637" /* h¤kœöo%-`!œ—9«¶7 */ - $"3B5D E8FB 56EE 824A F65D C84D E23C 7BF2" /* ;]èûVî‚Jö]ÈMâ<{ò */ - $"5400 0000 0000 0000 0000 0000 0014 080D" /* T............... */ - $"B05B 4688 1F60 376D 2209 1DE1 7E75 CD30" /* °[Fˆ.`7m"Æ.á~uÍ0 */ - $"5D2F 627B A077 8D86 2001 62AF 1031 6853" /* ]/b{ w† .b¯.1hS */ - $"2A8E 0308 16F6 C4EC E5B6 814A 1DF2 23EB" /* *Ž...öÄìå¶J.ò#ë */ - $"8C16 64F9 A1ED 8A1F 346E 2E1C 5ACB 4376" /* Œ.dù¡íŠ.4n..ZËCv */ - $"5014 B885 5212 5294 8F4F DF56 7339 8A5D" /* P.¸…R.R”OßVs9Š] */ - $"03C0 A05F D60B 5D58 2677 CD67 A4EE 3803" /* .À _Ö.]X&wÍg¤î8. */ - $"B2B1 9AD5 A41A C3EF 3281 3FFF 780A A5BD" /* ²±šÕ¤.Ãï2?ÿxÂ¥½ */ - $"861B 62F7 456F 1021 93CD A115 BD61 7E4C" /* †.b÷Eo.!“Í¡.½a~L */ - $"2306 D6BF D5D9 18AF 12BB 22D9 E32E 6976" /* #.Ö¿ÕÙ.¯.»"Ùã.iv */ - $"9282 5E47 A842 7983 2C87 64C5 6215 A0D9" /* ’‚^G¨Byƒ,‡dÅb. Ù */ - $"E45A EFAE 74F3 E5E5 7679 A7C0 D366 649C" /* äZï®tóååvy§ÀÓfdœ */ - $"9EF3 D763 2D6C D0AD 48E5 7A2A 9454 8B34" /* žó×c-lЭHåz*”T‹4 */ - $"B7FF 7FCD F604 90E4 2716 1C40 DD8A 8B1A" /* ·ÿ.Íö.ä'..@ÝŠ‹. */ - $"24C8 2F0C 06AC 999A 58B7 C15E E6B1 431B" /* $È/..¬™šX·Á^æ±C. */ - $"73D1 FEC5 5182 4A2D 33CB E920 AFBE 9F5A" /* sÑþÅQ‚J-3Ëé ¯¾ŸZ */ - $"0478 C2F3 80D7 241A 2E07 8BF3 FD3F 471A" /* .xÂó€×$...‹óý?G. */ - $"7C53 1C79 2F17 C32F D5C6 B977 E2F9 9D80" /* |S.y/.Ã/ÕÆ¹wâù€ */ - $"558B 7336 75BC 5945 3986 BD1C CE95 EA07" /* U‹s6u¼YE9†½.Εê. */ - $"7152 C778 65AD 73E9 F1B7 24D4 BDB0 7F24" /* qRÇxe­séñ·$Ô½°.$ */ - $"BACD 3C51 D344 33D7 21C7 BE9A 915D 2808" /* ºÍh?.C®0Î.ÿg.x„˜ */ - $"08D8 E1D9 3F1A E50B EB7C E564 6F4C 57F3" /* .ØáÙ?.å.ë|ådoLWó */ - $"9E60 5F9B 244E 83A9 33C9 668A 3951 7E33" /* ž`_›$Nƒ©3ÉfŠ9Q~3 */ - $"31D7 01E7 0342 6BC0 7FD1 7488 2BE1 9AD1" /* 1×.ç.BkÀ.Ñtˆ+ášÑ */ - $"1938 BBD8 7710 BAD3 BB92 2C80 A162 B2EF" /* .8»Øw.ºÓ»’,€¡b²ï */ - $"3FEA 6FC2 47D2 0D0E 28AB 03DA 4B34 4027" /* ?êoÂGÒ..(«.ÚK4@' */ - $"7FFD 87BC 9D96 E076 3C00 0000 0000 0000" /* .ý‡¼–àv<....... */ - $"0000 0000 0000 136C 1721 95F0 1991 3F80" /* .......l.!•ð.‘?€ */ - $"65DC 1F3F AEA0 BE5C 71D2 94CE C7FF 7FFF" /* eÜ.?® ¾\qÒ”ÎÇÿ.ÿ */ - $"7917 BEAD D458 935A 563C CC9C 6C0D CFFF" /* y.¾­ÔX“ZV<Ìœl.Ïÿ */ - $"55DA 93C2 F199 3D1E C4C2 3C5F A7BC D48E" /* UÚ“Âñ™=.ÄÂ<_§¼ÔŽ */ - $"4980 037B 9FCC F7BC 6E1E 78CD 2838 DC58" /* I€.{ŸÌ÷¼n.xÍ(8ÜX */ - $"F156 C827 88EA BFF7 BD95 BBD6 FE11 C305" /* ñVÈ'ˆê¿÷½•»Öþ.Ã. */ - $"A1D2 FA2A EA0B E56B 285B 91FE 551E F5E2" /* ¡Òú*ê.åk([‘þU.õâ */ - $"687C 5A51 1A67 64D3 BD76 4937 F455 4C94" /* h|ZQ.gdÓ½vI7ôUL” */ - $"6A7E B888 CB40 7AA3 DDEE 8BD8 2D9F 1EB6" /* j~¸ˆË@z£Ýî‹Ø-Ÿ.¶ */ - $"48DF 9C66 6BF3 A26A 3CC4 2D4D E47A 6D9A" /* Hßœfkó¢j<Ä-Mäzmš */ - $"DAB1 1DA4 083A D994 4416 C0D2 2E63 539E" /* Ú±.¤.:Ù”D.ÀÒ.cSž */ - $"7274 3C04 85F4 D7B5 EDEF 507A B2B7 1832" /* rt<.…ô×µíïPz²·.2 */ - $"6615 A186 4A80 0000 0000 0000 0000 0000" /* f.¡†J€.......... */ - $"07CF BF6C 3626 7453 BF7D 8B57 26C9 F556" /* .Ï¿l6&tS¿}‹W&ÉõV */ - $"1F12 0BB9 5DC4 797D 3C69 7DB2 2FFF 7F33" /* ...¹]Äy}LJ¬ */ - $"3161 5289 3A6A FC0B E254 CAFA 6A32 2F8C" /* 1aR‰:jü.âTÊúj2/Œ */ - $"8B76 FA87 DADD 0333 2250 0058 F5C6 21CD" /* ‹vú‡ÚÝ.3"P.XõÆ!Í */ - $"D094 5CD5 10DD 2FA0 B74B 06FB AA9B 2B62" /* Д\Õ.Ý/ ·K.ûª›+b */ - $"E36D 708E B8F5 0739 3097 7F03 47BE 48F5" /* ãmpޏõ.90—..G¾Hõ */ - $"D079 1641 CA5D DF28 C92B 0EFA B18F CE6F" /* Ðy.AÊ]ß(É+.ú±Îo */ - $"6648 DB26 DE5C 1D17 2BD3 28AF DD89 801C" /* fHÛ&Þ\..+Ó(¯Ý‰€. */ - $"AB0D 40D1 9016 D542 63A0 8222 9D7A F0F5" /* «.@Ñ.ÕBc ‚"zðõ */ - $"A171 2D28 3D2C C22E 09AB 3AA9 C50B 7545" /* ¡q-(=,Â.Æ«:©Å.uE */ - $"4C64 18E8 8E67 3A7D DDBE 36CE 2F97 5AD0" /* Ld.èŽg:}ݾ6Î/—ZÐ */ - $"E4F0 8AFB 6071 6268 E5F6 09EA 245F 9F87" /* äðŠû`qbhåöÆê$_Ÿ‡ */ - $"E304 242C 234C 9FF7 1D0A 11C7 4FE7 20BC" /* ã.$,#LŸ÷.Â.ÇOç ¼ */ - $"EC58 1A4B 5A8E DE45 0E5F 4A03 4C8A 5051" /* ìX.KZŽÞE._J.LŠPQ */ - $"E410 4405 321B BD82 AC69 94F7 AA5E 5C65" /* ä.D.2.½‚¬i”÷ª^\e */ - $"436F 861A C95F 1AB0 2E2B 9689 AA43 B247" /* Co†.É_.°.+–‰ªC²G */ - $"6DE3 4E9E F205 F221 D175 86BB 4434 C0EE" /* mãNžò.ò!Ñu†»D4Àî */ - $"C472 EA2B 499D 63FA B4C8 FAB3 91F3 060D" /* Ärê+Icú´Èú³‘ó.. */ - $"C203 A636 1D98 6B00 D678 0D3C BE92 309E" /* Â.¦6.˜k.Öx.<¾’0ž */ - $"759A 11D4 B514 24FB E4D2 7089 76DE 42DD" /* uš.Ôµ.$ûäÒp‰vÞBÝ */ - $"5338 4798 5943 4A6B 500A 472E 77BE AEBD" /* S8G˜YCJkPÂG.w¾®½ */ - $"93B0 117A 0E2D A8E4 DFED 5A76 1775 2BFF" /* “°.z.-¨äßíZv.u+ÿ */ - $"1A84 CBE1 B007 D3EA 11B0 9BB8 4B3F BB56" /* .„Ëá°.Óê.°›¸K?»V */ - $"33F6 B242 4C5C A63D 638F 1BA5 0AC5 698D" /* 3ö²BL\¦=c.¥ÂÅi */ - $"45B3 D343 D769 FEEE C45D 50B0 9AAA 4146" /* E³ÓC×iþîÄ]P°šªAF */ - $"0BFA F8CC 694B A42D FC1E C3F1 54F0 D3F9" /* .úøÌiK¤-ü.ÃñTðÓù */ - $"F051 5182 D373 5210 38AA F9B0 D3F3 6B07" /* ðQQ‚ÓsR.8ªù°Óók. */ - $"C944 7FCA 2126 D17A 01B1 7763 CDE8 D5FF" /* ÉD.Ê!&Ñz.±wcÍèÕÿ */ - $"00F4 08D7 4060 339C D8E2 7EA4 B00D 3171" /* .ô.×@`3œØâ~¤°.1q */ - $"ABB0 7F47 D146 13B9 398E 14B3 C55D 10AF" /* «°.GÑF.¹9Ž.³Å].¯ */ - $"8D0A 2444 26A0 EFEA 6CB2 51FD EA28 0FD7" /* Â$D& ïêl²Qýê(.× */ - $"4E2F F54F 0066 62F2 66F3 334C 5D9D 77ED" /* N/õO.fbòfó3L]wí */ - $"F3D0 12ED 7A95 89A1 B928 8429 DCFB 8C68" /* óÐ.íz•‰¡¹(„)ÜûŒh */ - $"C35C 3C77 5D7D 5180 A012 ADA3 AE60 AAE0" /* Ã\rœ`u¨&i". */ - $"E140 D538 7CD4 5763 D708 6D5E 45C0 AE61" /* á@Õ8|ÔWc×.m^EÀ®a */ - $"EC8B E180 1D9C 712C 4DB9 F177 6733 0F76" /* ì‹á€.œq,M¹ñwg3.v */ - $"9A72 7AD0 D18D 2BE6 9DCE 6294 4092 CE8E" /* šrzÐÑ+æÎb”@’ÎŽ */ - $"ACED 8B00 B050 AE53 C09C 98D6 CFD1 4208" /* ¬í‹.°P®SÀœ˜ÖÏÑB. */ - $"DEB2 AF01 5ED7 E1F4 4EAA 0B09 2263 FE09" /* Þ²¯.^×áôNª.Æ"cþÆ */ - $"2771 6EB7 9181 1DFE A5DD 9A12 4592 02FD" /* 'qn·‘.þ¥Ýš.E’.ý */ - $"5F2D D4D6 5C15 B454 B07C 9B6A B9F9 AEC2" /* _-ÔÖ\.´T°|›j¹ù®Â */ - $"D883 1F5F B9B1 8258 6732 C7E3 5C90 DB16" /* ؃._¹±‚Xg2Çã\Û. */ - $"42EC D875 2B9D FEAF 1FED BD80 261D BAAE" /* BìØu+þ¯.í½€&.º® */ - $"3799 FDC7 DBE5 E769 A11C 3304 5D3B 419C" /* 7™ýÇÛåçi¡.3.];Aœ */ - $"5844 E615 EE7A 5DCE 272E D055 121D 1F84" /* XDæ.îz]Î'.ÐU...„ */ - $"2EC6 E6B1 A7DA D03A D600 6D58 4FF0 9196" /* .Ææ±§ÚÐ:Ö.mXOð‘– */ - $"FBCA CDDC 1B8D 9D1A BB7B 3782 0F3F 626C" /* ûÊÍÜ..»{7‚.?bl */ - $"26AA AF34 6A20 8210 1E96 ED21 5A26 EF04" /* &ª¯4j ‚..–í!Z&ï. */ - $"5F66 5C2D A8A4 F3BC 1871 AD1D FE4D 8C8B" /* _f\-¨¤ó¼.q­.þMŒ‹ */ - $"F1E5 A382 654B 08C7 EFC4 BFBA C29B 5C73" /* ñ壂eK.ÇïÄ¿ºÂ›\s */ - $"2420 9390 3B75 6DE6 0208 6F4F BB53 B2AA" /* $ “;umæ..oO»S²ª */ - $"AD28 4360 1A8A 4301 088C 6F17 68CC 9180" /* ­(C`.ŠC..Œo.hÌ‘€ */ - $"D757 7012 3BE3 C4AB DF05 97B9 4B57 B6FC" /* ×Wp.;ãÄ«ß.—¹KW¶ü */ - $"7693 36DE 89E8 E2AB 4352 A782 4520 DA28" /* v“6Þ‰èâ«CR§‚E Ú( */ - $"F1F2 34D6 2EAE E401 ED61 1E2E 4E74 D4EB" /* ñò4Ö.®ä.ía..NtÔë */ - $"98A9 94AD F856 8EE1 E3D0 06FC AA37 31E5" /* ˜©”­øVŽáãÐ.üª71å */ - $"1047 113E C151 CE86 B6A4 0F82 E5D9 CE50" /* .G.>ÁQΆ¶¤.‚åÙÎP */ - $"57A8 8F86 AFAD 21D1 2C4C F181 8BD7 106C" /* W¨†¯­!Ñ,Lñ‹×.l */ - $"3C77 649E 038E 3C63 66F4 EE1A 2906 755C" /* 1dÄ>Ta */ - $"4BD0 139E 6390 0E05 4793 56B8 5080 CBF6" /* KÐ.žc..G“V¸P€Ëö */ - $"9E70 BEA1 FB26 DD1E AEE1 E78D 0D32 FA02" /* žp¾¡û&Ý.®áç.2ú. */ - $"43FC FBC6 7464 2C9A 14AD 2C7C 0969 995F" /* CüûÆtd,š.­,|Æi™_ */ - $"6363 3037 9C34 C5F8 42DF B339 D2B0 5C45" /* cc07œ4ÅøBß³9Ò°\E */ - $"6130 509D 28E7 D3A7 9308 74ED 9265 B7F9" /* a0P(çÓ§“.tí’e·ù */ - $"0F54 D265 33D9 EB57 07C4 852B E3C8 771F" /* .TÒe3ÙëW.Ä…+ãÈw. */ - $"21F8 ADA3 D807 625C 513A E395 604B 0D6A" /* !ø­£Ø.b\Q:ã•`K.j */ - $"A9FC 297E 63AF 7622 23B6 63E1 EF25 F572" /* ©ü)~c¯v"#¶cáï%õr */ - $"01B0 400D 18C6 C9FA 6AF5 3E26 4199 6E68" /* .°@..ÆÉújõ>&A™nh */ - $"99B5 B3A9 F861 3419 C6C7 B65C D0F6 353B" /* ™µ³©øa4.ÆÇ¶\Ðö5; */ - $"6551 1B0A 9D82 1F07 4185 8C46 5867 DC22" /* eQ.‚..A…ŒFXgÜ" */ - $"BD38 AFF7 27BA 1114 9266 5EF4 1EA9 89B4" /* ½8¯÷'º..’f^ô.©‰´ */ - $"A634 E917 65E5 502E 8028 D24E 725F 0C22" /* ¦4é.eåP.€(ÒNr_." */ - $"1513 7B38 5FEA 3150 520B 6D8A 03D8 F796" /* ..{8_ê1PR.mŠ.Ø÷– */ - $"D183 D8FA 82E2 C147 B662 593B 9FC8 A2A0" /* уØú‚âÁG¶bY;ŸÈ¢  */ - $"C63B D151 D905 072C 02E5 919B 0BE9 6D76" /* Æ;ÑQÙ..,.å‘›.émv */ - $"4BEF 7D51 FF67 C2F2 BB61 DDD2 7981 0B7E" /* Kï}QÿgÂò»aÝÒy.~ */ - $"D406 3679 DFA4 FAE3 A33C 28AC 06C6 93C1" /* Ô.6yߤúã£<(¬.Æ“Á */ - $"B82F 53DB 1EB8 A6F3 5A24 A44A 1A76 9204" /* ¸/SÛ.¸¦óZ$¤J.v’. */ - $"6543 FC80 18DA 3C5D 395B 01DC D7E8 C21E" /* eCü€.Ú<]9[.Ü×èÂ. */ - $"A66C 9AE3 08D6 DBFC EE95 9E73 F71D 7CCA" /* ¦lšã.ÖÛüs÷.|Ê */ - $"2A6A F6D2 11D9 AC28 BEDE 8E1B 65EF A995" /* *jöÒ.Ù¬(¾ÞŽ.eï©• */ - $"F7B5 B19D 5F63 F42B D0AD D69A BD47 1EED" /* ÷µ±_cô+Э֚½G.í */ - $"2E5C 0276 3AEA F6D9 6E3F 314C 7F5F 52C3" /* .\.v:êöÙn?1L._Rà */ - $"093D C8A9 23E4 C154 5587 294A 98A9 0643" /* Æ=È©#äÁTU‡)J˜©.C */ - $"AF18 0D20 51A4 6FE1 F326 11E7 5A91 2919" /* ¯.. Q¤oáó&.çZ‘). */ - $"DD53 B13B 2CB3 DE77 FAB9 420E BAFB 305B" /* ÝS±;,³Þwú¹B.ºû0[ */ - $"E9AB 7A2B 623B 78FE 346D 8BB6 BA40 AE40" /* é«z+b;xþ4m‹¶º@®@ */ - $"5B6D 6D53 81A1 076D 7058 E792 E410 3FA7" /* [mmS¡.mpXç’ä.?§ */ - $"AD06 7E2E 5158 D129 9233 6E1D 6B7C C701" /* ­.~.QXÑ)’3n.k|Ç. */ - $"D61D 42D8 472F D5E2 2710 0B6C 828A 2352" /* Ö.BØG/Õâ'..l‚Š#R */ - $"D400 65FA E227 A938 1832 18CC 2BCE 19A8" /* Ô.eúâ'©8.2.Ì+Î.¨ */ - $"773C 3CB1 C6BD D722 8EE1 8AE2 4D4B 97D4" /* w<<±Æ½×"ŽáŠâMK—Ô */ - $"1763 37E4 2F93 8578 534E 0BA9 B493 3B80" /* .c7ä/“…xSN.©´“;€ */ - $"F018 28BE 2A52 15B2 8499 08A8 005F F028" /* ð.(¾*R.²„™.¨._ð( */ - $"ADFD ACEB 238F 922A 75E4 1C65 F2C3 F14B" /* ­ý¬ë#’*uä.eòÃñK */ - $"213D 7263 4A9A 1C80 12BD 5895 0EC8 B955" /* !=rcJš.€.½X•.ȹU */ - $"8CD0 FB81 63CF FF7F B545 85DF E201 36A9" /* ŒÐûcÏÿ.µE…ßâ.6© */ - $"E524 1BD6 EDDA 7C33 8CD2 E114 BA93 51E0" /* å$.ÖíÚ|3ŒÒá.º“Qà */ - $"A113 A12A FBEA 8570 B5FE E1B6 7963 5B31" /* ¡.¡*ûê…pµþá¶yc[1 */ - $"512A 99B1 3A59 E50E C584 DD7F FF7F FF7E" /* Q*™±:Yå.Å„Ý.ÿ.ÿ~ */ - $"D3C9 019B 1FBC DB70 2C2A 14A6 E7F1 0147" /* ÓÉ.›.¼Ûp,*.¦çñ.G */ - $"5F3A A36C 6F8A 9038 ABD8 EB8F FF7F FE79" /* _:£loŠ8«Øëÿ.þy */ - $"6C12 2D6F FD6D F9A0 0392 0E82 0296 3C14" /* l.-oýmù .’.‚.–<. */ - $"FEFA 803C A3D4 1049 CF30 E22F 6542 7ABF" /* þú€<£Ô.IÏ0â/eBz¿ */ - $"378E 66B2 9091 D396 B953 DCF5 66D3 C5B5" /* 7Žf²‘Ó–¹SÜõfÓŵ */ - $"7719 028C 5C0F F898 00A1 0C1D E181 F9C7" /* w..Œ\.ø˜.¡..áùÇ */ - $"2E46 06D4 D623 1256 EFAE 89E3 4FFF 7FDD" /* .F.ÔÖ#.VﮉãOÿ.Ý */ - $"F00D 4E11 65D5 B8F9 7C0B A045 AC4A 1E42" /* ð.N.eÕ¸ù|. E¬J.B */ - $"221C B512 5480 EF2D CB80 A089 3603 2CA1" /* ".µ.T€ï-Ë€ ‰6.,¡ */ - $"391C 7925 C817 92E3 8438 C438 08D1 0637" /* 9.y%È.’ã„8Ä8.Ñ.7 */ - $"9FCD F4C2 C04C 40BB A484 5043 0C1E 7C85" /* ŸÍôÂÀL@»¤„PC..|… */ - $"D7F6 1F6D BFC7 60AA 4D18 A399 9A13 CCD0" /* ×ö.m¿Ç`ªM.£™š.ÌÐ */ - $"26DA 3F97 24CB E902 0668 67F7 FE63 7A2E" /* &Ú?—$Ëé..hg÷þcz. */ - $"16D6 987F FF7F AFC1 5C35 E63D BA36 6227" /* .Ö˜.ÿ.¯Á\5æ=º6b' */ - $"FF7C FD39 8B8B 1A5F 6026 831B 0764 8805" /* ÿ|ý9‹‹._`&ƒ..dˆ. */ - $"E40B 0F19 7FFF 7FFC DEBC DD5B 9008 0000" /* ä....ÿ.üÞ¼Ý[... */ - $"0C24 1D44 4641 3BC8 4248 E229 62D2 088D" /* .$.DFA;ÈBHâ)bÒ. */ - $"117F DE8D 0B52 C3FD 1DD9 3823 F138 4C98" /* ..Þ.RÃý.Ù8#ñ8L˜ */ - $"58A8 2683 519C F914 4961 5226 891F F863" /* X¨&ƒQœù.IaR&‰.øc */ - $"3FF2 B19F 113D BFEF 9D12 30C6 66BD E2A6" /* ?ò±Ÿ.=¿ï.0Æf½â¦ */ - $"5D8C BE7E BE19 3D8F 03F2 5D26 FF7F FF7E" /* ]Œ¾~¾.=.ò]&ÿ.ÿ~ */ - $"A82B 5E03 E7A8 E8F1 8C4D B6F1 F0E2 FC36" /* ¨+^.ç¨èñŒM¶ñðâü6 */ - $"DE7A 2F55 38B1 B436 2E50 7D25 E3F0 82C8" /* Þz/U8±´6.P}%ãð‚È */ - $"580F 0D19 C280 415C 2A7F FCD9 C720 E649" /* X...€A\*.üÙÇ æI */ - $"4064 2624 04AC 0B71 41FD 3937 8359 4137" /* @d&$.¬.qAý97ƒYA7 */ - $"8CA9 B642 C318 BD37 82D3 B786 8217 3252" /* Œ©¶BÃ.½7‚Ó·†‚.2R */ - $"44EA 4598 57D2 2F66 957F 39FE D712 F449" /* DêE˜WÒ/f•.9þ×.ôI */ - $"213A BEBB B6CC F551 FF7F EB0A AE45 8497" /* !:¾»¶ÌõQÿ.ë®E„— */ - $"0F4C FD34 4090 01FE CFC8 51AA C32A 7D95" /* .Lý4@.þÏÈQªÃ*}• */ - $"D414 2609 E22F 1B7D E10E 97BB 05D1 9D04" /* Ô.&Æâ/.}á.—».Ñ. */ - $"0592 9271 0D39 AB59 F165 0D09 549C B4E3" /* .’’q.9«Yñe.ÆTœ´ã */ - $"AEE5 555F 00A3 5E0A E4D3 BAFE 1EC6 2FCE" /* ®åU_.£^ÂäÓºþ.Æ/Î */ - $"FB04 C9BC 71D8 A42D 2F70 9FE1 EC17 C31D" /* û.ɼqؤ-/pŸáì.Ã. */ - $"ECB2 0A82 EFB1 914C F6D2 E54C 5316 B6C4" /* ì²Â‚ﱑLöÒåLS.¶Ä */ - $"4FFF 653B FD6E 27A6 9959 244B F458 B35C" /* Oÿe;ýn'¦™Y$KôX³\ */ - $"865C EB94 2CD7 7343 B74C C211 8A4D 2A99" /* †\ë”,×sC·LÂ.ŠM*™ */ - $"732E 3B43 CEAC C300 A520 924D 6F1F 8295" /* s.;CάÃ.¥ ’Mo.‚• */ - $"DF36 1FD4 E8F0 9221 6313 1B33 0C98 2721" /* ß6.Ôèð’!c..3.˜'! */ - $"8F55 5BA1 0E46 A755 1D7F A914 458D 9FFF" /* U[¡.F§U..©.EŸÿ */ - $"33CF 4CE3 AFC6 3383 BC4D A7E9 F546 FDCB" /* 3ÏLã¯Æ3ƒ¼M§éõFýË */ - $"8276 7778 2BBA EF7C 3677 6251 58C0 9EFF" /* ‚vwx+ºï|6wbQXÀžÿ */ - $"526C C883 6CFF 7FFF 7D4C 3F9F BD74 6BE9" /* Rlȃlÿ.ÿ}L?Ÿ½tké */ - $"B6EB 9003 823B 235D 6AD9 B382 FC45 F10C" /* ¶ë.‚;#]jÙ³‚üEñ. */ - $"8282 90ED 9D47 E949 FADC 7B04 1C1C 9EF1" /* ‚‚íGéIúÜ{...žñ */ - $"1ABB 270D 07BE 1943 4E14 70E0 48FF 81EE" /* .»'..¾.CN.pàHÿî */ - $"CE8A 5AAD 3CE9 090D 3126 F96A AEBA 5853" /* ΊZ­<éÆ.1&ùj®ºXS */ - $"D02E ADE8 4614 E2B7 2E7E 3DB6 DE6A 77A8" /* Ð.­èF.â·.~=¶Þjw¨ */ - $"48D0 2DBB BAF4 E94C 735D 27D6 87FF 7F80" /* HÐ-»ºôéLs]'Ö‡ÿ.€ */ - $"5BCC 3CA6 1168 D9E0 38B4 22B2 2154 02AA" /* [Ì<¦.hÙà8´"²!T.ª */ - $"A1FF 6D87 EB2B F3EB 3814 9F74 DEF3 4D86" /* ¡ÿm‡ë+óë8.ŸtÞóM† */ - $"ED68 7E75 9E81 1FD9 170B E013 7E4D 97B3" /* íh~už.Ù..à.~M—³ */ - $"51B0 6B2A 42AF EEB4 899B D2A2 6AC9 8EBF" /* Q°k*B¯î´‰›Ò¢jÉŽ¿ */ - $"2858 9FFC 5050 3364 8F2D 313E 94A9 5ED5" /* (XŸüPP3d-1>”©^Õ */ - $"6213 E9DD 6FF6 5813 72DA FE40 0F70 06C4" /* b.éÝoöX.rÚþ@.p.Ä */ - $"FF7D 053C 3E69 C976 DDFF 02D9 4688 D8D7" /* ÿ}.<>iÉvÝÿ.ÙFˆØ× */ - $"8DEF 5187 FCA3 40EE 3167 B6DD 7EE6 42AB" /* ïQ‡ü£@î1g¶Ý~æB« */ - $"B07A DB20 DC1D 7016 631F 8FB0 C83A 9CC2" /* °zÛ Ü.p.c.°È:œÂ */ - $"66B9 304B 74F5 03F7 217C D3E3 6000 ECE6" /* f¹0Ktõ.÷!|Óã`.ìæ */ - $"A319 FD9E 4131 7E74 59C6 FB3F 1B51 FE89" /* £.ýžA1~tYÆû?.Qþ‰ */ - $"52D3 C845 1BF0 4BFE 3BAE 4940 9830 8E9C" /* RÓÈE.ðKþ;®I@˜0Žœ */ - $"F843 F6A2 218E B2E2 8092 8E0E 3889 8137" /* øCö¢!Ž²â€’Ž.8‰7 */ - $"583C 394F CCE6 3D1B 37B8 C9A4 D805 B9E4" /* X<9OÌæ=.7¸É¤Ø.¹ä */ - $"A037 E45D 1167 9627 81E0 538C 1B6D EA0E" /*  7ä].g–'àSŒ.mê. */ - $"18CD 8E3C EE0C 5E0C B048 8DD2 C804 CA38" /* .ÍŽ<î.^.°HÒÈ.Ê8 */ - $"8678 CAA9 5EE1 8B6C E7D9 FDE1 5C14 D52A" /* †xÊ©^á‹lçÙýá\.Õ* */ - $"67F3 8A12 F698 857A 5692 1FB3 FF27 FE1B" /* góŠ.ö˜…zV’.³ÿ'þ. */ - $"7E31 5D25 B4A2 3647 FF07 064A 4D7B F160" /* ~1]%´¢6Gÿ..JM{ñ` */ - $"62D7 81CE 0940 AE5F CAEB F1A6 10C4 CB0E" /* b×ÎÆ@®_Êëñ¦.ÄË. */ - $"3D77 2C40 0146 8C72 B765 F6A9 3047 E748" /* =w,@.FŒr·eö©0GçH */ - $"0239 A725 8B4C 56F0 7E86 9A24 53D7 4832" /* .9§%‹LVð~†š$S×H2 */ - $"7924 73CB 4431 4977 0487 03FC F1B3 A21C" /* y$sËD1Iw.‡.üñ³¢. */ - $"2792 0B05 8183 8348 8EC0 2635 47D9 B51D" /* '’..ƒƒHŽÀ&5GÙµ. */ - $"CE40 1FA4 20C5 93A8 BEB4 B8CD 93D8 A79E" /* Î@.¤ Å“¨¾´¸Í“اž */ - $"62C5 846C 964D 0404 BE21 3AA5 9EC3 4450" /* bÅ„l–M..¾!:¥žÃDP */ - $"FAEE 938A A428 E4D0 7F1B 46A8 7AEC 97FB" /* ú¤(äÐ..F¨zì—û */ - $"1AFF 71DA F26D B5B1 E6F2 66B4 865E 1F12" /* .ÿqÚòmµ±æòf´†^.. */ - $"CE0F 3A8A EDF1 6321 BC5A 22D5 D3D6 BE19" /* Î.:Šíñc!¼Z"ÕÓÖ¾. */ - $"671A 38C3 11E8 FC9D 93AC 895A 1B84 7C9B" /* g.8Ã.èü“¬‰Z.„|› */ - $"979F 5DC5 BBE6 19A8 5D03 BE83 6FA4 B8F2" /* —Ÿ]Å»æ.¨].¾ƒo¤¸ò */ - $"AFCD 8115 B21B C1D5 80B4 5E20 3B19 9E48" /* ¯Í.².ÁÕ€´^ ;.žH */ - $"29C0 68DA F799 EC0D 56B3 7049 5EC1 11CB" /* )ÀhÚ÷™ì.V³pI^Á.Ë */ - $"CBAF FA0A 5AF1 22F1 3A4C 6F13 635A C681" /* ˯úÂZñ"ñ:Lo.cZÆ */ - $"06DA 8B44 A35B CF31 9B6F 57E6 AEC2 8D59" /* .Ú‹D£[Ï1›oWæ®ÂY */ - $"1556 A43E A289 74DC C398 B209 31B9 8CD0" /* .V¤>¢‰tÜØ²Æ1¹ŒÐ */ - $"07BE D253 76AB 7D79 4F26 D099 7AE8 E52C" /* .¾ÒSv«}yO&Йzèå, */ - $"EA35 D7BB E968 CAA0 5F61 EAE5 E9A1 E903" /* ê5×»éhÊ _aêåé¡é. */ - $"100E ED2C 5A66 21E2 1426 BE74 7A19 8C98" /* ..í,Zf!â.&¾tz.Œ˜ */ - $"3D67 A4D2 370F C95D 7131 2D31 0971 6022" /* =g¤Ò7.É]q1-1Æq`" */ - $"F4F2 359E 1FBD D23A CD94 4467 205E F7B1" /* ôò5ž.½Ò:Í”Dg ^÷± */ - $"5D18 EE91 9078 176B ADC2 65EB EECF D1A8" /* ].î‘x.k­ÂeëîÏѨ */ - $"F1B3 B999 E7CC 3079 BD9C 82D8 DF6E 29E0" /* ñ³¹™çÌ0y½œ‚Øßn)à */ - $"9502 EC8D 5C13 629B 109E A7C0 F438 6674" /* •.ì\.b›.ž§Àô8ft */ - $"C48B E75A 7CAC 28AE 3E9C 0ECF 9ADF F7BF" /* Ä‹çZ|¬(®>œ.Ïšß÷¿ */ - $"C51A E20D 64F1 B1DD C986 0C6F 6BFF 5102" /* Å.â.dñ±ÝɆ.okÿQ. */ - $"B233 B826 EBC9 35E2 9799 0A0F E81D 0816" /* ²3¸&ëÉ5â—™Â.è... */ - $"E01C B1A8 E4D9 1CCF 7F2E 4DB3 371B 83C0" /* à.±¨äÙ.Ï..M³7.ƒÀ */ - $"9DFD A603 83D6 4412 7DCF 2E2F 85D8 8259" /* ý¦.ƒÖD.}Ï./…Ø‚Y */ - $"DC97 798F 2E8A 09F5 C1A7 1E56 55F3 BFD0" /* Ü—y.ŠÆõÁ§.VUó¿Ð */ - $"34CE 311A 98BE C87C 8CCE 6EDF C85C A788" /* 4Î1.˜¾È|ŒÎnßÈ\§ˆ */ - $"AA7E 47D5 72AF 1842 5C5F 9D6A C586 CA4C" /* ª~GÕr¯.B\_jņÊL */ - $"34D3 6315 D6CA 0D6D 5B75 6C85 551B E270" /* 4Óc.ÖÊ.m[ul…U.âp */ - $"E9DD 6127 C363 1F5A 0AA4 8F55 114F 9ED3" /* éÝa'Ãc.Z¤U.OžÓ */ - $"034E A968 1BF1 513A 2F0D 3E61 612A 15E6" /* .N©h.ñQ:/.>aa*.æ */ - $"B89F 1877 F38E 8C96 20C3 1952 A559 62AE" /* ¸Ÿ.w󎌖 Ã.R¥Yb® */ - $"20E0 BE7D BF7C FAA3 F56C FF75 6D5E 07E7" /* à¾}¿|ú£õlÿum^.ç */ - $"EB87 E7E9 BFE7 EE37 E7EE B60B E7DA F7CF" /* ë‡çé¿çî7çî¶.çÚ÷Ï */ - $"A6FF 2B5C 2F9F AC00 ED1C BCF0 084D B6D5" /* ¦ÿ+\/Ÿ¬.í.¼ð.M¶Õ */ - $"A3F8 3A1B 179B 5659 AE02 A536 8D65 B1A0" /* £ø:..›VY®.¥6e±  */ - $"F806 81C6 9453 B9E5 1E84 EF36 3D8C 9922" /* ø.Æ”S¹å.„ï6=Œ™" */ - $"A841 EBC7 584D 175D A8CF 5AE5 52F4 364A" /* ¨AëÇXM.]¨ÏZåRô6J */ - $"CACB F4FA 59D1 6C18 1FE0 5F96 0F70 465A" /* ÊËôúYÑl..à_–.pFZ */ - $"7CFD 0C37 59FF 6248 10C6 4872 8573 D54E" /* |ý.7YÿbH.ÆHr…sÕN */ - $"7839 337E D900 4336 CF58 B59C BCC4 602F" /* x93~Ù.C6ÏXµœ¼Ä`/ */ - $"EA1A 205F CD8D 635B AE0D 5750 3316 72C7" /* ê. _Íc[®.WP3.rÇ */ - $"A765 C2F2 CF8C 52FB 1892 F55E B7A5 6D85" /* §eÂòÏŒRû.’õ^·¥m… */ - $"5782 FAB6 FBB5 CDF3 2DC2 0256 2927 4F4F" /* W‚ú¶ûµÍó-Â.V)'OO */ - $"1F92 5F99 B540 87DD 7A80 991B 0677 AB00" /* .’_™µ@‡Ýz€™..w«. */ - $"2D82 C5F6 11F7 F21B 2652 B798 75D5 42A6" /* -‚Åö.÷ò.&R·˜uÕB¦ */ - $"7757 E0E7 3C3F DBA5 6106 9F44 1800 E044" /* wWàç¼×ý */ - $"B79B E645 6FD3 A5EE ECE2 C9A7 53C7 B2E3" /* ·›æEoÓ¥îìâɧSDzã */ - $"C659 D5C5 0FBD 7C88 93C3 D3D9 D81F 0AEB" /* ÆYÕÅ.½|ˆ“ÃÓÙØ.Âë */ - $"5784 8BF9 DAD7 993D 0C8B 9873 08A4 254B" /* W„‹ùÚ×™=.‹˜s.¤%K */ - $"2452 F95D 29CA 8B3E D48D 18FB C813 4ECB" /* $Rù])Ê‹>Ô.ûÈ.NË */ - $"D118 E3FA 926C 7A5F E5CC F774 D1DB B5C1" /* Ñ.ãú’lz_åÌ÷tÑÛµÁ */ - $"579A 2647 619A 67A0 423D 6C64 B3A6 9357" /* Wš&Gašg B=ld³¦“W */ - $"B8C6 8FBE A3AC E380 E548 5ED3 D83D 7DB9" /* ¸Æ¾£¬ã€åH^ÓØ=}¹ */ - $"93E8 9071 F6E0 168F 6BEC F674 6D08 F4DA" /* “èqöà.kìötm.ôÚ */ - $"C1F7 11FD DEF8 2420 30DA 71E2 C605 81EB" /* Á÷.ýÞø$ 0ÚqâÆ.ë */ - $"565B D461 AF6E 3127 34AC BA64 C660 14E1" /* V[Ôa¯n1'4¬ºdÆ`.á */ - $"F6AB DA92 386B 3E7B BD42 90E9 ABA2 6EE7" /* ö«Ú’8k>{½Bé«¢nç */ - $"8D0D 373C D280 46EC 6746 310C EA41 862B" /* .7<Ò€FìgF1.êA†+ */ - $"6D1B 7BE9 93AF 17F6 1D3A E7AB CA55 8A4B" /* m.{铯.ö.:ç«ÊUŠK */ - $"E867 6EF3 29DF FF5F B839 75E1 FA04 DD81" /* ègnó)ßÿ_¸9uáú.Ý */ - $"B6C9 DA44 D268 3B1A FF63 60F5 37A5 DDCB" /* ¶ÉÚDÒh;.ÿc`õ7¥ÝË */ - $"1AB3 5275 7692 7F15 F8E8 6A96 CEB4 D9E5" /* .³Ruv’..øèj–δÙå */ - $"3E5A 0E16 B1D0 B056 D0D2 0360 0900 5773" /* >Z..±Ð°VÐÒ.`Æ.Ws */ - $"BB3F C215 FD55 C9BF E3FC 48A1 CFAB BD39" /* »?Â.ýUÉ¿ãüH¡Ï«½9 */ - $"CD3D 906E 21CB C3DD E4D3 548C 4731 E777" /* Í=n!ËÃÝäÓTŒG1çw */ - $"EE15 C0DE CEBC 0F2F 85A6 9822 F1FF 7B2F" /* î.ÀÞμ./…¦˜"ñÿ{/ */ - $"2530 48C7 0C39 3659 CD03 06C5 7C8E 3D49" /* %0HÇ.96YÍ..Å|Ž=I */ - $"FED5 7B72 4652 772C 39C7 8F1B 63E8 2DC1" /* þÕ{rFRw,9Ç.cè-Á */ - $"1242 CA35 E396 6103 15DF D939 0597 B8D4" /* .BÊ5ã–a..ßÙ9.—¸Ô */ - $"8858 ACE3 3C32 6EE5 69A3 8512 3447 2B3B" /* ˆX¬ã<2nåi£….4G+; */ - $"0647 8C1F 2D31 4E57 0D03 BE26 5235 5275" /* .GŒ.-1NW..¾&R5Ru */ - $"74E8 B8F6 CF32 E077 8C51 41DB ED67 EE30" /* tè¸öÏ2àwŒQAÛígî0 */ - $"AD97 7956 D279 B0A8 768D 00E3 F604 A240" /* ­—yVÒy°¨v.ãö.¢@ */ - $"9656 5BCD B309 D0CD 3ECE C477 31EC F88D" /* –V[ͳÆÐÍ>ÎÄw1ìø */ - $"782F 8B9E 37FA A741 C636 7B55 D047 64A4" /* x/‹ž7ú§AÆ6{UÐGd¤ */ - $"E2EC C69D F609 F38F 821E 8D20 8709 87FF" /* âìÆöÆó‚. ‡Æ‡ÿ */ - $"3C3A B1ED C420 1F0B 52E3 8999 C684 30F3" /* <:±íÄ ..R㉙Ƅ0ó */ - $"C4ED 7FA9 3A2C D0E7 AE48 1AC2 7196 9347" /* Äí.©:,Ðç®H.Âq–“G */ - $"6BC9 BEE1 4112 4209 93CA 307A 7FF7 8B12" /* kɾáA.BÆ“Ê0z.÷‹. */ - $"EE76 8890 A529 33CC F435 A84F 9414 A719" /* îvˆ¥)3Ìô5¨O”.§. */ - $"BFB2 6305 201F 372D 567F 30DF 2E47 D0B9" /* ¿²c. .7-V.0ß.Gй */ - $"C68F 5126 7EAA D95A 12D0 DA8A 8CF4 8A2A" /* ÆQ&~ªÙZ.ÐÚŠŒôŠ* */ - $"CBAE 0509 B614 A9E1 2CA2 D0E0 F017 E395" /* Ë®.ƶ.©á,¢Ðàð.ã• */ - $"AF82 85B5 4509 E75C 8E4D 5465 7DF2 CF39" /* ¯‚…µEÆç\ŽMTe}òÏ9 */ - $"ACFB DD5B C683 62C0 0B1C B7B9 EAEC 049C" /* ¬ûÝ[ƃbÀ..·¹êì.œ */ - $"8045 0178 6757 E317 872D ABC2 B077 6EF6" /* €E.xgWã.‡-«Â°wnö */ - $"3612 4132 3DD7 D39B B49A 04A8 207D 6135" /* 6.A2=×Ó›´š.¨ }a5 */ - $"C64F 3A0F 5028 7B6B 953E 8F19 920A 718F" /* ÆO:.P({k•>.’Âq */ - $"08E9 A079 EC51 A08F 4A77 5130 C807 9BC2" /* .é yìQ JwQ0È.›Â */ - $"B37B 4C7B 9BAA 40F3 4E94 BE51 C027 32B5" /* ³{L{›ª@óN”¾QÀ'2µ */ - $"751F 4793 7271 226E 82F3 CF14 8BC3 F927" /* u.G“rq"n‚óÏ.‹Ãù' */ - $"4C81 7F29 AB70 8B3B E948 86D6 569F FEC2" /* L.)«p‹;éH†ÖVŸþ */ - $"BF6C 92F9 1011 3BE3 9E91 6458 1634 34A3" /* ¿l’ù..;ãž‘dX.44£ */ - $"3042 520F 5D64 6429 32CE 04FD 1B98 0698" /* 0BR.]dd)2Î.ý.˜.˜ */ - $"3A36 655C 86C7 C272 4B02 E259 0537 4DB8" /* :6e\†ÇÂrK.âY.7M¸ */ - $"C6C2 6980 ECFB 0FC1 C6D9 0A2C D00F 282A" /* ÆÂi€ìû.ÁÆÙÂ,Ð.(* */ - $"7A0B D91F 08CA 762C A629 048E 9BCC CFD2" /* z.Ù..Êv,¦).Ž›ÌÏÒ */ - $"1EBC 8F60 2F64 F24D F1FB 81C6 8AEC CFDB" /* .¼`/dòMñûÆŠìÏÛ */ - $"623A 01A9 35D2 B5E1 B80A 2D32 084E 3857" /* b:.©5Òµá¸Â-2.N8W */ - $"C025 BCDA 4728 F3AD 35AD 9AAA E054 21B7" /* À%¼ÚG(ó­5­šªàT!· */ - $"A47E 62C5 9921 02C0 09E3 440D 063A 3789" /* ¤~bÅ™!.ÀÆãD..:7‰ */ - $"5072 E54A 4654 E148 AC2E 4A99 C6A5 3923" /* PråJFTáH¬.J™Æ¥9# */ - $"49B5 6906 6531 FD5E 7CCE 1C4B EEDE 7482" /* Iµi.e1ý^|Î.KîÞt‚ */ - $"9E3F 73AE C777 0214 C921 3131 C5CB 9F61" /* ž?s®Çw..É!11ÅËŸa */ - $"64A4 4E70 57C2 5C04 E25B 266E 6887 7477" /* d¤NpWÂ\.â[&nh‡tw */ - $"FCCB 1F0C 89F2 6CF6 713E 4D08 8AC8 9B0C" /* üË..‰òlöq>M.ŠÈ›. */ - $"00AC D9D7 A28A C219 B52B B46A D704 F919" /* .¬Ù×¢ŠÂ.µ+´j×.ù. */ - $"2050 6CCA 215A 299B 9129 9739 DA6F 3A67" /* PlÊ!Z)›‘)—9Úo:g */ - $"FE12 2BF1 4F8B 26ED D21F F727 5B59 22F3" /* þ.+ñO‹&íÒ.÷'[Y"ó */ - $"2E05 F4A0 9754 F431 9AED 1B65 038C CD7F" /* ..ô —Tô1ší.e.ŒÍ. */ - $"8254 E3AE 035C 18D7 0E28 6300 0DF0 998D" /* ‚Tã®.\.×.(c..ð™ */ - $"0191 85AF C71B B3CF F0D6 3A8F B1AA 5E99" /* .‘…¯Ç.³ÏðÖ:±ª^™ */ - $"BAB8 7C7F 0214 F864 4744 E747 7248 3C94" /* º¸|...ødGDçGrH<” */ - $"3AC8 CE04 1019 11ED 4BCC 76E9 FE4E 5728" /* :ÈÎ....íKÌvéþNW( */ - $"5BB0 986C D763 A3C7 AF8A 14E9 D24A AD17" /* [°˜l×c£Ç¯Š.éÒJ­. */ - $"FF66 611F B77C 0830 9093 A560 06FA E9CF" /* ÿfa.·|.0“¥`.úéÏ */ - $"054B 5846 1681 5DBF 34F9 49A9 45E0 8F20" /* .KXF.]¿4ùI©Eà */ - $"7FFD 6264 2193 031D A60F A111 B0B7 CFEE" /* .ýbd!“..¦.¡.°·Ïî */ - $"DE49 EC80 C0F1 D7F6 A495 900B 4126 40BE" /* ÞIì€Àñ×ö¤•.A&@¾ */ - $"185B DFFE C7B0 12AC C143 AA85 70E5 81EF" /* .[ßþǰ.¬ÁCª…påï */ - $"79CE 1662 08E4 203F 1706 40FB CC39 CA8F" /* yÎ.b.ä ?..@ûÌ9Ê */ - $"8002 1CFA 3BCC 6B79 5C83 A4D2 7147 E38F" /* €..ú;Ìky\ƒ¤ÒqGã */ - $"C93B F2E8 6A15 6D30 C314 E898 81E3 FF7B" /* É;òèj.m0Ã.è˜ãÿ{ */ - $"5FC5 EE13 0449 1985 2CBC 73C7 C569 DCB1" /* _Åî..I.…,¼sÇÅiܱ */ - $"8024 F7CA CC7A FE3B CC15 4BCE 5B92 1BBB" /* €$÷ÊÌzþ;Ì.KÎ[’.» */ - $"0048 F291 579F FD20 F11A 1934 CC11 9C3F" /* .Hò‘WŸý ñ..4Ì.œ? */ - $"CE49 027A 9763 9E57 A2FF 7FFD 53E4 E50B" /* ÎI.z—cžW¢ÿ.ýSäå. */ - $"C747 02FF 7869 0537 1482 221E 0220 79D5" /* ÇG.ÿxi.7.‚".. yÕ */ - $"45B1 2E48 6A6C 8486 571F E1F1 BF39 0797" /* E±.Hjl„†W.áñ¿9.— */ - $"5D21 6964 EA9B 13F1 E6B7 C4B5 A2B7 E2BD" /* ]!idê›.ñæ·Äµ¢·â½ */ - $"09C2 B200 0000 0000 003E A392 6527 69B6" /* ÆÂ²......>£’e'i¶ */ - $"B189 8365 F55D 7A2B 0398 4196 BB60 D4F0" /* ±‰ƒeõ]z+.˜A–»`Ôð */ - $"06B6 100C 5B60 D76F 8FEE EFFB D525 0E2B" /* .¶..[`×oîïûÕ%.+ */ - $"3535 B765 22E7 F77C CF5C 8907 7626 62C0" /* 55·e"ç÷|Ï\‰.v&bÀ */ - $"3B04 A170 EEA6 A399 F26B CD7E 92BC 9E13" /* ;.¡p™òkÍ~’¼ž. */ - $"9D2D 6907 B06F 6B9A 957D 3C57 DC9F 06E6" /* -i.°okš•}£Ú*.ãŸþ:Ž */ - $"0D69 7E9D 5B07 1396 ED52 69BC 3971 5630" /* .i~[..–íRi¼9qV0 */ - $"7C63 8DA9 7A40 F364 CC6A FCAC DC7C 59DC" /* |c©z@ódÌjü¬Ü|YÜ */ - $"278A 92E3 6FBF F936 7157 2583 232E E558" /* 'Š’ão¿ù6qW%ƒ#.åX */ - $"0000 C241 6B90 4DCB 6421 F85A B681 4812" /* ..ÂAkMËd!øZ¶H. */ - $"9165 5C06 0195 F213 DB9F 5E2F 4BDE A075" /* ‘e\..•ò.ÛŸ^/KÞ u */ - $"BD9A 741B 971B 3411 1F73 7FF8 D719 BA55" /* ½št.—.4..s.ø×.ºU */ - $"8048 404F FEEA FC74 AEB1 84FD 03F9 5D43" /* €H@Oþêüt®±„ý.ù]C */ - $"BE42 E61F FF7F F4CA BA56 9654 B757 FF60" /* ¾Bæ.ÿ.ôʺV–T·Wÿ` */ - $"CA39 3290 054C E785 0EA7 F04D AF3E B342" /* Ê92.Lç….§ðM¯>³B */ - $"A80A 815D 3954 73F2 871A 51FF 7488 20CD" /* ¨Â]9Tsò‡.Qÿtˆ Í */ - $"90F3 23B8 80FE C6BF 726C 5426 83F2 5400" /* ó#¸€þÆ¿rlT&ƒòT. */ - $"0000 0000 0000 0000 BFA5 D802 777C F954" /* ........¿¥Ø.w|ùT */ - $"286B A586 76CF 26CE 72CA 6FE7 BD43 DB36" /* (k¥†vÏ&ÎrÊoç½CÛ6 */ - $"A826 870E 2EEF E2C4 2E22 E63C FF7F AF51" /* ¨&‡..ïâÄ."æ<ÿ.¯Q */ - $"40C1 B727 22F3 9ACC 894D 0C49 EC7A D998" /* @Á·'"óšÌ‰M.IìzÙ˜ */ - $"64A9 DD22 2545 B85C D621 0609 B73A 9D9F" /* d©Ý"%E¸\Ö!.Æ·:Ÿ */ - $"FF7F FF7F C0F7 00E1 B069 1D76 3BA1 E98C" /* ÿ.ÿ.À÷.á°i.v;¡éŒ */ - $"5F1B 1E11 B6F6 EB6D 6316 9DBC D1B2 DC90" /* _...¶öëmc.¼Ñ²Ü */ - $"5E1D 5EE0 3C65 57D0 B69C 3782 D1BE 3A77" /* ^.^àÛ®‹ÆÛ#S¤.. */ - $"74AA 7920 6233 E3BF B281 AFAA 957D FDFB" /* tªy b3㿲¯ª•}ýû */ - $"216A 3ECE 3139 37DF 8885 620B 5D55 D0FD" /* !j>Î197߈…b.]UÐý */ - $"F796 6A70 CEFD 33D8 B369 178E 99C0 9FFF" /* ÷–jpÎý3سi.Ž™ÀŸÿ */ - $"7FD2 27D4 D615 4840 B836 A0B5 1D6F 2A5A" /* .Ò'ÔÖ.H@¸6 µ.o*Z */ - $"1338 2369 83A0 D409 0FA7 77EF 19B9 21E6" /* .8#iƒ ÔÆ.§wï.¹!æ */ - $"3E21 0CB0 D4D3 362A EA6F 6340 8D73 27FB" /* >!.°ÔÓ6*êoc@s'û */ - $"C3EF 7823 33DF 7A8C 5C69 20C4 5816 72E4" /* Ãïx#3ßzŒ\i ÄX.rä */ - $"712C 3345 6755 76F3 FEAF 494B D0B4 3C8F" /* q,3EgUvóþ¯IKд< */ - $"B83F A050 C3E9 4CA2 6A6E 7AD0 D7FF 5860" /* ¸? PÃéL¢jnzÐ×ÿX` */ - $"548E 54E7 C3B9 6DDF 462C 54BE 5EF9 1A41" /* TŽTçùmßF,T¾^ù.A */ - $"6A46 A4FB 1C36 1CA4 77EC 2899 F147 3422" /* jF¤û.6.¤wì(™ñG4" */ - $"843C 7FAE 123E 6894 9B7F 3125 EB0F 3129" /* „<.®.>h”›.1%ë.1) */ - $"9DC1 8469 CE90 BB6E 4F2C 385A 0FD1 9AC7" /* Á„iλnO,8Z.ÑšÇ */ - $"3318 3BF0 B1AA A51A 9022 A143 29FF 7FC1" /* 3.;𱪥."¡C)ÿ.Á */ - $"0F0F 6570 67C4 7FA7 9906 DE4E 5439 A278" /* ..epgÄ.§™.ÞNT9¢x */ - $"34E1 3D57 BB0E 086E 4C71 4406 DA9D CA56" /* 4á=W»..nLqD.ÚÊV */ - $"3EFD D077 5DA5 CD7D C244 9128 F408 1F03" /* >ýÐw]¥Í}ÂD‘(ô... */ - $"0C8F FF4B 9274 2EC6 E208 13C5 EE1B 3CEA" /* .ÿK’t.Æâ..Åî.<ê */ - $"C5C0 06F5 0FA1 11FF 7FE3 A446 32E6 F4DA" /* ÅÀ.õ.¡.ÿ.ã¤F2æôÚ */ - $"23EC 5108 3AE0 CD16 AFFF 3965 8196 56E2" /* #ìQ.:àÍ.¯ÿ9e–Vâ */ - $"2881 4EB9 CA14 5C4A 8091 B176 8823 BF09" /* (N¹Ê.\J€‘±vˆ#¿Æ */ - $"CED5 0D88 E6BB DD95 1B72 36E8 809C D432" /* ÎÕ.ˆæ»Ý•.r6耜Ô2 */ - $"872D C08C 7DCB B30E 548B AE16 0D85 6B49" /* ‡-ÀŒ}˳.T‹®..…kI */ - $"9B28 D491 ECD6 F598 691A 0891 135A 63A0" /* ›(Ô‘ìÖõ˜i..‘.Zc  */ - $"593C 1FFD 8A54 4FB9 F2AB 20FC 5CF3 1B88" /* Y<.ýŠTO¹ò« ü\ó.ˆ */ - $"EE7E 8355 45D6 87C8 28CE 7B33 92A2 D8D6" /* î~ƒUEÖ‡È(Î{3’¢ØÖ */ - $"E8DF EF94 500A 0D78 DE9F 8657 F7BD 7F40" /* èßï”PÂ.xÞŸ†W÷½.@ */ - $"5E07 0789 EDC7 F3A5 A0BF 3929 6B19 A460" /* ^..‰íÇó¥ ¿9)k.¤` */ - $"7A50 91FF 42EA 5F12 DFA5 E0A0 84CC E869" /* zP‘ÿBê_.ߥࠄÌèi */ - $"BB1F 6EDA 2238 5DB0 7F22 3521 F04B FF6B" /* ».nÚ"8]°."5!ðKÿk */ - $"6827 722A DD5F 3C9D D3F4 2BE3 614D 0A3F" /* h'r*Ý_<Óô+ãaMÂ? */ - $"62C4 E6AC 95CA 5946 37E8 BC76 97FD 5167" /* bÄæ¬•ÊYF7è¼v—ýQg */ - $"C970 D4C7 0655 C470 5913 DBBD AA8C 87A4" /* ÉpÔÇ.UÄpY.Û½ªŒ‡¤ */ - $"3C63 0B7F 54CD 391E 574D F2D5 C728 20B7" /* .“„O.À.Z÷ßS.8 */ - $"3615 80D7 428E 90F6 4620 02EA 4590 DF22" /* 6.€×BŽöF .êEß" */ - $"4B70 2FB2 CADA A529 F7FA E7C6 BC99 DFCD" /* Kp/²ÊÚ¥)÷úçÆ¼™ßÍ */ - $"5EE7 D677 B5BE F819 6A55 6070 E1A9 DF53" /* ^çÖwµ¾ø.jU`pá©ßS */ - $"3F82 0229 B6B7 D247 1967 8313 056F 9D27" /* ?‚.)¶·ÒG.gƒ..o' */ - $"753E E4DD EB7F 1372 C0F7 D72E 349B 2F9B" /* u>äÝë..rÀ÷×.4›/› */ - $"686C C9AF 0896 0865 7A3A 5A9D 807F 292A" /* hlɯ.–.ez:Z€.)* */ - $"8DDA A776 4B3C 0993 532D D682 A41B 9DC2" /* Ú§vK<Æ“S-Ö‚¤. */ - $"5113 9D60 934B 2055 D671 C6C4 1252 3CEF" /* Q.`“K UÖqÆÄ.R<ï */ - $"C72F AC19 4BED 185D BC60 5957 F81B 8278" /* Ç/¬.Kí.]¼`YWø.‚x */ - $"20B5 9173 4A1B FDC9 295D 54B7 8AFE 6938" /* µ‘sJ.ýÉ)]T·Šþi8 */ - $"FE49 BA78 3225 49A1 4243 823C 52B9 8489" /* þIºx2%I¡BC‚ÚOî›-ó */ - $"B640 95E8 70A5 B577 8C1D 99D5 797D D482" /* ¶@•èp¥µwŒ.™Õy}Ô‚ */ - $"E23A 56DD 644D 9623 FEE2 63D2 A3DB E146" /* â:VÝdM–#þâcÒ£ÛáF */ - $"FC39 35A7 6C28 63D8 5240 0C80 0000 0000" /* ü95§l(cØR@.€.... */ - $"0001 4095 99D3 7A7A 0A05 B673 69BC DA9C" /* ..@•™ÓzzÂ.¶si¼Úœ */ - $"A108 DDEA EE48 6385 0790 FEA1 1AFC 2CED" /* ¡.ÝêîHc….þ¡.ü,í */ - $"2225 BE73 2ED7 00BB 2301 80FE 09DF E78E" /* "%¾s.×.»#.€þÆßçŽ */ - $"6FE6 4743 A0EE 0A03 4C9E F046 CDD8 E7F1" /* oæGC îÂ.LžðFÍØçñ */ - $"DB3F 1B67 F6E1 1F31 8096 90DF 5110 40B0" /* Û?.göá.1€–ßQ.@° */ - $"0000 0000 0000 0000 C0B9 E0FC 41FB A11C" /* ........À¹àüAû¡. */ - $"4696 89A0 DE42 F8C7 27D0 3F03 AA51 70FD" /* F–‰ ÞBøÇ'Ð?.ªQpý */ - $"DC5F D7B9 AFD3 A0F3 7BAA A910 9E5C 259E" /* Ü_×¹¯Ó ó{ª©.ž\%ž */ - $"E4FB 8F8E 01C1 96E2 0768 FE5A 0A43 E2F8" /* äûŽ.Á–â.hþZÂCâø */ - $"DA74 9500 C241 D1F6 3EFF 3F06 586F A511" /* Út•.ÂAÑö>ÿ?.Xo¥. */ - $"CCFE 8FE7 61E1 C392 D001 3F52 1CA8 CC23" /* ÌþçaáÃ’Ð.?R.¨Ì# */ - $"93F0 27DF 893F 4AC1 06C3 34DA 8953 BBC0" /* “ð'߉?JÁ.Ã4Ú‰S»À */ - $"84C0 4843 27E0 067E 5EBF FF7A 1540 4C0E" /* „ÀHC'à.~^¿ÿz.@L. */ - $"FA6C 44A1 A7BC DB24 6AD7 C367 EC93 33BF" /* úlD¡§¼Û$j×Ãgì“3¿ */ - $"FECB C1DF 83CC 5BF7 A7C0 DF62 2EFA 4283" /* þËÁ߃Ì[÷§Àßb.úBƒ */ - $"6E49 2492 4924 9249 2492 4924 9246 A4A5" /* nI$’I$’I$’I$’F¤¥ */ - $"7754 9685 B091 D8FF 1549 CF90 2079 3AFB" /* wT–…°‘Øÿ.IÏ y:û */ - $"E925 85CC 62A2 E49B 476B 47B9 319B 630F" /* é%…Ìb¢ä›GkG¹1›c. */ - $"A6B8 182C E282 D1CD 920A 4EB3 21BF 943C" /* ¦¸.,â‚ÑÍ’ÂN³!¿”< */ - $"27BF CCDE BD6E 481A 188C F70B C257 8118" /* '¿ÌÞ½nH..Œ÷.ÂW. */ - $"FBF7 FF78 F422 A3DB AE81 4980 0000 0000" /* û÷ÿxô"£Û®I€.... */ - $"0000 0000 0000 1EE1 BFBB C300 0000 0000" /* .......á¿»Ã..... */ - $"0000 0000 0000 14FB 3FE1 1B7A D142 E13F" /* .......û?á.zÑBá? */ - $"5B6F 704A 61CF 957D 258E F744 FB26 8356" /* [opJaÏ•}%Ž÷Dû&ƒV */ - $"74AD 1DDB 02F2 CF85 7AEB 3A06 6F12 084E" /* t­.Û.òÏ…zë:.o..N */ - $"8E93 D6DA E4FE 9FBE 2D16 1C87 701F 55C3" /* Ž“ÖÚäþŸ¾-..‡p.Uà */ - $"9966 3E8F 36CB 6D9F F3F6 F8D3 B3B9 E2C1" /* ™f>6ËmŸóöøÓ³¹âÁ */ - $"1019 C6E6 8FFF 7FDC 6948 D3AB C944 C64A" /* ..Ææÿ.ÜiHÓ«ÉDÆJ */ - $"8000 0000 0000 0000 000A B0CB 3806 445C" /* €........°Ë8.D\ */ - $"7110 4CDE 3651 AC94 777C 8AB0 5382 04AF" /* q.LÞ6Q¬”w|аS‚.¯ */ - $"32E5 68C2 122F 8A5B 12A8 FF39 CF5E 72FB" /* 2åhÂ./Š[.¨ÿ9Ï^rû */ - $"EFD4 1669 47C6 525E 88EF 0AAC 1EE1 98B6" /* ïÔ.iGÆR^ˆï¬.ᘶ */ - $"0BFF 7FAF 8A4B 7158 F7D7 1707 DE93 841E" /* .ÿ.¯ŠKqX÷×..Þ“„. */ - $"3C82 3260 1FFF 1C8B 6A6E 8C66 0000 0000" /* <‚2`.ÿ.‹jnŒf.... */ - $"0000 0000 0000 0121 EF03 234C 3124 0000" /* .......!ï.#L1$.. */ - $"0000 0000 0000 0000 077C 5957 204B A2ED" /* .........|YW K¢í */ - $"59B8 F3C4 CC60 8A58 7E23 0B9F A0FD 1DC8" /* Y¸óÄÌ`ŠX~#.Ÿ ý.È */ - $"8E0F FE2B 5F9F 12D8 09B3 57BB 7818 3CF5" /* Ž.þ+_Ÿ.ØÆ³W»x.<õ */ - $"D579 D427 5198 BD86 E2FC 8775 915B 37A5" /* ÕyÔ'Q˜½†âü‡u‘[7¥ */ - $"B2E6 6BD8 8404 31D9 4C54 3621 6561 5C3E" /* ²ækØ„.1ÙLT6!ea\> */ - $"4A80 0000 0000 0000 0000 0014 D22D 6758" /* J€..........Ò-gX */ - $"336C 63A1 C13F 3E94 9877 8E90 4E5D 0C70" /* 3lc¡Á?>”˜wŽN].p */ - $"F80A 4262 C2CC C7E4 DAE8 526F 393F 4558" /* øÂBbÂÌÇäÚèRo9?EX */ - $"5CC9 5DDA B2FF 7ED5 F809 3A02 F1EE 2760" /* \É]Ú²ÿ~ÕøÆ:.ñî'` */ - $"FF7E 5037 F054 4A1B 9602 92EA 8D26 A198" /* ÿ~P7ðTJ.–.’ê&¡˜ */ - $"9C4F 8238 A60E 7734 20F8 18FE 478F 5403" /* œO‚8¦.w4 ø.þGT. */ - $"1658 618B A80F 879F 4A98 E809 DEB2 7CE9" /* .Xa‹¨.‡ŸJ˜èÆÞ²|é */ - $"9724 407B B8C8 A48D 4F33 9126 751B 9FC2" /* —$@{¸È¤O3‘&u.ŸÂ */ - $"0283 44C3 5AFD 9546 FCE2 4212 4F5B 01D4" /* .ƒDÃZý•FüâB.O[.Ô */ - $"6E53 A032 DA91 40F4 4BDE 0C23 FF1E D5DE" /* nS 2Ú‘@ôKÞ.#ÿ.ÕÞ */ - $"B543 59DC C0DC 759A 6043 5883 A5FE C785" /* µCYÜÀÜuš`CXƒ¥þÇ… */ - $"BA68 9F46 C21A 4C50 20E3 0488 FB34 1043" /* ºhŸFÂ.LP ã.ˆû4.C */ - $"FC68 562B 635A EE8D E334 0C6F 25A9 E4C9" /* ühV+cZîã4.o%©äÉ */ - $"3484 2AC2 6188 7242 E3F6 AEAC 6F86 2DE2" /* 4„*ÂaˆrBãö®¬o†-â */ - $"C377 BD02 CB1C 9553 5485 6A5B E118 9BBD" /* Ãw½.Ë.•ST…j[á.›½ */ - $"DC6B 2C92 C6CC C866 6E7F FE63 AB01 FE7D" /* Ük,’ÆÌÈfn.þc«.þ} */ - $"FF7F BB81 EA94 87BE B101 F468 0E30 F111" /* ÿ.»ê”‡¾±.ôh.0ñ. */ - $"7BC9 FA0D F87F BDD0 811B 8588 1AE7 8387" /* {Éú.ø.½Ð.…ˆ.烇 */ - $"5C06 B3A9 E2ED 6E5B B524 35AA CBFF 50D6" /* \.³©âín[µ$5ªËÿPÖ */ - $"49D9 6918 3837 59BD E7CC 8796 B0AF 2729" /* IÙi.87Y½ç̇–°¯') */ - $"0512 5A97 66FF 1A85 E004 1882 0108 EA41" /* ..Z—fÿ.…à..‚..êA */ - $"BBCC 15E0 254C 59AF 877D 0722 15FB ADA1" /* »Ì.à%LY¯‡}.".û­¡ */ - $"84C2 9B83 DD5B C6B1 EE29 084C 08F7 06C8" /* „›ƒÝ[Ʊî).L.÷.È */ - $"4F07 9818 6BF2 66E2 582B 2F7D 29AD BAFA" /* O.˜.kòfâX+/})­ºú */ - $"8F9E 0AC8 60AE D10E 3E49 17BF E015 0C5E" /* žÂÈ`®Ñ.>I.¿à..^ */ - $"5C51 5D5B 5BC1 6C83 C428 4505 E9BB 61CB" /* \Q][[ÁlƒÄ(E.é»aË */ - $"D7C2 F3C6 C102 73F5 409E D0CF B43E E497" /* ×ÂóÆÁ.sõ@žÐÏ´>ä— */ - $"C1E0 707B 3F6F EAA8 2F10 9285 7D9D 9F81" /* Áàp{?oê¨/.’…}Ÿ */ - $"303D 3A70 2B3F 4A45 558D 63F6 EEB9 CF21" /* 0=:p+?JEUcöî¹Ï! */ - $"52C1 27C2 8439 0BE2 BE1F A553 A1C7 E44C" /* RÁ'„9.â¾.¥S¡ÇäL */ - $"5422 9BC0 356D 1B40 E53B 3064 AA69 F464" /* T"›À5m.@å;0dªiôd */ - $"7AA7 4E56 F7E2 7AE5 CB6E E538 8582 1927" /* z§NV÷âzåËnå8…‚.' */ - $"019D B4B0 E6D9 0F0E 9670 7723 62CF C422" /* .´°æÙ..–pw#bÏÄ" */ - $"DD53 ED12 92AE 20B0 6B63 6CB3 C596 4F4E" /* ÝSí.’® °kcl³Å–ON */ - $"18B6 FD06 93B2 6F73 A740 770D C39F B873" /* .¶ý.“²os§@w.߸s */ - $"598F 3667 6F7A 29E9 9E6F 9D04 48DD A175" /* Y6goz)éžo.HÝ¡u */ - $"2AFC 61BD D706 2A8E 9789 F513 B8AF B8EA" /* *üa½×.*Ž—‰õ.¸¯¸ê */ - $"2426 7EDF 1EFA 1D19 7A50 D22F D15E 76FE" /* $&~ß.ú..zPÒ/Ñ^vþ */ - $"CD34 19AD 8126 775C A5FB B209 9658 F850" /* Í4.­&w\¥û²Æ–XøP */ - $"F2FD A65F B487 9F50 7FF0 12FD BA8B FB6E" /* òý¦_´‡ŸP.ð.ýº‹ûn */ - $"49F5 50DF C349 B4F9 F4D7 EDEB 53BE DEB0" /* IõPßÃI´ùô×íëS¾Þ° */ - $"7F85 29FB 5DFF 36B9 BEDA 9BF8 3CF2 FDAE" /* .…)û]ÿ6¹¾Ú›ø<òý® */ - $"DFB5 ABBE D3DB ED2B FDBA CFFB 7606 FB74" /* ßµ«¾ÓÛí+ýºÏûv.ût */ - $"D3F8 6B96 83BA F7ED EB3F 7EDE AFE0 EECD" /* Óøk–ƒº÷íë?~Þ¯àîÍ */ - $"FB5E 7F6E 807E DB9B F6BD F0FE D32B EA21" /* û^.n€~Û›ö½ðþÓ+ê! */ - $"EFA8 1EFA 823F 6DCF FB6C 8BEA 6CFD B5AF" /* ï¨.ú‚?mÏûl‹êlýµ¯ */ - $"0774 CFDB D337 FB7A 3F83 BA5D F51F DF55" /* .tÏÛÓ7ûz?ƒº]õ.ßU */ - $"47FB 690F DA86 F791 DDD6 2CCB E6B8 C536" /* Gûi.Ú†÷‘ÝÖ,Ëæ¸Å6 */ - $"D512 AD5E 1B08 0B8A 8D03 2F75 60E5 6BF8" /* Õ.­^...Š./u`åkø */ - $"447B C66A 7EC2 7912 B45F 8E48 277C D8E1" /* D{Æj~Ây.´_ŽH'|Øá */ - $"809C 5755 D718 BAAC F891 2AE5 F97C 3F5E" /* €œWU×.º¬ø‘*åù|?^ */ - $"0116 3A00 99F4 5896 E0EA B189 F5A5 7929" /* ..:.™ôX–à걉õ¥y) */ - $"C491 B57F 2232 B0C2 52F8 89B1 DB2F B284" /* Ä‘µ."2°ÂRø‰±Û/²„ */ - $"C1EE 0C43 EF76 FD94 F871 4077 7E19 EC36" /* Áî.Cïvý”øq@w~.ì6 */ - $"BBFA 6DFF 3C0B 5A98 89B4 84BB 56DB 5FC2" /* »úmÿ<.Z˜‰´„»VÛ_ */ - $"16C2 351A B46E AF45 AAC7 DD2E 97ED 970C" /* .Â5.´n¯EªÇÝ.—í—. */ - $"76D8 F8D0 42EB E639 28E8 BE33 A530 3B58" /* vØøÐBëæ9(è¾3¥0;X */ - $"2374 6B1C 97B0 1CD5 ACD5 615F FD30 62C6" /* #tk.—°.Õ¬Õa_ý0bÆ */ - $"899A 977D 4B74 CAB1 E9EE 6588 4E67 8733" /* ‰š—}KtʱéîeˆNg‡3 */ - $"B359 BCC7 DC7B 9884 E4A8 78CB 77E7 675D" /* ³Y¼ÇÜ{˜„ä¨xËwçg] */ - $"FF2D FCE4 7744 BDD1 A833 6BEC C481 2DA8" /* ÿ-üäwD½Ñ¨3kìÄ-¨ */ - $"3D1C 5D57 7595 1DEB 2278 31AE 4188 B1F2" /* =.]Wu•.ë"x1®Aˆ±ò */ - $"54E1 113D DA75 96ED 71FF 1577 7820 4D22" /* Tá.=Úu–íqÿ.wx M" */ - $"2BD9 3841 A416 96A4 2549 1A9D 3A55 8E39" /* +Ù8A¤.–¤%I.:UŽ9 */ - $"A929 4B4E E11F 0F88 8BB6 7E08 2210 9D21" /* ©)KNá..ˆ‹¶~.".! */ - $"92BF 623B B974 D371 0208 1489 5713 0F66" /* ’¿b;¹tÓq...‰W..f */ - $"3C4C 8394 72A6 08A1 3D86 BA0C 198B CE8B" /* 8.ʦ!m1ÂpW */ - $"0B3D 429A 6CFB 0819 EB4D B9D2 549F 6601" /* .=Bšlû..ëM¹ÒTŸf. */ - $"2436 5BEA 9DAC BBDA AB3A AB4F ABFF 768D" /* $6[ꬻګ:«O«ÿv */ - $"E220 E451 7E45 49C5 21FD B2E6 DEFD 2505" /* â äQ~EIÅ!ý²æÞý%. */ - $"836B 3500 54D8 50B8 7538 C5BF B951 7FB2" /* ƒk5.TØP¸u8Å¿¹Q.² */ - $"F927 CBB1 7AA1 D0BD 51E2 D7F7 C440 5DA0" /* ù'˱z¡Ð½Qâ×÷Ä@]  */ - $"89EF FEEE BF2E A5E4 F98A B652 F25A D1DC" /* ‰ïþî¿.¥äùжRòZÑÜ */ - $"482A 40CB A288 250A 22CA BCB4 815D 077E" /* H*@Ë¢ˆ%Â"ʼ´].~ */ - $"229E 59B2 8249 D336 A3C1 5D5B FAE5 483C" /* "žY²‚IÓ6£Á][úåH< */ - $"67F3 255E 1530 AFB1 D900 48FE 254B C54E" /* gó%^.0¯±Ù.Hþ%KÅN */ - $"42DC EE54 066B CE83 B1C9 F021 2031 8DF1" /* BÜîT.k΃±Éð! 1ñ */ - $"FE58 9315 B761 79CA 409A 6CD6 337A 14A9" /* þX“.·ayÊ@šlÖ3z.© */ - $"8622 90BC 3474 727C 66CE 09C5 61B4 A386" /* †"¼4tr|fÎÆÅa´£† */ - $"7509 819F 6EEB 5FCC C0A7 084A 7742 A6E3" /* uÆŸnë_ÌÀ§.JwB¦ã */ - $"F69A 90CA 24AD EB53 60AB 5FD0 FD6F 3DE6" /* öšÊ$­ëS`«_Ðýo=æ */ - $"44CF 80FB A400 B71F 1DD4 C690 A3DB 54CF" /* DÏ€û¤.·..ÔÆ£ÛTÏ */ - $"F492 7EC7 540C 048F 3D35 FD63 7593 751B" /* ô’~ÇT..=5ýcu“u. */ - $"F88F 4B7D E355 6685 FD5F 2743 8DF3 D839" /* øK}ãUf…ý_'CóØ9 */ - $"0894 99DB 1FAA 22B2 8800 8C9F D91F E60B" /* .”™Û.ª"²ˆ.ŒŸÙ.æ. */ - $"0EEE 2870 2932 2AE5 F401 11F0 8B2B 53DB" /* .î(p)2*åô..ð‹+SÛ */ - $"8028 E39D 744F E70B 11F3 A220 ABF4 FCD5" /* €(ãtOç..ó¢ «ôüÕ */ - $"37C9 0AC8 8749 215E 1D89 4022 96D0 04FF" /* 7ÉÂȇI!^.‰@"–Ð.ÿ */ - $"0C57 AC3D 351A 8582 EBA4 EA2B B65B A14B" /* .W¬=5.…‚ë¤ê+¶[¡K */ - $"048B E031 DE15 251C 669F 8457 FF38 D131" /* .‹à1Þ.%.fŸ„Wÿ8Ñ1 */ - $"0027 BB20 9721 6636 A375 AFBA AF7B BDBA" /* .'» —!f6£u¯º¯{½º */ - $"05F3 3114 E55E DAA9 219F 9516 F3DF 12B4" /* .ó1.å^Ú©!Ÿ•.óß.´ */ - $"DA3F 83DF 13A0 9900 3FA6 17E9 B014 E404" /* Ú?ƒß. ™.?¦.é°.ä. */ - $"434D 02D4 4283 D73D F4D1 5D95 8B25 6A6A" /* CM.ÔBƒ×=ôÑ]•‹%jj */ - $"CD5E BA93 82DF 1A30 4B0D 0E21 65A1 0001" /* Í^º“‚ß.0K..!e¡.. */ - $"2869 F06A 8949 311F DB03 39EB E8E1 5BFB" /* (iðj‰I1.Û.9ëèá[û */ - $"F11C 05C6 2469 BAEA 4516 4CC4 DAF5 927A" /* ñ..Æ$iºêE.LÄÚõ’z */ - $"2CEB 3150 DB6F 4DE2 8EED 59C0 604F 9AE5" /* ,ë1PÛoMâŽíYÀ`Ošå */ - $"E136 83B0 F348 3D1A B44D 3A8E D77A B0DE" /* á6ƒ°óH=.´M:Ž×z°Þ */ - $"5267 1055 24F7 3C3D EB3E 08EF 97F9 4B29" /* Rg.U$÷<=ë>.ï—ùK) */ - $"454F 1B5D 4A6E 56E1 0F90 00A1 4467 7454" /* EO.]JnVá..¡DgtT */ - $"B556 362A 9A19 9E35 19E9 BFDF E2AD 91D6" /* µV6*š.ž5.é¿ßâ­‘Ö */ - $"7FB6 95B9 F19D 8D07 2FAF 3162 D880 0AA7" /* .¶•¹ñ./¯1b؀§ */ - $"C9C4 94AD C49A 1231 2D9F 780F 6E3E 57D2" /* ÉÄ”­Äš.1-Ÿx.n>WÒ */ - $"8C1C 582C 179A 721C 7063 F056 F938 4EA1" /* Œ.X,.šr.pcðVù8N¡ */ - $"F3E4 E458 D254 280F 92CA ABDC 4ECF 3EB7" /* óääXÒT(.’Ê«ÜNÏ>· */ - $"95DF A3B8 45C0 1427 BA54 B2E2 D1BC B67D" /* •ߣ¸EÀ.'ºT²âѼ¶} */ - $"5A0F EE12 37D4 BE1C 5785 A90D 2E62 B301" /* Z.î.7Ô¾.W…©..b³. */ - $"F66D A637 374B 17DA 7446 C318 3B11 4F50" /* öm¦77K.ÚtFÃ.;.OP */ - $"ED27 AEB2 D8F6 C3E4 AB48 5E7C 1D46 9463" /* í'®²ØöÃä«H^|.F”c */ - $"E7BA 9296 7BFA FDBB 39F2 7E86 1A5D 8FFA" /* 纒–{úý»9ò~†.]ú */ - $"7E06 FC92 3472 7950 8B67 8329 FA9F 47AA" /* ~.ü’4ryP‹gƒ)úŸGª */ - $"51F3 01AD A6DA 224F E711 AF6F BA8F FA86" /* Qó.­¦Ú"Oç.¯oºú† */ - $"FF61 EBD1 5613 B076 3543 3515 FF1B 1E9C" /* ÿaëÑV.°v5C5.ÿ..œ */ - $"CE78 6A36 7CCF FD63 E9E3 00E6 EA60 1DBE" /* Îxj6|Ïýcéã.æê`.¾ */ - $"42FB 3E66 D69D 8BA6 A0E6 13E1 2087 20D7" /* Bû>fÖ‹¦ æ.á ‡ × */ - $"7941 E3C4 C7C6 67FF 2C9C A486 253A C206" /* yAãÄÇÆgÿ,œ¤†%:Â. */ - $"F961 4A0E D9DD D32A 6D67 A012 B1A2 B549" /* ùaJ.ÙÝÓ*mg .±¢µI */ - $"3F58 8BA1 CA98 94EB 6099 570C D139 09AA" /* ?X‹¡Ê˜”ë`™W.Ñ9ƪ */ - $"8DEB C31A 0812 5DAD 2926 6846 D789 4430" /* ëÃ...]­)&hF׉D0 */ - $"4931 16B5 0804 52F1 040D B0A7 DDD7 7052" /* I1.µ..Rñ..°§Ý×pR */ - $"4269 C765 98AA 3941 F9EE 987A 2EAD 46BE" /* BiÇe˜ª9Aùî˜z.­F¾ */ - $"AA2B DD79 D9F9 7AF7 9318 B633 97CC DB93" /* ª+ÝyÙùz÷“.¶3—ÌÛ“ */ - $"5AF7 23D4 08E5 1FD7 EA45 85E9 4C98 77B6" /* Z÷#Ô.å.×êE…éL˜w¶ */ - $"0038 8756 6C8F 1A76 8D36 D67C 0BBD 248F" /* .8‡Vl.v6Ö|.½$ */ - $"8465 4CC4 7B7A C1B7 6348 F763 66A7 F04E" /* „eLÄ{zÁ·cH÷cf§ðN */ - $"FF4E 1C72 1053 323F 9E55 F75D 4097 9C24" /* ÿN.r.S2?žU÷]@—œ$ */ - $"AD5D 3C1B 766A 50A8 7252 6563 2687 8251" /* ­]<.vjP¨rRec&‡‚Q */ - $"8AE2 2EAE 6AA9 6439 2831 281E 034D 7999" /* Šâ.®j©d9(1(..My™ */ - $"F46F 47C1 911D 553A D887 0E8F 6E83 1B48" /* ôoGÁ‘.U:؇.nƒ.H */ - $"F0D9 C566 C0FF 0F02 5E68 EA76 7381 25B1" /* ðÙÅfÀÿ..^hêvs%± */ - $"D388 A375 370B A655 625B B71A 191C CD9D" /* Óˆ£u7.¦Ub[·...Í */ - $"F3CA 83B2 88D6 3712 B3E3 6CEA 19DC 3295" /* óʃ²ˆÖ7.³ãlê.Ü2• */ - $"3398 DF4F 1279 B346 1DD8 ED24 186F BEE1" /* 3˜ßO.y³F.Øí$.o¾á */ - $"8FD4 5FAD EAFF 6960 DE17 A0A4 B89E 7CF3" /* Ô_­êÿi`Þ. ¤¸ž|ó */ - $"C360 9DA8 91BF 470F ECC0 C0AA E260 3430" /* Ã`¨‘¿G.ìÀÀªâ`40 */ - $"EF4E CAD6 F964 05B0 8E27 C1F6 7516 4350" /* ïNÊÖùd.°Ž'Áöu.CP */ - $"B87D 7D16 703E 7972 1232 2E0F 6577 664C" /* ¸}}.p>yr.2..ewfL */ - $"8FA6 1414 7FB2 A33D A69E FD2F CF21 FC8F" /* ¦...²£=¦žý/Ï!ü */ - $"23A5 6AED 3E28 34A0 F73F F7D6 7F7C 5B6B" /* #¥jí>(4 ÷?÷Ö.|[k */ - $"0596 8B6D BACA 52DF 8E72 CDBA E221 7092" /* .–‹mºÊRߎrͺâ!p’ */ - $"A3AB B99D 1EE3 3F21 1AD2 0F0B DC5A 8BE1" /* £«¹.ã?!.Ò..ÜZ‹á */ - $"9E35 D891 9A60 EF28 5934 FA3B 8009 DC42" /* ž5Ø‘š`ï(Y4ú;€ÆÜB */ - $"11BE 487F D776 AF26 0EBD BF3E 8DCC B940" /* .¾H.×v¯&.½¿>̹@ */ - $"2523 D6E1 447F EA8A 5F66 DE0B 0962 249E" /* %#ÖáD.êŠ_fÞ.Æb$ž */ - $"165D BB6D 1EBD 1237 021B F903 DEEF 78FE" /* .]»m.½.7..ù.Þïxþ */ - $"B3F3 76B7 429F 336D 0EFA FF47 5CBC E3DF" /* ³óv·BŸ3m.úÿG\¼ãß */ - $"FC44 41BA BC9D 67AE 0B43 D817 FBCE 4F36" /* üDAº¼g®.CØ.ûÎO6 */ - $"8209 CCB5 38F6 712E 7DEA 4E9E 4B38 3B80" /* ‚ÆÌµ8öq.}êNžK8;€ */ - $"7B16 28E3 AB59 340E 93F0 4C65 C281 A4F1" /* {.(ã«Y4.“ðLe¤ñ */ - $"08E4 26A6 31AA B6A4 F784 BA8E C7FA 8919" /* .ä&¦1ª¶¤÷„ºŽÇú‰. */ - $"4B19 FA98 09C8 3C79 27DA CB39 881C 3B0E" /* K.ú˜ÆÈoâN¯sÛ^·)¤¿‰J */ - $"782D E8F2 91C9 E628 322C F20C 2D0C 73DD" /* x-èò‘Éæ(2,ò.-.sÝ */ - $"F093 4ED7 63DF E121 E7B9 DB7E 530D E3BD" /* ð“N×cßá!ç¹Û~S.ã½ */ - $"3469 29CE 5768 BE0F 1E91 46B7 00A0 CC2E" /* 4i)ÎWh¾..‘F·. Ì. */ - $"183D 7D57 762C 062D 0707 EBA4 177D 73E8" /* .=}Wv,.-..ë¤.}sè */ - $"FA30 83A6 479B AA9A 702E B8FD 9B54 0FF3" /* ú0ƒ¦G›ªšp.¸ý›T.ó */ - $"8222 1EB0 4CDD 4CF7 F0AB 8972 B655 9426" /* ‚".°LÝL÷ð«‰r¶U”& */ - $"4EEE 3B88 A6D2 F8B9 6845 0467 D606 9DDD" /* Nî;ˆ¦Òø¹hE.gÖ.Ý */ - $"C547 A61F 71E7 5A8E 6B83 51FD B2C1 A732" /* ÅG¦.qçZŽkƒQý²Á§2 */ - $"A6EA A0AA 6D13 E80B 0EC4 5DF4 348F FF6E" /* ¦ê ªm.è..Ä]ô4ÿn */ - $"2289 CFB4 1AE2 18D1 340F B29B E1FF 16B1" /* "‰Ï´.â.Ñ4.²›áÿ.± */ - $"0F0F B5AD 260A 7FD9 B1F2 3D0C 404F 75A8" /* ..µ­&Â.Ù±ò=.@Ou¨ */ - $"E4DB 52EE 259B D762 E5E5 4FFD 22AC 4856" /* äÛRî%›×bååOý"¬HV */ - $"9C62 8DDB F5D8 58F8 4EC7 1110 30EC E0D8" /* œbÛõØXøNÇ..0ìàØ */ - $"7FED 0176 FEF2 53B3 75C6 34E1 A3A7 79DA" /* .í.vþòS³uÆ4ᣧyÚ */ - $"1FDC 42EC 83B2 F3EB 056C E41B 4E65 3699" /* .ÜB샲óë.lä.Ne6™ */ - $"4BD6 1AE3 85A9 DBF6 89D4 39B0 79F9 8877" /* KÖ.ã…©Ûö‰Ô9°yùˆw */ - $"161C 2CB5 3F3C 294B 8CA3 A6F6 556C 4CAD" /* ..,µ?<)KŒ£¦öUlL­ */ - $"A752 918D 7E61 BA54 02D2 CF5C AEBE 1A0B" /* §R‘~aºT.ÒÏ\®¾.. */ - $"B75C A9CA 9876 AB0B 6028 4D8E D46C E479" /* ·\©Ê˜v«.`(MŽÔläy */ - $"A186 EA09 496E 0935 04E2 4C25 FA18 270B" /* ¡†êÆInÆ5.âL%ú.'. */ - $"A054 DE1C 1BD8 A089 9D95 1335 E93C 7C21" /*  TÞ..Ø ‰•.5é<|! */ - $"435E A570 3C42 AA88 0075 BB20 20AF 90EC" /* C^¥pÝÙøFF|ïÆS.+F */ - $"5BD9 2BFF 5F26 72DB 523D D0FC CE49 47B0" /* [Ù+ÿ_&rÛR=ÐüÎIG° */ - $"D98B 4D36 1B60 7C3A 0707 F46A 8565 4CCB" /* Ù‹M6.`|:..ôj…eLË */ - $"5DC1 A50D C039 BF24 7418 78A7 6D4F DE55" /* ]Á¥.À9¿$t.x§mOÞU */ - $"1CB8 B787 158C 6C4D D840 920F 3130 7A92" /* .¸·‡.ŒlMØ@’.10z’ */ - $"1CF4 1B74 BC2B 8954 0A80 9636 BFC3 6330" /* .ô.t¼+‰T€–6¿Ãc0 */ - $"3E7F 7E4E A811 39F2 3D56 10D3 6A76 4E20" /* >.~N¨.9ò=V.ÓjvN */ - $"F646 5CD3 9166 D2D6 046F E398 A934 2D04" /* öF\Ó‘fÒÖ.o㘩4-. */ - $"2E01 C602 1332 8274 6AE2 D5C9 6226 30B3" /* ..Æ..2‚tjâÕÉb&0³ */ - $"07DB FDF3 B3BB 6C31 B162 FF63 0639 8E6F" /* .Ûýó³»l1±bÿc.9Žo */ - $"3501 A54C 1AA6 42EB EDE7 885E EE2F A6D9" /* 5.¥L.¦Bëíçˆ^î/¦Ù */ - $"B74A AE20 8FFB 6FCF A537 642D F17F A45E" /* ·J® ûoÏ¥7d-ñ.¤^ */ - $"EE37 DE05 7569 A81E F464 A35B 603B 4F40" /* î7Þ.ui¨.ôd£[`;O@ */ - $"D00F C3D2 D04A F943 AC3C 37E2 1B2B A1D3" /* Ð.ÃÒÐJùC¬<7â.+¡Ó */ - $"09D6 A92B F7CB B2FA 9FF7 97F2 83F9 BABC" /* ÆÖ©+÷˲úŸ÷—òƒùº¼ */ - $"E4BE F015 E804 97FC A16F 6E8B 9004 8424" /* ä¾ð.è.—ü¡on‹.„$ */ - $"04F7 1295 0A15 3C1A AA5D 6A75 372A 0BB4" /* .÷.•Â.<.ª]ju7*.´ */ - $"4849 DD4A 012F D969 23A9 FBA7 C3EB D29F" /* HIÝJ./Ùi#©û§ÃëÒŸ */ - $"5CE0 BD6F 8436 26BB 1B52 3BCB DCAA 0791" /* \à½o„6&».R;Ëܪ.‘ */ - $"02B3 8EC7 5A89 D402 C9FF 058E E2C8 AD72" /* .³ŽÇZ‰Ô.Éÿ.ŽâÈ­r */ - $"01BF D9B3 FA52 B000 0000 3090 8B4E 8809" /* .¿Ù³úR°...0‹NˆÆ */ - $"9E4F 59A7 8021 D030 169B 78E6 55B4 9FB8" /* žOY§€!Ð0.›xæU´Ÿ¸ */ - $"48A1 D2F4 BE8E A948 A89E 5E3E BE56 AE8C" /* H¡Òô¾Ž©H¨ž^>¾V®Œ */ - $"BF6C 6485 F435 4906 BE37 4D88 589A 85C0" /* ¿ld…ô5I.¾7MˆXš…À */ - $"5278 59EC 1FED 3652 3FE0 5229 0524 D686" /* RxYì.í6R?àR).$Ö† */ - $"1E5E 14D9 8C56 8742 9625 36BB 4674 0391" /* .^.ÙŒV‡B–%6»Ft.‘ */ - $"9647 FCC9 30C4 6D0D 5812 1271 E9C8 E89D" /* –GüÉ0Äm.X..qéÈè */ - $"7F9B 3420 0269 5F58 4554 F964 BDDA E9F3" /* .›4 .i_XETùd½Úéó */ - $"973A 5B5F 4C59 107B 2D9E 87CB D896 1F13" /* —:[_LY.{-ž‡ËØ–.. */ - $"AC52 F00D 3600 9104 3FF2 399A 0158 5153" /* ¬Rð.6.‘.?ò9š.XQS */ - $"139A A5C2 51CC D2C7 D082 C2A0 E35B FE05" /* .š¥ÂQÌÒÇЂ ã[þ. */ - $"06C9 DBB4 7036 39DB 80AF 4642 9F53 170C" /* .ÉÛ´p69Û€¯FBŸS.. */ - $"2856 38D5 0FA7 B562 4ED8 3BB5 B48A B1C8" /* (V8Õ.§µbNØ;µ´Š±È */ - $"B20B 4B42 4499 C5C1 242B A1BA CB74 D8F1" /* ².KBD™ÅÁ$+¡ºËtØñ */ - $"1CF1 241E 7A2A B847 111D 13DC CD3C 05A3" /* .ñ$.z*¸G...ÜÍ<.£ */ - $"024F 25B5 41E2 0A15 E1C4 1A0E A5D8 0742" /* .O%µAâÂ.áÄ..¥Ø.B */ - $"A359 2372 FD88 7447 1DB7 F766 5B7F E63E" /* £Y#rýˆtG.·÷f[.æ> */ - $"26B8 BC6E 7B72 E331 2BE1 73BD 04A0 E941" /* &¸¼n{rã1+ás½. éA */ - $"45EC 9039 8769 8BFF 1624 8D43 CA24 9D0D" /* Eì9‡i‹ÿ.$CÊ$. */ - $"A05B F467 7401 E777 0608 C4A6 A698 9A9B" /*  [ôgt.çw..Ħ¦˜š› */ - $"7066 11D3 606F 857E 18D8 D9D3 E226 38C0" /* pf.Ó`o…~.ØÙÓâ&8À */ - $"D89B 09D9 A2F1 0171 BAC9 D7BF AB2E BD58" /* Ø›ÆÙ¢ñ.qºÉ׿«.½X */ - $"7178 6CC2 608D 447D D92A 621C 1A82 B764" /* qxlÂ`D}Ù*b..‚·d */ - $"2ABE CBE8 07C0 E2A6 9B83 46A8 1109 FC87" /* *¾Ëè.À⦛ƒF¨.Æü‡ */ - $"F083 9598 26AE 8847 7E22 278D 9311 59FC" /* ðƒ•˜&®ˆG~"'“.Yü */ - $"2995 1D44 BA58 24BC 2A99 3946 0E00 9144" /* )•.DºX$¼*™9F..‘D */ - $"9113 0297 29E3 A7B5 B937 2D23 8405 86ED" /* ‘..—)ã§µ¹7-#„.†í */ - $"29F1 5254 6A8C 0FB8 4B13 F6C3 6028 2C14" /* )ñRTjŒ.¸K.öÃ`(,. */ - $"3B80 E317 225C 7A9B 405C 7E95 A2E4 311B" /* ;€ã."\z›@\~•¢ä1. */ - $"076A D7B8 A4B5 225A 1F29 FAA2 8239 D98F" /* .j׸¤µ"Z.)ú¢‚9Ù */ - $"071A F302 DA24 AE80 2AC0 D108 035D EA76" /* ..ó.Ú$®€*ÀÑ..]êv */ - $"2F7E 850F 9E87 6B19 B2F1 F1E5 F5B3 A5AF" /* /~….ž‡k.²ññåõ³¥¯ */ - $"35BB D867 8257 8A48 5E4F 6983 E22E 6DAD" /* 5»Øg‚WŠH^Oiƒâ.m­ */ - $"D361 1505 ECF2 3F3C DB84 1861 E5AB 6793" /* Óa..ìò?<Û„.aå«g“ */ - $"910D 8F56 6BB5 FD17 29DB 242A 6946 8022" /* ‘.Vkµý.)Û$*iF€" */ - $"7DAF 8120 02EB C840 3765 69EC BB8B F2FF" /* }¯ .ëÈ@7ei컋òÿ */ - $"6031 7BE4 EFC4 BECD 7BD7 CB0A 8B8C 75C2" /* `1{äïľÍ{×Ë‹Œu */ - $"E63A F4E4 B05B 1442 0CB1 BEBD E078 84F5" /* æ:ôä°[.B.±¾½àx„õ */ - $"3D95 24FA 952F 949B AD72 01B7 1CC7 4CA6" /* =•$ú•/”›­r.·.ÇL¦ */ - $"78C2 BA05 B757 517A 5CB1 A380 0C23 0680" /* xº.·WQz\±£€.#.€ */ - $"3113 0CBA 23B8 AA48 F832 B74F 997E 6E03" /* 1..º#¸ªHø2·O™~n. */ - $"D16C 577F 968F E9A4 73CA DA79 07B3 A5F1" /* ÑlW.–é¤sÊÚy.³¥ñ */ - $"2D20 C13D F821 62F9 41A0 A7AA 472A 368A" /* - Á=ø!bùA §ªG*6Š */ - $"28EE 7686 F7B4 D5CF 225E 004E 709F C4E8" /* (îv†÷´ÕÏ"^.NpŸÄè */ - $"FCBC B778 C976 A1E0 1968 1EF9 E998 2DC2" /* ü¼·xÉv¡à.h.ùé˜- */ - $"1693 C645 A4F5 787A 5B10 45C0 F010 8596" /* .“ÆE¤õxz[.EÀð.…– */ - $"A0F6 E8AA 1BAC C958 C0F6 101E 0C4D 2E61" /*  öèª.¬ÉXÀö...M.a */ - $"B76E 4019 58DD 3058 000C 2375 6EBC 6599" /* ·n@.XÝ0X..#un¼e™ */ - $"BEA3 9ADC 0002 F98F 24B3 B036 EA0D F2FD" /* ¾£šÜ..ù$³°6ê.òý */ - $"6823 E10A 59D7 5D0B F6C0 EFB2 7D9D A684" /* h#áÂY×].öÀï²}¦„ */ - $"3084 4AD6 92F2 BFB2 57CA 7294 FF2D 53C8" /* 0„JÖ’ò¿²WÊr”ÿ-SÈ */ - $"8D05 254E 2360 582F CE0C E209 240D FAB4" /* .%N#`X/Î.âÆ$.ú´ */ - $"C638 2103 7462 2AF1 5461 2036 09B4 294F" /* Æ8!.tb*ñTa 6Æ´)O */ - $"52A6 6553 F6B7 85F6 E77F A8B7 058C F201" /* R¦eSö·…öç.¨·.Œò. */ - $"19BA D75B 6612 0013 CFA6 F54F 8855 C000" /* .º×[f...ϦõOˆUÀ. */ - $"00BE 57DE C13B 77B0 AF81 F95D 8E88 7224" /* .¾WÞÁ;w°¯ù]Žˆr$ */ - $"002F C7BE 1D06 F540 58EF 1909 1D8F 037F" /* ./Ǿ..õ@Xï.Æ... */ - $"E973 290F 641E 8849 F996 EA66 D15C CA23" /* és).d.ˆIù–êfÑ\Ê# */ - $"C620 3090 94D8 F95F C58C 720B 7FFE 206C" /* Æ 0”Øù_ÅŒr..þ l */ - $"A3E0 EE49 AE89 4586 6617 FE87 4D7B D300" /* £àîI®‰E†f.þ‡M{Ó. */ - $"4CF6 E77F A882 E041 362F 710E AC03 D573" /* Löç.¨‚àA6/q.¬.Õs */ - $"69FF 7480 0018 484B 0D10 C800 0000 0C24" /* iÿt€..HK..È....$ */ - $"183F ADBF D900 0184 8481 E82C C758 1848" /* .?­¿Ù..„„è,ÇX.H */ - $"4840 6806 1212 B020 EA50 0818 484B F6E7" /* H@h...° êP..HKöç */ - $"7FA5 E774 6249 2F3D 5FF9 2FC0 0C24 1656" /* .¥çtbI/=_ù/À.$.V */ - $"1B91 8000 1846 D5F4 CA01 40C2 3F26 3D84" /* .‘€..FÕôÊ.@Â?&=„ */ - $"7B4A 811F 08D6 B47D 05C2 4402 D57B C1FC" /* {J..Ö´}.ÂD.Õ{Áü */ - $"7D32 E6FE 8125 F24E 514B 2820 7323 F96F" /* }2æþ%òNQK( s#ùo */ - $"B1F9 CDBD 94E4 C9BF 81D6 5A26 1C08 2131" /* ±ùͽ”äÉ¿ÖZ&..!1 */ - $"FF58 608E A4BB BEFD 703F C3EA B596 2AEA" /* ÿX`ޤ»¾ýp?Ãêµ–*ê */ - $"48B2 2319 2F7A B9BC A14D EAB4 49CF 89E9" /* H²#./z¹¼¡Mê´Iωé */ - $"D312 5979 1910 6519 C45E 4B88 F709 D65D" /* Ó.Yy..e.Ä^Kˆ÷ÆÖ] */ - $"BF0F 86DC C883 8469 9757 7FC7 FB91 A851" /* ¿.†Üȃ„i—W.Çû‘¨Q */ - $"7834 0232 03F5 F552 B022 E799 431E 3FE8" /* x4.2.õõR°"ç™C.?è */ - $"BE7C A37B AAE1 D04F 9795 EA98 CAB0 6816" /* ¾|£{ªáÐO—•ê˜Ê°h. */ - $"047F 244A 2BD3 E0CF B862 B172 B1B3 F027" /* ..$J+Óàϸb±r±³ð' */ - $"6505 A5AA 6AB2 5F8E B98F 85CB D487 2603" /* e.¥ªj²_޹…ËÔ‡&. */ - $"BDA4 4C6D 4B74 0A12 117F 6137 6A30 37CE" /* ½¤LmKtÂ...a7j07Î */ - $"0441 188C 63FC 46ED 5C9A B6A0 9012 6450" /* .A.ŒcüFí\š¶ .dP */ - $"A042 C4D3 8E69 8930 0797 25B3 B70D 5C62" /*  BÄÓŽi‰0.—%³·.\b */ - $"6A83 3964 5EF1 4A28 508D FF7F E847 17D0" /* jƒ9d^ñJ(Pÿ.èG.Ð */ - $"7C91 F4BC AA82 5462 99EF FF79 5A7A E45E" /* |‘ô¼ª‚Tb™ïÿyZzä^ */ - $"98FF 5B1E 90FE 7F80 9453 7AD1 4A63 8FFC" /* ˜ÿ[.þ.€”SzÑJcü */ - $"1B61 796C 4B90 7FE9 1959 752B 8579 95F8" /* .aylK.é.Yu+…y•ø */ - $"C5B9 7EC6 2D24 5185 1BCE 12D6 B418 B42C" /* Ź~Æ-$Q….Î.Ö´.´, */ - $"D40F 7AF7 657E 5184 9CAA 8834 B65C 4785" /* Ô.z÷e~Q„œªˆ4¶\G… */ - $"B934 7C3A 8000 0000 99F5 3F06 3790 6AF7" /* ¹4|:€...™õ?.7j÷ */ - $"0769 9D8E F19F 4FF3 EDE6 D059 B97C A1F0" /* .iŽñŸOóíæÐY¹|¡ð */ - $"0CE2 4FAF B846 8CCE 52E4 E898 D2E0 00A3" /* .âO¯¸FŒÎRäè˜Òà.£ */ - $"CB3D F2B1 E7F7 0C30 FF13 DB29 474C C00D" /* Ë=ò±ç÷.0ÿ.Û)GLÀ. */ - $"C6B7 6A2D 2F89 8E2F BDE7 F2BA C3DD 591B" /* Æ·j-/‰Ž/½çòºÃÝY. */ - $"CEDE C7DD 35BA 492C BB53 2AF6 7315 AC30" /* ÎÞÇÝ5ºI,»S*ös.¬0 */ - $"17D7 1C05 3AE4 4AB3 8D31 0DC9 7A9F 0A76" /* .×..:äJ³1.ÉzŸÂv */ - $"B4EE 95EE 6CB5 1C6A FE4F D27E 0966 CE51" /* ´î•îlµ.jþOÒ~ÆfÎQ */ - $"8607 E144 F4AD E999 5480 05FF 7FC2 C645" /* †.áDô­é™T€.ÿ.ÂÆE */ - $"D136 BB6E 89FA 9A2D F827 338F FEB9 B248" /* Ñ6»n‰úš-ø'3þ¹²H */ - $"23A6 377D 0E53 BBF3 D290 3AD8 F58B CE4C" /* #¦7}.S»óÒ:Øõ‹ÎL */ - $"24CA 8E49 76ED DA48 8856 904D C31F 305F" /* $ÊŽIvíÚHˆVMÃ.0_ */ - $"C441 7DAA 86D8 3FE1 5EA7 E20A CDBC 5F2A" /* ÄA}ª†Ø?á^§âÂͼ_* */ - $"35DC 107F DDE2 D88C 7B38 D700 4C54 9C81" /* 5Ü..ÝâØŒ{8×.LTœ */ - $"B8FD F39D 0F47 DE2B 6E17 7D4F E30F F60C" /* ¸ýó.GÞ+n.}Oã.ö. */ - $"0895 5694 3006 1211 EFEC D7F8 F743 3D43" /* .•V”0...ïì×ø÷C=C */ - $"6BA5 7C06 9025 9188 E369 0FC8 94CB F38E" /* k¥|.%‘ˆãi.È”ËóŽ */ - $"DF76 CA67 91C4 D786 F34F 1E56 332B 1404" /* ßvÊg‘Ä׆óO.V3+.. */ - $"B66B 2702 B13D 47B8 1FBD 38D7 A2DF 54EF" /* ¶k'.±=G¸.½8×¢ßTï */ - $"FD1C 00CC 5D05 5B28 3EBF 2FC7 7263 5880" /* ý..Ì].[(>¿/ÇrcX€ */ - $"0364 4A0B 982F 4A13 A55F 5D64 61D2 110C" /* .dJ.˜/J.¥_]daÒ.. */ - $"4319 318A 5BD6 94B7 DBA9 92F0 379B 0E87" /* C.1Š[Ö”·Û©’ð7›.‡ */ - $"4561 92A0 0000 0000 0000 12FE B897 0ABD" /* Ea’ .......þ¸—½ */ - $"B3C7 FEA8 AE43 B177 DA3F 2BA3 2D59 3358" /* ³Çþ¨®C±wÚ?+£-Y3X */ - $"9FAE 567F E53B 2877 9FFF 7FFF 7FFB 4B90" /* Ÿ®V.å;(wŸÿ.ÿ.ûK */ - $"C00D FEA3 7DF6 39C4 C825 2952 2C65 8FFF" /* À.þ£}ö9ÄÈ%)R,eÿ */ - $"7E91 DB49 1333 7DEC 6471 1E2E 394E A080" /* ~‘ÛI.3}ìdq..9N € */ - $"C1C9 0DD4 62C4 4FC9 E332 BC0D F9DD FEAB" /* ÁÉ.ÔbÄOÉã2¼.ùÝþ« */ - $"9D33 8271 2A01 8484 B009 6058 624E 2736" /* 3‚q*.„„°Æ`XbN'6 */ - $"529C A0F4 BCBB 846D 32FD 407C FA84 2D52" /* Rœ ô¼»„m2ý@|ú„-R */ - $"21DC 1623 210B 0410 4061 212D 0386 04FF" /* !Ü.#!...@a!-.†.ÿ */ - $"7F72 1DFF 6F83 6A31 2B6E 0A6B D1F1 9A43" /* .r.ÿoƒj1+nÂkÑñšC */ - $"F340 2C47 D413 DFAC FF76 46AC 4BDD 55F0" /* ó@,GÔ.߬ÿvF¬KÝUð */ - $"2F9A 3BC6 613E 2F69 F45C 08F3 3FCB F83F" /* /š;Æa>/iô\.ó?Ëø? */ - $"F7D8 DC38 0F99 4764 0309 0948 41C6 1212" /* ÷ØÜ8.™Gd.ÆÆHAÆ.. */ - $"293B 5EA3 BE56 F760 BAEF 61FF 43D4 2891" /* );^£¾V÷`ºïaÿCÔ(‘ */ - $"A380 672E FF7E 4B98 FBFB 1ACD 90F6 4A7E" /* £€g.ÿ~K˜ûû.ÍöJ~ */ - $"3B14 E9F4 B1B4 4120 E600 AF42 0056 B131" /* ;.éô±´A æ.¯B.V±1 */ - $"0310 EF4F EA97 E030 9090 A298 F514 CEFA" /* ..ïOê—à0¢˜õ.Îú */ - $"B200 0061 211A A495 FD76 5850 B8F7 1CF1" /* ²..a!.¤•ývXP¸÷.ñ */ - $"A979 F478 5BFF 7FFB E6D6 F6D8 03FF 7FFD" /* ©yôx[ÿ.ûæÖöØ.ÿ.ý */ - $"2A36 38D4 BA43 6280 D508 C4BD 735D 1C6F" /* *68ÔºCb€Õ.Ľs].o */ - $"2444 63E9 1C9A 969F 90A6 F34E D24D 94F2" /* $Dcé.š–Ÿ¦óNÒM”ò */ - $"1A09 F86A 2762 886F FBA0 96EA 1DC7 0364" /* .Æøj'bˆoû –ê.Ç.d */ - $"6192 A000 0000 0000 0000 0000 0061 BE9F" /* a’ ..........a¾Ÿ */ - $"2C25 5C25 4958 1428 AA60 5ABF 5551 6084" /* ,%\%IX.(ª`Z¿UQ`„ */ - $"D319 B739 1DC3 F92F 03A7 CF66 39CC 13BE" /* Ó.·9.Ãù/.§Ïf9Ì.¾ */ - $"100A 204E 9A06 CBD9 A8ED 9E4D CEED AE53" /* . Nš.ËÙ¨ížMÎí®S */ - $"023D B3BF AC07 F70E F7DD 2601 E2B4 B214" /* .=³¿¬.÷.÷Ý&.â´². */ - $"3B1D 74CD 0F60 7063 EFC5 24B8 3B0F DF21" /* ;.tÍ.`pcïÅ$¸;.ß! */ - $"2929 3755 A800 7D09 63D9 1548 5D89 6D22" /* ))7U¨.}ÆcÙ.H]‰m" */ - $"FAEF 37DC EB96 FF52 0018 EBDF 464C 8B34" /* úï7Üë–ÿR..ëßFL‹4 */ - $"DF85 2990 1CF1 7C84 CEDC D384 5003 D5A1" /* ß…).ñ|„ÎÜÓ„P.Õ¡ */ - $"2797 DBDC FDFB 0E8C 3703 470D 1FD5 B974" /* '—ÛÜýû.Œ7.G..Õ¹t */ - $"5A32 CF32 3D2A 0213 FDC8 8A0C B595 4840" /* Z2Ï2=*..ýÈŠ.µ•H@ */ - $"C240 6E40 D585 AF4C 004A F98F FC90 E5BB" /* Â@n@Õ…¯L.Jùüå» */ - $"D6AD 2A34 0A6E 1D4D 933D 2221 80B7 C8EF" /* Ö­*4Ân.M“="!€·Èï */ - $"7C61 2953 2991 F91A 61A3 B54E 56D2 77E1" /* |a)S)‘ù.a£µNVÒwá */ - $"1DB8 8B5F 5E9C 7D32 80A0 C23F BBE6 A2B2" /* .¸‹_^œ}2€ Â?»æ¢² */ - $"D49F C777 4BE6 FDA6 7B0F 2983 E19B 84FF" /* ÔŸÇwKæý¦{.)ƒá›„ÿ */ - $"4B7B 0DD6 A35E 60AD 632D D6D7 7030 0A9F" /* K{.Ö£^`­c-Ö×p0Ÿ */ - $"0FA2 0820 8451 9624 D0FF 1FB4 9B81 61CC" /* .¢. „Q–$Ðÿ.´›aÌ */ - $"591F 6D98 E1AF 16E4 AF42 1FE0 B7C7 30DF" /* Y.m˜á¯.ä¯B.à·Ç0ß */ - $"CFFC EC14 15A1 B07A 4E11 ED5F BDB3 FD2A" /* Ïüì..¡°zN.í_½³ý* */ - $"84B1 6901 4333 27BB 2E8C 3329 2064 A800" /* „±i.C3'».Œ3) d¨. */ - $"0001 2FDE 803E 817B C369 A30F FCF0 FF1D" /* ../Þ€>{Ãi£.üðÿ. */ - $"89A1 2FD7 FF71 B63D 19EC 98DE DFE2 D9B8" /* ‰¡/×ÿq¶=.ì˜ÞßâÙ¸ */ - $"9D39 1737 4722 2A89 D291 623B 279F BF0B" /* 9.7G"*‰Ò‘b;'Ÿ¿. */ - $"E8C0 8AF8 CBE4 0011 5D58 29AB 34B0 335C" /* èÀŠøËä..]X)«4°3\ */ - $"36B2 1383 D820 11B8 22DF 56E1 27EF 932D" /* 6².ƒØ .¸"ßVá'ï“- */ - $"30DE CC72 58E3 9BDD A88C 229A CBC8 A466" /* 0ÞÌrXã›Ý¨Œ"šËȤf */ - $"7C29 FDE8 E789 F28F 3258 A2DD 897B 1C6A" /* |)ýèç‰ò2X¢Ý‰{.j */ - $"C048 306A EEA7 3DF0 F8D4 BECC CDBD 9E43" /* ÀH0jî§=ðøÔ¾ÌͽžC */ - $"A29D 8052 478B 6470 79B7 B38A 5743 CAE7" /* ¢€RG‹dpy·³ŠWCÊç */ - $"0BD4 0F4A 23E1 4C85 39C9 DEB0 75AF 151E" /* .Ô.J#áL…9ÉÞ°u¯.. */ - $"45D5 1681 2BA4 74C9 13B5 746A E399 9467" /* EÕ.+¤tÉ.µtjã™”g */ - $"E6B9 D503 7F7C D57D 4D5F 7FC8 DD43 7D9B" /* æ¹Õ..|Õ}M_.ÈÝC}› */ - $"3CDC F9AD 167C 162B 4E6C 2110 DB2C DF34" /* <Üù­.|.+Nl!.Û,ß4 */ - $"AEED CCE4 05AC 4057 9829 B161 9CA0 8159" /* ®íÌä.¬@W˜)±aœ Y */ - $"A64F FD15 EC5A 4A51 CA6C FD10 9A25 4291" /* ¦Oý.ìZJQÊlý.š%B‘ */ - $"1E90 1FC2 3530 E0DB E4E6 232E CB64 AF95" /* ..Â50àÛäæ#.Ëd¯• */ - $"9494 656D D395 3D62 9EDA 2EC1 DB02 1FAA" /* ””emÓ•=bžÚ.ÁÛ..ª */ - $"6778 0FC0 C4A2 CCA8 EDC0 4DA8 F889 162F" /* gx.ÀĢ̨íÀM¨ø‰./ */ - $"03F9 A9C1 C635 1DAD 2E22 580B 0B2B 83E3" /* .ù©ÁÆ5.­."X..+ƒã */ - $"EC02 5552 3AA8 91BA 45AF 5439 4265 71F6" /* ì.UR:¨‘ºE¯T9Beqö */ - $"3E7A 4412 5DE5 1863 50E6 C0ED C470 3ED9" /* >zD.]å.cPæÀíÄp>Ù */ - $"0E3F 48BA 54C5 915E 03F0 D836 6429 2A67" /* .?HºTÅ‘^.ðØ6d)*g */ - $"B7FA 6AF9 069E 8E67 2848 B570 C3AC 7746" /* ·újù.žŽg(HµpìwF */ - $"EB48 0A2F 4BE4 8EB3 3F8F 791F 0646 DEDF" /* ëHÂ/K䎳?y..FÞß */ - $"316B EFDF 6FD8 C0B9 7319 CE94 8930 C6F6" /* 1kïßoØÀ¹s.Δ‰0Æö */ - $"6399 C4A9 79AD E967 4783 3F8D C538 3C15" /* c™Ä©y­égGƒ?Å8<. */ - $"E5B7 CE98 22B7 5333 A938 B26F 0E1E EF2E" /* å·Î˜"·S3©8²o..ï. */ - $"74B9 72EF 9D8A 80B7 FDC1 8334 A5F9 DCFB" /* t¹r·ýÁƒ4¥ùÜû */ - $"B891 BB38 373C 9BE8 59F4 6018 6E63 DA65" /* ¸‘»87<›èYô`.ncÚe */ - $"9B13 9DC8 28DB 3C15 0D2C 11FC 0E2D 7A0A" /* ›.È(Û<..,.ü.-z */ - $"F8FF 671F C3FF 7F8E 1210 C212 EA5A 5F0B" /* øÿg.Ãÿ.Ž..Â.êZ_. */ - $"9727 F770 25A5 236D 9789 75C7 4089 11DD" /* —'÷p%¥#m—‰uÇ@‰.Ý */ - $"E472 3865 B217 B946 CF22 5225 27DE 566D" /* är8e².¹FÏ"R%'ÞVm */ - $"6799 4F82 0D46 59F5 E466 F9E7 71C3 FA80" /* g™O‚.FYõäfùçqÃú€ */ - $"7826 E598 FF48 E181 6CA8 5A7E C354 0CAA" /* x&å˜ÿHál¨Z~ÃT.ª */ - $"B01C 9EC4 181F 849B 6A13 FB8D C477 70BD" /* °.žÄ..„›j.ûÄwp½ */ - $"F46B 278C 4467 B0CF 3E21 805E EF97 9696" /* ôk'ŒDg°Ï>!€^ï—–– */ - $"CBB9 E3F6 B62E DC26 001A 408F D7E2 07C3" /* ˹ãö¶.Ü&..@×â.à */ - $"C1A4 AD97 4235 8863 A088 1980 C505 6E1F" /* Á¤­—B5ˆc ˆ.€Å.n. */ - $"F392 0B24 B500 20DC 8295 5703 F9B9 FF70" /* ó’.$µ. Ü‚•W.ù¹ÿp */ - $"355C 9B8D BB49 898F 1AAB F65F 7D7E E28F" /* 5\›»I‰.«ö_}~â */ - $"4300 BDCC FB20 4F67 CA07 0CAE 3BAD AA36" /* C.½Ìû OgÊ..®;­ª6 */ - $"A4D8 3358 4176 1AD6 01FA 0450 0000 0042" /* ¤Ø3XAv.Ö.ú.P...B */ - $"7B49 E0E8 A7D8 4EA9 E1A5 597B DB80 BA6D" /* {Iàè§ØN©á¥Y{Û€ºm */ - $"8010 25EA 0A26 833F DE77 DBF7 78B9 564B" /* €.%êÂ&ƒ?ÞwÛ÷x¹VK */ - $"57B2 AF8C BC92 97D7 46A1 23C1 B595 A2EE" /* W²¯Œ¼’—×F¡#Áµ•¢î */ - $"F8A9 29FA 42C2 3557 6345 80B1 FCFD F322" /* ø©)úBÂ5WcE€±üýó" */ - $"E992 9262 A83F E43D B059 CB12 D425 FEF2" /* é’’b¨?ä=°YË.Ô%þò */ - $"9932 1BD8 C65C ED82 D05E E15C 5E9C 76B7" /* ™2.ØÆ\í‚Ð^á\^œv· */ - $"7C64 FCDB A247 D388 3CCB 86B5 C486 2261" /* |düÛ¢GÓˆ<ˆµÄ†"a */ - $"BFD1 7213 39C3 0D69 6AF0 2476 B711 7E91" /* ¿Ñr.9Ã.ijð$v·.~‘ */ - $"6B53 6A04 4F3C 2781 A090 3118 6C3F 49BA" /* kSj.O<' 1.l?Iº */ - $"B81A 3FEB D686 EFCE F487 8315 E33F 84DB" /* ¸.?ëÖ†ïÎô‡ƒ.ã?„Û */ - $"E2C9 F35F 28C5 10C4 FF7F FA4F E953 89FC" /* âÉó_(Å.Äÿ.úOéS‰ü */ - $"8B32 23C6 0D04 5E49 DADA F0FE BCA7 D2C9" /* ‹2#Æ..^IÚÚðþ¼§ÒÉ */ - $"5869 EAD4 F153 9BF5 A5EA 3298 CC8B 8721" /* XiêÔñS›õ¥ê2˜Ì‹‡! */ - $"F919 680B 3F8C 304A 2849 4970 41CF 0F60" /* ù.h.?Œ0J(IIpAÏ.` */ - $"76D9 5820 EF21 CD4A 205A 632F 7CC4 EFDF" /* vÙX ï!ÍJ Zc/|Äïß */ - $"33F3 CCA8 EDAF 405B 78E1 8F79 0F66 6573" /* 3ǫ́í¯@[xáy.fes */ - $"35A2 AD75 1E18 6018 AF23 7C9D A008 1A01" /* 5¢­u..`.¯#| ... */ - $"C5FE 69AA 2C8E D97E 244D D075 F213 0CC6" /* Åþiª,ŽÙ~$MÐuò..Æ */ - $"738F 4395 BBC0 5CB6 3ADC 3DA8 ACB8 E018" /* sC•»À\¶:Ü=¨¬¸à. */ - $"BA5B 13DB 0F6A CB18 DEAC 9749 F5B5 361D" /* º[.Û.jË.Þ¬—Iõµ6. */ - $"CF3A C107 9606 179F F4C7 F3DE CB0B 1F53" /* Ï:Á.–..ŸôÇóÞË..S */ - $"F27E 5D3C 11AB 66B4 8037 0644 AE98 19BF" /* ò~]<.«f´€7.D®˜.¿ */ - $"D564 973A 0CF2 C96F 56D4 5CB8 666F C68C" /* Õd—:.òÉoVÔ\¸foÆŒ */ - $"1E73 E515 8B33 75D2 D3B4 B3A3 8CDE DE0C" /* .så.‹3uÒÓ´³£ŒÞÞ. */ - $"DA37 A3DF 44D2 B57E 2DB2 E891 D36F CC23" /* Ú7£ßDÒµ~-²è‘ÓoÌ# */ - $"ADE8 45BC BB30 78D7 77BD D4A8 087F C83F" /* ­èE¼»0x×w½Ô¨..È? */ - $"E49A 6873 FAC4 C12B 0056 5E18 C3CB C2E9" /* äšhsúÄÁ+.V^.ÃËÂé */ - $"DCAE F0E8 A75F 18DD B8DD 1DCD B0F5 3A1C" /* Ü®ðè§_.ݸÝ.Ͱõ:. */ - $"3816 51A8 0D93 00D0 6FF6 8F07 E4BE EDF9" /* 8.Q¨.“.Ðoö.ä¾íù */ - $"BF0E 6CAA 5384 5DF0 DF12 4CF4 E3B3 5D6C" /* ¿.lªS„]ðß.Lôã³]l */ - $"602A B6F1 C0E0 E520 B0D6 71FB 7996 4930" /* `*¶ñÀàå °Öqûy–I0 */ - $"23DD 3601 3653 C40D 1A64 DC2B D5C2 01C9" /* #Ý6.6SÄ..dÜ+ÕÂ.É */ - $"5002 6BBE 7338 81EE F87D 7687 0FE6 7CF9" /* P.k¾s8îø}v‡.æ|ù */ - $"BAB6 5B35 1A25 421C 5BBA 4D82 4E1F B1D4" /* º¶[5.%B.[ºM‚N.±Ô */ - $"1907 FF78 F534 4A16 7BB6 B598 51F6 E4D3" /* ..ÿxõ4J.{¶µ˜QöäÓ */ - $"A04B 1198 B926 CFAE FC03 22E3 8360 E696" /*  K.˜¹&Ï®ü."ãƒ`æ– */ - $"F546 62F9 7178 F327 E245 4520 8D17 41C4" /* õFbùqxó'âEE .AÄ */ - $"9EC6 EF8D 0924 9416 7901 CE87 5EBB 286D" /* žÆïÆ$”.y.·^»(m */ - $"53BF 09FA 41F6 5FBA 8F4C 79A8 75BA 277A" /* S¿ÆúAö_ºLy¨uº'z */ - $"7D42 642B 38EE 9A49 DEDB F1B3 80D0 E5D0" /* }Bd+8îšIÞÛñ³€ÐåÐ */ - $"2980 F797 E7D0 F90D 4B2F AFDD 4A69 3389" /* )€÷—çÐù.K/¯ÝJi3‰ */ - $"1418 EBD0 6DF0 E38D 6E2F D546 C1A8 C8DD" /* ..ëÐmðãn/ÕFÁ¨ÈÝ */ - $"8977 E053 9C26 053A CF69 97F9 7FB4 9000" /* ‰wàSœ&.:Ïi—ù.´. */ - $"0000 0115 0E67 B64C 0015 DD82 643D 6476" /* .....g¶L..Ý‚d=dv */ - $"ED28 6324 AD72 8124 1AF6 FB1B 21C9 0605" /* í(c$­r$.öû.!É.. */ - $"FAE6 04A6 31BF 6D67 FF7B B889 831A 4FFD" /* úæ.¦1¿mgÿ{¸‰ƒ.Oý */ - $"6BF5 F098 23AB A490 39F7 6AFC 3832 E2E1" /* kõð˜#«¤9÷jü82âá */ - $"11B2 ADB0 ECCA 83DE B4FF 3685 5106 75DE" /* .²­°ìʃ޴ÿ6…Q.uÞ */ - $"3047 28A0 EDBE AD29 17CD DA62 698B CE64" /* 0G( í¾­).ÍÚbi‹Îd */ - $"5999 2B8E BB7D C74F F009 A25D B2B5 BDD9" /* Y™+Ž»}ÇOðÆ¢]²µ½Ù */ - $"B852 BFFE 0B74 9C05 22D7 B0A3 2139 0979" /* ¸R¿þ.tœ."×°£!9Æy */ - $"5C29 BAE8 43DA F9E5 5383 AFD2 14EC 64AA" /* \)ºèCÚùåSƒ¯Ò.ìdª */ - $"442C CE71 74ED 5C27 4331 9374 AC77 47EE" /* D,Îqtí\'C1“t¬wGî */ - $"31AC 4C74 97BC 753C D5DC 3D8B F7D2 C612" /* 1¬Lt—¼u<ÕÜ=‹÷ÒÆ. */ - $"2399 F431 07A1 76CA DAE6 772B 309A C800" /* #™ô1.¡vÊÚæw+0šÈ. */ - $"9F2F D6DF A44C 48EB 853E 4140 A123 BCA3" /* Ÿ/ÖߤLHë…>A@¡#¼£ */ - $"D096 00DA 0822 DFB3 6887 B31F A18F 59BE" /* Ж.Ú."ß³h‡³.¡Y¾ */ - $"6B25 B5CF CFA3 8806 85B7 ED84 B20B CDA2" /* k%µÏÏ£ˆ.…·í„².Í¢ */ - $"A0C8 404B 3FFF 7FF3 3816 5BF0 A16B 85D0" /*  È@K?ÿ.ó8.[ð¡k…Ð */ - $"B87F E4BB 21F9 A3BB 9103 2944 434A 5789" /* ¸.ä»!ù£»‘.)DCJW‰ */ - $"E3EC B1E3 6F3E 154A 37E4 ACA6 4B02 6C5B" /* ãì±ão>.J7䬦K.l[ */ - $"D23A D4D4 83CE F291 CD7F 114F 5935 8EE0" /* Ò:ÔÔƒÎò‘Í..OY5Žà */ - $"17EA F0B3 1D93 BC5F 2CF8 511C E99F 21D8" /* .êð³.“¼_,øQ.éŸ!Ø */ - $"E286 EB17 6FC2 C34B 1110 6398 03BF CB08" /* â†ë.oÂÃK..c˜.¿Ë. */ - $"0018 4848 E24D 90A5 63F9 B1F8 6E20 EF6E" /* ..HHâM¥cù±øn ïn */ - $"25D5 858B 0AE4 2235 581B D4DA E01C B006" /* %Õ…‹Âä"5X.ÔÚà.°. */ - $"E5EB DE78 855B 19E7 4D80 DAC2 1E8F CB2B" /* åëÞx…[.çM€ÚÂ.Ë+ */ - $"0EC8 3FFF 7759 B569 0861 20CC 1D71 2121" /* .È?ÿwYµi.a Ì.q!! */ - $"71A7 FA20 B34B EAB3 4260 A827 6E91 2B3C" /* q§ú ³Kê³B`¨'n‘+< */ - $"5479 449A 3161 D24E 8489 C00A 18A6 3FEC" /* TyDš1aÒN„‰ÀÂ.¦?ì */ - $"61F2 4C86 23C1 85DB 6ECA 221D BCC2 C25F" /* aòL†#Á…ÛnÊ".¼ÂÂ_ */ - $"EFFF 7891 F475 0E20 DC0A 8F85 8208 4541" /* ïÿx‘ôu. ÜÂ…‚.EA */ - $"579B 5EE2 24C4 5C60 39B7 D9F1 ECFD 0F0C" /* W›^â$Ä\`9·Ùñìý.. */ - $"3719 72A8 A543 8BF5 94BF BF6C E6F7 E45A" /* 7.r¨¥C‹õ”¿¿læ÷äZ */ - $"C5CF 1FD7 32F5 2D70 041E 3641 2C46 E23D" /* ÅÏ.×2õ-p..6A,Fâ= */ - $"E072 6889 A892 A27F 44A8 564A 74A3 B421" /* àrh‰¨’¢.D¨VJt£´! */ - $"E1CC A0F3 50E2 2711 6919 76BE D84B D2FE" /* áÌ óPâ'.i.v¾ØKÒþ */ - $"AAED 2D64 7C8F 4C55 7FFF 7EFC 2CBF 05DE" /* ªí-d|LU.ÿ~ü,¿.Þ */ - $"25B2 001C 00EC 6D17 ED17 E559 9DFA F731" /* %²...ìm.í.åYú÷1 */ - $"B21A 7394 8B35 5948 BA4F 5858 020F FF7C" /* ².s”‹5YHºOXX..ÿ| */ - $"C89D 1CFA F89B 9F9C 841F 19EF D626 E6DE" /* È.úø›Ÿœ„..ïÖ&æÞ */ - $"DCC3 3148 38A0 C32F 898F BEC3 0AF3 318C" /* ÜÃ1H8 Ã/‰¾ÃÂó1Œ */ - $"5E09 119B 43C8 9FE6 73B2 F4B9 9789 4BFC" /* ^Æ.›CÈŸæs²ô¹—‰Kü */ - $"99A2 FF7F FF7A 4FD0 8C64 F459 410C 013C" /* ™¢ÿ.ÿzOÐŒdôYA..< */ - $"1C6C 85B5 1C8F D078 995D 714E 1C60 3090" /* .l…µ.Ðx™]qN.`0 */ - $"9058 77C4 BB80 5F57 1871 CA72 B2FD 0016" /* XwÄ»€_W.qÊr²ý.. */ - $"BAA7 F84F F4E9 ACDF F766 8CB4 475D 2F0B" /* º§øOôé¬ß÷fŒ´G]/. */ - $"37BC 18C8 6162 79C2 BDD7 8753 204B A536" /* 7¼.Èaby½ׇS K¥6 */ - $"9CBE 4972 316A BCB1 9442 4238 B88F 2F48" /* œ¾Ir1j¼±”BB8¸/H */ - $"7A45 5CD1 A306 3A23 5A78 354F CDB6 C0A5" /* zE\Ñ£.:#Zx5OͶÀ¥ */ - $"2A5C 19DA 0B0C CD84 8D85 D2B8 1DC9 059C" /* *\.Ú..Í„…Ò¸.É.œ */ - $"A8C4 8118 4848 9372 9372 566C 21E5 2665" /* ¨Ä.HH“r“rVl!å&e */ - $"D16C 6601 48A8 35CE 7FFF 7F19 B54E 7F04" /* Ñlf.H¨5Î.ÿ..µN.. */ - $"10EC 1AA3 13FF 4588 9722 A7AA B011 863C" /* .ì.£.ÿEˆ—"§ª°.†< */ - $"E4B1 717B 7C2D 21E6 267B 4B48 E790 FF76" /* ä±q{|-!æ&{KHçÿv */ - $"40CC F425 41CB 289F 809D 8170 A529 2EDA" /* @Ìô%AË(Ÿ€p¥).Ú */ - $"A105 B3AF FB44 7951 B87A 0091 5B53 5979" /* ¡.³¯ûDyQ¸z.‘[SYy */ - $"CDC6 5976 6393 34F2 21FF 7FFF 7FFF 7D43" /* ÍÆYvc“4ò!ÿ.ÿ.ÿ}C */ - $"4F4B C77F 73C7 0454 BE9C BE9C 282E 440E" /* OKÇ.sÇ.T¾œ¾œ(.D. */ - $"0608 A380 6121 2103 DBD2 250B 5D57 9159" /* ..£€a!!.ÛÒ%.]W‘Y */ - $"B69A 28CF E66A 154F F84F F4E9 99ED 48C4" /* ¶š(Ïæj.OøOôé™íHÄ */ - $"CA7E BE76 FC67 A7CD DC26 1C00 0184 8463" /* Ê~¾vüg§ÍÜ&...„„c */ - $"69A8 C0A9 127C 5830 CC3A 380A C742 E4DE" /* i¨À©.|X0Ì:8ÂÇBäÞ */ - $"06F5 7999 556D FD9F 268B 895F FF4B 7BB9" /* .õy™UmýŸ&‹‰_ÿK{¹ */ - $"C201 52B7 B483 0906 65EC 1848 4750 6F27" /* Â.R·´ƒÆ.eì.HGPo' */ - $"C86C 1F27 9108 6253 0416 4CD3 30E4 7F77" /* Èl.'‘.bS..LÓ0ä.w */ - $"0705 8420 83B6 BCB6 29DE B71E 8DC5 851A" /* ..„ ƒ¶¼¶)Þ·.Å…. */ - $"ABB0 83D8 F2E2 5113 55D2 AAF6 B3AB 7679" /* «°ƒØòâQ.UÒªö³«vy */ - $"49FE A1F8 6F30 0EC0 7D91 534C C78C DC5D" /* Iþ¡øo0.À}‘SLÇŒÜ] */ - $"5A42 CA06 37D8 E0ED 27FA 3E31 C849 D2BE" /* ZBÊ.7Øàí'ú>1ÈIÒ¾ */ - $"847C 0CCF 676F ACFE 91A3 0F62 B711 1897" /* „|.Ïgo¬þ‘£.b·..— */ - $"9DC3 8E37 3AF8 907E 0B69 1577 2856 AA36" /* ÃŽ7:ø~.i.w(Vª6 */ - $"FAC0 D56C 6686 0443 CA96 FDCD 051B 23A7" /* úÀÕlf†.CÊ–ýÍ..#§ */ - $"7DAC 8229 C5FC F840 103A 6407 49F7 6B32" /* }¬‚)Åüø@.:d.I÷k2 */ - $"254F 2B32 7FC1 F460 D5C0 5EE1 3046 612A" /* %O+2.Áô`ÕÀ^á0Fa* */ - $"1BC1 C143 7B76 B9EF ECCB 5EE9 8F0C 3F71" /* .ÁÁC{v¹ïìË^é.?q */ - $"E805 8B9B 17B7 9ECE C237 AF5C 0062 E61E" /* è.‹›.·žÎÂ7¯\.bæ. */ - $"DF6C C1F7 904E 4379 2A9C 92FC 1B04 00A8" /* ßlÁ÷NCy*œ’ü...¨ */ - $"F9D5 DB1B C4C6 9485 ABC2 1199 CCF2 0A47" /* ùÕÛ.ÄÆ”…«Â.™ÌòÂG */ - $"9693 C097 7AD0 449A FC53 DEC5 6EE8 6BF7" /* –“À—zÐDšüSÞÅnèk÷ */ - $"0D7D 4ED8 3426 DA7E ECF9 57ED 9252 9A6A" /* .}NØ4&Ú~ìùWí’Ršj */ - $"2B94 2614 1B6E A495 8261 4D5E DAEF 03FA" /* +”&..n¤•‚aM^Úï.ú */ - $"8A63 9496 E8AB A1A6 5B5C B03E E73E 2889" /* Šc”–è«¡¦[\°>ç>(‰ */ - $"D257 6C28 080A 68DC 226C 950F F55B E7CC" /* ÒWl(.ÂhÜ"l•.õ[çÌ */ - $"95AD FDA7 43EA 7489 A545 C0FC E9B0 2A25" /* •­ý§Cêt‰¥EÀüé°*% */ - $"719C EE06 9E5A 8FC0 D3B0 0C81 1EB0 C8C6" /* qœî.žZÀÓ°..°ÈÆ */ - $"25BD B383 33BD B80D D9A9 48F3 7539 D7D5" /* %½³ƒ3½¸.Ù©Hóu9×Õ */ - $"8021 5EBA 94A7 83A3 69FE 8179 9106 BC56" /* €!^º”§ƒ£iþy‘.¼V */ - $"14A4 427B 8C09 BACB 2FC9 B8F3 CAFA E51C" /* .¤B{ŒÆºË/ɸóÊúå. */ - $"9C07 9A69 033C 6159 163E 6ED8 259D 7AAB" /* œ.ši.nØ%z« */ - $"D316 475C F6C7 BD0E 7972 4C59 DF3A D5B4" /* Ó.G\öǽ.yrLYß:Õ´ */ - $"44ED 7D01 B0FB 34D4 4C9C BC2D B8A6 5B65" /* Dí}.°û4ÔLœ¼-¸¦[e */ - $"134F 0C96 5CA1 21CC A249 F17D 4660 9835" /* .O.–\¡!Ì¢Iñ}F`˜5 */ - $"957C 7392 53A9 DE42 E650 604B 10E2 FF12" /* •|s’S©ÞBæP`K.âÿ. */ - $"B47A 044A 524A B8D3 60B5 A258 CEAB 55E8" /* ´z.JRJ¸Ó`µ¢XΫUè */ - $"5219 EC3E A9F6 0813 A2B4 930C EDE4 3BBE" /* R.ì>©ö..¢´“.íä;¾ */ - $"C0E3 7F93 1A3F 38EB 2DE3 492D A3BD FD00" /* Àã.“.?8ë-ãI-£½ý. */ - $"811C 530E 2FB8 9D68 2466 D288 EC29 9094" /* .S./¸h$fÒˆì)” */ - $"A3C7 2D32 0A25 BA73 2023 08CA C360 2C72" /* £Ç-2Â%ºs #.ÊÃ`,r */ - $"8BA9 516A 7081 F2FF 1E84 E1C2 F841 77CE" /* ‹©Qjpòÿ.„áÂøAwÎ */ - $"ABDF 6476 30A4 3018 F7F4 F3EE 1A5E 5DF0" /* «ßdv0¤0.÷ôóî.^]ð */ - $"CAAA AA77 C90D 52C4 6AA9 5755 33B9 1814" /* ʪªwÉ.RÄj©WU3¹.. */ - $"3528 E205 C379 648A E627 A23E D5DB 1CAE" /* 5(â.ÃydŠæ'¢>ÕÛ.® */ - $"4868 B7D4 F381 2534 1F48 2BCC 5211 3B0F" /* Hh·Ôó%4.H+ÌR.;. */ - $"9692 B002 4CFB 1F83 3628 D1EB 5416 0648" /* –’°.Lû.ƒ6(ÑëT..H */ - $"F0F0 B0F8 C7C7 6E92 8C54 6859 791B 7890" /* ðð°øÇÇn’ŒThYy.x */ - $"EBA3 BC74 5F3F C4AD 7C9D 6954 2D0C 15BF" /* 룼t_?Ä­|iT-..¿ */ - $"F699 82A6 4170 D2F1 02A5 7EF3 6061 C9CF" /* ö™‚¦ApÒñ.¥~ó`aÉÏ */ - $"C370 E129 F805 8CC8 C670 CBDC 2D44 D349" /* Ãpá)ø.ŒÈÆpËÜ-DÓI */ - $"F3E5 C5F9 357E 3DF2 CDF3 DC8A 1F13 5B2D" /* óåÅù5~=òÍóÜŠ..[- */ - $"C544 448D 1038 8293 4EEA 75A4 0738 7D9F" /* ÅDD.8‚“Nêu¤.8}Ÿ */ - $"C002 3D68 26D8 7B06 FB10 CCDF C4F3 5364" /* À.=h&Ø{.û.ÌßÄóSd */ - $"2342 154B F8FB 01ED 8893 9160 A3A0 B81D" /* #B.Køû.툓‘`£ ¸. */ - $"47A0 6C82 1CBA FAED 931D E025 BDFF 1535" /* G l‚.ºúí“.à%½ÿ.5 */ - $"CADF 68C5 41FD 3896 1AC9 F979 A885 F5AE" /* ÊßhÅAý8–.Éùy¨…õ® */ - $"EFBE C674 ED92 5FE9 E9AF FF52 D573 A6DD" /* ï¾Ætí’_éé¯ÿRÕs¦Ý */ - $"631B 27E4 62CB B76E 7020 EC65 75E2 DB6F" /* c.'äbË·np ìeuâÛo */ - $"0E10 980A 0EA3 2287 4CF8 D402 52B8 1491" /* ..˜Â.£"‡LøÔ.R¸.‘ */ - $"21C9 BC2B 48BC CBD4 464A C539 6CD5 28F1" /* !ɼ+H¼ËÔFJÅ9lÕ(ñ */ - $"CAE4 CA43 9CB8 B181 BF06 522B 4D19 8295" /* ÊäÊCœ¸±¿.R+M.‚• */ - $"05C8 D7CD 8CFA D3E7 7BC9 630C DCDD 7C7E" /* .È×ÍŒúÓç{Éc.ÜÝ|~ */ - $"E4C6 D7DC 5E38 67CC 5934 9E8D 9552 B837" /* äÆ×Ü^8gÌY4ž•R¸7 */ - $"53AE 6D39 FAB1 2EB6 886C 1855 26ED AD08" /* S®m9ú±.¶ˆl.U&í­. */ - $"1EBE 9570 EA2F DFFF 06F4 ABF3 4534 2831" /* .¾•pê/ßÿ.ô«óE4(1 */ - $"1AE2 0A99 2956 2A90 C2A4 58AC E49E F047" /* .â™)V*¤X¬äžðG */ - $"A9BA C394 E8F4 6427 7966 A79C 4269 9ADD" /* ©ºÃ”èôd'yf§œBišÝ */ - $"AD1D 1A7E 375C D3FB 8C25 0B6B 0460 5EB9" /* ­..~7\ÓûŒ%.k.`^¹ */ - $"416C AE82 DFC3 09DA 1F69 8796 6897 8CD0" /* Al®‚ßÃÆÚ.i‡–h—ŒÐ */ - $"3E1B FF7D 9AE9 7F6D 4E84 967C 674F CA41" /* >.ÿ}šé.mN„–|gOÊA */ - $"44C1 0575 93A9 2599 66D0 AB7B 6260 D32C" /* DÁ.u“©%™fЫ{b`Ó, */ - $"94AF 7FC8 82FD F692 92FE B6ED A660 750F" /* ”¯.È‚ýö’’þ¶í¦`u. */ - $"80A2 A8AA E6F6 7B9F E894 ED71 D223 6F4B" /* €¢¨ªæö{Ÿè”íqÒ#oK */ - $"A203 F64C 7560 DBB1 6F9E EE9F 2945 C994" /* ¢.öLu`Û±ožîŸ)EÉ” */ - $"BA00 D3D1 6414 A300 4296 670B 2350 CDD1" /* º.ÓÑd.£.B–g.#PÍÑ */ - $"DF61 29E8 EC17 87B6 BC62 B6BD 5F31 13B2" /* ßa)èì.‡¶¼b¶½_1.² */ - $"48A2 F723 53C7 6955 969B ED83 6A9B 1B06" /* H¢÷#SÇiU–›íƒj›.. */ - $"C7D0 2584 430B 8C52 D00A 736B D6FB AEDB" /* ÇÐ%„C.ŒRÐÂskÖû®Û */ - $"2BA1 5095 759B 0AFF 5138 58EF 3DC2 B14D" /* +¡P•u›ÂÿQ8Xï=±M */ - $"3B7D 62D0 DE12 CFEF 17A3 32C4 C79A C2DA" /* ;}bÐÞ.Ïï.£2ÄÇšÂÚ */ - $"6BA1 6478 B1D3 2278 3787 6C30 08FD 6095" /* k¡dx±Ó"x7‡l0.ý`• */ - $"FF65 1DF4 7606 34C3 B4EE E609 A3BF 7085" /* ÿe.ôv.4Ã´îæÆ£¿p… */ - $"8B3B 2C80 D860 6043 10A4 24B1 2D80 880D" /* ‹;,€Ø``C.¤$±-€ˆ. */ - $"671A 9A76 E1D4 2304 B4E0 9E47 129D 6316" /* g.šváÔ#.´àžG.c. */ - $"33DF C88C 3BB6 5232 475C D19D FA9B 3303" /* 3ßÈŒ;¶R2G\Ñú›3. */ - $"2956 D8B1 08A5 2735 CD4D F130 C700 DA0D" /* )Vر.¥'5ÍMñ0Ç.Ú. */ - $"7BAE 21FA FB1B 35A5 957E 0211 955B 25D0" /* {®!úû.5¥•~..•[%Ð */ - $"A3DD B72F 5BCD 8792 418E BCB6 C727 DD0F" /* £Ý·/[͇’A޼¶Ç'Ý. */ - $"2D42 F031 2A73 C1F9 7964 B937 1E77 A757" /* -Bð1*sÁùyd¹7.w§W */ - $"D158 CB02 80D3 C310 E1C5 709C 5C69 7F04" /* ÑXË.€ÓÃ.áÅpœ\i.. */ - $"4476 F017 3FF2 B891 0160 D681 AEBC F8C9" /* Dvð.?ò¸‘.`Ö®¼øÉ */ - $"8F46 7922 4414 5CEE 0CA8 417B 33BB 5926" /* Fy"D.\î.¨A{3»Y& */ - $"B7A6 7094 6363 C5F2 9AD7 1751 2456 3B83" /* ·¦p”ccÅòš×.Q$V;ƒ */ - $"9BB0 0ECD 1420 6141 A097 DBF4 802A 2377" /* ›°.Í. aA —Ûô€*#w */ - $"CDAC EFE9 4A16 4B3C 5058 A5DC 1C40 169E" /* ͬïéJ.K.K */ - $"89CE 81FD AC96 C691 FDE5 F993 B9CB 6302" /* ‰Îý¬–Æ‘ýåù“¹Ëc. */ - $"B8EE 86B4 A2F7 19EA DAFD D511 B59F BBD2" /* ¸î†´¢÷.êÚýÕ.µŸ»Ò */ - $"5D4E F6A3 BC58 51D5 273F 2E2E 2B6A 2755" /* ]Nö£¼XQÕ'?..+j'U */ - $"38A3 CA29 BFAB D31D CD53 B29C 7418 40DB" /* 8£Ê)¿«Ó.ÍS²œt.@Û */ - $"FD56 1BF6 9350 5411 CF5C 8D26 B1FA 754F" /* ýV.ö“PT.Ï\&±úuO */ - $"E584 8277 6221 6866 257C 9FC9 65A5 6D93" /* å„‚wb!hf%|ŸÉe¥m“ */ - $"C524 B971 3F1D 34A0 BBF4 6B83 9722 CFAD" /* Å$¹q?.4 »ôkƒ—"Ï­ */ - $"8296 103F 53BB 1B22 8A84 2FAC 94DE 4994" /* ‚–.?S»."Š„/¬”ÞI” */ - $"2D31 56A5 DBCD B661 81D7 B360 4958 8FF5" /* -1V¥ÛͶa׳`IXõ */ - $"EB02 25A9 6386 8241 D936 A3CB AA88 9936" /* ë.%©c†‚AÙ6£Ëªˆ™6 */ - $"1698 4F59 765B 34EA 3741 D2D3 2DAC 854D" /* .˜OYv[4ê7AÒÓ-¬…M */ - $"366B C9A0 15F8 D2E6 7CCF 99EF A794 460C" /* 6kÉ .øÒæ|ϙ倫F. */ - $"934E C88B 2BF5 91F7 7BD1 3DC9 6ED3 91FE" /* “NÈ‹+õ‘÷{Ñ=ÉnÓ‘þ */ - $"E63B EDCC 3D4A CC1B AE5D 88D0 B241 20D1" /* æ;íÌ=JÌ.®]ˆÐ²A Ñ */ - $"AB6C 9FE2 E494 395E 8E3C 0EB0 1796 58CC" /* «lŸâä”9^Ž<.°.–XÌ */ - $"9791 D931 DB33 473E 003E 10CD B736 7295" /* —‘Ù1Û3G>.>.Í·6r• */ - $"DD81 B481 9A0A ED27 3C1E 6298 FD0D BDE0" /* Ý´šÂí'<.b˜ý.½à */ - $"11D6 8A21 79C1 DBB7 FEDC 6E48 8080 5ADB" /* .ÖŠ!yÁÛ·þÜnH€€ZÛ */ - $"E61D 9E0E E6A3 6D38 A028 4016 464D F534" /* æ.ž.æ£m8 (@.FMõ4 */ - $"D764 3AD7 55DF 3CAB 7B3D 12F5 9A8D DDCF" /* ×d:×Uß<«{=.õšÝÏ */ - $"6CCD 0387 C982 0FE9 D431 0FE3 E064 1700" /* lÍ.‡É‚.éÔ1.ãàd.. */ - $"1AAD F49E D6DE A939 8010 C91B 605B 4E0A" /* .­ôžÖÞ©9€.É.`[N */ - $"FCBE ADE9 C17A EC1F 3990 9EB2 E6BF 92AA" /* ü¾­éÁzì.9ž²æ¿’ª */ - $"951C D27F A984 10A9 22DC 996E FF6E 12AE" /* •.Ò.©„.©"Ü™nÿn.® */ - $"DC03 5AB3 2CA0 8291 4174 C69E AE28 DBA8" /* Ü.Z³, ‚‘AtÆž®(Û¨ */ - $"38A8 FF12 67D3 F8A3 00D6 2A2E A564 CEFA" /* 8¨ÿ.gÓø£.Ö*.¥dÎú */ - $"0F00 4B44 62A7 CA9F F072 2821 DD3C 6A34" /* ..KDb§ÊŸðr(!ÝC€e.²O1Ú Ÿ */ - $"F51A 9108 7912 32B0 52A6 A901 CADB A758" /* õ.‘.y.2°R¦©.ÊÛ§X */ - $"C00A D516 E462 35B4 C071 131A 0F01 9A95" /* ÀÂÕ.äb5´Àq....š• */ - $"9739 F131 0E5F 7FBA D8AD 925F 992C 0187" /* —9ñ1._.ºØ­’_™,.‡ */ - $"D97C 832B 847E 1148 0402 0449 FB25 D0F1" /* Ù|ƒ+„~.H...Iû%Ðñ */ - $"C1F8 2B8E CE97 D5A4 BEFE 7F0D E420 E43E" /* Áø+ŽÎ—Õ¤¾þ..ä ä> */ - $"801A 448D 9D61 D23C 5956 3DEB A1A6 0858" /* €.DaÒ */ - $"A177 C3EA 4FE4 AFFE 1BFF 61D3 2F87 4BFC" /* ¡wÃêOä¯þ.ÿaÓ/‡Kü */ - $"946E 03F8 6CFF 06A3 FC28 FE13 BF0F 6B7E" /* ”n.ølÿ.£ü(þ.¿.k~ */ - $"1EB8 FC3B 47E1 ECEE EEDF F87D 51FF 07D5" /* .¸ü;Gáìîîßø}Qÿ.Õ */ - $"0BBB 87E1 D3FF 0779 FC3B 6FE1 D378 0DF0" /* .»‡áÓÿ.yü;oáÓx.ð */ - $"BD7C 29EB A2DD 17F2 6ADB E1DB 7F0D 97E1" /* ½|)ë¢Ý.òjÛáÛ..—á */ - $"E84D 7750 FC3E 906F C3E8 35DD 42ED AFE1" /* èMwPü>oÃè5ÝBí¯á */ - $"D33F 0E8D F86E 00F7 91DD 3D8B A94D D83C" /* Ó?.øn.÷‘Ý=‹©MØ< */ - $"B51B 129C 103F 899D B929 4724 C188 2C29" /* µ..œ.?‰¹)G$Áˆ,) */ - $"CE89 11F8 9065 1C37 E234 DFEF 60D7 3221" /* Ή.øe.7â4ßï`×2! */ - $"5343 F889 DCDB AFB3 6F20 F76A 31D9 986E" /* SCø‰ÜÛ¯³o ÷j1Ù˜n */ - $"A745 547E 6F18 076D A675 BA1A 1AAF 6558" /* §ET~o..m¦uº..¯eX */ - $"338A FF71 4707 0776 1B62 BCCC 89E5 4726" /* 3ŠÿqG..v.b¼Ì‰åG& */ - $"A7CB 8885 E07C DADC D741 3B1D D81F AB03" /* §Ëˆ…à|ÚÜ×A;.Ø.«. */ - $"2F84 F52D DFD5 7384 4649 7BA2 5AB1 14C8" /* /„õ-ßÕs„FI{¢Z±.È */ - $"3D8D B951 8183 C33A B08E 82CC EF1A F046" /* =¹QƒÃ:°Ž‚Ìï.ðF */ - $"5B62 C9E0 A926 F330 0A61 A30C 6194 7E1E" /* [bÉà©&ó0Âa£.a”~. */ - $"1EE9 3D0D 1ABE 5536 A026 8B32 830F C02F" /* .é=..¾U6 &‹2ƒ.À/ */ - $"3041 04B7 2C65 024D AC81 D2CC 03CA A08A" /* 0A.·,e.M¬ÒÌ.Ê Š */ - $"B105 F3F1 C365 6BCE 9876 A867 7DBA 63AF" /* ±.óñÃekΘv¨g}ºc¯ */ - $"0973 495F DCC1 3552 54BA 5BDB 618D C6C0" /* ÆsI_ÜÁ5RTº[ÛaÆÀ */ - $"91B8 4489 141B A7D3 F188 8A97 DAB0 8942" /* ‘¸D‰..§ÓñˆŠ—Ú°‰B */ - $"EA67 F235 E18A 871B 4B0C DAC6 9050 BA9C" /* êgò5ኇ.K.ÚÆPºœ */ - $"C432 95CE 13CA 93ED 4FD5 9495 377D C920" /* Ä2•Î.Ê“íOÕ”•7}É */ - $"C8A2 F997 5348 8890 91D5 0A23 50BF 3C37" /* È¢ù—SHˆ‘ÕÂ#P¿<7 */ - $"8372 7C96 32AA 1CD2 46BE 8220 C983 2A71" /* ƒr|–2ª.ÒF¾‚ Ƀ*q */ - $"7961 BF33 9590 C086 CCE9 578B 322E FB50" /* ya¿3•À†ÌéW‹2.ûP */ - $"CB68 6459 C127 EB9B E974 EF02 59F4 FF4D" /* ËhdYÁ'ë›étï.YôÿM */ - $"4525 1874 6A9F 99EB DFCC C1B1 72EA 9FA0" /* E%.tjŸ™ëßÌÁ±r꟠ */ - $"DE00 BBB9 D95F 36B9 406E 3CE0 3BCF 32B6" /* Þ.»¹Ù_6¹@n<à;Ï2¶ */ - $"8DC0 55D6 C6DA 3622 8A6E 63F6 28AE 08AC" /* ÀUÖÆÚ6"Šncö(®.¬ */ - $"03AC 288D 069A 750E CBBD 97D9 E42D BA93" /* .¬(.šu.˽—Ùä-º“ */ - $"E82A 4EB3 C008 CC7C B6A7 6F70 F1BC FDAA" /* è*N³À.Ì|¶§opñ¼ýª */ - $"1DF4 D2E4 3ECB 9702 444E 278F 6B50 F00E" /* .ôÒä>Ë—.DN'kPð. */ - $"C228 C132 E5E0 B4DE 93BF DBBD 2C85 ABF9" /* Â(Á2åà´Þ“¿Û½,…«ù */ - $"7FAD EC28 1D40 D390 5A2F 9B14 D348 8C76" /* .­ì(.@ÓZ/›.ÓHŒv */ - $"C04B 1173 BF19 8F50 7E3D 8311 BB79 FDA8" /* ÀK.s¿.P~=ƒ.»yý¨ */ - $"1FD4 24A9 5F59 8B76 709E 5C84 1902 8690" /* .Ô$©_Y‹vpž\„..† */ - $"AD49 334F 5AE8 E376 288C BDE7 EE13 FBDE" /* ­I3OZèãv(Œ½çî.ûÞ */ - $"7606 0135 6DB2 DCD9 F5B3 E7E2 B2B8 8BE1" /* v..5m²ÜÙõ³çⲸ‹á */ - $"1985 85D2 0EC1 5CCD BC74 D88B 7206 5075" /* .……Ò.Á\ͼtØ‹r.Pu */ - $"FB92 BF92 C5CB B6E3 024D EB71 D909 AF79" /* û’¿’Å˶ã.MëqÙÆ¯y */ - $"DD82 BBF2 37F1 1193 74D0 373D 4043 C292" /* Ý‚»ò7ñ.“tÐ7=@CÂ’ */ - $"0B1D 4E8F 04F4 A035 451A 7DCB 02DB D77E" /* ..N.ô 5E.}Ë.Û×~ */ - $"DD1C 3667 1BA7 2584 C128 3835 4454 5C15" /* Ý.6g.§%„Á(85DT\. */ - $"5846 C7D1 4689 3D2A 1172 9BA8 9830 F037" /* XFÇÑF‰=*.r›¨˜0ð7 */ - $"0053 8FD6 4023 68C6 7122 CAC6 0325 5AF3" /* .SÖ@#hÆq"ÊÆ.%Zó */ - $"E104 A423 C5AE F551 6DF6 7B11 D5EB FD34" /* á.¤#Å®õQmö{.Õëý4 */ - $"DF67 C50C 737D 74D5 D5EC 7027 A2D8 C79A" /* ßgÅ.s}tÕÕìp'¢ØÇš */ - $"200D A972 A30A 509A C3DE 483F 8B53 D69C" /* .©r£ÂPšÃÞH?‹SÖœ */ - $"001F 47E9 BD2C 84EC DB83 B493 0326 DE6E" /* ..Gé½,„ìÛƒ´“.&Þn */ - $"336A 7C76 3225 8351 7B2D 37B5 D645 9866" /* 3j|v2%ƒQ{-7µÖE˜f */ - $"019E 6472 40C4 5853 3376 9D90 D3EA A727" /* .ždr@ÄXS3vÓê§' */ - $"07A1 A4B8 A32F 475A 22A2 059C AB5B F13E" /* .¡¤¸£/GZ"¢.œ«[ñ> */ - $"E2DF 5B3E E6B5 B27F 28AF A15F 400C 7D9F" /* âß[>æµ².(¯¡_@.}Ÿ */ - $"43ED 33D4 9B4D CB64 E550 5FED FC2F E485" /* Cí3Ô›MËdåP_íü/ä… */ - $"271E 2DB1 6AE5 6793 EFE8 FCC5 A784 4C95" /* '.-±jåg“ïèüŧ„L• */ - $"E488 B5AC A528 BACB 10FF 4ABD D554 E56B" /* 䈵¬¥(ºË.ÿJ½ÕTåk */ - $"F72E 8ED7 5E48 60A4 82D0 381F A2D4 625C" /* ÷.Ž×^H`¤‚Ð8.¢Ôb\ */ - $"9F80 2A63 5FD3 DD0C EDA8 3DE3 281E A65C" /* Ÿ€*c_ÓÝ.í¨=ã(.¦\ */ - $"88EA 1A96 626D DC03 79BE C4ED EA60 4FC5" /* ˆê.–bmÜ.y¾Äíê`OÅ */ - $"BB10 D9D5 99AF 0534 65C2 05AE 8D23 82B0" /* ».ÙÕ™¯.4eÂ.®#‚° */ - $"6FB7 881A 7BC5 0316 7A28 4B27 2763 A6C3" /* o·ˆ.{Å..z(K''c¦Ã */ - $"8FC7 073A 1391 81BB 707F 625D 355F B1DF" /* Ç.:.‘»p.b]5_±ß */ - $"A749 C3EE A157 EC1F 0F6C 70AB 1A36 5711" /* §IÃî¡Wì..lp«.6W. */ - $"C49B 1CA8 54A0 0FB9 6A2E 0F86 2E57 BC2F" /* Ä›.¨T .¹j..†.W¼/ */ - $"8CDD B76A F6DB 83F9 EEFF 4BF1 DE60 660E" /* ŒÝ·jöÛƒùîÿKñÞ`f. */ - $"BCBA 7D68 D5DE 8663 DF06 3F65 A981 38D7" /* ¼º}hÕÞ†cß.?e©8× */ - $"CC20 EBAE 6143 C79E D2F3 DCF4 FA0F 433E" /* Ì ë®aCÇžÒóÜôú.C> */ - $"6DFE 4C5F 032A F6DD DD11 F85F 5003 22CD" /* mþL_.*öÝÝ.ø_P."Í */ - $"C07E F1CC 40B9 8D61 825D 77C7 91A6 BD49" /* À~ñÌ@¹a‚]wÇ‘¦½I */ - $"2590 4BCD EB13 37A2 D5FA 2931 F311 9028" /* %KÍë.7¢Õú)1ó.( */ - $"6C02 96FC ACF5 1EA4 8E51 4BC9 FDE8 DFEF" /* l.–ü¬õ.¤ŽQKÉýèßï */ - $"C5A0 8082 7E0D C127 3A80 A65B 7989 CCEE" /* Å €‚~.Á':€¦[y‰Ìî */ - $"6F6A 8DDF FB5B 46A5 3757 7FC3 3EFD BC0A" /* ojßû[F¥7W.Ã>ý¼Â */ - $"8567 1CB0 3BE7 A153 D7CE 8F63 D2DC 8840" /* …g.°;ç¡S×ÎcÒ܈@ */ - $"D993 E028 0E86 AA99 3ADE CC55 A789 CFC8" /* Ù“à(.†ª™:ÞÌU§‰ÏÈ */ - $"D92B 9613 3850 B7B3 467A FA09 7D45 E174" /* Ù+–.8P·³FzúÆ}Eát */ - $"D351 3254 64A3 7FC5 0D8D 1EDB FEC9 3F05" /* ÓQ2Td£.Å..ÛþÉ?. */ - $"C3C2 264B ACB8 F3C3 1BFF 04A5 12CF C191" /* ÃÂ&K¬¸óÃ.ÿ.¥.ÏÁ‘ */ - $"8CA0 5985 E34C E583 A230 CD43 8602 BAAF" /* Œ Y…ãL僢0ÍC†.º¯ */ - $"1475 FCA7 B274 1314 051F AF06 089D 13B1" /* .uü§²t....¯...± */ - $"5C06 815E FAA5 6864 CECE D56A 127C 058B" /* \.^ú¥hdÎÎÕj.|.‹ */ - $"1859 E9E8 7A98 4299 3CFF 70CE C2DD 8676" /* .Yéèz˜B™<ÿpÎÂ݆v */ - $"1798 5F8E 9960 922E 9226 3F9B 5657 890F" /* .˜_Ž™`’.’&?›VW‰. */ - $"75BC FECF 6919 6701 D086 0EA5 26BA 8B78" /* u¼þÏi.g.І.¥&º‹x */ - $"7381 41FC 19AD 7201 BFD9 B3D3 2F00 1A1C" /* sAü.­r.¿Ù³Ó/... */ - $"E689 F3BC 5FC7 0418 66A2 5AEE 0374 DE30" /* æ‰ó¼_Ç..f¢Zî.tÞ0 */ - $"DC4B 70F1 ACC6 2BC6 06E9 461F E71B CD5E" /* ÜKpñ¬Æ+Æ.éF.ç.Í^ */ - $"2766 D533 884B A37F 7820 5CCA 3D60 1C3A" /* 'fÕ3ˆK£.x \Ê=`.: */ - $"8865 509F C1F0 86B6 9A91 0A52 426E CF1D" /* ˆePŸÁð†¶š‘ÂRBnÏ. */ - $"4B52 7AFE 9519 ECDB 9DD3 BFA1 80F7 50BD" /* KRzþ•.ìÛÓ¿¡€÷P½ */ - $"D2DD 6FAB F00D 3600 9104 37AC 81AA F9C3" /* ÒÝo«ð.6.‘.7¬ªùà */ - $"3933 A702 AC9C 42F1 4579 C5F2 CD99 165F" /* 93§.¬œBñEyÅòÍ™._ */ - $"2D84 FE8B D02C 055F F99C 1729 45C7 6B56" /* -„þ‹Ð,._ùœ.)EÇkV */ - $"EE73 818A 9940 BB46 1408 639B 9779 C805" /* îsŠ™@»F..c›—yÈ. */ - $"1B0B CC86 D42E E9BB 046D 0E93 7273 E00F" /* ..̆Ô.é».m.“rsà. */ - $"B7D5 D377 E0ED 2494 4623 5BDF C83C 54A5" /* ·ÕÓwàí$”F#[ßÈQ.G€Næ‰.ø=ÿ}Ñà */ - $"818F 28A2 2AC0 AD00 7F03 5781 2882 A44A" /* (¢*À­...W(‚¤J */ - $"6728 D9F6 E77F A883 C794 71AC 55E9 8112" /* g(Ùöç.¨ƒÇ”q¬Ué. */ - $"BF6F ECDA 9BD1 96B8 79AA A397 A6F2 C93F" /* ¿oìڛі¸yª£—¦òÉ? */ - $"3792 B8C4 8667 AAF4 659D 59F6 E77F A870" /* 7’¸Ä†gªôeYöç.¨p */ - $"24F1 5461 DB69 0F4C F8B3 F02A F6E7 7FA6" /* $ñTaÛi.Lø³ð*öç.¦ */ - $"26C9 5EDE 9BB6 A1C6 9467 854A 5327 BA38" /* &É^Þ›¶¡Æ”g…JS'º8 */ - $"F535 A01A B90A 9580 95A0 FE5C A623 DE0D" /* õ5 .¹Â•€• þ\¦#Þ. */ - $"6C3E BF23 66F2 9312 9490 EB88 1D63 7AF4" /* l>¿#fò“.”ëˆ.czô */ - $"9F5B 7F45 9078 3A5F CC36 7702 EAD5 FA4D" /* Ÿ[.Ex:_Ì6w.êÕúM */ - $"5F9D 258B 14A8 A235 6490 6B7D 2B05 42C3" /* _%‹.¨¢5dk}+.Bà */ - $"2A5A 791E 92C3 B1E8 B323 FF74 81FC B063" /* *Zy.’ñè³#ÿtü°c */ - $"4A31 CBBC 91E2 A64A F935 FE79 4C07 1376" /* J1˼‘â¦Jù5þyL..v */ - $"002A 4795 5221 70B2 005C 41F9 D631 126F" /* .*G•R!p².\AùÖ1.o */ - $"FF7F DF03 06BD 7214 71AB 4EF3 8EEA 0261" /* ÿ.ß..½r.q«NóŽê.a */ - $"D054 C087 EA15 CBD2 4645 2F9F 3600 4144" /* ÐTÀ‡ê.ËÒFE/Ÿ6.AD */ - $"5671 C61E D3CB 8B84 A60D B58E FB69 C71F" /* VqÆ.ÓË‹„¦.µŽûiÇ. */ - $"B09A EDD9 AAC0 6FBA D7FE 8C4D 8262 6C73" /* °šíÙªÀoº×þŒM‚bls */ - $"9F69 0E81 7581 1D52 FB27 C979 1597 69EA" /* Ÿi.u.Rû'Éy.—iê */ - $"F1DF E906 0B77 2E21 D31A 5CCD 9474 95A2" /* ñßé..w.!Ó.\Í”t•¢ */ - $"CB48 AB27 5F53 B82F 1638 16A4 87CD ED1F" /* ËH«'_S¸/.8.¤‡Íí. */ - $"20BC 2894 5EE1 C84C 1AC1 1158 0293 024E" /* ¼(”^áÈL.Á.X.“.N */ - $"1023 0E4F 9BD8 FA73 6E62 FF7F FD08 5797" /* .#.O›Øúsnbÿ.ý.W— */ - $"0788 A951 6DDA 2448 21D2 7FCA 20B4 E1BF" /* .ˆ©QmÚ$H!Ò.Ê ´á¿ */ - $"3262 89C7 5386 ACB1 8B89 6AC3 F907 1355" /* 2b‰ÇS†¬±‹‰jÃù..U */ - $"66D9 1E5A 5B54 19E9 2737 FF7C B8DF 1F5E" /* fÙ.Z[T.é'7ÿ|¸ß.^ */ - $"3592 B16D 6089 DE73 8F19 479D 626B 977D" /* 5’±m`‰Þs.Gbk—} */ - $"185E F7A3 AF62 AD92 E5AC 2F74 B991 F96F" /* .^÷£¯b­’å¬/t¹‘ùo */ - $"211F 5AE0 4C27 344F A9E1 C731 DB20 A0FF" /* !.ZàL'4O©áÇ1Û  ÿ */ - $"7FFF 7F2E 356F CC55 C6B8 C2C9 2AEF 2D31" /* .ÿ..5oÌUƸÂÉ*ï-1 */ - $"EFEB D878 C16F B1B1 3D47 240C 489C 7153" /* ïëØxÁo±±=G$.HœqS */ - $"E5F8 A5C8 6E2C 7650 AED0 C4B7 43EA 67B6" /* åø¥Èn,vP®ÐÄ·Cêg¶ */ - $"94E4 7274 CFEB 4CF3 FD3E 8065 B9CC 35A5" /* ”ärtÏëLóý>€e¹Ì5¥ */ - $"21B1 3804 AD98 4F8A 6FFC 50DA 014C 442B" /* !±8.­˜OŠoüPÚ.LD+ */ - $"AA41 1455 BD94 B366 A37D CA82 7FFC DE57" /* ªA.U½”³f£}Ê‚.üÞW */ - $"2EA9 98C2 5510 E51E 24CC 0428 4C83 1BBE" /* .©˜ÂU.å.$Ì.(Lƒ.¾ */ - $"0A46 A6DD 6963 D4CB 24E8 748B ED10 7B6D" /* ÂF¦ÝicÔË$èt‹í.{m */ - $"E61C 86C3 C80E 3030 FCE9 2263 C956 95A1" /* æ.†ÃÈ.00üé"cÉV•¡ */ - $"AED0 C4B1 D07C F701 9DA0 ED2C C401 BC1A" /* ®ÐıÐ|÷. í,Ä.¼. */ - $"9421 2D43 EF12 7494 8D46 CB82 3FE2 6439" /* ”!-Cï.t”FË‚?âd9 */ - $"6BDE C8CE 23B7 9D2E B6F9 DF4B C1A9 A145" /* kÞÈÎ#·.¶ùßKÁ©¡E */ - $"1512 85E6 30E6 98D1 AC22 EEBC 459C D841" /* ..…æ0æ˜Ñ¬"î¼EœØA */ - $"0A0F 1F31 2F75 7937 220F 7271 FE79 44A6" /* Â..1/uy7".rqþyD¦ */ - $"777E 1645 E0BA D980 0FFF 7D9F EC83 A930" /* w~.EàºÙ€.ÿ}Ÿìƒ©0 */ - $"D12B 216D 4D3F 4AD0 5EE9 DBC7 53D7 0A21" /* Ñ+!mM?JÐ^éÛÇS×Â! */ - $"2372 C608 6701 8AFA 8E33 4125 2B7E 38DA" /* #rÆ.g.ŠúŽ3A%+~8Ú */ - $"5990 99EE B1D0 B07C 9F9D 97DD D658 2C2A" /* Y™î±Ð°|Ÿ—ÝÖX,* */ - $"C7D6 4556 2AA7 297F ACBE 4802 B472 E76F" /* ÇÖEV*§).¬¾H.´rço */ - $"644F 2F11 17FF 7F9D CE1C 2989 7199 03B1" /* dO/..ÿ.Î.)‰q™.± */ - $"E719 2B3B 1131 C4CC 808B BC7A 26A4 479F" /* ç.+;.1ÄÌ€‹¼z&¤GŸ */ - $"4824 6486 E338 DB65 A502 454C C415 B8D0" /* H$d†ã8Ûe¥.ELÄ.¸Ð */ - $"7C77 7323 E381 5958 F415 95B9 142E 85F8" /* |ws#ãYXô.•¹..…ø */ - $"1742 E22F FF17 567B A195 DFF1 7EE0 8E40" /* .Bâ/ÿ.V{¡•ßñ~àŽ@ */ - $"431A B629 DDCE AED1 A925 9FCD 56B5 7945" /* C.¶)Ýήѩ%ŸÍVµyE */ - $"B8B9 77DF 732C CD1E 8137 2645 1135 9593" /* ¸¹wßs,Í.7&E.5•“ */ - $"E31C 333B 30E2 518D E202 A1E0 FEA6 C40E" /* ã.3;0âQâ.¡àþ¦Ä. */ - $"BB50 0174 C21D 0BFB 34C1 1A8D 8E5D FF77" /* »P.tÂ..û4Á.Ž]ÿw */ - $"909A 8111 3123 8200 AFC2 0525 13A1 C383" /* š.1#‚.¯Â.%.¡Ãƒ */ - $"5472 BA45 8D58 8818 E5CD 6FEA D858 47C5" /* TrºEXˆ.åÍoêØXGÅ */ - $"F5A0 7773 3C86 1CE8 9A67 FAA7 5726 643B" /* õ ws<†.èšgú§W&d; */ - $"1BF8 C2C1 E7AD D3CE E89B 97C4 0210 1FAE" /* .øÂÁç­ÓÎè›—Ä...® */ - $"9319 1F1F 7F89 0B76 5918 7EF8 9947 CF44" /* “....‰.vY.~ø™GÏD */ - $"6B5C 4B5D 5067 58A7 F35E CF39 7D01 C555" /* k\K]PgX§ó^Ï9}.ÅU */ - $"FCD3 E0F6 C1A4 9C8A 0B34 2D33 A20D F664" /* üÓàöÁ¤œŠ.4-3¢.öd */ - $"C174 CCE8 CAA1 C45F 2974 101B 86E7 68FD" /* ÁtÌèÊ¡Ä_)t..†çhý */ - $"D6FE 8FE9 AC95 5D3D DE38 1829 E3B9 37FE" /* Öþ鬕]=Þ8.)ã¹7þ */ - $"5008 F383 21C4 4D57 AE92 9F94 A9BB 3A76" /* P.óƒ!ÄMW®’Ÿ”©»:v */ - $"705F 8D2D 889C EB93 FD2B 05C5 89F2 500E" /* p_-ˆœë“ý+.ʼnòP. */ - $"4220 A486 F348 D466 4D62 E368 540A 1D25" /* B ¤†óHÔfMbãhTÂ.% */ - $"AF7C A9EF 43CC E423 16FC 6EE5 C407 DDAE" /* ¯|©ïCÌä#.ünåÄ.Ý® */ - $"EB28 23D2 3FDE 40EF 2ED1 D53A B87B 9C40" /* ë(#Ò?Þ@ï.ÑÕ:¸{œ@ */ - $"80A2 77EF CC8F D34E C33F 7BB4 4748 E4A6" /* €¢wïÌÓNÃ?{´GHä¦ */ - $"B177 05FF 085F CBF9 F1A0 8CA7 4200 32AC" /* ±w.ÿ._Ëùñ Œ§B.2¬ */ - $"7B87 A517 EA04 C96C F9A3 C6ED 5FFF 7FED" /* {‡¥.ê.Élù£Æí_ÿ.í */ - $"D5EB F835 3E15 6882 AED1 72BF B42C 87DE" /* Õëø5>.h‚®Ñr¿´,‡Þ */ - $"8111 0F7A 5DA6 CFEA 79A7 9174 89E8 E637" /* ..z]¦Ïêy§‘t‰èæ7 */ - $"7E56 B53E 9987 2013 8F1A 06A5 07A2 1856" /* ~Vµ>™‡ ...¥.¢.V */ - $"FE30 E259 128A 968B 881F E88D 8566 98D7" /* þ0âY.Š–‹ˆ.è…f˜× */ - $"C815 C397 64E8 9FAC 059A 5922 C863 F220" /* È.×d蟬.šY"Ècò */ - $"EC2A 4AF8 5DB2 A77D FC6A 3AC1 357E D5CC" /* ì*Jø]²§}üj:Á5~ÕÌ */ - $"142B 85B0 FEE0 2579 D845 CDFD F507 4C58" /* .+…°þà%yØEÍýõ.LX */ - $"D86A F299 0BBC A0A8 39A4 03D9 2144 6B3E" /* Øjò™.¼ ¨9¤.Ù!Dk> */ - $"6D67 242B 0FEB B6F4 79CB 58ED 2338 DB9F" /* mg$+.ë¶ôyËXí#8ÛŸ */ - $"6EC7 1626 0FDD 0C77 1E00 2AE4 8B46 F39C" /* nÇ.&.Ý.w..*ä‹Fóœ */ - $"6268 EE5F FF49 B5C8 30E7 9859 E163 A9D4" /* bhî_ÿIµÈ0ç˜Yác©Ô */ - $"C50F BC0C 46BB BBC7 9FFF 7D54 E81B 8936" /* Å.¼.F»»ÇŸÿ}Tè.‰6 */ - $"A032 72E8 6576 5FEA 9A3F A5A9 9E58 B9C2" /*  2rèev_êš?¥©žX¹Â */ - $"A089 A039 5695 766F 3295 A1FF 7F5F FBDB" /*  ‰ 9V•vo2•¡ÿ._ûÛ */ - $"A3FD 1F1F 76AD 6787 B4D0 D1A5 E4EA 72F8" /* £ý..v­g‡´ÐÑ¥äêrø */ - $"0276 0C35 EC34 65A8 000A CA35 6AAE 1800" /* .v.5ì4e¨.ÂÊ5j®.. */ - $"99CA 1B65 F56D 6C3B DF33 AB08 94A3 15CF" /* ™Ê.eõml;ß3«.”£.Ï */ - $"C9B8 D32E 35D7 D32D 57E6 86D2 A5BE 2B3A" /* ɸÓ.5×Ó-Wæ†Ò¥¾+: */ - $"4535 2C10 41FE FDA9 E202 3927 BC4F 5F90" /* E5,.Aþý©â.9'¼O_ */ - $"E637 311C DB00 E394 09F3 005B 7DB3 0DFE" /* æ71.Û.ã”Æó.[}³.þ */ - $"9F1F CAA4 DD03 B381 8330 AB38 E13B 2F9C" /* Ÿ.ʤÝ.³ƒ0«8á;/œ */ - $"3DB5 01C5 100A 5D16 5C8D 792C FA0E 1A85" /* =µ.Å.Â].\y,ú..… */ - $"E3FF 467A 6333 E4F1 F27C 9E2B 161E 18F0" /* ãÿFzc3äñò|ž+...ð */ - $"3F30 9C2C 631D BE74 4B7F 6E21 3FBC 404E" /* ?0œ,c.¾tK.n!?¼@N */ - $"E063 4152 D02D 68E4 869C E7E9 E4E6 4E95" /* àcARÐ-h䆜çéäæN• */ - $"3A66 1FDA 1145 DFB4 0796 9F97 503C E2C9" /* :f.Ú.Eß´.–Ÿ—P<âÉ */ - $"7F49 D644 1290 98BD 8EA0 2FA1 CF00 E383" /* .IÖD.˜½Ž /¡Ï.ム*/ - $"C003 7BFE D79B FF62 A38E 2C39 A64D 19FF" /* À.{þ×›ÿb£Ž,9¦M.ÿ */ - $"6A9D 976A 994B 6626 4F4D 7DC8 F0CA EDB7" /* j—j™Kf&OM}ÈðÊí· */ - $"F99E 21E2 36B4 3AAB E787 C6A2 1783 F623" /* ùž!â6´:«ç‡Æ¢.ƒö# */ - $"8755 1F66 AFBC 2959 6E6E 2E61 AC85 2198" /* ‡U.f¯¼)Ynn.a¬…!˜ */ - $"9978 EDFD 334C F0D6 7F76 9AF2 47AF 5E4B" /* ™xíý3LðÖ.všòG¯^K */ - $"805C 54D3 5F2A 16C5 6675 C288 B44F F851" /* €\TÓ_*.Åfuˆ´OøQ */ - $"1CE9 9F21 BF10 92B9 2366 5D69 AE8E 9989" /* .éŸ!¿.’¹#f]i®Ž™‰ */ - $"36A6 F9E6 75A7 0D47 C8B5 8727 0138 2BFA" /* 6¦ùæu§.Gȵ‡'.8+ú */ - $"5C4A 649C 123C 225E 2CEC 2007 5016 3F11" /* \Jdœ.<"^,ì .P.?. */ - $"B8FF 60CB 7150 EBFD DFED 147E 0A98 E096" /* ¸ÿ`ËqPëýßí.~Â˜à– */ - $"6B76 3AF0 39A5 5BF2 880C E857 174C 8735" /* kv:ð9¥[òˆ.èW.L‡5 */ - $"ACF6 E4B7 3477 6293 FF7C 8515 A8DE 4E73" /* ¬öä·4wb“ÿ|….¨ÞNs */ - $"8E37 8A0C 4384 0CF3 FA01 15F5 9639 ED05" /* Ž7Š.C„.óú..õ–9í. */ - $"C86B 28A0 C331 14BC 2817 FE9B F96A D60D" /* Èk( Ã1.¼(.þ›ùjÖ. */ - $"EBCB 14DA FF7F FF47 8A61 A2C7 F01F 10B7" /* ëË.Úÿ.ÿGŠa¢Çð..· */ - $"3DAF B01C B484 F55D 457E E3EC CC41 95DE" /* =¯°.´„õ]E~ãìÌA•Þ */ - $"097E 8117 F77F FEFB A490 8B96 1300 2B37" /* Æ~.÷.þû¤‹–..+7 */ - $"19FA E04C 4188 E9F6 8950 0668 B082 8FD8" /* .úàLAˆéö‰P.h°‚Ø */ - $"0B7D 6C32 4DBF F84F F4E9 ACAF 719A DC43" /* .}l2M¿øOô鬯qšÜC */ - $"9F8D A53E DF1A BDB0 AAA7 3267 9C2D 357A" /* Ÿ¥>ß.½°ª§2gœ-5z */ - $"9CA7 1AE1 59C4 F467 83D3 308B 004A 42C2" /* œ§.áYÄôgƒÓ0‹.JB */ - $"909B F979 41CE AB25 C6D1 9FE9 46E1 E837" /* ›ùyAΫ%ÆÑŸéFáè7 */ - $"7ADF FF72 225E 4472 D323 F55C BE19 1E50" /* zßÿr"^DrÓ#õ\¾..P */ - $"BF94 6787 CADB F576 300A 054B 0A2D E9B2" /* ¿”g‡ÊÛõv0Â.KÂ-é² */ - $"5C15 DB84 E735 F76D 5477 D8A7 28AF FF7A" /* \.Û„ç5÷mTwا(¯ÿz */ - $"7EB8 06F8 4FF4 E999 ED48 02C4 F111 F61D" /* ~¸.øOôé™íH.Äñ.ö. */ - $"8A6C 1CC6 AE54 94E4 8C5D 7655 4ECC 205F" /* Šl.Æ®T”äŒ]vUNÌ _ */ - $"DBF9 1BA7 83CC 52E9 E9C9 52A4 1151 7DE4" /* Ûù.§ƒÌRééÉR¤.Q}ä */ - $"051B E140 3FC0 D60B 0C11 663F 98A9 8B53" /* ..á@?ÀÖ...f?˜©‹S */ - $"776E BD8D 7678 AD62 ACEE 033F D134 B61E" /* wn½vx­b¬î.?Ñ4¶. */ - $"F86D 3384 AAE7 9074 F7CF 4509 F9B3 4F30" /* øm3„ªçt÷ÏEÆù³O0 */ - $"F32D 840F 1DDA E6B1 BDD4 951F 2379 F890" /* ó-„..Úæ±½Ô•.#yø */ - $"530A E915 A228 D3D8 B188 C692 2767 D628" /* SÂé.¢(ÓØ±ˆÆ’'gÖ( */ - $"12F8 3FFA BA23 F76B 1D92 1FC1 EA73 30FC" /* .ø?úº#÷k.’.Áês0ü */ - $"CE72 0CA5 6695 6326 F93B B52F B9D4 F6F0" /* Îr.¥f•c&ù;µ/¹Ôöð */ - $"FF07 727B 80F9 EBFC 2176 788C 333F 4137" /* ÿ.r{€ùëü!vxŒ3?A7 */ - $"E82C D066 6088 A8EA 168F 40EA F1EE BDE8" /* è,Ðf`ˆ¨ê.@êñî½è */ - $"C023 75BA 66F2 335A 98C0 31A8 2137 7A7B" /* À#uºfò3Z˜À1¨!7z{ */ - $"DA0F 3962 D4B3 3E6E A5A1 3A19 5EED 48A7" /* Ú.9bÔ³>n¥¡:.^íH§ */ - $"7617 DE46 D178 BC48 D85D 7821 DFEC B30D" /* v.ÞFÑx¼HØ]x!ßì³. */ - $"F84F B7CD 80ED 55C7 9E1A F58D 7085 F625" /* øO·Í€íUÇž.õp…ö% */ - $"F564 3BF5 A09E B353 4E45 2F0B FC02 ECFD" /* õd;õ ž³SNE/.ü.ìý */ - $"539F 529C A652 34F1 C0CC BC04 FCE0 2C7D" /* SŸRœ¦R4ñÀ̼.üà,} */ - $"A8A9 9E67 79E9 ADE4 ABEE BFF6 4793 1B91" /* ¨©žgyé­ä«î¿öG“.‘ */ - $"413A 4302 7FB5 190C CB09 0DC9 3B33 E18D" /* A:C..µ..ËÆ.É;3á */ - $"DDAB 23C5 FABA 5DC1 554F C940 B964 7F6A" /* Ý«#Åúº]ÁUOÉ@¹d.j */ - $"A781 2032 BF9E 0262 7C99 CD96 9251 9FB6" /* § 2¿ž.b|™Í–’QŸ¶ */ - $"1C69 9141 7A13 3022 DE48 DA68 C959 A0B5" /* .i‘Az.0"ÞHÚhÉY µ */ - $"0F3A F19A 9301 5051 5855 9D7B 5173 EE47" /* .:ñš“.PQXU{QsîG */ - $"2B0D DB30 28CC 5E41 46F1 E79F 90B3 AB2A" /* +.Û0(Ì^AFñ石«* */ - $"CAEA 6128 10E1 2CC0 DDC2 EBF1 26F1 E1DC" /* Êêa(.á,ÀÝÂëñ&ñáÜ */ - $"EB87 87ED 55F3 827C A066 D932 FCF7 B134" /* 뇇íUó‚| fÙ2ü÷±4 */ - $"8BC9 CC70 B38C B019 8372 EA60 7C36 4D38" /* ‹ÉÌp³Œ°.ƒrê`|6M8 */ - $"F82F 16C2 2390 A91B 203A 8EBE D0EC E278" /* ø/.Â#©. :޾Ðìâx */ - $"7AC4 8493 A217 6AC3 B85A 470D D74A B91D" /* zÄ„“¢.jøZG.×J¹. */ - $"0180 7BAB 4088 5671 6268 5B4A 54FE C179" /* .€{«@ˆVqbh[JTþÁy */ - $"1600 7677 830B 0E81 EEB2 6124 33F8 DBBD" /* ..vwƒ..î²a$3øÛ½ */ - $"1B35 D1F9 0568 3891 0ECB A836 5A86 9636" /* .5Ñù.h8‘.˨6Z†–6 */ - $"9F87 052F 0D66 8AA3 3362 1651 9B33 9057" /* Ÿ‡./.fŠ£3b.Q›3W */ - $"5B98 05EB 23CE 099F 2358 444E 0D64 A9F9" /* [˜.ë#ÎÆŸ#XDN.d©ù */ - $"A569 7D56 A50D 6256 69AF BDD9 7847 D651" /* ¥i}V¥.bVi¯½ÙxGÖQ */ - $"73E2 F76E F277 58DC BFB9 7B8E 593C 0E97" /* sâ÷nòwXÜ¿¹{ŽY<.— */ - $"3C4E 507D FA6C 7984 FAC8 6C42 6882 78AC" /* ÄÀ’ÜjXLª¯.Ÿ¢.Τ */ - $"884B 2DB6 09F4 F51B 546F CD71 F4D3 6452" /* ˆK-¶Æôõ.ToÍqôÓdR */ - $"B6E5 3EFF 66F8 0D60 D916 F755 1348 E250" /* ¶å>ÿfø.`Ù.÷U.HâP */ - $"D8E2 6858 B424 B84B D59A 6885 24D3 D845" /* ØâhX´$¸KÕšh…$ÓØE */ - $"692F 4313 B616 584F 7419 0661 0064 C281" /* i/C.¶.XOt..a.d */ - $"A873 131C 5296 042B 1FD5 3EED BFC2 659E" /* ¨s..R–.+.Õ>í¿Âež */ - $"C4C7 2720 8002 28DD 141A BBE7 99F8 028F" /* ÄÇ' €.(Ý..»ç™ø. */ - $"8262 0577 5240 EB9A F866 2901 B75B 3FED" /* ‚b.wR@ëšøf).·[?í */ - $"9E78 9071 83FD 02BC FCDE 2135 42D1 F184" /* žxqƒý.¼üÞ!5BÑñ„ */ - $"309D F47E DF10 F797 4268 120A D377 04A4" /* 0ô~ß.÷—Bh.ÂÓw.¤ */ - $"2998 099E CA35 66AD FB20 8C14 1E0E 714E" /* )˜ÆžÊ5f­û Œ...qN */ - $"B9A7 70EE 5BA0 7A18 FC16 97EB 1A98 CB6C" /* ¹§pî[ z.ü.—ë.˜Ël */ - $"4B5D AC5B 3DC2 2062 E74A 18F2 0A76 6085" /* K]¬[= bçJ.òÂv`… */ - $"EF50 1C2F FE23 117A ED22 7BE8 0231 BC71" /* ïP./þ#.zí"{è.1¼q */ - $"707C 6736 BC3C 38AA 81C2 66B6 DCE5 13E9" /* p|g6¼<8ªÂf¶Üå.é */ - $"3076 C7AD 8C4B A962 C37E 4605 CDC0 8247" /* 0vÇ­ŒK©bÃ~F.ÍÀ‚G */ - $"190C 41CD 6923 8D00 BC94 5B5F E2AB 443B" /* ..AÍi#.¼”[_â«D; */ - $"3C5A 7FF6 213C 9E2D 9224 70B1 EA9B 7D36" /* .[ä.j,×Þf */ - $"BE8E C996 696D 58EC 6CFE 40AD 3C95 EAF1" /* ¾ŽÉ–imXìlþ@­<•êñ */ - $"4591 1D62 836E D2E3 4CD8 E4A6 F4F4 C456" /* E‘.bƒnÒãLØä¦ôôÄV */ - $"A70C B3BE AA22 A188 DAB5 D3F7 4B7B 865D" /* §.³¾ª"¡ˆÚµÓ÷K{†] */ - $"4D89 77E6 99A6 46C9 14BA 25E1 55C5 ADBD" /* M‰w晦FÉ.º%áUÅ­½ */ - $"4379 96AF 26DA A399 F009 AE75 248B 0285" /* Cy–¯&Ú£™ðÆ®u$‹.… */ - $"B370 5704 6429 C8AF 0BD3 A332 90B2 8351" /* ³pW.d)ȯ.Ó£2²ƒQ */ - $"F715 32C9 347B EADE 2EBB 9D97 BF95 0C5A" /* ÷.2É4{êÞ.»—¿•.Z */ - $"9203 1EC5 7A8E CF46 C28C 39A2 DE74 C656" /* ’..ÅzŽÏFÂŒ9¢ÞtÆV */ - $"F0BF 3ABF CE5F BE71 B7CE 2FF3 F41B F3EA" /* ð¿:¿Î_¾q·Î/óô.óê */ - $"8BE7 B07E AB17 4F87 74FC FDE8 EF9F BF3F" /* ‹ç°~«.O‡tüýè? */ - $"A9EB F3D5 3F3E 83BE 7BAF EA5F E0FE 7ADF" /* ©ëóÕ?>ƒ¾{¯ê_àþzß */ - $"E7A7 7F9D 3FE7 3BF9 FA77 F9FA 3FF9 F7C7" /* ç§.?ç;ùúwùú?ù÷Ç */ - $"E7E9 871D E84F CFE8 83FC FE85 E3BB E7E7" /* çé‡.èOÏèƒüþ…ã»çç */ - $"AFFE 7D7F F9F5 57E7 AF70 6F9D 2DF3 9ED7" /* ¯þ}.ùõWç¯po-óž× */ - $"C81E F903 FEAB 8EF9 F50D F254 3F3E A4D1" /* È.ù.þ«Žùõ.òT?>¤Ñ */ - $"DD53 F3F6 F37E 7EC9 4775 1BE4 77F9 EEBF" /* ÝSóöó~~ÉGu.äwùî¿ */ - $"9ED1 F9DC 00F7 91DD 3D8B A94D D83C 797F" /* žÑùÜ.÷‘Ý=‹©MØ.iùó.ÆäÓè»L§..à */ - $"F1D0 53DE 91D8 6723 A047 11C7 57B3 C46C" /* ñÐSÞ‘Øg# G.ÇW³Äl */ - $"84A7 C2E1 C7CC 185C 9F21 7E2B 0F2E 64B1" /* „§ÂáÇÌ.\Ÿ!~+..d± */ - $"D734 4142 C65E A2FB 9ABE B62D 076B 2B65" /* ×4ABÆ^¢ûš¾¶-.k+e */ - $"9D6E 63F1 4825 79A9 3936 C7A7 531F EF6A" /* ncñH%y©96ǧS.ïj */ - $"F859 3084 0421 88A9 A648 8641 ACEB 95DE" /* øY0„.!ˆ©¦H†A¬ë•Þ */ - $"2E94 E3C9 442C 13AF CF63 0404 C5C6 5CE2" /* .”ãÉD,.¯Ïc..ÅÆ\â */ - $"CE90 F9CC A1B6 5713 031E C239 174F CC40" /* ÎùÌ¡¶W...Â9.OÌ@ */ - $"BCA4 EA9A EB6A 1D24 7962 F735 AF5A B937" /* ¼¤êšëj.$yb÷5¯Z¹7 */ - $"AC3B A12E 10A8 D332 6FE3 8ED1 6F01 B198" /* ¬;¡..¨Ó2oãŽÑo.±˜ */ - $"1543 A6A1 367E E226 5D76 B860 E0E1 8963" /* .C¦¡6~â&]v¸`àá‰c */ - $"AA7A F9EE DABF DB52 28F6 69F9 273F 8729" /* ªzùîÚ¿ÛR(öiù'?‡) */ - $"1D00 C7D2 20B9 3483 2125 88FC 94C0 54A6" /* ..ÇÒ ¹4ƒ!%ˆü”ÀT¦ */ - $"42FE F4E5 DA50 F495 F88B 5986 21CB 22E8" /* BþôåÚPô•ø‹Y†!Ë"è */ - $"EE5E 0622 2CB0 BCC8 0C6B 2B2B 23EB 0506" /* î^.",°¼È.k++#ë.. */ - $"A40F 09C2 726F 0C1F B8D4 55D3 2FE4 D629" /* ¤.ÆÂro..¸ÔUÓ/äÖ) */ - $"94C2 C913 BB28 4394 A9D2 8684 9E47 0445" /* ”ÂÉ.»(C”©Ò†„žG.E */ - $"B6CF 3E21 7072 B435 310C D7A3 063D 942B" /* ¶Ï>!pr´51.×£.=”+ */ - $"6AE9 350C 9442 C76E 1E6B A8C1 18A3 4309" /* jé5.”BÇn.k¨Á.£CÆ */ - $"6D55 E62F FC4E C4E9 6CF8 241D FAC5 2CC9" /* mUæ/üNÄélø$.úÅ,É */ - $"E020 6B12 31A6 9B11 710B 8850 FABE 5D63" /* à k.1¦›.q.ˆPú¾]c */ - $"068A 4018 2A90 93A5 9715 531E 8E7B AD7A" /* .Š@.*“¥—.S.Ž{­z */ - $"2921 115F 19CE 2B6A F643 DE89 2E76 890B" /* )!._.Î+jöCÞ‰.v‰. */ - $"5A69 1668 6A02 061F 4832 24EB FC82 6B4D" /* Zi.hj...H2$ëü‚kM */ - $"9B08 D22F CBBF D348 D18F 8B0C C684 6851" /* ›.Ò/Ë¿ÓHÑ‹.Æ„hQ */ - $"6CA9 E2FA 43CE 8A9A 7A58 FB28 0208 A6E0" /* l©âúCΊšzXû(..¦à */ - $"1ACF CE23 C624 5A38 C640 72C0 26F1 2818" /* .ÏÎ#Æ$Z8Æ@rÀ&ñ(. */ - $"07FD 74D9 F3D6 ED38 CA01 6485 CE8C 41A3" /* .ýtÙóÖí8Ê.d…ÎŒA£ */ - $"02C6 18E5 E4D2 2043 FA62 8768 3E14 7E80" /* .Æ.åäÒ Cúb‡h>.~€ */ - $"F2EB 67AD F743 75A0 2DDF 8724 1468 F88D" /* òëg­÷Cu -߇$.hø */ - $"9BF3 11EB 4D4C B372 D210 9B58 BAA0 646A" /* ›ó.ëML³rÒ.›Xº dj */ - $"222F 5E5A C781 1D86 5652 1B57 07AF C8FA" /* "/^ZÇ.†VR.W.¯Èú */ - $"9E77 DD7B FCB9 1D4C 8573 7B03 95AC D2DA" /* žwÝ{ü¹.L…s{.•¬ÒÚ */ - $"3314 4FFC CAF4 39B5 EAF4 9617 2CC5 9258" /* 3.OüÊô9µêô–.,Å’X */ - $"8F99 8C44 8D44 DA10 F1A5 51F7 5533 F13B" /* ™ŒDDÚ.ñ¥Q÷U3ñ; */ - $"CDDC B6D6 BE71 3C92 2628 3B69 DC32 C623" /* Íܶ־q<’&(;iÜ2Æ# */ - $"F497 3959 034A 67C3 10A8 26E2 572F B4B1" /* ô—9Y.JgÃ.¨&âW/´± */ - $"6C5C 3E47 FB9F AA7D D9A4 7A08 4BBA E854" /* l\>GûŸª}Ù¤z.KºèT */ - $"4370 CE77 C69A 11EB 1BD8 B9AF 8225 BC8E" /* CpÎwÆš.ë.ع¯‚%¼Ž */ - $"A261 1CAA A74D B531 A0B9 D462 35DF 9C21" /* ¢a.ª§Mµ1 ¹Ôb5ßœ! */ - $"73F1 EAC1 A13C E0BC AF6C 8111 03DF AF1F" /* sñêÁ¡<༯l..߯. */ - $"4748 1866 322C 535A 7C5E D2BC 4304 3541" /* GH.f2,SZ|^Ò¼C.5A */ - $"F14E 8412 296B 2C37 B642 9B4A 6417 EABB" /* ñN„.)k,7¶B›Jd.ê» */ - $"9034 1260 1B81 AFCC F903 4FAA A3F2 339E" /* 4.`.¯Ìù.Oª£ò3ž */ - $"F332 B080 8C32 31D7 4DEA B260 F190 43F1" /* ó2°€Œ21×Mê²`ñCñ */ - $"CCD5 A584 5C1C 343F FB87 CEA5 F246 8EAC" /* ÌÕ¥„\.4?û‡Î¥òFެ */ - $"C407 302C FEE7 3F59 F4B8 74ED ED62 D373" /* Ä.0,þç?Yô¸tííbÓs */ - $"A4BA B53A 0554 5403 9C2C E745 1087 5546" /* ¤ºµ:.TT.œ,çE.‡UF */ - $"2671 7BA6 3A33 703E BEF5 CD28 10A5 462B" /* &q{¦:3p>¾õÍ(.¥F+ */ - $"D902 9493 B2FC 176F 34BA 5A2D D2BC 0CBB" /* Ù.”“²ü.o4ºZ-Ò¼.» */ - $"5AB7 B854 08D3 CD79 3C71 1A89 E643 2FBC" /* Z·¸T.ÓÍy©¶éó¯ */ - $"6757 09A3 C49E A9AD 7201 BFD9 B3FA 52B0" /* gWƣĞ©­r.¿Ù³úR° */ - $"0000 0030 908B 4E52 45F1 3CBE F04A D2E4" /* ...0‹NREñ<¾ðJÒä */ - $"83AF 6AEA 78E9 A438 C877 BAAD 65CB C703" /* ƒ¯jêxé¤8Èwº­eËÇ. */ - $"70B2 B9DD E19B 6B8C 0CE9 E402 0C9F 94F0" /* p²¹Ýá›kŒ.éä..Ÿ”ð */ - $"21BC 4E05 C03C 012A 66EF D0BC 2B72 292E" /* !¼N.À<.*fïм+r). */ - $"3592 1FDB 2A5C 8D2D C2FF 5C5B 6AB8 F695" /* 5’.Û*\-Âÿ\[j¸ö• */ - $"F279 2C54 0529 555A 6ACA 22A4 C28B D693" /* òy,T.)UZjÊ"¤Â‹Ö“ */ - $"1FC9 4492 43F3 A323 F990 0A31 9356 30D3" /* .ÉD’Có£#ùÂ1“V0Ó */ - $"D6F0 0D36 0091 043F F239 9D1E 114E 3693" /* Öð.6.‘.?ò9..N6“ */ - $"DF1C 23DF A27A 5B11 A44D 9199 07D1 AF2C" /* ß.#ߢz[.¤M‘™.ѯ, */ - $"63EB 21C5 D29F 8644 8C6A 129A 9CB9 ED72" /* cë!ÅÒŸ†DŒj.šœ¹ír */ - $"9286 3E0E B604 539A F262 B727 9284 01F9" /* ’†>.¶.Sšòb·'’„.ù */ - $"5AE1 DA5A 8A02 140E 5275 5433 BCDF 8038" /* ZáÚZŠ...RuT3¼ß€8 */ - $"0050 856F A747 857B 8376 255A 9185 28CC" /* .P…o§G…{ƒv%Z‘…(Ì */ - $"301A EC7C B5D3 89CC A695 1C87 8266 7CA8" /* 0.ì|µÓ‰Ì¦•.‡‚f|¨ */ - $"A203 7467 426E 9507 3DB3 1F90 F66B DC9F" /* ¢.tgBn•.=³.ökÜŸ */ - $"ACF6 CDB2 4FCC 5AE4 2F94 F555 CB9E D8AC" /* ¬öͲOÌZä/”õU˞ج */ - $"950B FF38 0FE4 5056 E5E8 F371 9A98 5697" /* •.ÿ8.äPVåèóqš˜V— */ - $"6319 5197 B545 E594 AADD B2F2 CA27 260D" /* c.Q—µE唪ݲòÊ'&. */ - $"9BAF 0E45 0846 5573 F96B 7AC1 CC89 E86E" /* ›¯.E.FUsùkzÁ̉èn */ - $"61E6 72E2 05E3 9F8D 26D8 F178 BCC0 0B18" /* aærâ.ãŸ&Øñx¼À.. */ - $"967C EA80 F7C1 45AE 8FAE A41C 41B6 438E" /* –|ê€÷ÁE®®¤.A¶CŽ */ - $"46EF 1094 D558 01A8 BBAD 7380 DA27 2772" /* Fï.”ÕX.¨»­s€Ú''r */ - $"9D67 1330 A48C 62EA 0643 14EC 3E22 A055" /* g.0¤Œbê.C.ì>" U */ - $"4E39 4E23 853D C587 99C8 CFD2 AEBB 9843" /* N9N#…=Ň™ÈÏÒ®»˜C */ - $"ECC9 0241 3253 8CF1 E068 1936 3BB2 56D3" /* ìÉ.A2SŒñàh.6;²VÓ */ - $"46F7 6A71 98D1 A300 1337 B3B0 7ABB 5752" /* F÷jq˜Ñ£..7³°z»WR */ - $"DB7A 7F85 5CFE 59DE A852 6987 DC11 C6B5" /* Ûz.…\þYÞ¨Ri‡Ü.Ƶ */ - $"E45B 7DD1 1F3A D566 C16D 3FBF 7BAD 7201" /* ä[}Ñ.:ÕfÁm?¿{­r. */ - $"B71C C74C A678 C2BB 10FD 534A 5E5D 79C0" /* ·.ÇL¦x».ýSJ^]yÀ */ - $"000C 2336 9113 B9C5 5D4A 1756 1C8B 0CD6" /* ..#6‘.¹Å]J.V.‹.Ö */ - $"AA8B DFF5 6CE3 CDAB B9B4 D85C 93FF 76AA" /* ª‹ßõlãÍ«¹´Ø\“ÿvª */ - $"15CF CF39 A864 B236 A172 03A1 65A1 9F76" /* .ÏÏ9¨d²6¡r.¡e¡Ÿv */ - $"FF55 00DE C7D0 C767 2787 9EB3 7CE5 C5BC" /* ÿU.ÞÇÐÇg'‡ž³|åż */ - $"8E08 6085 37A2 229C 73D3 2CC5 F6E8 AA1B" /* Ž.`…7¢"œsÓ,Åöèª. */ - $"AF13 15FD EB95 2609 6006 23C6 7910 8FFE" /* ¯..ýë•&Æ`.#Æy.þ */ - $"8C5E 60A6 A558 E899 0A05 0F37 EC94 8E51" /* Œ^`¦¥Xè™Â..7씎Q */ - $"7838 9A11 8483 88B0 E284 B88D CDEA 9D56" /* x8š.„ƒˆ°â„¸ÍêV */ - $"5C7E CFA2 8001 847E ABC9 360E 17EA 2D34" /* \~Ï¢€.„~«É6..ê-4 */ - $"8314 96C0 3810 D88F A54E 6E7C 6030 76FA" /* ƒ.–À8.Ø¥Nn|`0vú */ - $"18A4 A549 37FC 11F6 E77F A883 C794 71AC" /* .¤¥I7ü.öç.¨ƒÇ”q¬ */ - $"55F1 7F88 664A FEE4 01C4 5576 1BE6 9C41" /* Uñ.ˆfJþä.ÄUv.æœA */ - $"D800 6121 2FC0 E681 A16E 21AF D5FE 0E80" /* Ø.a!/Àæ¡n!¯Õþ.€ */ - $"A800 0000 3090 8C40 9184 82DA 7187 51C6" /* ¨...0Œ@‘„‚Úq‡QÆ */ - $"44DC C420 FF13 98AD D100 2C07 132C 8D6C" /* DÜÄ ÿ.˜­Ñ.,..,l */ - $"5D16 A089 D8F6 E77F A870 24F1 5461 DB69" /* ]. ‰Øöç.¨p$ñTaÛi */ - $"0F41 5029 7A41 B55F 0000 0184 846A 850C" /* .AP)zAµ_...„„j…. */ - $"241E E628 EDA6 4000 3090 6AA2 F6E7 7FA6" /* $.æ(í¦@.0j¢öç.¦ */ - $"26C9 5EDE 9BB6 A1B1 51E6 8D5D F800 0061" /* &É^Þ›¶¡±Qæ]ø..a */ - $"19B3 E47D 6F6F DB03 0885 4A53 27BA 38F5" /* .³ä}ooÛ..…JS'º8õ */ - $"35A0 1AB9 0A95 8FAE 85E3 F528 5A8B E645" /* 5 .¹Â•®…ãõ(Z‹æE */ - $"8419 0456 6A38 D0DA 4948 8987 2323 1216" /* „..Vj8ÐÚIH‰‡##.. */ - $"A4F8 FD1A C374 D30C BF43 CD86 B984 F23C" /* ¤øý.ÃtÓ.¿C͆¹„ò< */ - $"5487 B47F E217 F15A D8CF A66A 96A9 EAF3" /* T‡´.â.ñZØÏ¦j–©êó */ - $"F966 0205 D320 1556 5C3C 073A 8E66 1E3F" /* ùf..Ó .V\<.:Žf.? */ - $"A74E FF2C BC45 E9DB 3B25 FF7F 46AD 13A9" /* §Nÿ,¼EéÛ;%ÿ.F­.© */ - $"5C21 458B 6AD4 829C 1DFB 54BA E5F2 3C76" /* \!E‹jÔ‚œ.ûTºåò’F...! */ - $"2CFF 4F5F FD2E 999E B77D A47D 61B4 2C01" /* ,ÿO_ý.™ž·}¤}a´,. */ - $"D397 493D CB48 AB27 EB4A 13A7 8C89 7F64" /* Ó—I=ËH«'ëJ.§Œ‰.d */ - $"6C08 FF21 9696 98C7 6248 1615 541F EC81" /* l.ÿ!––˜ÇbH..T.ì */ - $"8E18 FAED 5257 3D01 2CBB 74C1 DA64 81A0" /* Ž.úíRW=.,»tÁÚd  */ - $"39BF B272 4068 15E8 A44A 007C 732C D9DC" /* 9¿²r@h.è¤J.|s,ÙÜ */ - $"1CF8 4612 8611 A36D 67BC 6E6A EA14 9D87" /* .øF.†.£mg¼njê.‡ */ - $"2962 C4B4 5442 9564 BFAA D0FB 991F 4288" /* )bÄ´TB•d¿ªÐû™.Bˆ */ - $"7CB2 2A41 333E 7827 5070 F3A6 67FF 7FFF" /* |²*A3>x'Ppó¦gÿ.ÿ */ - $"7601 CFFE E44B 4413 809B 3877 B59D BC19" /* v.ÏþäKD.€›8wµ¼. */ - $"548F 0A5B C1E9 A8D7 6B5D 8EC8 8A1A BB3D" /* TÂ[Áé¨×k]ŽÈŠ.»= */ - $"3CD1 3139 57CF 9E94 00E9 CF6E 3830 3561" /* <Ñ19WÏž”.éÏn805a */ - $"8DE4 A59F FD1B 45CF C608 D0FD 5D48 485E" /* 䥟ý.EÏÆ.Ðý]HH^ */ - $"D5A3 30A5 F9EE 5D55 B9C2 E552 3A9F B087" /* Õ£0¥ùî]U¹ÂåR:Ÿ°‡ */ - $"FE87 5DBC 5E73 0F16 9221 2B0D F399 AB6F" /* þ‡]¼^s..’!+.ó™«o */ - $"9950 0000 0000 0000 0008 2444 88CE 3BBD" /* ™P........$DˆÎ;½ */ - $"CC78 4932 9C47 DEFA 74E7 91BF 9827 FF7B" /* ÌxI2œGÞútç‘¿˜'ÿ{ */ - $"77EB 9B1B 9F7F FDAB 6552 35A1 0C22 E9C6" /* wë›.Ÿ.ý«eR5¡."éÆ */ - $"42E3 FF7F FF7F E9FD A23B 2F7D 3ADD FC90" /* Bãÿ.ÿ.éý¢;/}:Ýü */ - $"E4A1 F8B9 0560 0F86 D7FE 3F46 C953 2A03" /* 䡸¹.`.†×þ?FÉS*. */ - $"F1C7 F5AE D0C4 B743 EA67 B694 E47D 45CD" /* ñÇõ®ÐÄ·Cêg¶”ä}EÍ */ - $"6F92 178A E383 8B71 800E D9AF A55A F149" /* o’.Šãƒ‹q€.Ù¯¥ZñI */ - $"A838 5671 4C9A 8915 447A CDA9 C6B7 DD68" /* ¨8VqLš‰.DzͩƷÝh */ - $"A5FB F404 CF63 A62E CC5E 89D3 FDB2 C841" /* ¥ûô.Ïc¦.Ì^‰Óý²ÈA */ - $"7A37 5B5D 5958 4B46 20B1 D389 5188 F9FE" /* z7[]YXKF ±Ó‰Qˆùþ */ - $"8FF1 D718 6C8C 3254 0000 0000 0000 0000" /* ñ×.lŒ2T........ */ - $"0000 00A1 EBEC C33A 8622 D0FF 7FFF 7FFF" /* ...¡ëìÃ:†"Ðÿ.ÿ.ÿ */ - $"705D C7FE 49E7 01B7 A65D D5BC 2041 80B0" /* p]ÇþIç.·¦]Õ¼ A€° */ - $"89ED F68A A000 F438 EBD0 C908 0B67 414F" /* ‰íöŠ .ô8ëÐÉ..gAO */ - $"C8F1 4312 2EC8 05E6 CA19 184F FF5B BA24" /* ÈñC..È.æÊ..Oÿ[º$ */ - $"57E8 A6B4 FBD3 FF79 4D8E FF44 BC50 6938" /* W覴ûÓÿyMŽÿD¼Pi8 */ - $"137F FF7D 6251 8D1A 9B33 CF7E 0BCB EAD7" /* ..ÿ}bQ.›3Ï~.Ëê× */ - $"2E0D EAE0 0003 0906 AA2B 66A8 C950 0000" /* ..êà..Æ.ª+f¨ÉP.. */ - $"0000 0000 0000 0000 0001 1E1F F600 1848" /* ............ö..H */ - $"4BF6 7A7C F92D 3E7A 437E 2254 51EB 4AF5" /* Köz|ù->zC~"TQëJõ */ - $"C6BF 442A 12CD 51FF 7FFE B8AE D0C4 B1D0" /* Æ¿D*.ÍQÿ.þ¸®ÐıР*/ - $"7CF7 019D A0ED 2CC4 01BC 1A94 212D 43EF" /* |÷. í,Ä.¼.”!-Cï */ - $"1274 9B67 94D5 062D 5FCC E23C 4816 416B" /* .t›g”Õ.-_Ìâ•Þ0Ð1ˆ*uO5Ë.ÝÕ */ - $"7FFD A983 95A9 71E7 A7A3 7D3F F944 0A7E" /* .ý©ƒ•©qç§£}?ùDÂ~ */ - $"24D9 966F 6B6A 0FD0 23AC 7000 0000 0000" /* $Ù–okj.Ð#¬p..... */ - $"0009 D4AF 9196 E5A4 B8AC 407F F9EE C709" /* .ÆÔ¯‘–夸¬@.ùîÇÆ */ - $"F927 08C3 CA6C 3A3A D90F E306 BCC4 6D6C" /* ù'.ÃÊl::Ù.ã.¼Äml */ - $"C7A9 F042 6F4C FDC9 60AB A087 6338 8F12" /* Ç©ðBoLýÉ`« ‡c8. */ - $"4D29 D00C C575 C7B5 9FA4 E96C 1FA0 AAFB" /* M)Ð.ÅuǵŸ¤él. ªû */ - $"09E9 8DF9 1BE0 C62D 3C1D F55B DD77 A0FD" /* Æéù.àÆ-<.õ[Ýw ý */ - $"5C16 D959 BA08 0000 0000 0000 0145 AE01" /* \.ÙYº........E®. */ - $"712A 0E06 1212 70CD 94A8 0A2C 18F5 1E3B" /* q*....pÍ”¨Â,.õ.; */ - $"52FA C8F6 56F3 F7E4 69E6 54A0 3FF6 2487" /* RúÈöVó÷äiæT ?ö$‡ */ - $"C65F 0EFF 7F4F 8D07 C817 FE78 727D 3C75" /* Æ_.ÿ.O.È.þxr}~bR.ÀJƒP× */ - $"DADA 8602 5949 900F D2B6 D10D 2661 3014" /* ÚÚ†.YI.Ò¶Ñ.&a0. */ - $"4541 17FF 2106 00DF AC82 0046 09BB A5AF" /* EA.ÿ!..߬‚.FÆ»¥¯ */ - $"CE51 0EBF F9AD 787A 907F 9F9A 628F E16B" /* ÎQ.¿ù­xz.Ÿšbák */ - $"C015 137E 9C68 FCFA A817 FF7F DD6B FDB6" /* À..~œhüú¨.ÿ.Ýký¶ */ - $"3DA3 7C9D 3309 0B8A B551 C370 4401 CD7F" /* =£|3Æ.еQÃpD.Í. */ - $"7503 8425 E297 1B3F FF49 4FF8 3583 685A" /* u.„%â—.?ÿIOø5ƒhZ */ - $"B273 A7F7 CEBF F27E D78C 3E35 5332 152B" /* ²s§÷οò~׌>5S2.+ */ - $"033C C7FF 7B97 1AF0 F2A4 3C88 CC7B B96E" /* .<Çÿ{—.ðò¤<ˆÌ{¹n */ - $"65B3 533C F2F8 5E4B 6DBF 7D78 A316 310F" /* e³S<òø^Km¿}x£.1. */ - $"6B09 FD62 88D7 77FF 7447 524E C235 00A3" /* kÆýbˆ×wÿtGRNÂ5.£ */ - $"8F5A 4BEE D240 6154 C17C 2CC2 68F0 A959" /* ZKîÒ@aTÁ|,Âhð©Y */ - $"2F12 9B74 7E8E 423F BB1D BC9A C75B C618" /* /.›t~ŽB?».¼šÇ[Æ. */ - $"19D1 C6CB 0A15 BD77 99BD 96D3 CC07 F5AC" /* .ÑÆËÂ.½w™½–ÓÌ.õ¬ */ - $"D2ED DE5E F19D 5CFC B2B0 5407 0386 32C6" /* ÒíÞ^ñ\ü²°T..†2Æ */ - $"5F49 7BAD 3270 BF81 CF97 C934 7E23 7237" /* _I{­2p¿Ï—É4~#r7 */ - $"727B 0FA2 6DB0 D717 8C73 B109 E089 AAC5" /* r{.¢m°×.Œs±Æà‰ªÅ */ - $"7D98 9061 2956 EA75 0135 E870 3430 4E9B" /* }˜a)Vêu.5èp40N› */ - $"C76C D3D6 7EEB 83DB 9EEB C9A0 983D 1327" /* ÇlÓÖ~ëƒÛžëÉ ˜=.' */ - $"62D8 FD62 CA51 7135 80B0 ABFF 431B 9843" /* bØýbÊQq5€°«ÿC.˜C */ - $"68B4 A929 44E4 1F3E E3A1 22AA 5E87 579C" /* h´©)Dä.>ã¡"ª^‡Wœ */ - $"745B 9CA4 438C BFC2 9A1B 17BE BA75 06E4" /* t[œ¤CŒ¿Âš..¾ºu.ä */ - $"0108 698C E4F2 341C 24CC 7913 6237 ED48" /* ..iŒäò4.$Ìy.b7íH */ - $"E797 4D7A 0D5A D1EA ACDF F974 4F9F 9139" /* ç—Mz.ZÑê¬ßùtOŸ‘9 */ - $"6A87 3972 A1C8 0A2B 1E8B 6DB7 B811 4AB0" /* j‡9r¡ÈÂ+.‹m·¸.J° */ - $"EEE8 BB23 959C 239D 4165 DBED ACE4 F133" /* îè»#•œ#AeÛí¬äñ3 */ - $"8276 40BB C447 29FE 3EB6 5BA4 A6D0 2441" /* ‚v@»ÄG)þ>¶[¤¦Ð$A */ - $"1431 8B2D 8BFD 96B7 C8C2 9F9B DFB9 2B06" /* .1‹-‹ý–·ÈŸ›ß¹+. */ - $"E191 00FF 7E4B 8281 D609 D163 B8CB AF9A" /* á‘.ÿ~K‚ÖÆÑc¸Ë¯š */ - $"0995 7385 27FC 3C6A 5310 024D BAD1 8013" /* Æ•s…'ü—âx.(.“õeø> */ - $"4161 0037 E0AA D0CC 3AED 4E56 04E8 4456" /* Aa.7àªÐÌ:íNV.èDV */ - $"6E50 4626 C7E0 0790 014E 329B 0DDB D87D" /* nPF&Çà..N2›.ÛØ} */ - $"4532 6482 3F51 D651 3F62 D6EB 3BCA 75EB" /* E2d‚?QÖQ?bÖë;Êuë */ - $"5444 A42F 3CFB 4146 19FB 5376 876F 6BC1" /* TD¤/<ûAF.ûSv‡okÁ */ - $"B80B 7787 71DF 4CAA D70A 98BC 98E1 15A1" /* ¸.w‡qßLª×˜¼˜á.¡ */ - $"7996 F17F FF7A 91CF 350C FA04 5753 7ECB" /* y–ñ.ÿz‘Ï5.ú.WS~Ë */ - $"29F1 A4AD F335 59DB A580 EAA3 98AD FEB0" /* )ñ¤­ó5YÛ¥€ê£˜­þ° */ - $"275E BABE 6679 9AD4 B246 75F2 ECAA B042" /* '^º¾fyšÔ²Fuò쪰B */ - $"92C9 745E 1C58 58FF 2570 9228 4EAF 6F65" /* ’Ét^.XXÿ%p’(N¯oe */ - $"56F3 1D0C 85AA 9468 8000 0000 0101 3082" /* Vó..…ª”h€.....0‚ */ - $"08FD E30F FF75 70BF FCCA 2225 E5FC 3464" /* .ýã.ÿup¿üÊ"%åü4d */ - $"00CA 6C43 E833 80DE 2895 5F84 4B08 CEFA" /* .ÊlCè3€Þ(•_„K.Îú */ - $"AA94 EE33 24E7 CA20 A668 4717 FD5F F7F2" /* ª”î3$çÊ ¦hG.ý_÷ò */ - $"59E7 D6C6 6D0D 8E0F 1AC3 BBFA 3890 8ACB" /* YçÖÆm.Ž..ûú8ŠË */ - $"9250 6D82 E892 D4B9 1F14 D987 9818 877A" /* ’Pm‚è’Ô¹..Ù‡˜.‡z */ - $"66F0 905A B088 D761 B529 F02A 6964 6C65" /* fðZ°ˆ×aµ)ð*idle */ - $"8FB8 9A87 7771 9A12 C8A6 7F9C 9905 D643" /* ¸š‡wqš.Ȧ.œ™.ÖC */ - $"E554 91F5 0C26 4299 30C6 BC87 B38C 86FB" /* åT‘õ.&B™0Ƽ‡³Œ†û */ - $"ED50 C019 3822 52A8 97C6 1F49 176D FB8C" /* íPÀ.8"R¨—Æ.I.mûŒ */ - $"87B7 E37C 196E 3695 357A E2B8 FDE5 736E" /* ‡·ã|.n6•5zâ¸ýåsn */ - $"DF11 6026 3CD9 51CF 2A50 6F8A 53B0 0F16" /* ß.`&<ÙQÏ*PoŠS°.. */ - $"938B 745A F84D 571C A582 9723 90B4 49D7" /* “‹tZøMW.¥‚—#´I× */ - $"B11D 7BA6 45C1 2AFA D519 A471 60A3 17A9" /* ±.{¦EÁ*úÕ.¤q`£.© */ - $"2C13 6E04 D58E 3F37 0115 E4AE F51C 1BA8" /* ,.n.ÕŽ?7..ä®õ..¨ */ - $"EF7F 4C9F 7B47 8C5A D1D6 CAC7 D416 D6D4" /* ï.LŸ{GŒZÑÖÊÇÔ.ÖÔ */ - $"7F05 9504 5685 0D6D E0E8 6809 9307 7864" /* ..•.V….màèhÆ“.xd */ - $"1A86 1BA6 A321 D08C 1B0C 0981 9395 6DC0" /* .†.¦£!ÐŒ..Æ“•mÀ */ - $"C74F ECF7 CA1B FF4B 1896 BDBE 4876 8A4B" /* ÇOì÷Ê.ÿK.–½¾HvŠK */ - $"519F CC3C 7813 BE21 C40C B001 30F4 4FC7" /* QŸÌüU»œ³@¤Ê.¡. */ - $"3E83 51D4 9D13 DE0D F86D 3384 AAE7 9074" /* >ƒQÔ.Þ.øm3„ªçt */ - $"F7CF 4509 F99A 70B2 2E74 43C3 1363 021F" /* ÷ÏEÆùšp².tCÃ.c.. */ - $"6482 E471 22FA 6265 2DF9 C302 43F8 9053" /* d‚äq"úbe-ùÃ.CøS */ - $"0AE9 15A2 28D4 FD7C 05AF C7B8 26D5 7C0F" /* Âé.¢(Ôý|.¯Ç¸&Õ|. */ - $"22E0 4735 518D BE4B 4E83 1EF8 3FFA BA23" /* "àG5Q¾KNƒ.ø?úº# */ - $"3AE8 F76B 1D92 2038 64C1 EA73 30FC CE72" /* :è÷k.’ 8dÁês0üÎr */ - $"0CA5 6697 157E 55C4 8BAE E703 6FF5 F743" /* .¥f—.~UÄ‹®ç.oõ÷C */ - $"B456 C85F 3BFF 2629 95B7 02F4 F580 A49B" /* ´VÈ_;ÿ&)•·.ôõ€¤› */ - $"1587 2316 D131 66C1 C6DB F3DC C409 D801" /* .‡#.Ñ1fÁÆÛóÜÄÆØ. */ - $"E2DA 30B6 73FD 99EF AA26 25D7 DF07 FBEB" /* âÚ0¶sý™ïª&%×ß.ûë */ - $"094E 2E8E BD11 3C49 81BA E6BE 7666 ECBE" /* ÆN.޽.sÄW.6ÿ<%‚1 */ - $"2C25 ACE4 F084 E842 60E8 355D 22BE 6FEE" /* ,%¬äð„èB`è5]"¾oî */ - $"93F9 DDE6 DAED 4E44 545A FE4E 5EA4 0487" /* “ùÝæÚíNDTZþN^¤.‡ */ - $"36F1 52AF 8683 2DE8 F30B 72DE E807 2068" /* 6ñR¯†ƒ-èó.rÞè. h */ - $"742B 7262 BF7E 516C D41F CA56 9DE1 E3B8" /* t+rb¿~QlÔ.ÊVá㸠*/ - $"8D72 2993 C073 516D A343 DDE0 984D F06A" /* r)“ÀsQm£CÝà˜Mðj */ - $"CD83 D22D C161 30D7 2E9A FED4 4E85 5D2E" /* ̓Ò-Áa0×.šþÔN…]. */ - $"CF72 2181 7F23 BC37 FF83 C30D 43E0 DBC7" /* Ïr!.#¼7ÿƒÃ.CàÛÇ */ - $"A277 B4D9 4E68 1FB1 AF7B 6D8B 8F43 2A1B" /* ¢w´ÙNh.±¯{m‹C*. */ - $"9FE4 6CCC E826 C4AA 96C9 98A9 4D3B 981F" /* ŸälÌè&Ī–ɘ©M;˜. */ - $"8786 8633 89B0 2B42 4266 BC27 0098 D2B3" /* ‡††3‰°+BBf¼'.˜Ò³ */ - $"E8E4 0D2C 6E14 D34D 3613 4568 4A1E 8E5E" /* èä.,n.ÓM6.EhJ.Ž^ */ - $"E328 D89C 85D3 D8C2 C15B 3533 989F F015" /* ã(Øœ…ÓØÂÁ[53˜Ÿð. */ - $"1B49 871D 031B 2DBE D49E 880D A557 0694" /* .I‡...-¾Ôžˆ.¥W.” */ - $"60C3 47A1 CD2A 961B F73C 94A3 6B17 4268" /* `ÃG¡Í*–.÷<”£k.Bh */ - $"F766 81DC 33BC 8C1D 5571 D2D7 FB1C 9378" /* ÷fÜ3¼Œ.UqÒ×û.“x */ - $"01B7 BDCC 5DD0 9171 5FA1 50DA 7EBF 1586" /* .·½Ì]Бq_¡PÚ~¿.† */ - $"FA82 9E6F CBE4 0977 9C9C 2373 E789 5A3E" /* ú‚žoËäÆwœœ#sç‰Z> */ - $"8743 EB0E ED13 7955 DB28 2874 8065 2078" /* ‡Cë.í.yUÛ((t€e x */ - $"97A7 6C13 2283 729A CCF9 E449 A627 7652" /* —§l."ƒršÌùäI¦'vR */ - $"E821 2F1F 574E 6887 1830 6E01 5A8D 02FB" /* è!/.WNh‡.0n.Z.û */ - $"DB61 8EEF 4E08 B607 26FA 2B4C FF47 38FE" /* ÛaŽïN.¶.&ú+LÿG8þ */ - $"9B7C A3E4 DB46 F898 CFE9 8F3C 8717 2975" /* ›|£äÛFø˜Ïé<‡.)u */ - $"9BA2 582E 86D1 D882 C127 EFD7 E71A B5DD" /* ›¢X.†ÑØ‚Á'ï×ç.µÝ */ - $"7772 6391 2722 2884 AA0F 9C72 9A96 F4F8" /* wrc‘'"(„ª.œrš–ôø */ - $"BFF8 869A FD00 3B41 A8C7 DCD0 2834 270C" /* ¿ø†šý.;A¨ÇÜÐ(4'. */ - $"B93C 8702 5B16 8A32 0289 979B 0A35 3A7B" /* ¹<‡.[.Š2.‰—›Â5:{ */ - $"5870 6189 03C2 DD00 FAB2 B137 AB93 3EF5" /* Xpa‰.ÂÝ.ú²±7«“>õ */ - $"24E3 1FE1 A206 963E 1344 FE12 285A 5C52" /* $ã.á¢.–>.Dþ.(Z\R */ - $"692E D315 6C73 2CBE 7ADC 81BC EBC8 13EA" /* i.Ó.ls,¾zܼëÈ.ê */ - $"796B 6056 E9E7 D971 6E09 7086 252C 6A19" /* yk`VéçÙqnÆp†%,j. */ - $"7351 153D F4C4 FE01 6235 917F B203 171A" /* sQ.=ôÄþ.b5‘.²... */ - $"1822 B42B 9226 D163 5572 7E7E C508 BEBA" /* ."´+’&ÑcUr~~Å.¾º */ - $"D0D2 1C24 8D62 565D C183 F78D 4726 0541" /* ÐÒ.$bV]Áƒ÷G&.A */ - $"F829 10C7 1B21 E59C C4E5 7688 6268 FABC" /* ø).Ç.!åœÄåvˆbhú¼ */ - $"C0B9 6C02 8820 3F44 54A7 8C83 F14F 61B8" /* À¹l.ˆ ?DT§ŒƒñOa¸ */ - $"707C AB32 9D59 F01E D18A 37FC 40F9 5C59" /* p|«2Yð.ÑŠ7ü@ù\Y */ - $"EEA8 E442 FDC8 CA73 970F 6EE0 1348 AC8E" /* î¨äBýÈÊs—.nà.H¬Ž */ - $"9D65 4DA9 2820 AEDB A7F3 C1B4 8E3F 8780" /* eM©( ®Û§óÁ´Ž?‡€ */ - $"8DA9 F7D9 F116 DD30 778E 4FB6 49D3 AFE8" /* ©÷Ùñ.Ý0wŽO¶IÓ¯è */ - $"74B1 EB63 92B8 4210 3B22 3613 6784 41A2" /* t±ëc’¸B.;"6.g„A¢ */ - $"5953 1EFF 16A9 1769 9852 73D0 B6C2 3523" /* YS.ÿ.©.i˜RsжÂ5# */ - $"854B 1247 531D 47C5 7AFC 1B6B F0C4 2E2F" /* …K.GS.GÅzü.kðÄ./ */ - $"6C60 82C9 9C4D 2FAD 25A5 BEC6 8590 7388" /* l`‚ÉœM/­%¥¾Æ…sˆ */ - $"5D15 9A65 E013 D48B 7D9C 34B2 A617 75A8" /* ].šeà.Ô‹}œ4²¦.u¨ */ - $"8E8E 2D91 1AEC 26D5 8B9C D03C A02A A829" /* ŽŽ-‘.ì&Õ‹œÐ< *¨) */ - $"738D 9A4E 8F31 82A9 39B7 7CFE D412 810E" /* sšN1‚©9·|þÔ.. */ - $"1372 6D79 8D49 BAC1 9FFB 5D52 56AD 488F" /* .rmyIºÁŸû]RV­H */ - $"4E1D A232 7348 1FE2 483F AB9F A23C 0997" /* N.¢2sH.âH?«Ÿ¢<Æ— */ - $"678D 1AB7 7F66 8927 7DED 2A66 E03B 05C9" /* g.·.f‰'}í*fà;.É */ - $"0420 66A2 E0AE E1B9 259E 64C9 FF0E A7C7" /* . f¢à®á¹%ždÉÿ.§Ç */ - $"5E9D 69F4 DD50 394C 344E 9DA9 6BCA 3D9F" /* ^iôÝP9L4N©kÊ=Ÿ */ - $"8FA9 C156 3248 2310 8AB9 6131 B94F FF36" /* ©ÁV2H#.йa1¹Oÿ6 */ - $"DF00 9E80 5713 E9AD 3B07 879E C876 E063" /* ß.ž€W.é­;.‡žÈvàc */ - $"38D8 2776 3081 5810 1760 927C D93C EE88" /* 8Ø'v0X..`’|Ù<îˆ */ - $"518B 755A EBF1 B276 C65B 98DD 1421 8AA1" /* Q‹uZëñ²vÆ[˜Ý.!Š¡ */ - $"27D2 A8B2 5E3E B7B7 8F73 CDCB 9896 D80F" /* 'Ò¨²^>··s͢–Ø. */ - $"1D50 2E28 4F54 26A9 E68F 822C 3031 0A5B" /* .P.(OT&©æ‚,01Â[ */ - $"213A 8ED8 B1B8 C32C F5EF 6784 3641 A888" /* !:ŽØ±¸Ã,õïg„6A¨ˆ */ - $"1AF9 941B E9B2 42C0 D9BE AAD7 2727 9E13" /* .ù”.é²BÀÙ¾ª×''ž. */ - $"284F A530 1F62 679B 7860 E677 9E24 3663" /* (O¥0.bg›x`æwž$6c */ - $"E7D1 E4B5 D37B C274 9ECB CFA2 CC95 8A75" /* çÑäµÓ{ÂtžËϢ̕Šu */ - $"0C3A FB7D F074 1433 5EC7 1FC4 330E F221" /* .:û}ðt.3^Ç.Ä3.ò! */ - $"AE39 4A04 097F 4B21 27CD C193 39CB 3AB2" /* ®9J.Æ.K!'ÍÁ“9Ë:² */ - $"0B6E D8E0 54EA 0F75 15F9 D75D 0D82 624D" /* .nØàTê.u.ù×].‚bM */ - $"7D19 8E11 1AD0 764F CEA8 F0FE 2913 6841" /* }.Ž..ÐvOΨðþ).hA */ - $"89B8 CA62 C997 34B9 5950 4842 4F13 1ACD" /* ‰¸ÊbÉ—4¹YPHBO..Í */ - $"39AD 30CA 4ED2 A17D 0B09 206B 9426 EF50" /* 9­0ÊNÒ¡}.Æ k”&ïP */ - $"63C6 386E 74BB BDE0 420F 6154 5260 E1A2" /* cÆ8nt»½àB.aTR`ᢠ*/ - $"8546 3192 76D1 1F38 268E 7AC6 049F 321D" /* …F1’vÑ.8&ŽzÆ.Ÿ2. */ - $"CB51 35C7 067C 961B DA2F 4BCB E065 A8DB" /* ËQ5Ç.|–.Ú/KËàe¨Û */ - $"16C9 1F05 ABAF 93FF 333A F049 3161 6838" /* .É..«¯“ÿ3:ðI1ah8 */ - $"6E1A FEF2 564C 3F48 3800 BC9C F009 AF34" /* n.þòVL?H8.¼œðƯ4 */ - $"2241 15D4 764F 4764 CEDF 6D7D 2E9C 8141" /* "A.ÔvOGdÎßm}.œA */ - $"1E00 E109 D827 DDAA A47C 2854 9229 8998" /* ..áÆØ'ݪ¤|(T’)‰˜ */ - $"9175 1FFB 496B 36C7 3695 3631 390B 06E6" /* ‘u.ûIk6Ç6•619..æ */ - $"EB0D 3BA7 F1BE A2FF 6D3A 9FB6 FCFD ADEF" /* ë.;§ñ¾¢ÿm:Ÿ¶üý­ï */ - $"EDBA 3FDB 632F EDB1 BF6D BE7E DB9F 97ED" /* íº?Ûc/í±¿m¾~ÛŸ—í */ - $"45FD AB93 F6E8 7FED A7F7 DAC3 FC34 6F43" /* Eý«“öè.í§÷ÚÃü4oC */ - $"E1DB 5507 762F DB7E 5F51 DDF5 1DFE DD07" /* áÛU.v/Û~_QÝõ.þÝ. */ - $"E1FD A67F B4E6 7EDB 8BF6 AE3F B6BC D3E4" /* áý¦.´æ~Û‹ö®?¶¼Óä */ - $"D00B 0F87 A0FF 2AC3 3F6D 84F8 7475 99F2" /* Ð..‡ ÿ*Ã?m„øtu™ò */ - $"F382 BE95 100F 8FEE C1C8 D086 E345 E973" /* 󂾕..îÁÈІãEés */ - $"0FE4 06B6 7813 7115 B8D0 D91B C698 D10D" /* .ä.¶x.q.¸ÐÙ.ƘÑ. */ - $"A370 844F 9330 E047 0201 F880 D146 6522" /* £p„O“0àG..ø€ÑFe" */ - $"8E52 12DE 3D1A 9231 5315 682E 4706 8685" /* ŽR.Þ=.’1S.h.G.†… */ - $"DA39 C538 9828 7ED0 714F 3E27 532A 3840" /* Ú9Å8˜(~ÐqO>'S*8@ */ - $"C912 3E46 8205 3243 7835 7284 12D6 CCF5" /* É.>F‚.2Cx5r„.ÖÌõ */ - $"36AF 0975 8A27 4F44 3857 B5A3 160D 1391" /* 6¯ÆuŠ'OD8Wµ£...‘ */ - $"8005 2453 86CB 51B3 E493 EA9C 707F 7047" /* €.$S†ËQ³ä“êœp.pG */ - $"1DA8 1386 91D1 6105 7D84 1563 FC52 D5D3" /* .¨.†‘Ña.}„.cüRÕÓ */ - $"EDA7 D4A0 4AC1 BB4E 49D6 62F4 CA92 CE8E" /* í§Ô JÁ»NIÖbôÊ’ÎŽ */ - $"8DE0 84DC 418D ACE2 71AD 9206 3C98 3281" /* à„ÜA¬âq­’.<˜2 */ - $"104E A1F2 8982 6ED6 223E B67B BE6A C51F" /* .N¡ò‰‚nÖ">¶{¾jÅ. */ - $"4BF8 6C35 B6A4 5EC8 87BB 4834 7CF3 16AC" /* Køl5¶¤^ȇ»H4|ó.¬ */ - $"2453 B3DA 3503 94D6 2E70 2B6F 975E 21DB" /* $S³Ú5.”Ö.p+o—^!Û */ - $"F409 0368 9A2E DFB2 7A4B 9A6F 4165 1173" /* ôÆ.hš.ß²zKšoAe.s */ - $"A53E 329A 7925 FB80 9664 2C09 A9E5 715C" /* ¥>2šy%û€–d,Æ©åq\ */ - $"E42F 8E14 EC68 05A8 D565 53C2 9C98 86A2" /* ä/Ž.ìh.¨ÕeSœ˜†¢ */ - $"2C2D 6443 A1D0 A619 2320 6CD3 FE48 8006" /* ,-dC¡Ð¦.# lÓþH€. */ - $"FC0F 3690 DF76 1FD8 2E16 0705 D91F EEBE" /* ü.6ßv.Ø....Ù.î¾ */ - $"E961 32B9 E252 4F0E EE4A 6F73 AEBB 014A" /* éa2¹âRO.îJos®».J */ - $"8F45 1551 9123 7C3A 13F8 1B57 EB6A 0AFB" /* E.Q‘#|:.ø.WëjÂû */ - $"9AE9 65F5 9FDE 5F1C 7C23 84F1 6DCD CC52" /* šéeõŸÞ_.|#„ñmÍÌR */ - $"97DD 03E6 C571 0C23 F06B 9F21 2E2C 79D5" /* —Ý.æÅq.#ðkŸ!.,yÕ */ - $"1827 1436 E6FB C5FB BA11 617B 9B32 3DCD" /* .'.6æûÅûº.a{›2=Í */ - $"B0AD AA8F 53D0 2F20 849C D667 9436 A677" /* °­ªSÐ/ „œÖg”6¦w */ - $"38C9 1B5A 26E2 B4D4 29BB 2D9E 56D4 652D" /* 8É.Z&â´Ô)»-žVÔe- */ - $"9A12 FC7E FBD5 0075 3EC9 64FE D0CE 06A2" /* š.ü~ûÕ.u>ÉdþÐÎ.¢ */ - $"B63F 8731 DB8A 6917 26EA CCFC C1E6 10AA" /* ¶?‡1ÛŠi.&êÌüÁæ.ª */ - $"704E 20EA 7518 0416 6BBE 2867 9470 9FE6" /* pN êu...k¾(g”pŸæ */ - $"3D2A D178 6CD1 0B7D E518 4682 FC48 EA03" /* =*ÑxlÑ.}å.F‚üHê. */ - $"EFA0 ADEE B643 CDFD 796D C309 E13B 9DD3" /* ï ­î¶CÍýymÃÆá;Ó */ - $"82CC 1237 8D6B 9CB9 0438 AF1A 6190 136E" /* ‚Ì.7kœ¹.8¯.a.n */ - $"A170 6109 4BA8 FD0B 4C10 DE61 71A9 A5FF" /* ¡paÆK¨ý.L.Þaq©¥ÿ */ - $"5AD1 3895 15D0 912A BC62 5344 A7FD 7B9B" /* ZÑ8•.Б*¼bSD§ý{› */ - $"0360 8C71 DD04 20C7 4685 E6B7 7941 7BD7" /* .`ŒqÝ. ÇF…æ·yA{× */ - $"DBBB 3F61 742B D692 AD3D B778 6442 3DD1" /* Û»?at+Ö’­=·xdB=Ñ */ - $"A97E 1312 9AF4 05C1 7B33 9FE2 B3F5 D16C" /* ©~..šô.Á{3Ÿâ³õÑl */ - $"875D 7109 13EC BB96 0664 DF60 1958 8DE5" /* ‡]qÆ.ì»–.dß`.Xå */ - $"5B3F 3E75 9D21 0415 CE9C 3172 87C7 FF05" /* [?>u!..Μ1r‡Çÿ. */ - $"F787 4F14 E63B 4DCE 247D B3A3 475C 5336" /* ÷‡O.æ;MÎ$}³£G\S6 */ - $"C794 AF23 6415 68C6 B893 1B16 8C81 3F43" /* Ç”¯#d.hƸ“..Œ?C */ - $"C455 6EB8 8D5A 6919 4C3A D980 BFB1 3699" /* ÄUn¸Zi.L:Ù€¿±6™ */ - $"C790 C7D1 7B05 12AA 803A 172B DEF2 00CC" /* ÇÇÑ{..ª€:.+Þò.Ì */ - $"FF38 62C8 1815 1D3A F60D 2B9B 87A0 05C5" /* ÿ8bÈ...:ö.+›‡ .Å */ - $"3587 0181 8754 06D7 2CFC 78B8 0C65 D5BC" /* 5‡.‡T.×,üx¸.eÕ¼ */ - $"2903 C07C 0631 A0B9 E94E 192F DE4B 4924" /* ).À|.1 ¹éN./ÞKI$ */ - $"A4F0 BB9A 49C5 B751 38EB 7289 9806 FC5C" /* ¤ð»šIÅ·Q8ër‰˜.ü\ */ - $"D822 ED93 CA92 14B6 5056 017F 7826 CDE1" /* Ø"í“Ê’.¶PV..x&Íá */ - $"8401 9F6C A7F7 4AD5 E86F FDC3 05AF 6AE3" /* „.Ÿl§÷JÕèoýÃ.¯jã */ - $"5EED 07E3 E5ED 7EE7 FB97 0B99 E191 605B" /* ^í.ãåí~çû—.™á‘`[ */ - $"955A 6A3C 33C6 2BB8 9562 0E38 09C1 1ED9" /* •Zj<3Æ+¸•b.8ÆÁ.Ù */ - $"8914 73AF E9AA 7B2F 214E 7EEA 98E8 B976" /* ‰.s¯éª{/!N~ê˜è¹v */ - $"E058 E0B5 6DB4 5B1C F212 2C8E 0AE5 7100" /* àXàµm´[.ò.,ŽÂåq. */ - $"BC1E 84CD 0598 7CF9 EA4E 1E96 2B4A DE9E" /* ¼.„Í.˜|ùêN.–+JÞž */ - $"6CE9 E79B 0336 9059 E109 DF83 A2AE 9E74" /* léç›.6YáÆßƒ¢®žt */ - $"5BB1 0236 590C 66CD 0658 ECE5 50A2 EDDD" /* [±.6Y.fÍ.XìåP¢íÝ */ - $"D7BB DAF7 548B 7F21 2A40 7821 FDA2 62B6" /* ×»Ú÷T‹.!*@x!ý¢b¶ */ - $"C862 B0B2 96CF 27D5 EC9D F5C8 42D8 F42A" /* Èb°²–Ï'ÕìõÈBØô* */ - $"5962 F21A D191 6744 1AE2 64B4 6744 A1B2" /* Ybò.Ñ‘gD.âd´gD¡² */ - $"7625 FF0D F0CF A1F8 3273 C4B8 FCCE C2BC" /* v%ÿ.ðÏ¡ø2sĸüμ */ - $"EDD5 F0C6 765F 2446 5EF5 2195 04EE C94B" /* íÕðÆv_$F^õ!•.îÉK */ - $"C9C2 4F82 0D0F 6034 3560 64A8 C372 4E17" /* ÉÂO‚..`45`d¨ÃrN. */ - $"D4F6 B2DC 2162 A6DC 9B35 5F36 628E EA58" /* Ôö²Ü!b¦Ü›5_6bŽêX */ - $"B2EF D0B8 79FF 3F60 39DC 34C9 8DD1 C7DA" /* ²ïиyÿ?`9Ü4ÉÑÇÚ */ - $"BFFD 9220 B977 42CD 1F4E 00C7 1A7B F29F" /* ¿ý’ ¹wBÍ.N.Ç.{òŸ */ - $"9738 8D5E 3E5F BA1F D4BD 0592 2006 1216" /* —8^>_º.Ô½.’ ... */ - $"D478 DE72 171A A49D 9C4A 0691 CD59 6FB3" /* ÔxÞr..¤œJ.‘ÍYo³ */ - $"F3C5 B3CD DCC8 5794 133C 85B3 176A 0C6A" /* óųÍÜÈW”.<…³.j.j */ - $"323E C74F 7CE3 4042 38AB E9CA 5700 E39B" /* 2>ÇO|ã@B8«éÊW.ã› */ - $"26D3 62B7 59F8 966D A789 35AA C72D 9943" /* &Ób·Yø–m§‰5ªÇ-™C */ - $"C884 2E53 30B3 D351 EFCC 6BF8 9889 8AB6" /* È„.S0³ÓQïÌkø˜‰Š¶ */ - $"E284 F5A4 64BD F89F 98A4 8082 6292 48EB" /* â„õ¤d½øŸ˜¤€‚b’Hë */ - $"2039 4A80 D5D7 BEFC 2DC1 69A9 F484 9B4E" /* 9J€Õ×¾ü-Ái©ô„›N */ - $"94C9 6E87 31A6 6D4E 23DB 77A9 37D5 CEE9" /* ”Én‡1¦mN#Ûw©7ÕÎé */ - $"10B5 22DB 58B2 3DFB 973A E321 F02A 2985" /* .µ"ÛX²=û—:ã!ð*)… */ - $"AE7E F964 9A23 4B8D 90FD 75F4 9944 3CEB" /* ®~ùdš#Kýuô™D<ë */ - $"C5C5 B0BA DA1C AA0A B59A EFCA 903A 972B" /* ÅŰºÚ.ªÂµšïÊ:—+ */ - $"10E9 2A66 2BAB 3E63 8312 E494 A82C AEE8" /* .é*f+«>cƒ.䔨,®è */ - $"DE3B 902F 4DE5 A934 7FA5 59D8 B355 75C7" /* Þ;/Må©4.¥YسUuÇ */ - $"DC51 6208 6D60 DE89 F04A F698 FC35 5341" /* ÜQb.m`Þ‰ðJö˜ü5SA */ - $"A8C7 894B 5E8F 0638 0F21 36AB 23FF 37BF" /* ¨Ç‰K^.8.!6«#ÿ7¿ */ - $"CA6E C0CE 1C93 9BB1 FEA7 49E8 9BA5 7F32" /* ÊnÀÎ.“›±þ§I蛥.2 */ - $"4C9D C8BA 821C 1E07 F277 BE63 241C D5F6" /* LȺ‚...òw¾c$.Õö */ - $"07CB 7A98 E51E B0FC B312 223C 21BF 5DEE" /* .Ëz˜å.°ü³."Î.5" */ - $"1088 A628 490C 5F8D 64C4 7E17 CBD3 290D" /* .ˆ¦(I._dÄ~.ËÓ). */ - $"91B1 B073 AD4A BF5B A1E9 6306 3E9A F87E" /* ‘±°s­J¿[¡éc.>šø~ */ - $"2DEC 7390 2CF5 3305 93C2 15DA 7FFF 7FC6" /* -ìs,õ3.“Â.Ú.ÿ.Æ */ - $"0578 C93E BF93 5B69 25D4 E0F9 5726 0D7E" /* .xÉ>¿“[i%ÔàùW&.~ */ - $"9C06 C76B 1BF5 3206 F26C 4F57 6A13 7488" /* œ.Çk.õ2.òlOWj.tˆ */ - $"07F4 1787 316E 19B5 2CB4 D7B8 23EE BF15" /* .ô.‡1n.µ,´×¸#î¿. */ - $"84F7 C141 CE7E 358F F83B 081D 2680 C5CB" /* „÷ÁAÎ~5ø;..&€ÅË */ - $"2002 0FFB D329 10E3 1880 E0F6 29FF 14F6" /* ..ûÓ).ã.€àö)ÿ.ö */ - $"1447 24FF 4BDD 371B 00F3 0334 6FE5 D217" /* .G$ÿKÝ7..ó.4oåÒ. */ - $"8E7D 3CCB EC04 D019 0583 0792 D4F4 59E5" /* Ž}<Ëì.Ð..ƒ.’ÔôYå */ - $"0914 52FB CE7A 2EFD B899 ED16 38FB E1D4" /* Æ.RûÎz.ý¸™í.8ûáÔ */ - $"3312 BAAE 3EF3 45B7 2A77 62F3 4787 8900" /* 3.º®>óE·*wbóG‡‰. */ - $"050D 5A64 92D3 64E7 7950 4234 FCC0 0EC6" /* ..Zd’ÓdçyPB4üÀ.Æ */ - $"004C 8652 616B B5FF 87F6 72D0 400B 9574" /* .L†Rakµÿ‡örÐ@.•t */ - $"7ADD 2EE6 F979 EE70 393F 5E65 09EC 561B" /* zÝ.æùyîp9?^eÆìV. */ - $"2FF4 F6FA 9226 2AA7 C2D2 4517 2258 15C7" /* /ôöú’&*§ÂÒE."X.Ç */ - $"D27E DE80 0000 0009 BB69 0154 3C66 FD24" /* Ò~Þ€...Æ»i.TÃEijÀfŠ'ÃÓ */ - $"7A8A 6368 2F2C 3F2F 5D43 59ED 5E40 9E4F" /* zŠch/,?/]CYí^@žO */ - $"59BB 6A03 B7F8 083A 021D F8F0 79AF 43B0" /* Y»j.·ø.:..øðy¯C° */ - $"2270 F775 B8D8 FB59 371A 8B22 9F0B 55FA" /* "p÷u¸ØûY7.‹"Ÿ.Uú */ - $"C9B1 5565 0914 AA67 2D9E 81B2 60FC 1333" /* ɱUeÆ.ªg-ž²`ü.3 */ - $"318F 21E9 97E4 1400 F69E F709 7AE3 82A5" /* 1!é—ä..öž÷Æzã‚¥ */ - $"C9DE 7D16 1DF8 EDF8 FC5E DB3E FC2A F822" /* ÉÞ}..øíøü^Û>ü*ø" */ - $"886E F247 9BC1 250E 905C 4AF7 4B22 3595" /* ˆnòG›Á%.\J÷K"5• */ - $"0835 2567 EEC1 C4C8 B70D D782 6A22 C9DA" /* .5%gîÁÄÈ·.ׂj"ÉÚ */ - $"ADA3 0370 EED9 E428 E163 963A E6F0 5D4A" /* ­£.pîÙä(ác–:æð]J */ - $"F42A D11F B46D 7FBC 2D87 4274 4756 896E" /* ô*Ñ.´m.¼-‡BtGV‰n */ - $"C489 80C0 62F6 88A8 184A 79BE 3068 A9AF" /* ĉ€Àböˆ¨.Jy¾0h©¯ */ - $"D703 390B 1A76 3136 B799 726A AAA8 C23D" /* ×.9..v16·™rjª¨Â= */ - $"EEB0 E0F1 49E1 A6B7 204F 7BF3 6E44 F25E" /* î°àñIᦷ O{ónDò^ */ - $"7E0A 5125 CA89 B477 15CD 83CC CD21 C6BE" /* ~ÂQ%ʉ´w.̓ÌÍ!ƾ */ - $"F20B 99F3 C30C 5113 2E0A FF7E 1034 1BFF" /* ò.™óÃ.Q..Âÿ~.4.ÿ */ - $"0378 72CF B0EE D132 2A2D 14A9 E37F 6B10" /* .xrϰîÑ2*-.©ã.k. */ - $"B5CE 0500 0000 0000 0000 0160 A7E3 A715" /* µÎ.........`§ã§. */ - $"0C13 DE44 025B 9720 0000 0000 0000 0001" /* ..ÞD.[— ........ */ - $"E0F5 5A21 77FB C1F6 EAF0 244A EE78 B6FA" /* àõZ!wûÁöêð$Jîx¶ú */ - $"1769 3D98 AA28 2EB6 9826 A16B D6B8 BA89" /* .i=˜ª(.¶˜&¡kÖ¸º‰ */ - $"26C6 25C9 9E66 FD9C 6D2D FCDA FCB9 6AB2" /* &Æ%Éžfýœm-üÚü¹j² */ - $"B42A 7008 5069 CB61 D530 B47A FCFF 7F95" /* ´*p.PiËaÕ0´züÿ.• */ - $"FA58 2D11 111A 53BF FB17 59E1 63E7 0FAD" /* úX-...S¿û.Yácç.­ */ - $"B016 A862 3107 8DF0 7112 DD6A B6E3 2477" /* °.¨b1.ðq.Ýj¶ã$w */ - $"3162 94F0 6826 75B0 D0B8 4C13 21C7 E4BC" /* 1b”ðh&u°Ð¸L.!Çä¼ */ - $"FB86 7A83 DF1C A4D9 C3B4 E3DE C334 1633" /* û†zƒß.¤ÙôãÞÃ4.3 */ - $"DC27 76B9 7ADF 50CA F95E C7C9 D5EB 402C" /* Ü'v¹zßPÊù^ÇÉÕë@, */ - $"276F A0B0 D88B CF4A 0FD2 380A E3E7 2BA5" /* 'o °Ø‹ÏJ.Ò8Âãç+¥ */ - $"DD24 A247 B631 75B1 6D3A 4C60 9BAB E4C5" /* Ý$¢G¶1u±m:L`›«äÅ */ - $"BBCB 2972 36B9 AC74 5FF5 B5DB 231B 95F3" /* »Ë)r6¹¬t_õµÛ#.•ó */ - $"7CFF 8E5F 86E9 1906 B3DF 75C7 0364 6192" /* |ÿŽ_†é..³ßuÇ.da’ */ - $"A000 0000 0000 0000 0000 003B B1A0 0000" /*  ..........;± .. */ - $"0000 0000 0000 0000 0000 0016 D51B CEEA" /* ............Õ.Îê */ - $"0406 C003 4E50 C0B8 8DB2 F37C FF8E 5F86" /* ..À.NPÀ¸²ó|ÿŽ_† */ - $"E919 06B3 DF75 C703 6461 92A0 0000 0000" /* é..³ßuÇ.da’ .... */ - $"0000 0000 0000 3BB1 A000 0000 0000 0000" /* ......;± ....... */ - $"0000 0000 0000 16D5 1BCE EA04 06C0 034E" /* .......Õ.Îê..À.N */ - $"50C0 B88D B2F4 4BED 0C57 2F64 38E7 DFE6" /* PÀ¸²ôKí.W/d8çßæ */ - $"95DB 93EF B9ED 1250 6A6A A6E3 4478 1E7E" /* •Û“ï¹í.Pjj¦ãDx.~ */ - $"F105 8E1B 961B 230C 9500 0000 0000 0C18" /* ñ.Ž.–.#.•....... */ - $"0EA3 5F13 6306 E1B5 4B22 3D26 79A1 06E4" /* .£_.c.áµK"=&y¡.ä */ - $"228F F320 0B74 8820 0000 0000 0000 0007" /* "ó .tˆ ........ */ - $"9F62 443B 9A51 EAB0 7C1A A374 E7F1 52F3" /* ŸbD;šQê°|.£tçñRó */ - $"3BB8 C1E0 5919 6C04 A2E2 1032 6917 1394" /* ;¸ÁàY.l.¢â.2i..” */ - $"CCBE 472A 0652 C144 6D1E 755C ECF9 9725" /* ̾G*.RÁDm.u\ìù—% */ - $"A84A 55AE 7A0E 6730 FCA7 B6E0 FF31 08C0" /* ¨JU®z.g0ü§¶àÿ1.À */ - $"3E76 4DDC 9E24 A60B C4A7 4CDD C221 1941" /* >vMÜž$¦.ħLÝÂ!.A */ - $"0810 2DE3 206F C551 4910 77AA 762A 1FF2" /* ..-ã oÅQI.wªv*.ò */ - $"D39A 0ADC 1089 90F8 D098 1E77 BDD1 AF74" /* ÓšÂÜ.‰øÐ˜.w½Ñ¯t */ - $"4DEF D00D 0B2C CA2F 9EDC 27C4 35F9 F924" /* MïÐ..,Ê/žÜ'Ä5ùù$ */ - $"67FF 74E5 A746 B627 6267 F6D0 9B94 22D4" /* gÿtå§F¶'bgöЛ”"Ô */ - $"5FFE DF67 A7A9 E3CA 02A5 44D1 E926 DCA4" /* _þßg§©ãÊ.¥DÑé&ܤ */ - $"7490 4AB8 E094 7037 FF7C 8CF7 2A9B B784" /* tJ¸à”p7ÿ|Œ÷*›·„ */ - $"794E 9026 D48F FF7F F013 AABF F874 63DA" /* yN&Ôÿ.ð.ª¿øtcÚ */ - $"0302 FBFA AA6A 31D5 E2DF 85F7 2ACD D98C" /* ..ûúªj1Õâß…÷*ÍÙŒ */ - $"175D 1243 F1C0 CEA2 344C B6FC ADCF C6AA" /* .].CñÀ΢4L¶ü­Ïƪ */ - $"5CAE FA82 783F 58DD 754D 5C63 A018 19F8" /* \®ú‚x?XÝuM\c ..ø */ - $"7EFE 8953 AE16 22B9 4ED7 43D2 8A0B FA52" /* ~þ‰S®."¹N×CÒŠ.úR */ - $"5703 08CA 555B E51E 307B 0565 E165 22F3" /* W..ÊU[å.0{.eáe"ó */ - $"7130 0CEC CA23 576D 8D58 BED1 FEB6 9A2F" /* q0.ìÊ#WmX¾Ñþ¶š/ */ - $"DCEA 3288 3EEC B12A D43C B191 2627 7723" /* Üê2ˆ>ì±*Ô<±‘&'w# */ - $"F40F 1B7A F1E3 9A7E 366D 7490 EE80 3570" /* ô..zñãš~6mtî€5p */ - $"CB59 D05D F384 AA96 71FE 68E8 4D32 F9D2" /* ËYÐ]󄪖qþhèM2ùÒ */ - $"48BC 7B03 EA3B 879E 2E96 671F 8098 CE76" /* H¼{.ê;‡ž.–g.€˜Îv */ - $"87D8 0336 5C88 91F4 3C69 D76B 4DEF 29DA" /* ‡Ø.6\ˆ‘ô`H ‰{. */ - $"BCA8 E157 DFD5 E879 C14C 1B1A 3431 2856" /* ¼¨áWßÕèyÁL..41(V */ - $"0E74 D87F 7691 A923 632A 5EBC 6E95 6A46" /* .tØ.v‘©#c*^¼n•jF */ - $"8E68 7118 3704 6E41 37CB C9AC 7F84 1005" /* Žhq.7.nA7Ëɬ.„.. */ - $"C308 7C90 C6E0 B56C 8CF8 3C33 A97E C46C" /* Ã.|ÆàµlŒø<3©~Äl */ - $"E373 91A9 4A3F 7331 481D 843F 0472 59DC" /* ãs‘©J?s1H.„?.rYÜ */ - $"0837 85BA 4867 C202 6BFC 7433 F093 530F" /* .7…ºHgÂ.küt3ð“S. */ - $"D721 8927 26CF AA6B B4E1 7981 FCE4 9F4E" /* ×!‰'&Ϫk´áyüäŸN */ - $"1105 9E7B 7F68 1CE7 D811 E270 FCA3 9CDE" /* ..ž{.h.çØ.âpü£œÞ */ - $"BFE6 48BA AC07 B55E 4E7F 5946 115B B1DC" /* ¿æHº¬.µ^N.YF.[±Ü */ - $"F694 3A9B EADD 7971 E0F1 B6E1 C6FF 4337" /* ö”:›êÝyqàñ¶áÆÿC7 */ - $"F543 A074 FC74 AD1F 45BF 7867 C472 7605" /* õC tüt­.E¿xgÄrv. */ - $"1786 E496 2D22 22BE 5760 9ACE A5C9 22B9" /* .†ä–-""¾W`šÎ¥É"¹ */ - $"9A14 4136 93E4 3E4A 715C 6F69 8447 5764" /* š.A6“ä>Jq\oi„GWd */ - $"D761 77A8 2C3F E200 ACAD 8331 11D0 ABE6" /* ×aw¨,?â.¬­ƒ1.Ыæ */ - $"EA7B 5A22 58CF 097E 732F 894B E99C 6BAF" /* ê{Z"XÏÆ~s/‰Kéœk¯ */ - $"B36C 68AA 5668 EF92 66E9 DDF9 FF78 DB89" /* ³lhªVhï’féÝùÿxÛ‰ */ - $"FC78 2032 99D9 62F0 1380 3FE8 41DF F341" /* üx 2™Ùbð.€?èAßóA */ - $"F1FD 7F08 CE2E F09A 9335 6735 0FAD 8093" /* ñý..Î.ðš“5g5.­€“ */ - $"B6B1 53A2 964F EA7E 72A2 9A29 794D 98F0" /* ¶±S¢–Oê~r¢š)yM˜ð */ - $"DD57 AE65 C61E DDEC BDB4 35C2 D050 E063" /* ÝW®eÆ.Ýì½´5ÂÐPàc */ - $"5F54 BCA5 928D 786D CAE3 8F96 BFEB 027E" /* _T¼¥’xmÊã–¿ë.~ */ - $"6BBC 8795 7C88 1A2C 9908 36A1 6CAB 9268" /* k¼‡•|ˆ.,™.6¡l«’h */ - $"EB0D 816F F34D 55F5 B562 BCFF 4190 EE42" /* ë.oóMUõµb¼ÿAîB */ - $"F195 E7F3 E220 7E51 74A2 FA23 23F7 20F0" /* ñ•çóâ ~Qt¢ú##÷ ð */ - $"985F 011C 34B8 C988 C519 C623 81BC D026" /* ˜_..4¸ÉˆÅ.Æ#¼Ð& */ - $"A8C5 B82C 7A7F 86F7 E60E 44F2 CD53 6FAB" /* ¨Å¸,z.†÷æ.DòÍSo« */ - $"2D69 1FD4 75B7 A011 80E7 09B3 B9CF 4503" /* -i.Ôu· .€çƳ¹ÏE. */ - $"F4A5 1DE3 AE8A 96F7 E245 0DF9 3859 24FA" /* ô¥.㮊–÷âE.ù8Y$ú */ - $"7B43 665F B15E D4D3 FB2A 666E FB6A 6CA8" /* {Cf_±^ÔÓû*fnûjl¨ */ - $"9CAF C052 D658 6DC3 BDD1 C752 21FA 6426" /* œ¯ÀRÖXmýÑÇR!úd& */ - $"857C D05D 41C2 0241 306C 6FD4 81E3 69F7" /* …|Ð]AÂ.A0loÔãi÷ */ - $"A6F5 227F 39F9 780E 829A 17A9 C649 2BF5" /* ¦õ".9ùx.‚š.©ÆI+õ */ - $"01DD E500 A973 E599 890C A548 CE34 2877" /* .Ýå.©s噉.¥HÎ4(w */ - $"D160 A2EE 4B3B CC7A 0C87 6723 51FD C222" /* Ñ`¢îK;Ìz.‡g#QýÂ" */ - $"9BFB E72D 2769 6250 2054 22C9 ABB2 3125" /* ›ûç-'ibP T"É«²1% */ - $"7DA0 73A3 C083 1AAD 90F2 F0A8 C22D 9DF5" /* } s£Àƒ.­òð¨Â-õ */ - $"3FFB 6B56 18BE 61A6 B198 F1BC 1E4E 0CFE" /* ?ûkV.¾a¦±˜ñ¼.N.þ */ - $"B323 8275 A644 CAC4 D36B 9AF9 FCC8 5DEC" /* ³#‚u¦DÊÄÓkšùüÈ]ì */ - $"292B CC9B A0B6 9148 09DF E46D 1B2C 4EDF" /* )+Ì› ¶‘HÆßäm.,Nß */ - $"EDB9 2DB4 BAD5 C50B 2115 C476 E09A F407" /* í¹-´ºÕÅ.!.Ävàšô. */ - $"5EE8 2E9F 870F A319 32D4 EBEC CB7B FDE9" /* ^è.Ÿ‡.£.2ÔëìË{ýé */ - $"FB5C 0D41 61F3 BA97 0F9E 558F 6E39 C213" /* û\.Aaóº—.žUn9Â. */ - $"3101 A5E8 ECEC 15E5 4F29 F69A 58CD D82D" /* 1.¥èìì.åO)öšXÍØ- */ - $"986E E8E0 6898 17CC 98C4 C851 AC75 9306" /* ˜nèàh˜.̘ÄÈQ¬u“. */ - $"5241 0350 E2EB 38CA 1682 6132 FF45 578A" /* RA.Pâë8Ê.‚a2ÿEWŠ */ - $"FA7F 7557 AC2C 9A18 3835 A62B 7D09 0992" /* ú.uW¬,š.85¦+}ÆÆ’ */ - $"EF78 BD49 5317 373A B07D 6420 DC30 5067" /* ïx½IS.7:°}d Ü0Pg */ - $"A659 F316 4436 8E8E 9786 1163 A6A5 B841" /* ¦Yó.D6ŽŽ—†.c¦¥¸A */ - $"99AA 4E1C 6163 309A 3C23 0208 FF4B 2967" /* ™ªN.ac0š<#..ÿK)g */ - $"B7F7 37E4 A337 D0DC C48A A742 FB2D C529" /* ·÷7ä£7ÐÜÄŠ§Bû-Å) */ - $"BC6C 5BBE BC5C 03B1 F87F D7EA F5AC B94B" /* ¼l[¾¼\.±ø.×êõ¬¹K */ - $"5A88 84AB E44E BE6A F337 96B0 7CB6 1140" /* Zˆ„«äN¾jó7–°|¶.@ */ - $"25CB 45D6 BE02 A9D4 7868 1EDD F660 7963" /* %ËEÖ¾.©Ôxh.Ýö`yc */ - $"B438 C030 3EA5 51FA F451 FA84 A6FF 2E5A" /* ´8À0>¥QúôQú„¦ÿ.Z */ - $"EA95 2300 C0F4 39AA 42BA 4120 4EEC AFDD" /* ê•#.Àô9ªBºA Nì¯Ý */ - $"20B4 6C42 0552 1177 6F1A AC6D FE8B 98E1" /* ´lB.R.wo.¬mþ‹˜á */ - $"D3FB F52E BCE3 5BB1 7235 F597 3E0D 8C46" /* Óûõ.¼ã[±r5õ—>.ŒF */ - $"7361 1E2A C081 CA97 C8EA CD3F E91D 823F" /* sa.*ÀÊ—ÈêÍ?é.‚? */ - $"73A7 5EA1 F641 9CBD 219D D7E4 EE0D 270E" /* s§^¡öAœ½!×äî.'. */ - $"14DF F756 B4E5 062C 8251 4AD0 B090 A0AF" /* .ß÷V´å.,‚QJа ¯ */ - $"CD2A 3C80 6068 C9CD C3D7 3D7F 258B 365A" /* Í*<€`hÉÍÃ×=.%‹6Z */ - $"5E1A 90DC D058 4ED9 DF50 6F40 07A9 2BDE" /* ^.ÜÐXNÙßPo@.©+Þ */ - $"8486 5404 AB9C E323 0C4E D3DB 8352 0C0F" /* „†T.«œã#.NÓÛƒR.. */ - $"CD59 A5F5 56CC 0BB2 B603 85C3 C709 7D6E" /* ÍY¥õVÌ.²¶.…ÃÇÆ}n */ - $"A10E 33C2 AE0F D52F 5AD7 2279 E6EB 7E6C" /* ¡.3®.Õ/Z×"yæë~l */ - $"1757 589D C6DC B4FD 470C FFD9" /* .WXÆÜ´ýG.ÿÙ */ -}; - diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store b/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store deleted file mode 100644 index 495ec37f53..0000000000 Binary files a/indra/newview/installers/darwin/releasecandidate-dmg/_DS_Store and /dev/null differ diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/_VolumeIcon.icns b/indra/newview/installers/darwin/releasecandidate-dmg/_VolumeIcon.icns deleted file mode 100644 index da5307e389..0000000000 Binary files a/indra/newview/installers/darwin/releasecandidate-dmg/_VolumeIcon.icns and /dev/null differ diff --git a/indra/newview/installers/darwin/releasecandidate-dmg/background.jpg b/indra/newview/installers/darwin/releasecandidate-dmg/background.jpg deleted file mode 100644 index 55294dcc9a..0000000000 Binary files a/indra/newview/installers/darwin/releasecandidate-dmg/background.jpg and /dev/null differ diff --git a/indra/newview/llaccountingcostmanager.cpp b/indra/newview/llaccountingcostmanager.cpp new file mode 100644 index 0000000000..8767955fcb --- /dev/null +++ b/indra/newview/llaccountingcostmanager.cpp @@ -0,0 +1,181 @@ +/** + * @file LLAccountingQuotaManager.cpp + * @ Handles the setting and accessing for costs associated with mesh + * + * $LicenseInfo:firstyear=2001&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "llaccountingcostmanager.h" +#include "llagent.h" +#include "llcurl.h" +#include "llhttpclient.h" +//=============================================================================== +LLAccountingCostManager::LLAccountingCostManager() +{ +} +//=============================================================================== +class LLAccountingCostResponder : public LLCurl::Responder +{ +public: + LLAccountingCostResponder( const LLSD& objectIDs, const LLHandle& observer_handle ) + : mObjectIDs( objectIDs ), + mObserverHandle( observer_handle ) + { + LLAccountingCostObserver* observer = mObserverHandle.get(); + if (observer) + { + mTransactionID = observer->getTransactionID(); + } + } + + void clearPendingRequests ( void ) + { + for ( LLSD::array_iterator iter = mObjectIDs.beginArray(); iter != mObjectIDs.endArray(); ++iter ) + { + LLAccountingCostManager::getInstance()->removePendingObject( iter->asUUID() ); + } + } + + void error( U32 statusNum, const std::string& reason ) + { + llwarns << "Transport error "<getTransactionID() == mTransactionID) + { + observer->setErrorStatus(statusNum, reason); + } + } + + void result( const LLSD& content ) + { + //Check for error + if ( !content.isMap() || content.has("error") ) + { + llwarns << "Error on fetched data"<< llendl; + } + else if (content.has("selected")) + { + F32 physicsCost = 0.0f; + F32 networkCost = 0.0f; + F32 simulationCost = 0.0f; + + physicsCost = content["selected"]["physics"].asReal(); + networkCost = content["selected"]["streaming"].asReal(); + simulationCost = content["selected"]["simulation"].asReal(); + + SelectionCost selectionCost( /*transactionID,*/ physicsCost, networkCost, simulationCost ); + + LLAccountingCostObserver* observer = mObserverHandle.get(); + if (observer && observer->getTransactionID() == mTransactionID) + { + observer->onWeightsUpdate(selectionCost); + } + } + + clearPendingRequests(); + } + +private: + //List of posted objects + LLSD mObjectIDs; + + // Current request ID + LLUUID mTransactionID; + + // Cost update observer handle + LLHandle mObserverHandle; +}; +//=============================================================================== +void LLAccountingCostManager::fetchCosts( eSelectionType selectionType, + const std::string& url, + const LLHandle& observer_handle ) +{ + // Invoking system must have already determined capability availability + if ( !url.empty() ) + { + LLSD objectList; + U32 objectIndex = 0; + + IDIt IDIter = mObjectList.begin(); + IDIt IDIterEnd = mObjectList.end(); + + for ( ; IDIter != IDIterEnd; ++IDIter ) + { + // Check to see if a request for this object has already been made. + if ( mPendingObjectQuota.find( *IDIter ) == mPendingObjectQuota.end() ) + { + mPendingObjectQuota.insert( *IDIter ); + objectList[objectIndex++] = *IDIter; + } + } + + mObjectList.clear(); + + //Post results + if ( objectList.size() > 0 ) + { + std::string keystr; + if ( selectionType == Roots ) + { + keystr="selected_roots"; + } + else + if ( selectionType == Prims ) + { + keystr="selected_prims"; + } + else + { + llinfos<<"Invalid selection type "< +// An interface class for panels which display the parcel accounting information. +class LLAccountingCostObserver +{ +public: + LLAccountingCostObserver() { mObserverHandle.bind(this); } + virtual ~LLAccountingCostObserver() {} + virtual void onWeightsUpdate(const SelectionCost& selection_cost) = 0; + virtual void setErrorStatus(U32 status, const std::string& reason) = 0; + const LLHandle& getObserverHandle() const { return mObserverHandle; } + const LLUUID& getTransactionID() { return mTransactionID; } + +protected: + virtual void generateTransactionID() = 0; + + LLRootHandle mObserverHandle; + LLUUID mTransactionID; +}; +//=============================================================================== +class LLAccountingCostManager : public LLSingleton { public: //Ctor - LLAccountingQuotaManager(); + LLAccountingCostManager(); //Store an object that will be eventually fetched - void updateObjectCost( const LLUUID& objectID ); + void addObject( const LLUUID& objectID ); //Request quotas for object list - void fetchQuotas( const std::string& url ); + void fetchCosts( eSelectionType selectionType, const std::string& url, + const LLHandle& observer_handle ); //Delete a specific object from the pending list - void removePendingObjectQuota( const LLUUID& objectID ); + void removePendingObject( const LLUUID& objectID ); private: - //Set of objects that need to update their cost - std::set mUpdateObjectQuota; - //During fetchQuota we move object into a the pending set to signify that + //Set of objects that will be used to generate a cost + std::set mObjectList; + //During fetchCosts we move object into a the pending set to signify that //a fetch has been instigated. std::set mPendingObjectQuota; typedef std::set::iterator IDIt; }; //=============================================================================== -#endif // LLACCOUNTINGQUOTAMANAGER - +#endif // LLACCOUNTINGCOSTMANAGER diff --git a/indra/newview/llaccountingquotamanager.cpp b/indra/newview/llaccountingquotamanager.cpp deleted file mode 100644 index a4f5de5632..0000000000 --- a/indra/newview/llaccountingquotamanager.cpp +++ /dev/null @@ -1,278 +0,0 @@ -/** - * @file LLAccountingQuotaManager.cpp - * @ Handles the setting and accessing for costs associated with mesh - * - * $LicenseInfo:firstyear=2001&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2011, Linden Research, Inc. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - * - * This library 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 - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA - * $/LicenseInfo$ - */ - -#include "llviewerprecompiledheaders.h" -#include "llaccountingquotamanager.h" -#include "llagent.h" -#include "llviewerregion.h" -#include "llviewerobject.h" -#include "llviewerobjectlist.h" -#include "llviewerparcelmgr.h" -#include "llparcel.h" - -//=============================================================================== -LLAccountingQuotaManager::LLAccountingQuotaManager() -{ -} -//=============================================================================== -class LLAccountingQuotaResponder : public LLCurl::Responder -{ -public: - LLAccountingQuotaResponder( const LLSD& objectIDs ) - : mObjectIDs( objectIDs ) - { - } - - void clearPendingRequests ( void ) - { - for ( LLSD::array_iterator iter = mObjectIDs.beginArray(); iter != mObjectIDs.endArray(); ++iter ) - { - LLAccountingQuotaManager::getInstance()->removePendingObjectQuota( iter->asUUID() ); - } - } - - void error( U32 statusNum, const std::string& reason ) - { - llwarns << "Transport error "<asUUID(); - - LLAccountingQuotaManager::getInstance()->removePendingObjectQuota( objectID ); - - if ( containsParcel ) - { - //Typically should be one - S32 dataCount = content["parcel"].size(); - for(S32 i = 0; i < dataCount; i++) - { - //prep#todo verify that this is safe, otherwise just add a bool - LLUUID parcelId; - //S32 parcelOwner = 0; - if ( content["parcel"][i].has("parcel_id") ) - { - parcelId = content["parcel"][i]["parcel_id"].asUUID(); - } - - //if ( content["parcel"][i].has("parcel_owner") ) - //{ - // parcelOwner = content["parcel"][i]["parcel_owner"].asInteger(); - //} - - F32 ownerRenderCost = 0; - F32 ownerPhysicsCost = 0; - F32 ownerNetworkCost = 0; - F32 ownerSimulationCost = 0; - - F32 groupRenderCost = 0; - F32 groupPhysicsCost = 0; - F32 groupNetworkCost = 0; - F32 groupSimulationCost = 0; - - F32 otherRenderCost = 0; - F32 otherPhysicsCost = 0; - F32 otherNetworkCost = 0; - F32 otherSimulationCost = 0; - - F32 tempRenderCost = 0; - F32 tempPhysicsCost = 0; - F32 tempNetworkCost = 0; - F32 tempSimulationCost = 0; - - F32 selectedRenderCost = 0; - F32 selectedPhysicsCost = 0; - F32 selectedNetworkCost = 0; - F32 selectedSimulationCost = 0; - - F32 parcelCapacity = 0; - - if ( content["parcel"][i].has("capacity") ) - { - parcelCapacity = content["parcel"][i].has("capacity"); - } - - if ( content["parcel"][i].has("owner") ) - { - ownerRenderCost = content["parcel"][i]["owner"]["rendering"].asReal(); - ownerPhysicsCost = content["parcel"][i]["owner"]["physics"].asReal(); - ownerNetworkCost = content["parcel"][i]["owner"]["streaming"].asReal(); - ownerSimulationCost = content["parcel"][i]["owner"]["simulation"].asReal(); - } - - if ( content["parcel"][i].has("group") ) - { - groupRenderCost = content["parcel"][i]["group"]["rendering"].asReal(); - groupPhysicsCost = content["parcel"][i]["group"]["physics"].asReal(); - groupNetworkCost = content["parcel"][i]["group"]["streaming"].asReal(); - groupSimulationCost = content["parcel"][i]["group"]["simulation"].asReal(); - - } - if ( content["parcel"][i].has("other") ) - { - otherRenderCost = content["parcel"][i]["other"]["rendering"].asReal(); - otherPhysicsCost = content["parcel"][i]["other"]["physics"].asReal(); - otherNetworkCost = content["parcel"][i]["other"]["streaming"].asReal(); - otherSimulationCost = content["parcel"][i]["other"]["simulation"].asReal(); - } - - if ( content["parcel"][i].has("temp") ) - { - tempRenderCost = content["parcel"][i]["total"]["rendering"].asReal(); - tempPhysicsCost = content["parcel"][i]["total"]["physics"].asReal(); - tempNetworkCost = content["parcel"][i]["total"]["streaming"].asReal(); - tempSimulationCost = content["parcel"][i]["total"]["simulation"].asReal(); - } - - if ( content["parcel"][i].has("selected") ) - { - selectedRenderCost = content["parcel"][i]["total"]["rendering"].asReal(); - selectedPhysicsCost = content["parcel"][i]["total"]["physics"].asReal(); - selectedNetworkCost = content["parcel"][i]["total"]["streaming"].asReal(); - selectedSimulationCost = content["parcel"][i]["total"]["simulation"].asReal(); - } - - ParcelQuota parcelQuota( ownerRenderCost, ownerPhysicsCost, ownerNetworkCost, ownerSimulationCost, - groupRenderCost, groupPhysicsCost, groupNetworkCost, groupSimulationCost, - otherRenderCost, otherPhysicsCost, otherNetworkCost, otherSimulationCost, - tempRenderCost, tempPhysicsCost, tempNetworkCost, tempSimulationCost, - selectedRenderCost, selectedPhysicsCost, selectedNetworkCost, selectedSimulationCost, - parcelCapacity ); - //Update the Parcel - LLParcel* pParcel = LLViewerParcelMgr::getInstance()->getParcelSelection()->getParcel(); - if ( pParcel ) - { - pParcel->updateQuota( objectID, parcelQuota ); - } - } - } - else - if ( containsSelection ) - { - S32 dataCount = content["selected"].size(); - for(S32 i = 0; i < dataCount; i++) - { - - F32 renderCost = 0; - F32 physicsCost = 0; - F32 networkCost = 0; - F32 simulationCost = 0; - - LLUUID objectId; - - objectId = content["selected"][i]["local_id"].asUUID(); - renderCost = content["selected"][i]["rendering"].asReal(); - physicsCost = content["selected"][i]["physics"].asReal(); - networkCost = content["selected"][i]["streaming"].asReal(); - simulationCost = content["selected"][i]["simulation"].asReal(); - - SelectionQuota selectionQuota( objectId, renderCost, physicsCost, networkCost, simulationCost ); - - //Update the objects - gObjectList.updateQuota( objectId, selectionQuota ); - - } - } - else - { - //Nothing in string - LLAccountingQuotaManager::getInstance()->removePendingObjectQuota( objectID ); - } - } - } - -private: - //List of posted objects - LLSD mObjectIDs; -}; -//=============================================================================== -void LLAccountingQuotaManager::fetchQuotas( const std::string& url ) -{ - // Invoking system must have already determined capability availability - if ( !url.empty() ) - { - LLSD objectList; - U32 objectIndex = 0; - IDIt IDIter = mUpdateObjectQuota.begin(); - IDIt IDIterEnd = mUpdateObjectQuota.end(); - - for ( ; IDIter != IDIterEnd; ++IDIter ) - { - // Check to see if a request for this object has already been made. - if ( mPendingObjectQuota.find( *IDIter ) == mPendingObjectQuota.end() ) - { - mPendingObjectQuota.insert( *IDIter ); - objectList[objectIndex++] = *IDIter; - } - } - - mUpdateObjectQuota.clear(); - - //Post results - if ( objectList.size() > 0 ) - { - LLSD dataToPost = LLSD::emptyMap(); - dataToPost["object_ids"] = objectList; - LLHTTPClient::post( url, dataToPost, new LLAccountingQuotaResponder( objectList )); - } - } - else - { - //url was empty - warn & continue - llwarns<<"Supplied url is empty "<setLabel(LLTrans::getString("AvatarSetAway")); diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h index b37a6a9b12..857da780dd 100644 --- a/indra/newview/llagent.h +++ b/indra/newview/llagent.h @@ -319,7 +319,8 @@ public: void setAFK(); void clearAFK(); BOOL getAFK() const; - + static const F32 MIN_AFK_TIME; + //-------------------------------------------------------------------- // Run //-------------------------------------------------------------------- diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp index f2d2c2b580..87563110a1 100644 --- a/indra/newview/llagentwearables.cpp +++ b/indra/newview/llagentwearables.cpp @@ -1814,37 +1814,6 @@ LLUUID LLAgentWearables::computeBakedTextureHash(LLVOAvatarDefines::EBakedTextur // } //} -// static -//void LLAgentWearables::userRemoveAllClothes() -//{ -// // We have to do this up front to avoid having to deal with the case of multiple wearables being dirty. -// if (gAgentCamera.cameraCustomizeAvatar()) -// { -// // switching to outfit editor should automagically save any currently edited wearable -// LLSideTray::getInstance()->showPanel("sidepanel_appearance", LLSD().with("type", "edit_outfit")); -// } -// userRemoveAllClothesStep2(TRUE); -//} - -// static -//void LLAgentWearables::userRemoveAllClothesStep2(BOOL proceed) -//{ -// if (proceed) -// { -// gAgentWearables.removeWearable(LLWearableType::WT_SHIRT,true,0); -// gAgentWearables.removeWearable(LLWearableType::WT_PANTS,true,0); -// gAgentWearables.removeWearable(LLWearableType::WT_SHOES,true,0); -// gAgentWearables.removeWearable(LLWearableType::WT_SOCKS,true,0); -// gAgentWearables.removeWearable(LLWearableType::WT_JACKET,true,0); -// gAgentWearables.removeWearable(LLWearableType::WT_GLOVES,true,0); -// gAgentWearables.removeWearable(LLWearableType::WT_UNDERSHIRT,true,0); -// gAgentWearables.removeWearable(LLWearableType::WT_UNDERPANTS,true,0); -// gAgentWearables.removeWearable(LLWearableType::WT_SKIRT,true,0); -// gAgentWearables.removeWearable(LLWearableType::WT_ALPHA,true,0); -// gAgentWearables.removeWearable(LLWearableType::WT_TATTOO,true,0); -// } -//} - // Combines userRemoveAllAttachments() and userAttachMultipleAttachments() logic to // get attachments into desired state with minimal number of adds/removes. //void LLAgentWearables::userUpdateAttachments(LLInventoryModel::item_array_t& obj_item_array) diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h index b246c5ce0c..f5ae4f30dd 100644 --- a/indra/newview/llagentwearables.h +++ b/indra/newview/llagentwearables.h @@ -172,7 +172,6 @@ private: void removeWearableFinal(const LLWearableType::EType type, bool do_remove_all /*= false*/, U32 index /*= 0*/); protected: static bool onRemoveWearableDialog(const LLSD& notification, const LLSD& response); -// static void userRemoveAllClothesStep2(BOOL proceed); // userdata is NULL //-------------------------------------------------------------------- // Server Communication @@ -216,9 +215,8 @@ public: // Static UI hooks //-------------------------------------------------------------------- public: -// static void userRemoveWearable(const LLWearableType::EType &type, const U32 &index); -// static void userRemoveWearablesOfType(const LLWearableType::EType &type); -// static void userRemoveAllClothes(); + static void userRemoveWearable(const LLWearableType::EType &type, const U32 &index); + static void userRemoveWearablesOfType(const LLWearableType::EType &type); typedef std::vector llvo_vec_t; diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 7b63e0e22c..9eadf18ae0 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -255,7 +255,6 @@ extern BOOL gDebugGL; //////////////////////////////////////////////////////////// // All from the last globals push... -const F32 DEFAULT_AFK_TIMEOUT = 5.f * 60.f; // time with no input before user flagged as Away From Keyboard F32 gSimLastTime; // Used in LLAppViewer::init and send_stats() F32 gSimFrames; @@ -330,6 +329,41 @@ static std::string gLaunchFileOnQuit; // Note: Changing this breaks compatibility with SLURL handling, try to avoid it. const char* const VIEWER_WINDOW_CLASSNAME = "Second Life"; +//-- LLDeferredTaskList ------------------------------------------------------ + +/** + * A list of deferred tasks. + * + * We sometimes need to defer execution of some code until the viewer gets idle, + * e.g. removing an inventory item from within notifyObservers() may not work out. + * + * Tasks added to this list will be executed in the next LLAppViewer::idle() iteration. + * All tasks are executed only once. + */ +class LLDeferredTaskList: public LLSingleton +{ + LOG_CLASS(LLDeferredTaskList); + + friend class LLAppViewer; + typedef boost::signals2::signal signal_t; + + void addTask(const signal_t::slot_type& cb) + { + mSignal.connect(cb); + } + + void run() + { + if (!mSignal.empty()) + { + mSignal(); + mSignal.disconnect_all_slots(); + } + } + + signal_t mSignal; +}; + //---------------------------------------------------------------------------- // List of entries from strings.xml to always replace @@ -402,18 +436,24 @@ static bool app_metrics_qa_mode = false; void idle_afk_check() { + + if (gAgent.getAFK()) + return; + // check idle timers -// if (gSavedSettings.getS32("AFKTimeout") && (gAwayTriggerTimer.getElapsedTimeF32() > gSavedSettings.getS32("AFKTimeout"))) + F32 current_idle = gAwayTriggerTimer.getElapsedTimeF32(); + F32 afk_timeout = gSavedSettings.getS32("AFKTimeout"); + // [RLVa:KB] - Checked: 2010-05-03 (RLVa-1.2.0g) | Modified: RLVa-1.2.0g #ifdef RLV_EXTENSION_CMD_ALLOWIDLE // Enforce an idle time of 30 minutes if @allowidle=n restricted - S32 nAFKTimeout = (!gRlvHandler.hasBehaviour(RLV_BHVR_ALLOWIDLE)) ? gSavedSettings.getS32("AFKTimeout") : 60 * 30; - if ( (nAFKTimeout) && (gAwayTriggerTimer.getElapsedTimeF32() > nAFKTimeout) ) -#else - if (gSavedSettings.getS32("AFKTimeout") && (gAwayTriggerTimer.getElapsedTimeF32() > gSavedSettings.getS32("AFKTimeout"))) + if (!gRlvHandler.hasBehaviour(RLV_BHVR_ALLOWIDLE)) + afk_timeout = 60 * 30; #endif // RLV_EXTENSION_CMD_ALLOWIDLE // [/RLVa:KB] + if (afk_timeout && (current_idle > afk_timeout) && ! gAgent.getAFK()) { + LL_INFOS("IdleAway") << "Idle more than " << afk_timeout << " seconds: automatically changing to Away status" << LL_ENDL; gAgent.setAFK(); } } @@ -679,7 +719,7 @@ LLAppViewer::~LLAppViewer() } bool LLAppViewer::init() -{ +{ // // Start of the application // @@ -772,6 +812,11 @@ bool LLAppViewer::init() LL_INFOS("InitInfo") << "Configuration initialized." << LL_ENDL ; + //set the max heap size. + initMaxHeapSize() ; + + LLPrivateMemoryPoolManager::initClass((BOOL)gSavedSettings.getBOOL("MemoryPrivatePoolEnabled"), (U32)gSavedSettings.getU32("MemoryPrivatePoolSize")) ; + // write Google Breakpad minidump files to our log directory std::string logdir = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ""); logdir += gDirUtilp->getDirDelimiter(); @@ -820,6 +865,29 @@ bool LLAppViewer::init() initThreads(); LL_INFOS("InitInfo") << "Threads initialized." << LL_ENDL ; + // Initialize settings early so that the defaults for ignorable dialogs are + // picked up and then correctly re-saved after launching the updater (STORM-1268). + LLUI::settings_map_t settings_map; + settings_map["config"] = &gSavedSettings; + settings_map["ignores"] = &gWarningSettings; + settings_map["floater"] = &gSavedSettings; // *TODO: New settings file + settings_map["account"] = &gSavedPerAccountSettings; + + LLUI::initClass(settings_map, + LLUIImageList::getInstance(), + ui_audio_callback, + &LLUI::sGLScaleFactor); + LL_INFOS("InitInfo") << "UI initialized." << LL_ENDL ; + + // Setup paths and LLTrans after LLUI::initClass has been called. + LLUI::setupPaths(); + LLTransUtil::parseStrings("strings.xml", default_trans_args); + LLTransUtil::parseLanguageStrings("language_settings.xml"); + + // Setup notifications after LLUI::setupPaths() has been called. + LLNotifications::instance(); + LL_INFOS("InitInfo") << "Notifications initialized." << LL_ENDL ; + writeSystemInfo(); // Initialize updater service (now that we have an io pump) @@ -871,24 +939,7 @@ bool LLAppViewer::init() { LLError::setPrintLocation(true); } - - // Widget construction depends on LLUI being initialized - LLUI::settings_map_t settings_map; - settings_map["config"] = &gSavedSettings; - settings_map["ignores"] = &gWarningSettings; - settings_map["floater"] = &gSavedSettings; // *TODO: New settings file - settings_map["account"] = &gSavedPerAccountSettings; - LLUI::initClass(settings_map, - LLUIImageList::getInstance(), - ui_audio_callback, - &LLUI::sGLScaleFactor); - - // Setup paths and LLTrans after LLUI::initClass has been called - LLUI::setupPaths(); - LLTransUtil::parseStrings("strings.xml", default_trans_args); - LLTransUtil::parseLanguageStrings("language_settings.xml"); - // LLKeyboard relies on LLUI to know what some accelerator keys are called. LLKeyboard::setStringTranslatorFunc( LLTrans::getKeyboardString ); @@ -1148,6 +1199,58 @@ bool LLAppViewer::init() return true; } +void LLAppViewer::initMaxHeapSize() +{ + //set the max heap size. + //here is some info regarding to the max heap size: + //------------------------------------------------------------------------------------------ + // OS | setting | SL address bits | max manageable memory space | max heap size + // Win 32 | default | 32-bit | 2GB | < 1.7GB + // Win 32 | /3G | 32-bit | 3GB | < 1.7GB or 2.7GB + //Linux 32 | default | 32-bit | 3GB | < 2.7GB + //Linux 32 |HUGEMEM | 32-bit | 4GB | < 3.7GB + //64-bit OS |default | 32-bit | 4GB | < 3.7GB + //64-bit OS |default | 64-bit | N/A (> 4GB) | N/A (> 4GB) + //------------------------------------------------------------------------------------------ + //currently SL is built under 32-bit setting, we set its max heap size no more than 1.6 GB. + + //F32 max_heap_size_gb = llmin(1.6f, (F32)gSavedSettings.getF32("MaxHeapSize")) ; + F32 max_heap_size_gb = gSavedSettings.getF32("MaxHeapSize") ; + BOOL enable_mem_failure_prevention = (BOOL)gSavedSettings.getBOOL("MemoryFailurePreventionEnabled") ; + + LLMemory::initMaxHeapSizeGB(max_heap_size_gb, enable_mem_failure_prevention) ; +} + +void LLAppViewer::checkMemory() +{ + const static F32 MEMORY_CHECK_INTERVAL = 1.0f ; //second + //const static F32 MAX_QUIT_WAIT_TIME = 30.0f ; //seconds + //static F32 force_quit_timer = MAX_QUIT_WAIT_TIME + MEMORY_CHECK_INTERVAL ; + + if(!gGLManager.mDebugGPU) + { + return ; + } + + if(MEMORY_CHECK_INTERVAL > mMemCheckTimer.getElapsedTimeF32()) + { + return ; + } + mMemCheckTimer.reset() ; + + //update the availability of memory + LLMemory::updateMemoryInfo() ; + + bool is_low = LLMemory::isMemoryPoolLow() ; + + LLPipeline::throttleNewMemoryAllocation(is_low) ; + + if(is_low) + { + LLMemory::logMemoryInfo() ; + } +} + static LLFastTimer::DeclareTimer FTM_MESSAGES("System Messages"); static LLFastTimer::DeclareTimer FTM_SLEEP("Sleep"); static LLFastTimer::DeclareTimer FTM_TEXTURE_CACHE("Texture Cache"); @@ -1183,7 +1286,6 @@ bool LLAppViewer::mainLoop() LLVoiceClient::getInstance()->init(gServicePump); LLTimer frameTimer,idleTimer; LLTimer debugTime; - LLFrameTimer memCheckTimer; LLViewerJoystick* joystick(LLViewerJoystick::getInstance()); joystick->setNeedsReset(true); @@ -1194,7 +1296,9 @@ bool LLAppViewer::mainLoop() // point of posting. LLSD newFrame; - const F32 memory_check_interval = 1.0f ; //second + //LLPrivateMemoryPoolTester::getInstance()->run(false) ; + //LLPrivateMemoryPoolTester::getInstance()->run(true) ; + //LLPrivateMemoryPoolTester::destroy() ; // Handle messages while (!LLApp::isExiting()) @@ -1205,18 +1309,8 @@ bool LLAppViewer::mainLoop() llclearcallstacks; //check memory availability information - { - if(memory_check_interval < memCheckTimer.getElapsedTimeF32()) - { - memCheckTimer.reset() ; - - //update the availability of memory - LLMemoryInfo::getAvailableMemoryKB(mAvailPhysicalMemInKB, mAvailVirtualMemInKB) ; - } - llcallstacks << "Available physical mem(KB): " << mAvailPhysicalMemInKB << llcallstacksendl ; - llcallstacks << "Available virtual mem(KB): " << mAvailVirtualMemInKB << llcallstacksendl ; - } - + checkMemory() ; + try { pingMainloopTimeout("Main:MiscNativeWindowEvents"); @@ -1380,7 +1474,7 @@ bool LLAppViewer::mainLoop() idleTimer.reset(); bool is_slow = (frameTimer.getElapsedTimeF64() > FRAME_SLOW_THRESHOLD) ; S32 total_work_pending = 0; - S32 total_io_pending = 0; + S32 total_io_pending = 0; while(!is_slow)//do not unpause threads if the frame rates are very low. { S32 work_pending = 0; @@ -1448,15 +1542,7 @@ bool LLAppViewer::mainLoop() } catch(std::bad_alloc) { - { - llinfos << "Availabe physical memory(KB) at the beginning of the frame: " << mAvailPhysicalMemInKB << llendl ; - llinfos << "Availabe virtual memory(KB) at the beginning of the frame: " << mAvailVirtualMemInKB << llendl ; - - LLMemoryInfo::getAvailableMemoryKB(mAvailPhysicalMemInKB, mAvailVirtualMemInKB) ; - - llinfos << "Current availabe physical memory(KB): " << mAvailPhysicalMemInKB << llendl ; - llinfos << "Current availabe virtual memory(KB): " << mAvailVirtualMemInKB << llendl ; - } + LLMemory::logMemoryInfo(TRUE) ; //stop memory leaking simulation LLFloaterMemLeak* mem_leak_instance = @@ -1965,6 +2051,9 @@ bool LLAppViewer::cleanup() LLMainLoopRepeater::instance().stop(); + //release all private memory pools. + LLPrivateMemoryPoolManager::destroyClass() ; + ll_close_fail_log(); MEM_TRACK_RELEASE @@ -2358,6 +2447,8 @@ bool LLAppViewer::initConfiguration() if (gSavedSettings.getBOOL("FirstRunThisInstall")) { gSavedSettings.setString("SessionSettingsFile", "settings_phoenix.xml"); + + // Note that the "FirstRunThisInstall" settings is currently unused. gSavedSettings.setBOOL("FirstRunThisInstall", FALSE); } @@ -3838,6 +3929,7 @@ bool LLAppViewer::initCache() std::string new_cache_location = gSavedSettings.getString("NewCacheLocation"); if (new_cache_location != cache_location) { + llwarns << new_cache_location << " is not the same as " << cache_location << ". PURGING." << llendl; gDirUtilp->setCacheDir(gSavedSettings.getString("CacheLocation")); purgeCache(); // purge old cache gSavedSettings.setString("CacheLocation", new_cache_location); @@ -4040,6 +4132,11 @@ bool LLAppViewer::initCache() } } +void LLAppViewer::addOnIdleCallback(const boost::function& cb) +{ + LLDeferredTaskList::instance().addTask(cb); +} + void LLAppViewer::purgeCache() { LL_INFOS("AppCache") << "Purging Cache and Texture Cache..." << LL_ENDL; @@ -4643,6 +4740,9 @@ void LLAppViewer::idle() gAudiop->idle(max_audio_decode_time); } } + + // Execute deferred tasks. + LLDeferredTaskList::instance().run(); // Handle shutdown process, for example, // wait for floaters to close, send quit message, diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h index 74634a1286..30a23a7996 100644 --- a/indra/newview/llappviewer.h +++ b/indra/newview/llappviewer.h @@ -164,11 +164,13 @@ public: login_completed_signal_t mOnLoginCompleted; boost::signals2::connection setOnLoginCompletedCallback( const login_completed_signal_t::slot_type& cb ) { return mOnLoginCompleted.connect(cb); } - void purgeCache(); // Clear the local cache. + void addOnIdleCallback(const boost::function& cb); // add a callback to fire (once) when idle + + void purgeCache(); // Clear the local cache. // mute/unmute the system's master audio virtual void setMasterSystemAudioMute(bool mute); - virtual bool getMasterSystemAudioMute(); + virtual bool getMasterSystemAudioMute(); // Metrics policy helper statics. static void metricsUpdateRegion(U64 region_handle); @@ -191,11 +193,12 @@ protected: private: + void initMaxHeapSize(); bool initThreads(); // Initialize viewer threads, return false on failure. bool initConfiguration(); // Initialize settings from the command line/config file. void initUpdater(); // Initialize the updater service. bool initCache(); // Initialize local client cache. - + void checkMemory() ; // We have switched locations of both Mac and Windows cache, make sure // files migrate and old cache is cleared out. @@ -273,8 +276,7 @@ private: std::set mPlugins; - U32 mAvailPhysicalMemInKB ; - U32 mAvailVirtualMemInKB ; + LLFrameTimer mMemCheckTimer; boost::scoped_ptr mUpdater; diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp old mode 100755 new mode 100644 diff --git a/indra/newview/llavataractions.cpp b/indra/newview/llavataractions.cpp index e8cbb8c279..756e494410 100644 --- a/indra/newview/llavataractions.cpp +++ b/indra/newview/llavataractions.cpp @@ -866,7 +866,7 @@ std::set LLAvatarActions::getInventorySelectedUUIDs() if (inventory_selected_uuids.empty()) { LLSidepanelInventory * sidepanel_inventory = LLSideTray::getInstance()->getPanel("sidepanel_inventory"); - + inventory_selected_uuids = sidepanel_inventory->getInboxOrOutboxSelectionList(); } diff --git a/indra/newview/llavatariconctrl.cpp b/indra/newview/llavatariconctrl.cpp index 6537c19900..9ccaf1c270 100644 --- a/indra/newview/llavatariconctrl.cpp +++ b/indra/newview/llavatariconctrl.cpp @@ -141,7 +141,6 @@ LLAvatarIconCtrl::Params::Params() draw_tooltip("draw_tooltip", true), default_icon_name("default_icon_name") { - name = "avatar_icon"; } diff --git a/indra/newview/llbottomtray.cpp b/indra/newview/llbottomtray.cpp index bbe1ab2784..2c52550c3c 100755 --- a/indra/newview/llbottomtray.cpp +++ b/indra/newview/llbottomtray.cpp @@ -54,7 +54,6 @@ #include "llsyswellwindow.h" #include "lltoolmgr.h" #include "llviewerparcelmgr.h" -#include "llsidetray.h" #include "llviewerwindow.h" #include "llsdserialize.h" #include "llfirstuse.h" @@ -213,7 +212,8 @@ public: }; LLBottomTray::LLBottomTray(const LLSD&) -: mChicletPanel(NULL), +: mDesiredNearbyChatWidth(0), + mChicletPanel(NULL), mSpeakPanel(NULL), mSpeakBtn(NULL), mNearbyChatBar(NULL), @@ -1313,33 +1313,35 @@ S32 LLBottomTray::processWidthDecreased(S32 delta_width) if (still_should_be_processed) { processShrinkButtons(delta_width, buttons_freed_width); + still_should_be_processed = delta_width < 0; } + // 3. Decreasing width of nearby chat. const S32 chatbar_panel_min_width = get_panel_min_width(mToolbarStack, mChatBarContainer); const S32 chatbar_panel_width = mChatBarContainer->getRect().getWidth(); if (still_should_be_processed && chatbar_panel_width > chatbar_panel_min_width) { // we have some space to decrease chatbar panel - S32 panel_delta_min = chatbar_panel_width - chatbar_panel_min_width; + S32 chatbar_shrink_headroom = chatbar_panel_width - chatbar_panel_min_width; - S32 delta_panel = llmin(-delta_width, panel_delta_min); + S32 shrink_by = llmin(-delta_width, chatbar_shrink_headroom); // is chatbar panel wide enough to process resizing? - delta_width += panel_delta_min; + delta_width += chatbar_shrink_headroom; still_should_be_processed = delta_width < 0; // chatbar should only be shrunk here, not stretched - if(delta_panel > 0) + if (shrink_by > 0) { - lldebugs << "Shrinking nearby chat bar by " << delta_panel << " px " << llendl; - mChatBarContainer->reshape(mNearbyChatBar->getRect().getWidth() - delta_panel, mChatBarContainer->getRect().getHeight()); + lldebugs << "Shrinking nearby chat bar by " << shrink_by << " px " << llendl; + mChatBarContainer->reshape(mNearbyChatBar->getRect().getWidth() - shrink_by, mChatBarContainer->getRect().getHeight()); } log(mNearbyChatBar, "after processing panel decreasing via nearby chatbar panel"); lldebugs << "RS_CHATBAR_INPUT" - << ", delta_panel: " << delta_panel + << ", shrink_by: " << shrink_by << ", delta_width: " << delta_width << llendl; } @@ -1418,16 +1420,16 @@ void LLBottomTray::processWidthIncreased(S32 delta_width) << ", mDesiredNearbyChatWidth = " << mDesiredNearbyChatWidth << llendl; if (delta_width > 0 && chatbar_panel_width < mDesiredNearbyChatWidth) { - S32 delta_panel_max = mDesiredNearbyChatWidth - chatbar_panel_width; - S32 delta_panel = llmin(delta_width, delta_panel_max); - lldebugs << "Unprocesed delta width: " << delta_width - << ", can be applied to chatbar: " << delta_panel_max - << ", will be applied: " << delta_panel + S32 extend_by_max = mDesiredNearbyChatWidth - chatbar_panel_width; + S32 extend_by = llmin(delta_width, extend_by_max); + lldebugs << "Unprocessed delta width: " << delta_width + << " px, chatbar can be extended by " << extend_by_max + << " px, extending it by " << extend_by << " px" << llendl; - delta_width -= delta_panel_max; - lldebugs << "Extending nearby chat bar by " << delta_panel << " px " << llendl; - mChatBarContainer->reshape(chatbar_panel_width + delta_panel, mChatBarContainer->getRect().getHeight()); + delta_width -= extend_by_max; + lldebugs << "Extending nearby chat bar by " << extend_by << " px " << llendl; + mChatBarContainer->reshape(chatbar_panel_width + extend_by, mChatBarContainer->getRect().getHeight()); log(mNearbyChatBar, "applied unprocessed delta width"); } diff --git a/indra/newview/llbottomtray.h b/indra/newview/llbottomtray.h index 431aabde84..d922e5abb7 100644 --- a/indra/newview/llbottomtray.h +++ b/indra/newview/llbottomtray.h @@ -347,7 +347,7 @@ private: void processExtendButtons(S32& available_width); /** - * Extends the Speak button if there is anough headroom. + * Extends the Speak button if there is enough headroom. * * Unlike other buttons, the Speak buttons has only two possible widths: * the minimal one (without label) and the maximal (default) one. diff --git a/indra/newview/llchannelmanager.h b/indra/newview/llchannelmanager.h index db936b28d9..1a0b98f6cf 100644 --- a/indra/newview/llchannelmanager.h +++ b/indra/newview/llchannelmanager.h @@ -43,7 +43,7 @@ namespace LLNotificationsUI */ class LLChannelManager : public LLSingleton { -public: +public: struct Params { LLUUID id; @@ -51,7 +51,8 @@ public: EToastAlignment toast_align; EChannelAlignment channel_align; - Params(): id(LLUUID("")), display_toasts_always(false), toast_align(NA_BOTTOM), channel_align(CA_LEFT) + Params() + : id(LLUUID("")), display_toasts_always(false), toast_align(NA_BOTTOM), channel_align(CA_LEFT) {} }; diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp index c07fe5ed1e..2ba37c43fb 100644 --- a/indra/newview/llchathistory.cpp +++ b/indra/newview/llchathistory.cpp @@ -272,7 +272,7 @@ public: mSourceType = chat.mSourceType; //*TODO overly defensive thing, source type should be maintained out there - if((chat.mFromID.isNull() && chat.mFromName.empty()) || chat.mFromName == SYSTEM_FROM && chat.mFromID.isNull()) + if((chat.mFromID.isNull() && chat.mFromName.empty()) || (chat.mFromName == SYSTEM_FROM && chat.mFromID.isNull())) { mSourceType = CHAT_SOURCE_SYSTEM; } diff --git a/indra/newview/llchatmsgbox.cpp b/indra/newview/llchatmsgbox.cpp index 024ccbcd0b..aa6c9c094c 100644 --- a/indra/newview/llchatmsgbox.cpp +++ b/indra/newview/llchatmsgbox.cpp @@ -70,7 +70,7 @@ private: LLChatMsgBox::Params::Params() : block_spacing("block_spacing", 10) { - line_spacing.pixels = 4; + changeDefault(line_spacing.pixels, 4); } LLChatMsgBox::LLChatMsgBox(const Params& p) : diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp index 3000209aad..245157923d 100644 --- a/indra/newview/llchiclet.cpp +++ b/indra/newview/llchiclet.cpp @@ -126,9 +126,9 @@ LLSysWellChiclet::Params::Params() , unread_notifications("unread_notifications") , max_displayed_count("max_displayed_count", 99) { - button.name("button"); - button.tab_stop(FALSE); - button.label(LLStringUtil::null); + button.name = "button"; + button.tab_stop = FALSE; + button.label = LLStringUtil::null; } LLSysWellChiclet::LLSysWellChiclet(const Params& p) diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h index a6e12006a1..1f1069dcb4 100644 --- a/indra/newview/llchiclet.h +++ b/indra/newview/llchiclet.h @@ -107,9 +107,9 @@ public: { Params() { - draw_tooltip(FALSE); - mouse_opaque(FALSE); - default_icon_name("Generic_Person"); + changeDefault(draw_tooltip, FALSE); + changeDefault(mouse_opaque, FALSE); + changeDefault(default_icon_name, "Generic_Person"); }; }; @@ -131,9 +131,8 @@ public: Optional default_icon; Params() - : default_icon("default_icon", "Generic_Group") - { - }; + : default_icon("default_icon", "Generic_Group") + {} }; /** @@ -162,9 +161,9 @@ public: Optional default_icon; Params() - : default_icon("default_icon", "Generic_Object_Small") + : default_icon("default_icon", "Generic_Object_Small") { - avatar_id = LLUUID::null; + changeDefault(avatar_id, LLUUID::null); }; }; @@ -314,9 +313,7 @@ public: TYPE_AD_HOC }; struct Params : public LLInitParam::Block - { - Params(){} - }; + {}; virtual ~LLIMChiclet() {}; diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp index d77ebc5367..5b942f283a 100644 --- a/indra/newview/llcolorswatch.cpp +++ b/indra/newview/llcolorswatch.cpp @@ -57,7 +57,6 @@ LLColorSwatchCtrl::Params::Params() caption_text("caption_text"), border("border") { - name = "colorswatch"; } LLColorSwatchCtrl::LLColorSwatchCtrl(const Params& p) diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp index 216cc66ef8..cc6ba05e7e 100644 --- a/indra/newview/lldebugview.cpp +++ b/indra/newview/lldebugview.cpp @@ -41,6 +41,7 @@ #include "llmemoryview.h" #include "llsceneview.h" #include "llviewertexture.h" +#include "llfloaterreg.h" // // Globals @@ -79,12 +80,7 @@ void LLDebugView::init() r.setLeftTopAndSize(25, rect.getHeight() - 50, (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f), (S32) (gViewerWindow->getWindowRectScaled().getHeight() * 0.75f)); - mFastTimerView = new LLFastTimerView(r); - mFastTimerView->setFollowsTop(); - mFastTimerView->setFollowsLeft(); - mFastTimerView->setVisible(FALSE); // start invisible - addChild(mFastTimerView); - mFastTimerView->setRect(rect); + mFastTimerView = dynamic_cast(LLFloaterReg::getInstance("fast_timers")); gSceneView = new LLSceneView(r); gSceneView->setFollowsTop(); diff --git a/indra/newview/lldebugview.h b/indra/newview/lldebugview.h index 5245f163c0..20262fc89e 100644 --- a/indra/newview/lldebugview.h +++ b/indra/newview/lldebugview.h @@ -48,7 +48,7 @@ public: { Params() { - mouse_opaque = false; + changeDefault(mouse_opaque, false); } }; LLDebugView(const Params&); diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 28e464b60d..37ee81aeb5 100644 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -1299,30 +1299,38 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* return; } - LLVertexBuffer* buffer = face->getVertexBuffer(); + LLPointer buffer = face->getVertexBuffer(); + LLDrawable* drawable = face->getDrawable(); U32 data_mask = face->getRiggedVertexBufferDataMask(); - if (!buffer || + if (buffer.isNull() || buffer->getTypeMask() != data_mask || - buffer->getRequestedVerts() != vol_face.mNumVertices) + buffer->getRequestedVerts() != vol_face.mNumVertices || + buffer->getRequestedIndices() != vol_face.mNumIndices || + (drawable && drawable->isState(LLDrawable::REBUILD_ALL))) { face->setGeomIndex(0); face->setIndicesIndex(0); - face->setSize(vol_face.mNumVertices, vol_face.mNumIndices, true); - - - if (sShaderLevel > 0) - { - buffer = new LLVertexBuffer(data_mask, GL_DYNAMIC_DRAW_ARB); + + if (buffer.isNull() || buffer->getTypeMask() != data_mask) + { //make a new buffer + if (sShaderLevel > 0) + { + buffer = new LLVertexBuffer(data_mask, GL_DYNAMIC_DRAW_ARB); + } + else + { + buffer = new LLVertexBuffer(data_mask, GL_STREAM_DRAW_ARB); + } + buffer->allocateBuffer(vol_face.mNumVertices, vol_face.mNumIndices, true); } else - { - buffer = new LLVertexBuffer(data_mask, GL_STREAM_DRAW_ARB); + { //resize existing buffer + buffer->resizeBuffer(vol_face.mNumVertices, vol_face.mNumIndices); } - buffer->allocateBuffer(face->getGeomCount(), face->getIndicesCount(), true); - + face->setSize(vol_face.mNumVertices, vol_face.mNumIndices); face->setVertexBuffer(buffer); U16 offset = 0; @@ -1423,6 +1431,11 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* } } } + + if (drawable && (face->getTEOffset() == drawable->getNumFaces()-1)) + { + drawable->clearState(LLDrawable::REBUILD_ALL); + } } void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) @@ -1453,7 +1466,7 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) LLVolume* volume = vobj->getVolume(); S32 te = face->getTEOffset(); - if (!volume || volume->getNumVolumeFaces() <= te) + if (!volume || volume->getNumVolumeFaces() <= te || !volume->isMeshAssetLoaded()) { continue; } diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp index d801f6df18..0742250b0b 100644 --- a/indra/newview/lldrawpoolbump.cpp +++ b/indra/newview/lldrawpoolbump.cpp @@ -155,6 +155,7 @@ void LLStandardBumpmap::addstandard() LLViewerTextureManager::getFetchedTexture(LLUUID(bump_image_id)); gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setBoostLevel(LLViewerTexture::BOOST_BUMP) ; gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setLoadedCallback(LLBumpImageList::onSourceStandardLoaded, 0, TRUE, FALSE, NULL, NULL ); + gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->forceToSaveRawImage(0) ; LLStandardBumpmap::sStandardBumpmapCount++; } @@ -1073,11 +1074,12 @@ LLViewerTexture* LLBumpImageList::getBrightnessDarknessImage(LLViewerFetchedText if (!src_image->hasCallbacks()) { //if image has no callbacks but resolutions don't match, trigger raw image loaded callback again if (src_image->getWidth() != bump->getWidth() || - src_image->getHeight() != bump->getHeight() || - (LLPipeline::sRenderDeferred && bump->getComponents() != 4)) + src_image->getHeight() != bump->getHeight())// || + //(LLPipeline::sRenderDeferred && bump->getComponents() != 4)) { src_image->setBoostLevel(LLViewerTexture::BOOST_BUMP) ; src_image->setLoadedCallback( callback_func, 0, TRUE, FALSE, new LLUUID(src_image->getID()), NULL ); + src_image->forceToSaveRawImage(0) ; } } } diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp index f781d5f3ff..fb9958ee9d 100644 --- a/indra/newview/lldynamictexture.cpp +++ b/indra/newview/lldynamictexture.cpp @@ -40,6 +40,7 @@ #include "llvertexbuffer.h" #include "llviewerdisplay.h" #include "llrender.h" +#include "pipeline.h" // static LLViewerDynamicTexture::instance_list_t LLViewerDynamicTexture::sInstances[ LLViewerDynamicTexture::ORDER_COUNT ]; @@ -201,7 +202,7 @@ void LLViewerDynamicTexture::postRender(BOOL success) BOOL LLViewerDynamicTexture::updateAllInstances() { sNumRenders = 0; - if (gGLManager.mIsDisabled) + if (gGLManager.mIsDisabled || LLPipeline::sMemAllocationThrottled) { return TRUE; } diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp index 35712163eb..a161428c2b 100644 --- a/indra/newview/llfasttimerview.cpp +++ b/indra/newview/llfasttimerview.cpp @@ -80,12 +80,10 @@ static timer_tree_iterator_t end_timer_tree() return timer_tree_iterator_t(); } -LLFastTimerView::LLFastTimerView(const LLRect& rect) -: LLFloater(LLSD()), +LLFastTimerView::LLFastTimerView(const LLSD& key) +: LLFloater(key), mHoverTimer(NULL) { - setRect(rect); - setVisible(FALSE); mDisplayMode = 0; mAvgCountTotal = 0; mMaxCountTotal = 0; @@ -98,10 +96,30 @@ LLFastTimerView::LLFastTimerView(const LLRect& rect) FTV_NUM_TIMERS = LLFastTimer::NamedTimer::instanceCount(); mPrintStats = -1; mAverageCyclesPerTimer = 0; - setCanMinimize(false); - setCanClose(true); } +void LLFastTimerView::onPause() +{ + LLFastTimer::sPauseHistory = !LLFastTimer::sPauseHistory; + // reset scroll to bottom when unpausing + if (!LLFastTimer::sPauseHistory) + { + mScrollIndex = 0; + getChild("pause_btn")->setLabel(getString("pause")); + } + else + { + getChild("pause_btn")->setLabel(getString("run")); + } +} + +BOOL LLFastTimerView::postBuild() +{ + LLButton& pause_btn = getChildRef("pause_btn"); + + pause_btn.setCommitCallback(boost::bind(&LLFastTimerView::onPause, this)); + return TRUE; +} BOOL LLFastTimerView::handleRightMouseDown(S32 x, S32 y, MASK mask) { @@ -116,14 +134,16 @@ BOOL LLFastTimerView::handleRightMouseDown(S32 x, S32 y, MASK mask) { mHoverTimer->getParent()->setCollapsed(true); } + return TRUE; } else if (mBarRect.pointInRect(x, y)) { S32 bar_idx = MAX_VISIBLE_HISTORY - ((y - mBarRect.mBottom) * (MAX_VISIBLE_HISTORY + 2) / mBarRect.getHeight()); bar_idx = llclamp(bar_idx, 0, MAX_VISIBLE_HISTORY); mPrintStats = LLFastTimer::NamedTimer::HISTORY_NUM - mScrollIndex - bar_idx; + return TRUE; } - return FALSE; + return LLFloater::handleRightMouseDown(x, y, mask); } LLFastTimer::NamedTimer* LLFastTimerView::getLegendID(S32 y) @@ -151,18 +171,6 @@ BOOL LLFastTimerView::handleDoubleClick(S32 x, S32 y, MASK mask) BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask) { - - { - S32 local_x = x - mButtons[BUTTON_CLOSE]->getRect().mLeft; - S32 local_y = y - mButtons[BUTTON_CLOSE]->getRect().mBottom; - if(mButtons[BUTTON_CLOSE]->getVisible() - && mButtons[BUTTON_CLOSE]->pointInView(local_x, local_y) ) - { - return LLFloater::handleMouseDown(x, y, mask);; - } - } - - if (x < mBarRect.mLeft) { LLFastTimer::NamedTimer* idp = getLegendID(y); @@ -196,36 +204,42 @@ BOOL LLFastTimerView::handleMouseDown(S32 x, S32 y, MASK mask) { mDisplayCenter = (ChildAlignment)((mDisplayCenter + 1) % ALIGN_COUNT); } - else + else if (mGraphRect.pointInRect(x, y)) { - // pause/unpause - LLFastTimer::sPauseHistory = !LLFastTimer::sPauseHistory; - // reset scroll to bottom when unpausing - if (!LLFastTimer::sPauseHistory) - { - mScrollIndex = 0; - } + gFocusMgr.setMouseCapture(this); + return TRUE; } - // SJB: Don't pass mouse clicks through the display - return TRUE; + //else + //{ + // // pause/unpause + // LLFastTimer::sPauseHistory = !LLFastTimer::sPauseHistory; + // // reset scroll to bottom when unpausing + // if (!LLFastTimer::sPauseHistory) + // { + // mScrollIndex = 0; + // } + //} + return LLFloater::handleMouseDown(x, y, mask); } BOOL LLFastTimerView::handleMouseUp(S32 x, S32 y, MASK mask) { + if (hasMouseCapture()) { - S32 local_x = x - mButtons[BUTTON_CLOSE]->getRect().mLeft; - S32 local_y = y - mButtons[BUTTON_CLOSE]->getRect().mBottom; - if(mButtons[BUTTON_CLOSE]->getVisible() - && mButtons[BUTTON_CLOSE]->pointInView(local_x, local_y) ) - { - return LLFloater::handleMouseUp(x, y, mask);; - } + gFocusMgr.setMouseCapture(NULL); } - return FALSE; + return LLFloater::handleMouseUp(x, y, mask);; } BOOL LLFastTimerView::handleHover(S32 x, S32 y, MASK mask) { + if (hasMouseCapture()) + { + F32 lerp = llclamp(1.f - (F32) (x - mGraphRect.mLeft) / (F32) mGraphRect.getWidth(), 0.f, 1.f); + mScrollIndex = llround( lerp * (F32)(LLFastTimer::NamedTimer::HISTORY_NUM - MAX_VISIBLE_HISTORY)); + mScrollIndex = llclamp( mScrollIndex, 0, LLFastTimer::getLastFrameIndex()); + return TRUE; + } mHoverTimer = NULL; mHoverID = NULL; @@ -252,7 +266,15 @@ BOOL LLFastTimerView::handleHover(S32 x, S32 y, MASK mask) x < mBarEnd[mHoverBarIndex][i]) { mHoverID = (*it); - mHoverTimer = (*it); + if (mHoverTimer != *it) + { + // could be that existing tooltip is for a parent and is thus + // covering region for this new timer, go ahead and unblock + // so we can create a new tooltip + LLToolTipMgr::instance().unblockToolTips(); + mHoverTimer = (*it); + } + mToolTipRect.set(mBarStart[mHoverBarIndex][i], mBarRect.mBottom + llround(((F32)(MAX_VISIBLE_HISTORY - mHoverBarIndex + 1)) * ((F32)mBarRect.getHeight() / ((F32)MAX_VISIBLE_HISTORY + 2.f))), mBarEnd[mHoverBarIndex][i], @@ -274,7 +296,7 @@ BOOL LLFastTimerView::handleHover(S32 x, S32 y, MASK mask) } } - return FALSE; + return LLFloater::handleHover(x, y, mask); } @@ -310,15 +332,15 @@ BOOL LLFastTimerView::handleToolTip(S32 x, S32 y, MASK mask) } } } - - return FALSE; + + return LLFloater::handleToolTip(x, y, mask); } BOOL LLFastTimerView::handleScrollWheel(S32 x, S32 y, S32 clicks) { LLFastTimer::sPauseHistory = TRUE; - mScrollIndex = llclamp(mScrollIndex - clicks, - 0, + mScrollIndex = llclamp( mScrollIndex + clicks, + 0, llmin(LLFastTimer::getLastFrameIndex(), (S32)LLFastTimer::NamedTimer::HISTORY_NUM - MAX_VISIBLE_HISTORY)); return TRUE; } @@ -337,8 +359,8 @@ void LLFastTimerView::draw() F64 iclock_freq = 1000.0 / clock_freq; S32 margin = 10; - S32 height = (S32) (gViewerWindow->getWindowRectScaled().getHeight()*0.75f); - S32 width = (S32) (gViewerWindow->getWindowRectScaled().getWidth() * 0.75f); + S32 height = getRect().getHeight(); + S32 width = getRect().getWidth(); LLRect new_rect; new_rect.setLeftTopAndSize(getRect().mLeft, getRect().mTop, width, height); @@ -622,7 +644,6 @@ void LLFastTimerView::draw() LLFontGL::LEFT, LLFontGL::TOP); } - LLRect graph_rect; // Draw borders { gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); @@ -655,9 +676,9 @@ void LLFastTimerView::draw() by = LINE_GRAPH_HEIGHT-barh-dy-7; //line graph - graph_rect = LLRect(xleft-5, by, getRect().getWidth()-5, 5); + mGraphRect = LLRect(xleft-5, by, getRect().getWidth()-5, 5); - gl_rect_2d(graph_rect, FALSE); + gl_rect_2d(mGraphRect, FALSE); } mBarStart.clear(); @@ -805,7 +826,7 @@ void LLFastTimerView::draw() //draw line graph history { gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - LLLocalClipRect clip(graph_rect); + LLLocalClipRect clip(mGraphRect); //normalize based on last frame's maximum static U64 last_max = 0; @@ -822,8 +843,8 @@ void LLFastTimerView::draw() else tdesc = llformat("%4.2f ms", ms); - x = graph_rect.mRight - LLFontGL::getFontMonospace()->getWidth(tdesc)-5; - y = graph_rect.mTop - ((S32)LLFontGL::getFontMonospace()->getLineHeight()); + x = mGraphRect.mRight - LLFontGL::getFontMonospace()->getWidth(tdesc)-5; + y = mGraphRect.mTop - ((S32)LLFontGL::getFontMonospace()->getLineHeight()); LLFontGL::getFontMonospace()->renderUTF8(tdesc, 0, x, y, LLColor4::white, LLFontGL::LEFT, LLFontGL::TOP); @@ -833,24 +854,24 @@ void LLFastTimerView::draw() S32 first_frame = LLFastTimer::NamedTimer::HISTORY_NUM - mScrollIndex; S32 last_frame = first_frame - MAX_VISIBLE_HISTORY; - F32 frame_delta = ((F32) (graph_rect.getWidth()))/(LLFastTimer::NamedTimer::HISTORY_NUM-1); + F32 frame_delta = ((F32) (mGraphRect.getWidth()))/(LLFastTimer::NamedTimer::HISTORY_NUM-1); - F32 right = (F32) graph_rect.mLeft + frame_delta*first_frame; - F32 left = (F32) graph_rect.mLeft + frame_delta*last_frame; + F32 right = (F32) mGraphRect.mLeft + frame_delta*first_frame; + F32 left = (F32) mGraphRect.mLeft + frame_delta*last_frame; gGL.color4f(0.5f,0.5f,0.5f,0.3f); - gl_rect_2d((S32) left, graph_rect.mTop, (S32) right, graph_rect.mBottom); + gl_rect_2d((S32) left, mGraphRect.mTop, (S32) right, mGraphRect.mBottom); if (mHoverBarIndex >= 0) { S32 bar_frame = first_frame - mHoverBarIndex; - F32 bar = (F32) graph_rect.mLeft + frame_delta*bar_frame; + F32 bar = (F32) mGraphRect.mLeft + frame_delta*bar_frame; gGL.color4f(0.5f,0.5f,0.5f,1); gGL.begin(LLRender::LINES); - gGL.vertex2i((S32)bar, graph_rect.mBottom); - gGL.vertex2i((S32)bar, graph_rect.mTop); + gGL.vertex2i((S32)bar, mGraphRect.mBottom); + gGL.vertex2i((S32)bar, mGraphRect.mTop); gGL.end(); } } @@ -875,7 +896,7 @@ void LLFastTimerView::draw() if (mHoverID != NULL && idp != mHoverID) - { //fade out non-hihglighted timers + { //fade out non-highlighted timers if (idp->getParent() != mHoverID) { alpha = alpha_interp; @@ -883,8 +904,10 @@ void LLFastTimerView::draw() } gGL.color4f(col[0], col[1], col[2], alpha); - gGL.begin(LLRender::LINE_STRIP); - for (U32 j = 0; j < LLFastTimer::NamedTimer::HISTORY_NUM; j++) + gGL.begin(LLRender::TRIANGLE_STRIP); + for (U32 j = llmax(0, LLFastTimer::NamedTimer::HISTORY_NUM - LLFastTimer::getLastFrameIndex()); + j < LLFastTimer::NamedTimer::HISTORY_NUM; + j++) { U64 ticks = idp->getHistoricalCount(j); @@ -904,9 +927,10 @@ void LLFastTimerView::draw() //normalize to highlighted timer cur_max = llmax(cur_max, ticks); } - F32 x = graph_rect.mLeft + ((F32) (graph_rect.getWidth()))/(LLFastTimer::NamedTimer::HISTORY_NUM-1)*j; - F32 y = graph_rect.mBottom + (F32) graph_rect.getHeight()/max_ticks*ticks; + F32 x = mGraphRect.mLeft + ((F32) (mGraphRect.getWidth()))/(LLFastTimer::NamedTimer::HISTORY_NUM-1)*j; + F32 y = mGraphRect.mBottom + (F32) mGraphRect.getHeight()/max_ticks*ticks; gGL.vertex2f(x,y); + gGL.vertex2f(x,mGraphRect.mBottom); } gGL.end(); @@ -924,18 +948,20 @@ void LLFastTimerView::draw() } //interpolate towards new maximum - F32 dt = gFrameIntervalSeconds*3.f; - last_max = (U64) ((F32) last_max + ((F32) cur_max- (F32) last_max) * dt); + last_max = (U64) lerp((F32)last_max, (F32) cur_max, LLCriticalDamp::getInterpolant(0.1f)); + if (last_max - cur_max <= 1 || cur_max - last_max <= 1) + { + last_max = cur_max; + } F32 alpha_target = last_max > cur_max ? llmin((F32) last_max/ (F32) cur_max - 1.f,1.f) : llmin((F32) cur_max/ (F32) last_max - 1.f,1.f); - - alpha_interp = alpha_interp + (alpha_target-alpha_interp) * dt; + alpha_interp = lerp(alpha_interp, alpha_target, LLCriticalDamp::getInterpolant(0.1f)); if (mHoverID != NULL) { - x = (graph_rect.mRight + graph_rect.mLeft)/2; - y = graph_rect.mBottom + 8; + x = (mGraphRect.mRight + mGraphRect.mLeft)/2; + y = mGraphRect.mBottom + 8; LLFontGL::getFontMonospace()->renderUTF8( mHoverID->getName(), diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h index ea8251191b..a349e7ad4c 100644 --- a/indra/newview/llfasttimerview.h +++ b/indra/newview/llfasttimerview.h @@ -33,8 +33,9 @@ class LLFastTimerView : public LLFloater { public: - LLFastTimerView(const LLRect& rect); - + LLFastTimerView(const LLSD&); + BOOL postBuild(); + static BOOL sAnalyzePerformance; static void outputAllMetrics(); @@ -44,6 +45,7 @@ private: static void doAnalysisDefault(std::string baseline, std::string target, std::string output) ; static LLSD analyzePerformanceLogDefault(std::istream& is) ; static void exportCharts(const std::string& base, const std::string& target); + void onPause(); public: @@ -89,6 +91,7 @@ private: LLFrameTimer mHighlightTimer; S32 mPrintStats; S32 mAverageCyclesPerTimer; + LLRect mGraphRect; }; #endif diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 5cfdd69f7b..8223e89b64 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -508,7 +508,9 @@ void LLFloaterBuyLandUI::updateCovenantInfo() LLIconCtrl* rating_icon = getChild("rating_icon"); LLRect rect = rating_icon->getRect(); - S32 icon_left_pad = region_name->getRect().mLeft + region_name->getTextBoundingRect().getWidth() + ICON_PAD; + S32 region_name_width = llmin(region_name->getRect().getWidth(), region_name->getTextBoundingRect().getWidth()); + S32 icon_left_pad = region_name->getRect().mLeft + region_name_width + ICON_PAD; + region_name->setToolTip(region_name->getText()); rating_icon->setRect(rect.setOriginAndSize(icon_left_pad, rect.mBottom, rect.getWidth(), rect.getHeight())); switch(sim_access) @@ -530,6 +532,7 @@ void LLFloaterBuyLandUI::updateCovenantInfo() if (region_type) { region_type->setText(region->getLocalizedSimProductName()); + region_type->setToolTip(region->getLocalizedSimProductName()); } LLTextBox* resellable_clause = getChild("resellable_clause"); @@ -619,7 +622,8 @@ void LLFloaterBuyLandUI::updateFloaterCovenantText(const std::string &string, co void LLFloaterBuyLandUI::updateFloaterEstateName(const std::string& name) { LLTextBox* box = getChild("estate_name_text"); - if (box) box->setText(name); + box->setText(name); + box->setToolTip(name); } void LLFloaterBuyLandUI::updateFloaterLastModified(const std::string& text) diff --git a/indra/newview/llfloatermemleak.cpp b/indra/newview/llfloatermemleak.cpp index 58931d112e..9edfe1e354 100644 --- a/indra/newview/llfloatermemleak.cpp +++ b/indra/newview/llfloatermemleak.cpp @@ -90,6 +90,11 @@ LLFloaterMemLeak::~LLFloaterMemLeak() void LLFloaterMemLeak::release() { + if(mLeakedMem.empty()) + { + return ; + } + for(S32 i = 0 ; i < (S32)mLeakedMem.size() ; i++) { delete[] mLeakedMem[i] ; diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp old mode 100755 new mode 100644 index cc433b963a..450af7e97a --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -96,6 +96,7 @@ #include "llsliderctrl.h" #include "llspinctrl.h" #include "lltoggleablemenu.h" +#include "lltrans.h" #include "llvfile.h" #include "llvfs.h" #include "llcallbacklist.h" @@ -108,7 +109,7 @@ #include "llworld.h" // -const S32 SLM_SUPPORTED_VERSION = 2; +const S32 SLM_SUPPORTED_VERSION = 3; //static S32 LLFloaterModelPreview::sUploadAmount = 10; @@ -121,6 +122,19 @@ const S32 PREVIEW_HPAD = PREVIEW_RESIZE_HANDLE_SIZE; const S32 PREF_BUTTON_HEIGHT = 16 + 7 + 16; const S32 PREVIEW_TEXTURE_HEIGHT = 300; +// "Retain%" decomp parameter has values from 0.0 to 1.0 by 0.01 +// But according to the UI spec for upload model floater, this parameter +// should be represented by Retain spinner with values from 1 to 100 by 1. +// To achieve this, RETAIN_COEFFICIENT is used while creating spinner +// and when value is requested from spinner. +const double RETAIN_COEFFICIENT = 100; + +// "Cosine%" decomp parameter has values from 0.9 to 1 by 0.001 +// But according to the UI spec for upload model floater, this parameter +// should be represented by Smooth combobox with only 10 values. +// So this const is used as a size of Smooth combobox list. +const S32 SMOOTH_VALUES_NUMBER = 10; + void drawBoxOutline(const LLVector3& pos, const LLVector3& size); @@ -186,6 +200,13 @@ std::string lod_label_name[NUM_LOD+1] = "I went off the end of the lod_label_name array. Me so smart." }; +std::string colladaVersion[VERSIONTYPE_COUNT+1] = +{ + "1.4.0", + "1.4.1", + "Unsupported" +}; + #define LL_DEGENERACY_TOLERANCE 1e-7f @@ -389,21 +410,23 @@ BOOL LLFloaterModelPreview::postBuild() return FALSE; } - childSetAction("lod_browse", onBrowseLOD, this); - childSetCommitCallback("cancel_btn", onCancel, this); childSetCommitCallback("crease_angle", onGenerateNormalsCommit, this); - childSetCommitCallback("generate_normals", onGenerateNormalsCommit, this); + getChild("gen_normals")->setCommitCallback(boost::bind(&LLFloaterModelPreview::toggleGenarateNormals, this)); childSetCommitCallback("lod_generate", onAutoFillCommit, this); - childSetCommitCallback("lod_mode", onLODParamCommit, this); - childSetCommitCallback("lod_error_threshold", onLODParamCommit, this); - childSetCommitCallback("lod_triangle_limit", onLODParamCommitTriangleLimit, this); - childSetCommitCallback("build_operator", onLODParamCommit, this); - childSetCommitCallback("queue_mode", onLODParamCommit, this); - childSetCommitCallback("border_mode", onLODParamCommit, this); - childSetCommitCallback("share_tolerance", onLODParamCommit, this); + for (S32 lod = 0; lod <= LLModel::LOD_HIGH; ++lod) + { + LLComboBox* lod_source_combo = getChild("lod_source_" + lod_name[lod]); + lod_source_combo->setCommitCallback(boost::bind(&LLFloaterModelPreview::onLoDSourceCommit, this, lod)); + lod_source_combo->setCurrentByIndex(mLODMode[lod]); + + getChild("lod_browse_" + lod_name[lod])->setCommitCallback(boost::bind(&LLFloaterModelPreview::onBrowseLOD, this, lod)); + getChild("lod_mode_" + lod_name[lod])->setCommitCallback(boost::bind(&LLFloaterModelPreview::onLODParamCommit, this, lod, false)); + getChild("lod_error_threshold_" + lod_name[lod])->setCommitCallback(boost::bind(&LLFloaterModelPreview::onLODParamCommit, this, lod, false)); + getChild("lod_triangle_limit_" + lod_name[lod])->setCommitCallback(boost::bind(&LLFloaterModelPreview::onLODParamCommit, this, lod, true)); + } childSetCommitCallback("upload_skin", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL); childSetCommitCallback("upload_joints", boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this), NULL); @@ -424,26 +447,14 @@ BOOL LLFloaterModelPreview::postBuild() childSetCommitCallback("import_scale", onImportScaleCommit, this); childSetCommitCallback("pelvis_offset", onPelvisOffsetCommit, this); - childSetCommitCallback("lod_file_or_limit", refresh, this); - childSetCommitCallback("physics_load_radio", onPhysicsLoadRadioCommit, this); - //childSetCommitCallback("physics_optimize", refresh, this); - //childSetCommitCallback("physics_use_hull", refresh, this); + getChild("show_edges")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1)); + getChild("show_physics")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1)); + getChild("show_textures")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1)); + getChild("show_skin_weight")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1)); + getChild("show_joint_positions")->setCommitCallback(boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _1)); childDisable("upload_skin"); childDisable("upload_joints"); - - childDisable("ok_btn"); - - mViewOptionMenuButton = getChild("options_gear_btn"); - - mCommitCallbackRegistrar.add("ModelImport.ViewOption.Action", boost::bind(&LLFloaterModelPreview::onViewOptionChecked, this, _2)); - mEnableCallbackRegistrar.add("ModelImport.ViewOption.Check", boost::bind(&LLFloaterModelPreview::isViewOptionChecked, this, _2)); - mEnableCallbackRegistrar.add("ModelImport.ViewOption.Enabled", boost::bind(&LLFloaterModelPreview::isViewOptionEnabled, this, _2)); - - - - mViewOptionMenu = LLUICtrlFactory::getInstance()->createFromFile("menu_model_import_gear_default.xml", gMenuHolder, LLViewerMenuHolderGL::child_registry_t::instance()); - mViewOptionMenuButton->setMenu(mViewOptionMenu, LLMenuButton::MP_BOTTOM_LEFT); initDecompControls(); @@ -537,11 +548,11 @@ void LLFloaterModelPreview::initModelPreview() mModelPreview->setModelUpdatedCallback(boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this, _1)); } -void LLFloaterModelPreview::onViewOptionChecked(const LLSD& userdata) +void LLFloaterModelPreview::onViewOptionChecked(LLUICtrl* ctrl) { if (mModelPreview) { - mModelPreview->mViewOption[userdata.asString()] = !mModelPreview->mViewOption[userdata.asString()]; + mModelPreview->mViewOption[ctrl->getName()] = !mModelPreview->mViewOption[ctrl->getName()]; mModelPreview->refresh(); } @@ -559,12 +570,12 @@ bool LLFloaterModelPreview::isViewOptionChecked(const LLSD& userdata) bool LLFloaterModelPreview::isViewOptionEnabled(const LLSD& userdata) { - return !mViewOptionDisabled[userdata.asString()]; + return childIsEnabled(userdata.asString()); } void LLFloaterModelPreview::setViewOptionEnabled(const std::string& option, bool enabled) { - mViewOptionDisabled[option] = !enabled; + childSetEnabled(option, enabled); } void LLFloaterModelPreview::enableViewOption(const std::string& option) @@ -649,29 +660,6 @@ void LLFloaterModelPreview::onPelvisOffsetCommit( LLUICtrl*, void* userdata ) fp->mModelPreview->refresh(); } -//static -void LLFloaterModelPreview::onPhysicsLoadRadioCommit( LLUICtrl*, void *userdata) -{ - LLFloaterModelPreview* fmp = LLFloaterModelPreview::sInstance; - if (fmp) - { - if (fmp->childGetValue("physics_use_lod").asBoolean()) - { - onPhysicsUseLOD(NULL,NULL); - } - if (fmp->childGetValue("physics_load_from_file").asBoolean()) - { - - } - LLModelPreview *model_preview = fmp->mModelPreview; - if (model_preview) - { - model_preview->refresh(); - model_preview->updateStatusMessages(); - } - } -} - //static void LLFloaterModelPreview::onUploadJointsCommit(LLUICtrl*,void* userdata) { @@ -726,6 +714,12 @@ void LLFloaterModelPreview::onGenerateNormalsCommit(LLUICtrl* ctrl, void* userda fp->mModelPreview->generateNormals(); } +void LLFloaterModelPreview::toggleGenarateNormals() +{ + bool enabled = childGetValue("gen_normals").asBoolean(); + childSetEnabled("crease_angle", enabled); +} + //static void LLFloaterModelPreview::onExplodeCommit(LLUICtrl* ctrl, void* userdata) { @@ -742,19 +736,9 @@ void LLFloaterModelPreview::onAutoFillCommit(LLUICtrl* ctrl, void* userdata) fp->mModelPreview->genLODs(); } -//static -void LLFloaterModelPreview::onLODParamCommit(LLUICtrl* ctrl, void* userdata) +void LLFloaterModelPreview::onLODParamCommit(S32 lod, bool enforce_tri_limit) { - LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata; - - fp->mModelPreview->onLODParamCommit(false); -} - -//static -void LLFloaterModelPreview::onLODParamCommitTriangleLimit(LLUICtrl* ctrl, void* userdata) -{ - LLFloaterModelPreview* fp = (LLFloaterModelPreview*) userdata; - fp->mModelPreview->onLODParamCommit(true); + mModelPreview->onLODParamCommit(lod, enforce_tri_limit); } @@ -778,6 +762,7 @@ void LLFloaterModelPreview::draw() if ( mModelPreview->getLoadState() == LLModelLoader::ERROR_PARSING ) { childSetTextArg("status", "[STATUS]", getString("status_parse_error")); + toggleCalculateButton(false); } else { @@ -785,8 +770,6 @@ void LLFloaterModelPreview::draw() } } - childSetEnabled("ok_btn", mHasUploadPerm && !mUploadModelUrl.empty()); - childSetTextArg("prim_cost", "[PRIM_COST]", llformat("%d", mModelPreview->mResourceCost)); childSetTextArg("description_label", "[TEXTURES]", llformat("%d", mModelPreview->mTextureSet.size())); @@ -941,20 +924,32 @@ void LLFloaterModelPreview::onPhysicsParamCommit(LLUICtrl* ctrl, void* data) { LLCDParam* param = (LLCDParam*) data; std::string name(param->mName); - sInstance->mDecompParams[name] = ctrl->getValue(); + + LLSD value = ctrl->getValue(); + + if("Retain%" == name) + { + value = ctrl->getValue().asReal() / RETAIN_COEFFICIENT; + } + + sInstance->mDecompParams[name] = value; if (name == "Simplify Method") { - if (ctrl->getValue().asInteger() == 0) - { - sInstance->childSetVisible("Retain%", true); - sInstance->childSetVisible("Detail Scale", false); - } - else + bool show_retain = false; + bool show_detail = true; + + if (ctrl->getValue().asInteger() == 0) { - sInstance->childSetVisible("Retain%", false); - sInstance->childSetVisible("Detail Scale", true); + show_retain = true; + show_detail = false; } + + sInstance->childSetVisible("Retain%", show_retain); + sInstance->childSetVisible("Retain%_label", show_retain); + + sInstance->childSetVisible("Detail Scale", show_detail); + sInstance->childSetVisible("Detail Scale label", show_detail); } } } @@ -1010,14 +1005,38 @@ void LLFloaterModelPreview::onPhysicsBrowse(LLUICtrl* ctrl, void* userdata) //static void LLFloaterModelPreview::onPhysicsUseLOD(LLUICtrl* ctrl, void* userdata) { + S32 num_modes = 4; S32 which_mode = 3; + static S32 previous_mode = which_mode; + LLCtrlSelectionInterface* iface = sInstance->childGetSelectionInterface("physics_lod_combo"); if (iface) { which_mode = iface->getFirstSelectedIndex(); } - sInstance->mModelPreview->setPhysicsFromLOD(which_mode); + S32 file_mode = iface->getItemCount() - 1; + bool file_browse = which_mode == file_mode; + bool lod_to_file = file_browse && (previous_mode != file_mode); + bool file_to_lod = !file_browse && (previous_mode == file_mode); + + if (!lod_to_file) + { + which_mode = num_modes - which_mode; + sInstance->mModelPreview->setPhysicsFromLOD(which_mode); + } + + if (lod_to_file || file_to_lod) + { + LLModelPreview *model_preview = sInstance->mModelPreview; + if (model_preview) + { + model_preview->refresh(); + model_preview->updateStatusMessages(); + } + } + + previous_mode = which_mode; } //static @@ -1042,6 +1061,11 @@ void LLFloaterModelPreview::onPhysicsStageCancel(LLUICtrl* ctrl, void*data) } sInstance->mCurRequest.clear(); + + if (sInstance->mModelPreview) + { + sInstance->mModelPreview->updateStatusMessages(); + } } } @@ -1104,8 +1128,9 @@ void LLFloaterModelPreview::initDecompControls() mDecompParams[param[i].mName] = LLSD(param[i].mDefault.mFloat); //llinfos << "Type: float, Default: " << param[i].mDefault.mFloat << llendl; - LLSliderCtrl* slider = getChild(name); - if (slider) + + LLUICtrl* ctrl = getChild(name); + if (LLSliderCtrl* slider = dynamic_cast(ctrl)) { slider->setMinValue(param[i].mDetails.mRange.mLow.mFloat); slider->setMaxValue(param[i].mDetails.mRange.mHigh.mFloat); @@ -1113,14 +1138,49 @@ void LLFloaterModelPreview::initDecompControls() slider->setValue(param[i].mDefault.mFloat); slider->setCommitCallback(onPhysicsParamCommit, (void*) ¶m[i]); } + else if (LLSpinCtrl* spinner = dynamic_cast(ctrl)) + { + bool is_retain_ctrl = "Retain%" == name; + double coefficient = is_retain_ctrl ? RETAIN_COEFFICIENT : 1.f; + + spinner->setMinValue(param[i].mDetails.mRange.mLow.mFloat * coefficient); + spinner->setMaxValue(param[i].mDetails.mRange.mHigh.mFloat * coefficient); + spinner->setIncrement(param[i].mDetails.mRange.mDelta.mFloat * coefficient); + spinner->setValue(param[i].mDefault.mFloat * coefficient); + spinner->setCommitCallback(onPhysicsParamCommit, (void*) ¶m[i]); + } + else if (LLComboBox* combo_box = dynamic_cast(ctrl)) + { + float min = param[i].mDetails.mRange.mLow.mFloat; + float max = param[i].mDetails.mRange.mHigh.mFloat; + float delta = param[i].mDetails.mRange.mDelta.mFloat; + + if ("Cosine%" == name) + { + createSmoothComboBox(combo_box, min, max); + } + else + { + for(float value = min; value <= max; value += delta) + { + std::string label = llformat("%.1f", value); + combo_box->add(label, value, ADD_BOTTOM, true); + } + combo_box->setValue(param[i].mDefault.mFloat); + + } + + combo_box->setCommitCallback(onPhysicsParamCommit, (void*) ¶m[i]); + } } else if (param[i].mType == LLCDParam::LLCD_INTEGER) { mDecompParams[param[i].mName] = LLSD(param[i].mDefault.mIntOrEnumValue); //llinfos << "Type: integer, Default: " << param[i].mDefault.mIntOrEnumValue << llendl; - LLSliderCtrl* slider = getChild(name); - if (slider) + + LLUICtrl* ctrl = getChild(name); + if (LLSliderCtrl* slider = dynamic_cast(ctrl)) { slider->setMinValue(param[i].mDetails.mRange.mLow.mIntOrEnumValue); slider->setMaxValue(param[i].mDetails.mRange.mHigh.mIntOrEnumValue); @@ -1128,6 +1188,16 @@ void LLFloaterModelPreview::initDecompControls() slider->setValue(param[i].mDefault.mIntOrEnumValue); slider->setCommitCallback(onPhysicsParamCommit, (void*) ¶m[i]); } + else if (LLComboBox* combo_box = dynamic_cast(ctrl)) + { + for(int k = param[i].mDetails.mRange.mLow.mIntOrEnumValue; k<=param[i].mDetails.mRange.mHigh.mIntOrEnumValue; k+=param[i].mDetails.mRange.mDelta.mIntOrEnumValue) + { + std::string name = llformat("%.1d", k); + combo_box->add(name, k, ADD_BOTTOM, true); + } + combo_box->setValue(param[i].mDefault.mIntOrEnumValue); + combo_box->setCommitCallback(onPhysicsParamCommit, (void*) ¶m[i]); + } } else if (param[i].mType == LLCDParam::LLCD_BOOLEAN) { @@ -1155,7 +1225,11 @@ void LLFloaterModelPreview::initDecompControls() //llinfos << param[i].mDetails.mEnumValues.mEnumsArray[k].mValue // << " - " << param[i].mDetails.mEnumValues.mEnumsArray[k].mName << llendl; - combo_box->add(param[i].mDetails.mEnumValues.mEnumsArray[k].mName, + std::string name(param[i].mDetails.mEnumValues.mEnumsArray[k].mName); + std::string localized_name; + bool is_localized = LLTrans::findString(localized_name, name); + + combo_box->add(is_localized ? localized_name : name, LLSD::Integer(param[i].mDetails.mEnumValues.mEnumsArray[k].mValue)); } combo_box->setValue(param[i].mDefault.mIntOrEnumValue); @@ -1171,6 +1245,22 @@ void LLFloaterModelPreview::initDecompControls() childSetCommitCallback("physics_explode", LLFloaterModelPreview::onExplodeCommit, this); } +void LLFloaterModelPreview::createSmoothComboBox(LLComboBox* combo_box, float min, float max) +{ + float delta = (max - min) / SMOOTH_VALUES_NUMBER; + int ilabel = 0; + + combo_box->add("0 (none)", ADD_BOTTOM, true); + + for(float value = min + delta; value < max; value += delta) + { + std::string label = (++ilabel == SMOOTH_VALUES_NUMBER) ? "10 (max)" : llformat("%.1d", ilabel); + combo_box->add(label, value, ADD_BOTTOM, true); + } + + +} + //----------------------------------------------------------------------------- // onMouseCaptureLost() //----------------------------------------------------------------------------- @@ -1395,9 +1485,26 @@ bool LLModelLoader::doLoadModel() if (!dom) { + llinfos<<" Error with dae - traditionally indicates a corrupt file."<getVersion(); + //0=1.4 + //1=1.4.1 + //2=Currently unsupported, however may work + if (docVersion > 1 ) + { + docVersion = VERSIONTYPE_COUNT; + } + llinfos<<"Dae version "<getElementCount(NULL, COLLADA_TYPE_MESH); @@ -1546,8 +1653,7 @@ bool LLModelLoader::doLoadModel() LLMatrix4 trans = normalized_transformation; trans *= skin_info.mBindShapeMatrix; - skin_info.mBindShapeMatrix = trans; - + skin_info.mBindShapeMatrix = trans; } @@ -1620,7 +1726,7 @@ bool LLModelLoader::doLoadModel() { //Build a joint for the resolver to work with char str[64]={0}; - sprintf(str,"./%s",(*jointIt).second.c_str() ); + sprintf(str,"./%s",(*jointIt).first.c_str() ); //llwarns<<"Joint "<< str <( jointResolver.getElement() ); + daeSIDResolver jointResolverA( pJoint, "./translate" ); + domTranslate* pTranslateA = daeSafeCast( jointResolverA.getElement() ); + daeSIDResolver jointResolverB( pJoint, "./location" ); + domTranslate* pTranslateB = daeSafeCast( jointResolverB.getElement() ); LLMatrix4 workingTransform; //Translation via SID - if ( pTranslate ) + if ( pTranslateA ) { - extractTranslation( pTranslate, workingTransform ); + extractTranslation( pTranslateA, workingTransform ); + } + else + if ( pTranslateB ) + { + extractTranslation( pTranslateB, workingTransform ); } else { @@ -1651,9 +1764,15 @@ bool LLModelLoader::doLoadModel() missingSkeletonOrScene = true; } else + if ( pTranslateElement ) { extractTranslationViaElement( pTranslateElement, workingTransform ); } + else + { + extractTranslationViaSID( pJoint, workingTransform ); + } + } //Store the joint transform w/respect to it's name. @@ -1750,7 +1869,7 @@ bool LLModelLoader::doLoadModel() } } - model->mSkinInfo.mInvBindMatrix.push_back(mat); + model->mSkinInfo.mInvBindMatrix.push_back(mat); } } } @@ -1758,7 +1877,7 @@ bool LLModelLoader::doLoadModel() } //Now that we've parsed the joint array, let's determine if we have a full rig - //(which means we have all the joints that are required for an avatar versus + //(which means we have all the joint sthat are required for an avatar versus //a skinned asset attached to a node in a file that contains an entire skeleton, //but does not use the skeleton). buildJointToNodeMappingFromScene( root ); @@ -2050,6 +2169,14 @@ bool LLModelLoader::loadFromSLM(const std::string& filename) return false; } + // Set name. + std::string name = data["name"]; + if (!name.empty()) + { + model[LLModel::LOD_HIGH][0]->mLabel = name; + } + + //load instance list model_instance_list instance_list; @@ -2162,15 +2289,37 @@ void LLModelLoader::processJointToNodeMapping( domNode* pNode ) mJointsFromNode.push_front( pNode->getName() ); } //2. Handle the kiddo's - daeTArray< daeSmartRef > childOfChild = pNode->getChildren(); - S32 childOfChildCount = childOfChild.getCount(); - for (S32 i = 0; i < childOfChildCount; ++i) + processChildJoints( pNode ); + } + else + { + //Determine if the're any children wrt to this failed node. + //This occurs when an armature is exported and ends up being what essentially amounts to + //as the root for the visual_scene + if ( pNode ) { - domNode* pChildNode = daeSafeCast( childOfChild[i] ); - if ( pChildNode ) - { - processJointToNodeMapping( pChildNode ); - } + processChildJoints( pNode ); + } + else + { + llinfos<<"Node is NULL"< > childOfChild = pParentNode->getChildren(); + S32 childOfChildCount = childOfChild.getCount(); + for (S32 i = 0; i < childOfChildCount; ++i) + { + domNode* pChildNode = daeSafeCast( childOfChild[i] ); + if ( pChildNode ) + { + processJointToNodeMapping( pChildNode ); } } } @@ -2195,15 +2344,11 @@ void LLModelPreview::critiqueRigForUploadApplicability( const std::vectorgetName() == NULL) + if ( !pNode ) { + llinfos<<"Created node is NULL"<getName() == NULL ) + { + llinfos<<"Parsed node has no name "<getId() ) + { + llinfos<<"Parsed node ID: "<getId()<( pTranslateElement ); - domFloat3 translateChild = pTranslateChild->getValue(); - LLVector3 singleJointTranslation( translateChild[0], translateChild[1], translateChild[2] ); - transform.setTranslation( singleJointTranslation ); + if ( pTranslateElement ) + { + domTranslate* pTranslateChild = dynamic_cast( pTranslateElement ); + domFloat3 translateChild = pTranslateChild->getValue(); + LLVector3 singleJointTranslation( translateChild[0], translateChild[1], translateChild[2] ); + transform.setTranslation( singleJointTranslation ); + } +} +//----------------------------------------------------------------------------- +// extractTranslationViaSID() +//----------------------------------------------------------------------------- +void LLModelLoader::extractTranslationViaSID( daeElement* pElement, LLMatrix4& transform ) +{ + if ( pElement ) + { + daeSIDResolver resolver( pElement, "./transform" ); + domMatrix* pMatrix = daeSafeCast( resolver.getElement() ); + //We are only extracting out the translational component atm + LLMatrix4 workingTransform; + if ( pMatrix ) + { + domFloat4x4 domArray = pMatrix->getValue(); + for ( int i = 0; i < 4; i++ ) + { + for( int j = 0; j < 4; j++ ) + { + workingTransform.mMatrix[i][j] = domArray[i + j*4]; + } + } + LLVector3 trans = workingTransform.getTranslation(); + transform.setTranslation( trans ); + } + } + else + { + llwarns<<"Element is nonexistent - empty/unsupported node."<( jointResolver.getElement() ); + daeSIDResolver jointResolverA( pNode, "./translate" ); + domTranslate* pTranslateA = daeSafeCast( jointResolverA.getElement() ); + daeSIDResolver jointResolverB( pNode, "./location" ); + domTranslate* pTranslateB = daeSafeCast( jointResolverB.getElement() ); //Translation via SID was successful - if ( pTranslate ) + if ( pTranslateA ) { - extractTranslation( pTranslate, workingTransform ); + extractTranslation( pTranslateA, workingTransform ); + } + else + if ( pTranslateB ) + { + extractTranslation( pTranslateB, workingTransform ); } else { @@ -2647,6 +2839,12 @@ void LLModelLoader::processElement( daeElement* element, bool& badElement ) { LLMatrix4 transformation = mTransform; + if (mTransform.determinant() < 0) + { //negative scales are not supported + llinfos << "Negative scale detected, unsupported transform. domInstance_geometry: " << LLModel::getElementLabel(instance_geo) << llendl; + badElement = true; + } + std::map materials = getMaterials(model, instance_geo); // adjust the transformation to compensate for mesh normalization @@ -2691,7 +2889,8 @@ void LLModelLoader::processElement( daeElement* element, bool& badElement ) //process children daeTArray< daeSmartRef > children = element->getChildren(); - for (S32 i = 0; i < children.getCount(); i++) + int childCount = children.getCount(); + for (S32 i = 0; i < childCount; i++) { processElement(children[i],badElement); } @@ -2996,14 +3195,6 @@ U32 LLModelPreview::calcResourceCost() rebuildUploadData(); - if (mFMP && mModelLoader) - { - if ( getLoadState() < LLModelLoader::ERROR_PARSING) - { - mFMP->childEnable("ok_btn"); - } - } - //Upload skin is selected BUT check to see if the joints coming in from the asset were malformed. if ( mFMP && mFMP->childGetValue("upload_skin").asBoolean() ) { @@ -3011,13 +3202,7 @@ U32 LLModelPreview::calcResourceCost() if ( uploadingJointPositions && !isRigValidForJointPositionUpload() ) { mFMP->childDisable("ok_btn"); - } - else - if ( !isLegacyRigValid() ) - { - mFMP->childDisable("ok_btn"); - } - //ok_btn should not have been changed unless something was wrong with joint list + } } std::set accounted; @@ -3104,6 +3289,7 @@ U32 LLModelPreview::calcResourceCost() void LLFloaterModelPreview::setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost) { + assert_main_thread(); childSetTextArg("import_dimensions", "[X]", llformat("%.3f", x)); childSetTextArg("import_dimensions", "[Y]", llformat("%.3f", y)); childSetTextArg("import_dimensions", "[Z]", llformat("%.3f", z)); @@ -3121,14 +3307,10 @@ void LLModelPreview::rebuildUploadData() std::string requested_name = mFMP->getChild("description_form")->getValue().asString(); + std::string metric = mFMP->getChild("model_category_combo")->getValue().asString(); LLSpinCtrl* scale_spinner = mFMP->getChild("import_scale"); - if (!scale_spinner) - { - llerrs << "floater_model_preview.xml MUST contain import_scale spinner." << llendl; - } - F32 scale = scale_spinner->getValue().asReal(); LLMatrix4 scale_mat; @@ -3136,11 +3318,6 @@ void LLModelPreview::rebuildUploadData() F32 max_scale = 0.f; - if ( mBaseScene.size() > 0) - { - mFMP->childEnable("ok_btn"); - } - //reorder materials to match mBaseModel for (U32 i = 0; i < LLModel::NUM_LODS; i++) { @@ -3148,8 +3325,14 @@ void LLModelPreview::rebuildUploadData() { for (U32 j = 0; j < mBaseModel.size(); ++j) { - mModel[i][j]->matchMaterialOrder(mBaseModel[j]); - llassert(mModel[i][j]->mMaterialList == mBaseModel[j]->mMaterialList); + + int refFaceCnt = 0; + int modelFaceCnt = 0; + + if ( !mModel[i][j]->matchMaterialOrder(mBaseModel[j], refFaceCnt, modelFaceCnt ) ) + { + mFMP->childDisable( "calculate_btn" ); + } } } } @@ -3182,6 +3365,7 @@ void LLModelPreview::rebuildUploadData() if (base_model) { base_model->mRequestedLabel = requested_name; + base_model->mMetric = metric; } S32 idx = 0; @@ -3212,13 +3396,19 @@ void LLModelPreview::rebuildUploadData() } } - // - //F32 max_import_scale = DEFAULT_MAX_PRIM_SCALE/max_scale; + //F32 max_import_scale = (DEFAULT_MAX_PRIM_SCALE-0.1f)/max_scale; F32 region_max_prim_scale = LLWorld::getInstance()->getRegionMaxPrimScale(); F32 max_import_scale = region_max_prim_scale/max_scale; // + F32 max_axis = llmax(mPreviewScale.mV[0], mPreviewScale.mV[1]); + max_axis = llmax(max_axis, mPreviewScale.mV[2]); + max_axis *= 2.f; + + //clamp scale so that total imported model bounding box is smaller than 240m on a side + max_import_scale = llmin(max_import_scale, 240.f/max_axis); + scale_spinner->setMaxValue(max_import_scale); if (max_import_scale < scale) @@ -3258,6 +3448,10 @@ void LLModelPreview::saveUploadData(const std::string& filename, bool save_skinw LLSD data; data["version"] = SLM_SUPPORTED_VERSION; + if (!mBaseModel.empty()) + { + data["name"] = mBaseModel[0]->getName(); + } S32 mesh_id = 0; @@ -3318,6 +3512,13 @@ void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable LLMutexLock lock(this); + if (lod < LLModel::LOD_IMPOSTOR || lod > LLModel::NUM_LODS - 1) + { + llwarns << "Invalid level of detail: " << lod << llendl; + assert(lod >= LLModel::LOD_IMPOSTOR && lod < LLModel::NUM_LODS); + return; + } + // This triggers if you bring up the file picker and then hit CANCEL. // Just use the previous model (if any) and ignore that you brought up // the file picker. @@ -3363,11 +3564,12 @@ void LLModelPreview::loadModel(std::string filename, S32 lod, bool force_disable if ( getLoadState() >= LLModelLoader::ERROR_PARSING ) { mFMP->childDisable("ok_btn"); + mFMP->childDisable( "calculate_btn" ); } if (lod == mPreviewLOD) { - mFMP->childSetText("lod_file", mLODFile[mPreviewLOD]); + mFMP->childSetText("lod_file_" + lod_name[lod], mLODFile[lod]); } else if (lod == LLModel::LOD_PHYSICS) { @@ -3396,6 +3598,12 @@ void LLModelPreview::setPhysicsFromLOD(S32 lod) void LLModelPreview::clearIncompatible(S32 lod) { + //Don't discard models if specified model is the physic rep + if ( lod == LLModel::LOD_PHYSICS ) + { + return; + } + for (U32 i = 0; i <= LLModel::LOD_HIGH; i++) { //clear out any entries that aren't compatible with this model if (i != lod) @@ -3636,6 +3844,14 @@ void LLModelPreview::generateNormals() void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_limit) { + // Allow LoD from -1 to LLModel::LOD_PHYSICS + if (which_lod < -1 || which_lod > LLModel::NUM_LODS - 1) + { + llwarns << "Invalid level of detail: " << which_lod << llendl; + assert(which_lod >= -1 && which_lod < LLModel::NUM_LODS); + return; + } + if (mBaseModel.empty()) { return; @@ -3665,21 +3881,33 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim U32 lod_mode = 0; - LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode"); - if (iface) - { - lod_mode = iface->getFirstSelectedIndex(); - } - mRequestedLoDMode[mPreviewLOD] = lod_mode; + F32 lod_error_threshold = 0; - F32 lod_error_threshold = mFMP->childGetValue("lod_error_threshold").asReal(); + // The LoD should be in range from Lowest to High + if (which_lod > -1 && which_lod < NUM_LOD) + { + LLCtrlSelectionInterface* iface = mFMP->childGetSelectionInterface("lod_mode_" + lod_name[which_lod]); + if (iface) + { + lod_mode = iface->getFirstSelectedIndex(); + } + + lod_error_threshold = mFMP->childGetValue("lod_error_threshold_" + lod_name[which_lod]).asReal(); + } + + if (which_lod != -1) + { + mRequestedLoDMode[which_lod] = lod_mode; + } if (lod_mode == 0) { lod_mode = GLOD_TRIANGLE_BUDGET; - if (which_lod != -1) + + // The LoD should be in range from Lowest to High + if (which_lod > -1 && which_lod < NUM_LOD) { - limit = mFMP->childGetValue("lod_triangle_limit").asInteger(); + limit = mFMP->childGetValue("lod_triangle_limit_" + lod_name[which_lod]).asInteger(); } } else @@ -3687,89 +3915,7 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim lod_mode = GLOD_ERROR_THRESHOLD; } - U32 build_operator = 0; - - iface = mFMP->childGetSelectionInterface("build_operator"); - if (iface) - { - build_operator = iface->getFirstSelectedIndex(); - } - mRequestedBuildOperator[mPreviewLOD] = build_operator; - - if (build_operator == 0) - { - build_operator = GLOD_OPERATOR_EDGE_COLLAPSE; - } - else - { - build_operator = GLOD_OPERATOR_HALF_EDGE_COLLAPSE; - } - - U32 queue_mode=0; - iface = mFMP->childGetSelectionInterface("queue_mode"); - if (iface) - { - queue_mode = iface->getFirstSelectedIndex(); - } - mRequestedQueueMode[mPreviewLOD] = queue_mode; - - if (queue_mode == 0) - { - queue_mode = GLOD_QUEUE_GREEDY; - } - else if (queue_mode == 1) - { - queue_mode = GLOD_QUEUE_LAZY; - } - else - { - queue_mode = GLOD_QUEUE_INDEPENDENT; - } - - U32 border_mode = 0; - - iface = mFMP->childGetSelectionInterface("border_mode"); - if (iface) - { - border_mode = iface->getFirstSelectedIndex(); - } - mRequestedBorderMode[mPreviewLOD] = border_mode; - - if (border_mode == 0) - { - border_mode = GLOD_BORDER_UNLOCK; - } - else - { - border_mode = GLOD_BORDER_LOCK; - } - bool object_dirty = false; - if (border_mode != mBuildBorderMode) - { - mBuildBorderMode = border_mode; - object_dirty = true; - } - - if (queue_mode != mBuildQueueMode) - { - mBuildQueueMode = queue_mode; - object_dirty = true; - } - - if (build_operator != mBuildOperator) - { - mBuildOperator = build_operator; - object_dirty = true; - } - - F32 share_tolerance = mFMP->childGetValue("share_tolerance").asReal(); - if (share_tolerance != mBuildShareTolerance) - { - mBuildShareTolerance = share_tolerance; - object_dirty = true; - } - mRequestedShareTolerance[mPreviewLOD] = share_tolerance; if (mGroup == 0) { @@ -3819,18 +3965,6 @@ void LLModelPreview::genLODs(S32 which_lod, U32 decimation, bool enforce_tri_lim stop_gloderror(); } - glodObjectParameteri(mObject[mdl], GLOD_BUILD_OPERATOR, build_operator); - stop_gloderror(); - - glodObjectParameteri(mObject[mdl], GLOD_BUILD_QUEUE_MODE, queue_mode); - stop_gloderror(); - - glodObjectParameteri(mObject[mdl], GLOD_BUILD_BORDER_MODE, border_mode); - stop_gloderror(); - - glodObjectParameterf(mObject[mdl], GLOD_BUILD_SHARE_TOLERANCE, share_tolerance); - stop_gloderror(); - glodBuildObject(mObject[mdl]); stop_gloderror(); } @@ -4205,6 +4339,8 @@ void LLModelPreview::updateStatusMessages() icon = mFMP->getChild("lod_status_message_icon"); icon->setImage(img); } + + updateLodControls(lod); } @@ -4233,11 +4369,11 @@ void LLModelPreview::updateStatusMessages() if ( uploadingJointPositions && !isRigValidForJointPositionUpload() ) { skinAndRigOk = false; - } + } else if ( !isLegacyRigValid() ) { - skinAndRigOk = false; + mFMP->childDisable("calculate_btn"); } } @@ -4249,11 +4385,7 @@ void LLModelPreview::updateStatusMessages() } } - if ( upload_ok && !errorStateFromLoader && skinAndRigOk && !has_degenerate) - { - mFMP->childEnable("ok_btn"); - } - else + if (!upload_ok || errorStateFromLoader || !skinAndRigOk || has_degenerate) { mFMP->childDisable("ok_btn"); } @@ -4320,12 +4452,14 @@ void LLModelPreview::updateStatusMessages() { fmp->enableViewOption("show_physics"); mViewOption["show_physics"] = true; + fmp->childSetValue("show_physics", true); } } else { fmp->disableViewOption("show_physics"); mViewOption["show_physics"] = false; + fmp->childSetValue("show_physics", false); } @@ -4333,7 +4467,7 @@ void LLModelPreview::updateStatusMessages() //fmp->childSetEnabled("physics_optimize", !use_hull); - bool enable = phys_tris > 0 || phys_hulls > 0; + bool enable = (phys_tris > 0 || phys_hulls > 0) && fmp->mCurRequest.empty(); //enable = enable && !use_hull && fmp->childGetValue("physics_optimize").asBoolean(); //enable/disable "analysis" UI @@ -4345,7 +4479,7 @@ void LLModelPreview::updateStatusMessages() child = panel->findNextSibling(child); } - enable = phys_hulls > 0; + enable = phys_hulls > 0 && fmp->mCurRequest.empty(); //enable/disable "simplification" UI panel = fmp->getChild("physics simplification"); child = panel->getFirstChild(); @@ -4372,132 +4506,20 @@ void LLModelPreview::updateStatusMessages() fmp->childEnable("Decompose"); } } - } - - const char* lod_controls[] = - { - "lod_mode", - "lod_triangle_limit", - "lod_error_tolerance", - "build_operator_text", - "queue_mode_text", - "border_mode_text", - "share_tolerance_text", - "build_operator", - "queue_mode", - "border_mode", - "share_tolerance" - }; - const U32 num_lod_controls = sizeof(lod_controls)/sizeof(char*); - - const char* file_controls[] = - { - "lod_browse", - "lod_file" - }; - const U32 num_file_controls = sizeof(file_controls)/sizeof(char*); - - if (fmp) - { - //enable/disable controls based on radio groups - if (mFMP->childGetValue("lod_from_file").asBoolean()) - { - fmp->mLODMode[mPreviewLOD] = 0; - for (U32 i = 0; i < num_file_controls; ++i) - { - mFMP->childEnable(file_controls[i]); - } - - for (U32 i = 0; i < num_lod_controls; ++i) - { - mFMP->childDisable(lod_controls[i]); - } - } - else if (mFMP->childGetValue("lod_none").asBoolean()) - { - fmp->mLODMode[mPreviewLOD] = 2; - for (U32 i = 0; i < num_file_controls; ++i) - { - mFMP->childDisable(file_controls[i]); - } - - for (U32 i = 0; i < num_lod_controls; ++i) - { - mFMP->childDisable(lod_controls[i]); - } - - if (!mModel[mPreviewLOD].empty()) - { - mModel[mPreviewLOD].clear(); - mScene[mPreviewLOD].clear(); - mVertexBuffer[mPreviewLOD].clear(); - - //this can cause phasing issues with the UI, so reenter this function and return - updateStatusMessages(); - return; - } - } else - { // auto generate, also the default case for wizard which has no radio selection - fmp->mLODMode[mPreviewLOD] = 1; - - //don't actually regenerate lod when refreshing UI - mLODFrozen = true; - - for (U32 i = 0; i < num_file_controls; ++i) - { - mFMP->childDisable(file_controls[i]); - } - - for (U32 i = 0; i < num_lod_controls; ++i) - { - mFMP->childEnable(lod_controls[i]); - } - - //if (threshold) - { - LLSpinCtrl* threshold = mFMP->getChild("lod_error_threshold"); - LLSpinCtrl* limit = mFMP->getChild("lod_triangle_limit"); - - limit->setMaxValue(mMaxTriangleLimit); - limit->forceSetValue(mRequestedTriangleCount[mPreviewLOD]); - - threshold->forceSetValue(mRequestedErrorThreshold[mPreviewLOD]); - - mFMP->getChild("lod_mode")->selectNthItem(mRequestedLoDMode[mPreviewLOD]); - mFMP->getChild("build_operator")->selectNthItem(mRequestedBuildOperator[mPreviewLOD]); - mFMP->getChild("queue_mode")->selectNthItem(mRequestedQueueMode[mPreviewLOD]); - mFMP->getChild("border_mode")->selectNthItem(mRequestedBorderMode[mPreviewLOD]); - mFMP->getChild("share_tolerance")->setValue(mRequestedShareTolerance[mPreviewLOD]); - - if (mRequestedLoDMode[mPreviewLOD] == 0) - { - limit->setVisible(true); - threshold->setVisible(false); - - limit->setMaxValue(mMaxTriangleLimit); - limit->setIncrement(mMaxTriangleLimit/32); - } - else - { - limit->setVisible(false); - threshold->setVisible(true); - } - } - - mLODFrozen = false; + { + fmp->childEnable("simplify_cancel"); + fmp->childEnable("decompose_cancel"); } } - if (mFMP->childGetValue("physics_load_from_file").asBoolean()) + if (mFMP->childGetValue("physics_lod_combo").asString() == "From file") { - mFMP->childDisable("physics_lod_combo"); mFMP->childEnable("physics_file"); mFMP->childEnable("physics_browse"); } else { - mFMP->childEnable("physics_lod_combo"); mFMP->childDisable("physics_file"); mFMP->childDisable("physics_browse"); } @@ -4519,6 +4541,122 @@ void LLModelPreview::updateStatusMessages() } +void LLModelPreview::updateLodControls(S32 lod) +{ + if (lod < LLModel::LOD_IMPOSTOR || lod > LLModel::LOD_HIGH) + { + llwarns << "Invalid level of detail: " << lod << llendl; + assert(lod >= LLModel::LOD_IMPOSTOR && lod <= LLModel::LOD_HIGH); + return; + } + + const char* lod_controls[] = + { + "lod_mode_", + "lod_triangle_limit_", + "lod_error_threshold_" + }; + const U32 num_lod_controls = sizeof(lod_controls)/sizeof(char*); + + const char* file_controls[] = + { + "lod_browse_", + "lod_file_", + }; + const U32 num_file_controls = sizeof(file_controls)/sizeof(char*); + + LLFloaterModelPreview* fmp = LLFloaterModelPreview::sInstance; + if (!fmp) return; + + LLComboBox* lod_combo = mFMP->findChild("lod_source_" + lod_name[lod]); + if (!lod_combo) return; + + S32 lod_mode = lod_combo->getCurrentIndex(); + if (lod_mode == 0) // LoD from file + { + fmp->mLODMode[lod] = 0; + for (U32 i = 0; i < num_file_controls; ++i) + { + mFMP->childShow(file_controls[i] + lod_name[lod]); + } + + for (U32 i = 0; i < num_lod_controls; ++i) + { + mFMP->childHide(lod_controls[i] + lod_name[lod]); + } + } + else if (lod_mode == 2) // use LoD above + { + fmp->mLODMode[lod] = 2; + for (U32 i = 0; i < num_file_controls; ++i) + { + mFMP->childHide(file_controls[i] + lod_name[lod]); + } + + for (U32 i = 0; i < num_lod_controls; ++i) + { + mFMP->childHide(lod_controls[i] + lod_name[lod]); + } + + if (lod < LLModel::LOD_HIGH) + { + mModel[lod] = mModel[lod + 1]; + mScene[lod] = mScene[lod + 1]; + mVertexBuffer[lod].clear(); + + // Also update lower LoD + if (lod > LLModel::LOD_IMPOSTOR) + { + updateLodControls(lod - 1); + } + } + } + else // auto generate, the default case for all LoDs except High + { + fmp->mLODMode[lod] = 1; + + //don't actually regenerate lod when refreshing UI + mLODFrozen = true; + + for (U32 i = 0; i < num_file_controls; ++i) + { + mFMP->childHide(file_controls[i] + lod_name[lod]); + } + + for (U32 i = 0; i < num_lod_controls; ++i) + { + mFMP->childShow(lod_controls[i] + lod_name[lod]); + } + + + LLSpinCtrl* threshold = mFMP->getChild("lod_error_threshold_" + lod_name[lod]); + LLSpinCtrl* limit = mFMP->getChild("lod_triangle_limit_" + lod_name[lod]); + + limit->setMaxValue(mMaxTriangleLimit); + limit->forceSetValue(mRequestedTriangleCount[lod]); + + threshold->forceSetValue(mRequestedErrorThreshold[lod]); + + mFMP->getChild("lod_mode_" + lod_name[lod])->selectNthItem(mRequestedLoDMode[lod]); + + if (mRequestedLoDMode[lod] == 0) + { + limit->setVisible(true); + threshold->setVisible(false); + + limit->setMaxValue(mMaxTriangleLimit); + limit->setIncrement(mMaxTriangleLimit/32); + } + else + { + limit->setVisible(false); + threshold->setVisible(true); + } + + mLODFrozen = false; + } +} + void LLModelPreview::setPreviewTarget(F32 distance) { mCameraDistance = distance; @@ -4723,6 +4861,42 @@ void LLModelPreview::createPreviewAvatar( void ) } } +void LLModelPreview::addEmptyFace( LLModel* pTarget ) +{ + U32 type_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_TEXCOORD0; + + LLPointer buff = new LLVertexBuffer(type_mask, 0); + + buff->allocateBuffer(1, 3, true); + memset( buff->getMappedData(), 0, buff->getSize() ); + memset( buff->getIndicesPointer(), 0, buff->getIndicesSize() ); + + buff->validateRange( 0, buff->getNumVerts()-1, buff->getNumIndices(), 0 ); + + LLStrider pos; + LLStrider norm; + LLStrider tc; + LLStrider index; + + buff->getVertexStrider(pos); + + if ( type_mask & LLVertexBuffer::MAP_NORMAL ) + { + buff->getNormalStrider(norm); + } + if ( type_mask & LLVertexBuffer::MAP_TEXCOORD0 ) + { + buff->getTexCoord0Strider(tc); + } + + buff->getIndexStrider(index); + + //resize face array + int faceCnt = pTarget->getNumVolumeFaces(); + pTarget->setNumVolumeFaces( faceCnt+1 ); + pTarget->setVolumeFaceData( faceCnt+1, pos, norm, tc, index, buff->getNumVerts(), buff->getNumIndices() ); + +} //----------------------------------------------------------------------------- // render() //----------------------------------------------------------------------------- @@ -4804,12 +4978,12 @@ BOOL LLModelPreview::render() if (has_skin_weights) { //model has skin weights, enable view options for skin weights and joint positions - if (fmp) + if (fmp && isLegacyRigValid() ) { fmp->enableViewOption("show_skin_weight"); fmp->setViewOptionEnabled("show_joint_positions", skin_weight); + mFMP->childEnable("upload_skin"); } - mFMP->childEnable("upload_skin"); } else { @@ -4834,8 +5008,12 @@ BOOL LLModelPreview::render() mFMP->childSetValue("upload_joints", false); upload_joints = false; } - - mFMP->childSetEnabled("upload_joints", upload_skin); + + //Only enable joint offsets if it passed the earlier critiquing + if ( isRigValidForJointPositionUpload() ) + { + mFMP->childSetEnabled("upload_joints", upload_skin); + } F32 explode = mFMP->childGetValue("physics_explode").asReal(); @@ -4889,6 +5067,8 @@ BOOL LLModelPreview::render() target_pos); // point of interest + z_near = llclamp(z_far * 0.001f, 0.001f, 0.1f); + LLViewerCamera::getInstance()->setPerspective(FALSE, mOrigin.mX, mOrigin.mY, width, height, FALSE, z_near, z_far); stop_glerror(); @@ -4928,8 +5108,13 @@ BOOL LLModelPreview::render() { for (U32 j = 0; j < mBaseModel.size(); ++j) { - mModel[i][j]->matchMaterialOrder(mBaseModel[j]); - llassert(mModel[i][j]->mMaterialList == mBaseModel[j]->mMaterialList); + int refFaceCnt = 0; + int modelFaceCnt = 0; + + if ( !mModel[i][j]->matchMaterialOrder(mBaseModel[j], refFaceCnt, modelFaceCnt ) ) + { + mFMP->childDisable( "calculate_btn" ); + } } } } @@ -4965,18 +5150,20 @@ BOOL LLModelPreview::render() if (textures) { - const std::string& binding = instance.mModel->mMaterialList[i]; - const LLImportMaterial& material = instance.mMaterial[binding]; - - llassert(binding == model->mMaterialList[i]); - - glColor4fv(material.mDiffuseColor.mV); - if (material.mDiffuseMap.notNull()) + int materialCnt = instance.mModel->mMaterialList.size(); + if ( i < materialCnt ) { - if (material.mDiffuseMap->getDiscardLevel() > -1) + const std::string& binding = instance.mModel->mMaterialList[i]; + const LLImportMaterial& material = instance.mMaterial[binding]; + + glColor4fv(material.mDiffuseColor.mV); + if (material.mDiffuseMap.notNull()) { - gGL.getTexUnit(0)->bind(material.mDiffuseMap, true); - mTextureSet.insert(material.mDiffuseMap.get()); + if (material.mDiffuseMap->getDiscardLevel() > -1) + { + gGL.getTexUnit(0)->bind(material.mDiffuseMap, true); + mTextureSet.insert(material.mDiffuseMap.get()); + } } } } @@ -5004,184 +5191,197 @@ BOOL LLModelPreview::render() if (physics) { glClear(GL_DEPTH_BUFFER_BIT); - LLGLEnable blend(GL_BLEND); - gGL.blendFunc(LLRender::BF_ONE, LLRender::BF_ZERO); - - for (LLMeshUploadThread::instance_list::iterator iter = mUploadData.begin(); iter != mUploadData.end(); ++iter) + + for (U32 i = 0; i < 2; i++) { - LLModelInstance& instance = *iter; - - LLModel* model = instance.mLOD[LLModel::LOD_PHYSICS]; - - if (!model) + if (i == 0) + { //depth only pass + gGL.setColorMask(false, false); + } + else { - continue; + gGL.setColorMask(true, true); } - gGL.pushMatrix(); - LLMatrix4 mat = instance.mTransform; + //enable alpha blending on second pass but not first pass + LLGLState blend(GL_BLEND, i); + + gGL.blendFunc(LLRender::BF_SOURCE_ALPHA, LLRender::BF_ONE_MINUS_SOURCE_ALPHA); - glMultMatrixf((GLfloat*) mat.mMatrix); - - - bool render_mesh = true; - - LLPhysicsDecomp* decomp = gMeshRepo.mDecompThread; - if (decomp) + for (LLMeshUploadThread::instance_list::iterator iter = mUploadData.begin(); iter != mUploadData.end(); ++iter) { - LLMutexLock(decomp->mMutex); + LLModelInstance& instance = *iter; - LLModel::Decomposition& physics = model->mPhysics; + LLModel* model = instance.mLOD[LLModel::LOD_PHYSICS]; - if (!physics.mHull.empty()) + if (!model) { - render_mesh = false; + continue; + } - if (physics.mMesh.empty()) - { //build vertex buffer for physics mesh - gMeshRepo.buildPhysicsMesh(physics); - } + gGL.pushMatrix(); + LLMatrix4 mat = instance.mTransform; + + glMultMatrixf((GLfloat*) mat.mMatrix); + + + bool render_mesh = true; + + LLPhysicsDecomp* decomp = gMeshRepo.mDecompThread; + if (decomp) + { + LLMutexLock(decomp->mMutex); + + LLModel::Decomposition& physics = model->mPhysics; + + if (!physics.mHull.empty()) + { + render_mesh = false; + + if (physics.mMesh.empty()) + { //build vertex buffer for physics mesh + gMeshRepo.buildPhysicsMesh(physics); + } - if (!physics.mMesh.empty()) - { //render hull instead of mesh - for (U32 i = 0; i < physics.mMesh.size(); ++i) - { - if (explode > 0.f) + if (!physics.mMesh.empty()) + { //render hull instead of mesh + for (U32 i = 0; i < physics.mMesh.size(); ++i) { - gGL.pushMatrix(); + if (explode > 0.f) + { + gGL.pushMatrix(); - LLVector3 offset = model->mHullCenter[i]-model->mCenterOfHullCenters; - offset *= explode; + LLVector3 offset = model->mHullCenter[i]-model->mCenterOfHullCenters; + offset *= explode; - gGL.translatef(offset.mV[0], offset.mV[1], offset.mV[2]); - } + gGL.translatef(offset.mV[0], offset.mV[1], offset.mV[2]); + } - static std::vector hull_colors; + static std::vector hull_colors; - if (i+1 >= hull_colors.size()) - { - hull_colors.push_back(LLColor4U(rand()%128+127, rand()%128+127, rand()%128+127, 255)); - } + if (i+1 >= hull_colors.size()) + { + hull_colors.push_back(LLColor4U(rand()%128+127, rand()%128+127, rand()%128+127, 128)); + } glColor4ubv(hull_colors[i].mV); - LLVertexBuffer::drawArrays(LLRender::TRIANGLES, physics.mMesh[i].mPositions, physics.mMesh[i].mNormals); + LLVertexBuffer::drawArrays(LLRender::TRIANGLES, physics.mMesh[i].mPositions, physics.mMesh[i].mNormals); - if (explode > 0.f) - { - gGL.popMatrix(); + if (explode > 0.f) + { + gGL.popMatrix(); + } } } } } - } - if (render_mesh) - { - if (mVertexBuffer[LLModel::LOD_PHYSICS].empty()) - { - genBuffers(LLModel::LOD_PHYSICS, false); - } - for (U32 i = 0; i < mVertexBuffer[LLModel::LOD_PHYSICS][model].size(); ++i) - { - LLVertexBuffer* buffer = mVertexBuffer[LLModel::LOD_PHYSICS][model][i]; - - buffer->setBuffer(type_mask & buffer->getTypeMask()); - - buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0); - gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); - glColor4f(0.4f, 0.4f, 0.0f, 0.4f); - - buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0); - - glColor3f(1.f, 1.f, 0.f); - - glLineWidth(2.f); - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0); - - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - glLineWidth(1.f); - } - } - - gGL.popMatrix(); - } - - glLineWidth(3.f); - glPointSize(8.f); - gPipeline.enableLightsFullbright(LLColor4::white); - //show degenerate triangles - LLGLDepthTest depth(GL_TRUE, GL_TRUE, GL_ALWAYS); - LLGLDisable cull(GL_CULL_FACE); - glColor4f(1.f,0.f,0.f,1.f); - const LLVector4a scale(0.5f); - - for (LLMeshUploadThread::instance_list::iterator iter = mUploadData.begin(); iter != mUploadData.end(); ++iter) - { - LLModelInstance& instance = *iter; - - LLModel* model = instance.mLOD[LLModel::LOD_PHYSICS]; - - if (!model) - { - continue; - } - - gGL.pushMatrix(); - LLMatrix4 mat = instance.mTransform; - - glMultMatrixf((GLfloat*) mat.mMatrix); - - - LLPhysicsDecomp* decomp = gMeshRepo.mDecompThread; - if (decomp) - { - LLMutexLock(decomp->mMutex); - - LLModel::Decomposition& physics = model->mPhysics; - - if (physics.mHull.empty()) + if (render_mesh) { if (mVertexBuffer[LLModel::LOD_PHYSICS].empty()) { genBuffers(LLModel::LOD_PHYSICS, false); } - for (U32 i = 0; i < mVertexBuffer[LLModel::LOD_PHYSICS][model].size(); ++i) { LLVertexBuffer* buffer = mVertexBuffer[LLModel::LOD_PHYSICS][model][i]; + gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + glColor4f(0.4f, 0.4f, 0.0f, 0.4f); + buffer->setBuffer(type_mask & buffer->getTypeMask()); + buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0); - LLStrider pos_strider; - buffer->getVertexStrider(pos_strider, 0); - LLVector4a* pos = (LLVector4a*) pos_strider.get(); - - LLStrider idx; - buffer->getIndexStrider(idx, 0); + glColor3f(1.f, 1.f, 0.f); - for (U32 i = 0; i < buffer->getNumIndices(); i += 3) + glLineWidth(2.f); + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + buffer->drawRange(LLRender::TRIANGLES, 0, buffer->getNumVerts()-1, buffer->getNumIndices(), 0); + + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glLineWidth(1.f); + } + } + + gGL.popMatrix(); + } + + glLineWidth(3.f); + glPointSize(8.f); + gPipeline.enableLightsFullbright(LLColor4::white); + //show degenerate triangles + LLGLDepthTest depth(GL_TRUE, GL_TRUE, GL_ALWAYS); + LLGLDisable cull(GL_CULL_FACE); + glColor4f(1.f,0.f,0.f,1.f); + const LLVector4a scale(0.5f); + + for (LLMeshUploadThread::instance_list::iterator iter = mUploadData.begin(); iter != mUploadData.end(); ++iter) + { + LLModelInstance& instance = *iter; + + LLModel* model = instance.mLOD[LLModel::LOD_PHYSICS]; + + if (!model) + { + continue; + } + + gGL.pushMatrix(); + LLMatrix4 mat = instance.mTransform; + + glMultMatrixf((GLfloat*) mat.mMatrix); + + + LLPhysicsDecomp* decomp = gMeshRepo.mDecompThread; + if (decomp) + { + LLMutexLock(decomp->mMutex); + + LLModel::Decomposition& physics = model->mPhysics; + + if (physics.mHull.empty()) + { + if (mVertexBuffer[LLModel::LOD_PHYSICS].empty()) { - LLVector4a v1; v1.setMul(pos[*idx++], scale); - LLVector4a v2; v2.setMul(pos[*idx++], scale); - LLVector4a v3; v3.setMul(pos[*idx++], scale); + genBuffers(LLModel::LOD_PHYSICS, false); + } + + for (U32 i = 0; i < mVertexBuffer[LLModel::LOD_PHYSICS][model].size(); ++i) + { + LLVertexBuffer* buffer = mVertexBuffer[LLModel::LOD_PHYSICS][model][i]; - if (ll_is_degenerate(v1,v2,v3)) + buffer->setBuffer(type_mask & buffer->getTypeMask()); + + LLStrider pos_strider; + buffer->getVertexStrider(pos_strider, 0); + LLVector4a* pos = (LLVector4a*) pos_strider.get(); + + LLStrider idx; + buffer->getIndexStrider(idx, 0); + + for (U32 i = 0; i < buffer->getNumIndices(); i += 3) { - buffer->draw(LLRender::LINE_LOOP, 3, i); - buffer->draw(LLRender::POINTS, 3, i); + LLVector4a v1; v1.setMul(pos[*idx++], scale); + LLVector4a v2; v2.setMul(pos[*idx++], scale); + LLVector4a v3; v3.setMul(pos[*idx++], scale); + + if (ll_is_degenerate(v1,v2,v3)) + { + buffer->draw(LLRender::LINE_LOOP, 3, i); + buffer->draw(LLRender::POINTS, 3, i); + } } } } } - } - gGL.popMatrix(); + gGL.popMatrix(); + } + glLineWidth(1.f); + glPointSize(1.f); + gPipeline.enableLightsPreview(); + gGL.setSceneBlendType(LLRender::BT_ALPHA); } - glLineWidth(1.f); - glPointSize(1.f); - gPipeline.enableLightsPreview(); - gGL.setSceneBlendType(LLRender::BT_ALPHA); } } else @@ -5348,8 +5548,7 @@ void LLModelPreview::setPreviewLOD(S32 lod) LLComboBox* combo_box = mFMP->getChild("preview_lod_combo"); combo_box->setCurrentByIndex((NUM_LOD-1)-mPreviewLOD); // combo box list of lods is in reverse order - mFMP->childSetTextArg("lod_table_footer", "[DETAIL]", mFMP->getString(lod_name[mPreviewLOD])); - mFMP->childSetText("lod_file", mLODFile[mPreviewLOD]); + mFMP->childSetText("lod_file_" + lod_name[mPreviewLOD], mLODFile[mPreviewLOD]); // the wizard has three lod drop downs LLComboBox* combo_box2 = mFMP->getChild("preview_lod_combo2"); @@ -5370,25 +5569,16 @@ void LLModelPreview::setPreviewLOD(S32 lod) mFMP->childSetColor(lod_triangles_name[i], color); mFMP->childSetColor(lod_vertices_name[i], color); } - - LLFloaterModelPreview* fmp = LLFloaterModelPreview::sInstance; - if (fmp) - { - LLRadioGroup* radio = fmp->getChild("lod_file_or_limit"); - radio->selectNthItem(fmp->mLODMode[mPreviewLOD]); - } } refresh(); updateStatusMessages(); } -//static -void LLFloaterModelPreview::onBrowseLOD(void* data) +void LLFloaterModelPreview::onBrowseLOD(S32 lod) { assert_main_thread(); - LLFloaterModelPreview* mp = (LLFloaterModelPreview*) data; - mp->loadModel(mp->mModelPreview->mPreviewLOD); + loadModel(lod); } //static @@ -5400,6 +5590,7 @@ void LLFloaterModelPreview::onReset(void* user_data) LLModelPreview* mp = fmp->mModelPreview; std::string filename = mp->mLODFile[3]; + fmp->resetDisplayOptions(); //reset model preview fmp->initModelPreview(); @@ -5422,6 +5613,8 @@ void LLFloaterModelPreview::onUpload(void* user_data) LLFloaterModelPreview* mp = (LLFloaterModelPreview*) user_data; + mp->mUploadBtn->setEnabled(false); + mp->mModelPreview->rebuildUploadData(); bool upload_skinweights = mp->childGetValue("upload_skin").asBoolean(); @@ -5435,8 +5628,7 @@ void LLFloaterModelPreview::onUpload(void* user_data) } -//static -void LLFloaterModelPreview::refresh(LLUICtrl* ctrl, void* user_data) +void LLFloaterModelPreview::refresh() { sInstance->toggleCalculateButton(true); sInstance->mModelPreview->mDirty = true; @@ -5457,12 +5649,11 @@ void LLModelPreview::textureLoadedCallback( BOOL success, LLViewerFetchedTexture } } -void LLModelPreview::onLODParamCommit(bool enforce_tri_limit) +void LLModelPreview::onLODParamCommit(S32 lod, bool enforce_tri_limit) { if (!mLODFrozen) { - genLODs(mPreviewLOD, 3, enforce_tri_limit); - updateStatusMessages(); + genLODs(lod, 3, enforce_tri_limit); refresh(); } } @@ -5503,11 +5694,6 @@ void LLFloaterModelPreview::toggleCalculateButton(bool visible) { mCalculateBtn->setVisible( false ); } - else - if ( !mModelPreview->isLegacyRigValid() ) - { - mCalculateBtn->setVisible( false ); - } } mUploadBtn->setVisible(!visible); @@ -5516,10 +5702,10 @@ void LLFloaterModelPreview::toggleCalculateButton(bool visible) if (visible) { std::string tbd = getString("tbd"); - childSetTextArg("weights", "[EQ]", tbd); - childSetTextArg("weights", "[ST]", tbd); - childSetTextArg("weights", "[SIM]", tbd); - childSetTextArg("weights", "[PH]", tbd); + childSetTextArg("prim_weight", "[EQ]", tbd); + childSetTextArg("download_weight", "[ST]", tbd); + childSetTextArg("server_weight", "[SIM]", tbd); + childSetTextArg("physics_weight", "[PH]", tbd); childSetTextArg("upload_fee", "[FEE]", tbd); childSetTextArg("price_breakdown", "[STREAMING]", tbd); childSetTextArg("price_breakdown", "[PHYSICS]", tbd); @@ -5529,6 +5715,23 @@ void LLFloaterModelPreview::toggleCalculateButton(bool visible) } } +void LLFloaterModelPreview::onLoDSourceCommit(S32 lod) +{ + mModelPreview->updateLodControls(lod); + refresh(); +} + +void LLFloaterModelPreview::resetDisplayOptions() +{ + std::map::iterator option_it = mModelPreview->mViewOption.begin(); + + for(;option_it != mModelPreview->mViewOption.end(); ++option_it) + { + LLUICtrl* ctrl = getChild(option_it->first); + ctrl->setValue(false); + } +} + void LLFloaterModelPreview::onModelPhysicsFeeReceived(const LLSD& result, std::string upload_url) { mModelPhysicsFee = result; @@ -5542,17 +5745,16 @@ void LLFloaterModelPreview::handleModelPhysicsFeeReceived() const LLSD& result = mModelPhysicsFee; mUploadModelUrl = result["url"].asString(); - childSetTextArg("weights", "[EQ]", llformat("%0.3f", result["resource_cost"].asReal())); - childSetTextArg("weights", "[ST]", llformat("%0.3f", result["model_streaming_cost"].asReal())); - childSetTextArg("weights", "[SIM]", llformat("%0.3f", result["simulation_cost"].asReal())); - childSetTextArg("weights", "[PH]", llformat("%0.3f", result["physics_cost"].asReal())); + childSetTextArg("prim_weight", "[EQ]", llformat("%0.3f", result["resource_cost"].asReal())); + childSetTextArg("download_weight", "[ST]", llformat("%0.3f", result["model_streaming_cost"].asReal())); + childSetTextArg("server_weight", "[SIM]", llformat("%0.3f", result["simulation_cost"].asReal())); + childSetTextArg("physics_weight", "[PH]", llformat("%0.3f", result["physics_cost"].asReal())); childSetTextArg("upload_fee", "[FEE]", llformat("%d", result["upload_price"].asInteger())); childSetTextArg("price_breakdown", "[STREAMING]", llformat("%d", result["upload_price_breakdown"]["mesh_streaming"].asInteger())); childSetTextArg("price_breakdown", "[PHYSICS]", llformat("%d", result["upload_price_breakdown"]["mesh_physics"].asInteger())); childSetTextArg("price_breakdown", "[INSTANCES]", llformat("%d", result["upload_price_breakdown"]["mesh_instance"].asInteger())); childSetTextArg("price_breakdown", "[TEXTURES]", llformat("%d", result["upload_price_breakdown"]["texture"].asInteger())); childSetTextArg("price_breakdown", "[MODEL]", llformat("%d", result["upload_price_breakdown"]["model"].asInteger())); - childSetVisible("weights", true); childSetVisible("upload_fee", true); childSetVisible("price_breakdown", true); mUploadBtn->setEnabled(mHasUploadPerm && !mUploadModelUrl.empty()); @@ -5560,20 +5762,23 @@ void LLFloaterModelPreview::handleModelPhysicsFeeReceived() void LLFloaterModelPreview::setModelPhysicsFeeErrorStatus(U32 status, const std::string& reason) { - toggleCalculateButton(true); llwarns << "LLFloaterModelPreview::setModelPhysicsFeeErrorStatus(" << status << " : " << reason << ")" << llendl; + doOnIdleOneTime(boost::bind(&LLFloaterModelPreview::toggleCalculateButton, this, true)); } /*virtual*/ void LLFloaterModelPreview::onModelUploadSuccess() { + assert_main_thread(); closeFloater(false); } /*virtual*/ void LLFloaterModelPreview::onModelUploadFailure() { + assert_main_thread(); toggleCalculateButton(true); + mUploadBtn->setEnabled(true); } S32 LLFloaterModelPreview::DecompRequest::statusCallback(const char* status, S32 p1, S32 p2) diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index 3a5f7602fe..47de99ce25 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -120,12 +120,13 @@ public: void processJointNode( domNode* pNode, std::map& jointTransforms ); void extractTranslation( domTranslate* pTranslate, LLMatrix4& transform ); void extractTranslationViaElement( daeElement* pTranslateElement, LLMatrix4& transform ); - + void extractTranslationViaSID( daeElement* pElement, LLMatrix4& transform ); + void setLoadState(U32 state); void buildJointToNodeMappingFromScene( daeElement* pRoot ); void processJointToNodeMapping( domNode* pNode ); - + void processChildJoints( domNode* pParentNode ); //map of avatar joints as named in COLLADA assets to internal joint names std::map mJointMap; @@ -176,18 +177,18 @@ public: void setDetails(F32 x, F32 y, F32 z, F32 streaming_cost, F32 physics_cost); - static void onBrowseLOD(void* data); + void onBrowseLOD(S32 lod); static void onReset(void* data); static void onUpload(void* data); - static void refresh(LLUICtrl* ctrl, void* data); + void refresh(); void loadModel(S32 lod); void loadModel(S32 lod, const std::string& file_name, bool force_disable_slm = false); - void onViewOptionChecked(const LLSD& userdata); + void onViewOptionChecked(LLUICtrl* ctrl); bool isViewOptionChecked(const LLSD& userdata); bool isViewOptionEnabled(const LLSD& userdata); void setViewOptionEnabled(const std::string& option, bool enabled); @@ -217,17 +218,17 @@ protected: static void onPelvisOffsetCommit(LLUICtrl*, void*); static void onUploadJointsCommit(LLUICtrl*,void*); static void onUploadSkinCommit(LLUICtrl*,void*); - - static void onPhysicsLoadRadioCommit(LLUICtrl*,void *data); static void onPreviewLODCommit(LLUICtrl*,void*); static void onGenerateNormalsCommit(LLUICtrl*,void*); + void toggleGenarateNormals(); + static void onAutoFillCommit(LLUICtrl*,void*); - static void onLODParamCommit(LLUICtrl*,void*); - static void onLODParamCommitTriangleLimit(LLUICtrl*,void*); + void onLODParamCommit(S32 lod, bool enforce_tri_limit); + static void onExplodeCommit(LLUICtrl*, void*); static void onPhysicsParamCommit(LLUICtrl* ctrl, void* userdata); @@ -266,11 +267,9 @@ protected: //store which lod mode each LOD is using // 0 - load from file // 1 - auto generate - // 2 - None + // 2 - use LoD above S32 mLODMode[4]; - LLMenuButton* mViewOptionMenuButton; - LLToggleableMenu* mViewOptionMenu; LLMutex* mStatusLock; LLSD mModelPhysicsFee; @@ -279,9 +278,16 @@ private: void onClickCalculateBtn(); void toggleCalculateButton(); + void onLoDSourceCommit(S32 lod); + // Toggles between "Calculate weights & fee" and "Upload" buttons. void toggleCalculateButton(bool visible); + // resets display options of model preview to their defaults. + void resetDisplayOptions(); + + void createSmoothComboBox(LLComboBox* combo_box, float min, float max); + LLButton* mUploadBtn; LLButton* mCalculateBtn; }; @@ -334,9 +340,11 @@ public: void saveUploadData(const std::string& filename, bool save_skinweights, bool save_joint_poisitions); void clearIncompatible(S32 lod); void updateStatusMessages(); + void updateLodControls(S32 lod); void clearGLODGroup(); - void onLODParamCommit(bool enforce_tri_limit); - + void onLODParamCommit(S32 lod, bool enforce_tri_limit); + void addEmptyFace( LLModel* pTarget ); + const bool getModelPivot( void ) const { return mHasPivot; } void setHasPivot( bool val ) { mHasPivot = val; } void setModelPivot( const LLVector3& pivot ) { mModelPivot = pivot; } @@ -365,9 +373,6 @@ public: void setLoadState( U32 state ) { mLoadState = state; } U32 getLoadState() { return mLoadState; } - //setRestJointFlag: If an asset comes through that changes the joints, we want the reset to persist - void setResetJointFlag( bool state ) { if ( !mResetJoints ) mResetJoints = state; } - const bool getResetJointFlag( void ) const { return mResetJoints; } void setRigWithSceneParity( bool state ) { mRigParityWithScene = state; } const bool getRigWithSceneParity( void ) const { return mRigParityWithScene; } diff --git a/indra/newview/llfloaterobjectweights.cpp b/indra/newview/llfloaterobjectweights.cpp new file mode 100644 index 0000000000..0862cd2897 --- /dev/null +++ b/indra/newview/llfloaterobjectweights.cpp @@ -0,0 +1,266 @@ +/** + * @file llfloaterobjectweights.cpp + * @brief Object weights advanced view floater + * + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ +#include "llviewerprecompiledheaders.h" + +#include "llfloaterobjectweights.h" + +#include "llparcel.h" + +#include "llfloaterreg.h" +#include "lltextbox.h" + +#include "llagent.h" +#include "llviewerparcelmgr.h" +#include "llviewerregion.h" + +// virtual +bool LLCrossParcelFunctor::apply(LLViewerObject* obj) +{ + // Add the root object box. + mBoundingBox.addBBoxAgent(LLBBox(obj->getPositionRegion(), obj->getRotationRegion(), obj->getScale() * -0.5f, obj->getScale() * 0.5f).getAxisAligned()); + + // Extend the bounding box across all the children. + LLViewerObject::const_child_list_t children = obj->getChildren(); + for (LLViewerObject::const_child_list_t::const_iterator iter = children.begin(); + iter != children.end(); iter++) + { + LLViewerObject* child = *iter; + mBoundingBox.addBBoxAgent(LLBBox(child->getPositionRegion(), child->getRotationRegion(), child->getScale() * -0.5f, child->getScale() * 0.5f).getAxisAligned()); + } + + bool result = false; + + LLViewerRegion* region = obj->getRegion(); + if (region) + { + std::vector boxes; + boxes.push_back(mBoundingBox); + result = region->objectsCrossParcel(boxes); + } + + return result; +} + +LLFloaterObjectWeights::LLFloaterObjectWeights(const LLSD& key) +: LLFloater(key), + mSelectedObjects(NULL), + mSelectedPrims(NULL), + mSelectedDownloadWeight(NULL), + mSelectedPhysicsWeight(NULL), + mSelectedServerWeight(NULL), + mSelectedDisplayWeight(NULL), + mSelectedOnLand(NULL), + mRezzedOnLand(NULL), + mRemainingCapacity(NULL), + mTotalCapacity(NULL) +{ +} + +LLFloaterObjectWeights::~LLFloaterObjectWeights() +{ +} + +// virtual +BOOL LLFloaterObjectWeights::postBuild() +{ + mSelectedObjects = getChild("objects"); + mSelectedPrims = getChild("prims"); + + mSelectedDownloadWeight = getChild("download"); + mSelectedPhysicsWeight = getChild("physics"); + mSelectedServerWeight = getChild("server"); + mSelectedDisplayWeight = getChild("display"); + + mSelectedOnLand = getChild("selected"); + mRezzedOnLand = getChild("rezzed_on_land"); + mRemainingCapacity = getChild("remaining_capacity"); + mTotalCapacity = getChild("total_capacity"); + + return TRUE; +} + +// virtual +void LLFloaterObjectWeights::onOpen(const LLSD& key) +{ + refresh(); + updateLandImpacts(LLViewerParcelMgr::getInstance()->getFloatingParcelSelection()->getParcel()); +} + +// virtual +void LLFloaterObjectWeights::onWeightsUpdate(const SelectionCost& selection_cost) +{ + mSelectedDownloadWeight->setText(llformat("%.1f", selection_cost.mNetworkCost)); + mSelectedPhysicsWeight->setText(llformat("%.1f", selection_cost.mPhysicsCost)); + mSelectedServerWeight->setText(llformat("%.1f", selection_cost.mSimulationCost)); + + S32 render_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedObjectRenderCost(); + mSelectedDisplayWeight->setText(llformat("%d", render_cost)); + + toggleWeightsLoadingIndicators(false); +} + +//virtual +void LLFloaterObjectWeights::setErrorStatus(U32 status, const std::string& reason) +{ + const std::string text = getString("nothing_selected"); + + mSelectedDownloadWeight->setText(text); + mSelectedPhysicsWeight->setText(text); + mSelectedServerWeight->setText(text); + mSelectedDisplayWeight->setText(text); + + toggleWeightsLoadingIndicators(false); +} + +void LLFloaterObjectWeights::updateLandImpacts(const LLParcel* parcel) +{ + if (!parcel || LLSelectMgr::getInstance()->getSelection()->isEmpty()) + { + updateIfNothingSelected(); + } + else + { + S32 rezzed_prims = parcel->getSimWidePrimCount(); + S32 total_capacity = parcel->getSimWideMaxPrimCapacity(); + + mRezzedOnLand->setText(llformat("%d", rezzed_prims)); + mRemainingCapacity->setText(llformat("%d", total_capacity - rezzed_prims)); + mTotalCapacity->setText(llformat("%d", total_capacity)); + + toggleLandImpactsLoadingIndicators(false); + } +} + +void LLFloaterObjectWeights::refresh() +{ + LLSelectMgr* sel_mgr = LLSelectMgr::getInstance(); + + if (sel_mgr->getSelection()->isEmpty()) + { + updateIfNothingSelected(); + } + else + { + S32 prim_count = sel_mgr->getSelection()->getObjectCount(); + S32 link_count = sel_mgr->getSelection()->getRootObjectCount(); + F32 prim_equiv = sel_mgr->getSelection()->getSelectedLinksetCost(); + + mSelectedObjects->setText(llformat("%d", link_count)); + mSelectedPrims->setText(llformat("%d", prim_count)); + mSelectedOnLand->setText(llformat("%.1d", (S32)prim_equiv)); + + LLCrossParcelFunctor func; + if (sel_mgr->getSelection()->applyToRootObjects(&func, true)) + { + // Some of the selected objects cross parcel bounds. + // We don't display object weights and land impacts in this case. + const std::string text = getString("nothing_selected"); + + mRezzedOnLand->setText(text); + mRemainingCapacity->setText(text); + mTotalCapacity->setText(text); + + toggleLandImpactsLoadingIndicators(false); + } + + LLViewerRegion* region = gAgent.getRegion(); + if (region && region->capabilitiesReceived()) + { + for (LLObjectSelection::valid_root_iterator iter = sel_mgr->getSelection()->valid_root_begin(); + iter != sel_mgr->getSelection()->valid_root_end(); ++iter) + { + LLAccountingCostManager::getInstance()->addObject((*iter)->getObject()->getID()); + } + + std::string url = region->getCapability("ResourceCostSelected"); + if (!url.empty()) + { + // Update the transaction id before the new fetch request + generateTransactionID(); + + LLAccountingCostManager::getInstance()->fetchCosts(Roots, url, getObserverHandle()); + toggleWeightsLoadingIndicators(true); + } + } + else + { + llwarns << "Failed to get region capabilities" << llendl; + } + } +} + +// virtual +void LLFloaterObjectWeights::generateTransactionID() +{ + mTransactionID.generate(); +} + +void LLFloaterObjectWeights::toggleWeightsLoadingIndicators(bool visible) +{ + childSetVisible("download_loading_indicator", visible); + childSetVisible("physics_loading_indicator", visible); + childSetVisible("server_loading_indicator", visible); + childSetVisible("display_loading_indicator", visible); + + mSelectedDownloadWeight->setVisible(!visible); + mSelectedPhysicsWeight->setVisible(!visible); + mSelectedServerWeight->setVisible(!visible); + mSelectedDisplayWeight->setVisible(!visible); +} + +void LLFloaterObjectWeights::toggleLandImpactsLoadingIndicators(bool visible) +{ + childSetVisible("selected_loading_indicator", visible); + childSetVisible("rezzed_on_land_loading_indicator", visible); + childSetVisible("remaining_capacity_loading_indicator", visible); + childSetVisible("total_capacity_loading_indicator", visible); + + mSelectedOnLand->setVisible(!visible); + mRezzedOnLand->setVisible(!visible); + mRemainingCapacity->setVisible(!visible); + mTotalCapacity->setVisible(!visible); +} + +void LLFloaterObjectWeights::updateIfNothingSelected() +{ + const std::string text = getString("nothing_selected"); + + mSelectedObjects->setText(text); + mSelectedPrims->setText(text); + + mSelectedDownloadWeight->setText(text); + mSelectedPhysicsWeight->setText(text); + mSelectedServerWeight->setText(text); + mSelectedDisplayWeight->setText(text); + + mSelectedOnLand->setText(text); + mRezzedOnLand->setText(text); + mRemainingCapacity->setText(text); + mTotalCapacity->setText(text); + + toggleWeightsLoadingIndicators(false); + toggleLandImpactsLoadingIndicators(false); +} diff --git a/indra/newview/llfloaterobjectweights.h b/indra/newview/llfloaterobjectweights.h new file mode 100644 index 0000000000..9a244573be --- /dev/null +++ b/indra/newview/llfloaterobjectweights.h @@ -0,0 +1,93 @@ +/** + * @file llfloaterobjectweights.h + * @brief Object weights advanced view floater + * + * $LicenseInfo:firstyear=2011&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2011, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_LLFLOATEROBJECTWEIGHTS_H +#define LL_LLFLOATEROBJECTWEIGHTS_H + +#include "llfloater.h" + +#include "llaccountingcostmanager.h" +#include "llselectmgr.h" + +class LLParcel; +class LLTextBox; + +/** + * struct LLCrossParcelFunctor + * + * A functor that checks whether a bounding box for all + * selected objects crosses a region or parcel bounds. + */ +struct LLCrossParcelFunctor : public LLSelectedObjectFunctor +{ + /*virtual*/ bool apply(LLViewerObject* obj); + +private: + LLBBox mBoundingBox; +}; + + +class LLFloaterObjectWeights : public LLFloater, LLAccountingCostObserver +{ +public: + LOG_CLASS(LLFloaterObjectWeights); + + LLFloaterObjectWeights(const LLSD& key); + ~LLFloaterObjectWeights(); + + /*virtual*/ BOOL postBuild(); + + /*virtual*/ void onOpen(const LLSD& key); + + /*virtual*/ void onWeightsUpdate(const SelectionCost& selection_cost); + /*virtual*/ void setErrorStatus(U32 status, const std::string& reason); + + void updateLandImpacts(const LLParcel* parcel); + void refresh(); + +private: + /*virtual*/ void generateTransactionID(); + + void toggleWeightsLoadingIndicators(bool visible); + void toggleLandImpactsLoadingIndicators(bool visible); + + void updateIfNothingSelected(); + + LLTextBox *mSelectedObjects; + LLTextBox *mSelectedPrims; + + LLTextBox *mSelectedDownloadWeight; + LLTextBox *mSelectedPhysicsWeight; + LLTextBox *mSelectedServerWeight; + LLTextBox *mSelectedDisplayWeight; + + LLTextBox *mSelectedOnLand; + LLTextBox *mRezzedOnLand; + LLTextBox *mRemainingCapacity; + LLTextBox *mTotalCapacity; +}; + +#endif //LL_LLFLOATEROBJECTWEIGHTS_H diff --git a/indra/newview/llfloaterpostcard.cpp b/indra/newview/llfloaterpostcard.cpp index dd0b1d999c..3bcbb987f7 100644 --- a/indra/newview/llfloaterpostcard.cpp +++ b/indra/newview/llfloaterpostcard.cpp @@ -137,9 +137,9 @@ void LLFloaterPostcard::draw() // first set the max extents of our preview rect.translate(-rect.mLeft, -rect.mBottom); - rect.mLeft += 280; + rect.mLeft += 320; rect.mRight -= 10; - rect.mTop -= 20; + rect.mTop -= 27; rect.mBottom = rect.mTop - 130; // then fix the aspect ratio diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index cb811628ec..a4f2294e53 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -327,8 +327,7 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key) mOriginalIMViaEmail(false), mLanguageChanged(false), mAvatarDataInitialized(false), - mDoubleClickActionDirty(false) - + mClickActionDirty(false) { //Build Floater is now Called from LLFloaterReg::add("preferences", "floater_preferences.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); @@ -384,16 +383,15 @@ LLFloaterPreference::LLFloaterPreference(const LLSD& key) sSkin = gSavedSettings.getString("SkinCurrent"); - mCommitCallbackRegistrar.add("Pref.CommitDoubleClickChekbox", boost::bind(&LLFloaterPreference::onDoubleClickCheckBox, this, _1)); - mCommitCallbackRegistrar.add("Pref.CommitRadioDoubleClick", boost::bind(&LLFloaterPreference::onDoubleClickRadio, this)); -// sSkin = gSavedSettings.getString("SkinCurrent"); + mCommitCallbackRegistrar.add("Pref.ClickActionChange", boost::bind(&LLFloaterPreference::onClickActionChange, this)); + gSavedSettings.getControl("NameTagShowUsernames")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged, _2)); gSavedSettings.getControl("NameTagShowFriends")->getCommitSignal()->connect(boost::bind(&handleNameTagOptionChanged, _2)); gSavedSettings.getControl("UseDisplayNames")->getCommitSignal()->connect(boost::bind(&handleDisplayNamesOptionChanged, _2)); gSavedSettings.getControl("UseLSLFlightAssist")->getCommitSignal()->connect(boost::bind(&handleFlightAssistOptionChanged, _2)); - //[FIX FIRE-1927 - enable DoubleClickTeleport shortcut : SJ] - gSavedSettings.getControl("DoubleClickTeleport")->getCommitSignal()->connect(boost::bind(&LLFloaterPreference::onChangeDoubleClickSettings, this)); + //[FIX FIRE-1927 - enable DoubleClickTeleport shortcut : SJ] no longer exists! + //gSavedSettings.getControl("DoubleClickTeleport")->getCommitSignal()->connect(boost::bind(&LLFloaterPreference::onChangeDoubleClickSettings, this)); LLAvatarPropertiesProcessor::getInstance()->addObserver( gAgent.getID(), this ); @@ -485,10 +483,6 @@ BOOL LLFloaterPreference::postBuild() if (!tabcontainer->selectTab(gSavedSettings.getS32("LastPrefTab"))) tabcontainer->selectFirstTab(); - updateDoubleClickControls(); - - updateDoubleClickControls(); - getChild("cache_location")->setEnabled(FALSE); // make it read-only but selectable (STORM-227) getChildView("log_path_string")->setEnabled(FALSE);// do the same for chat logs path getChildView("log_path_string-panelsetup")->setEnabled(FALSE);// and the redundant instance -WoLf @@ -664,10 +658,10 @@ void LLFloaterPreference::apply() saveAvatarProperties(); - if (mDoubleClickActionDirty) + if (mClickActionDirty) { - updateDoubleClickSettings(); - mDoubleClickActionDirty = false; + updateClickActionSettings(); + mClickActionDirty = false; } } @@ -695,12 +689,13 @@ void LLFloaterPreference::cancel() // reverts any changes to current skin //gSavedSettings.setString("SkinCurrent", sSkin); - - if (mDoubleClickActionDirty) + + if (mClickActionDirty) { - updateDoubleClickControls(); - mDoubleClickActionDirty = false; + updateClickActionControls(); + mClickActionDirty = false; } + LLFloaterPreferenceProxy * advanced_proxy_settings = LLFloaterReg::findTypedInstance("prefs_proxy"); if (advanced_proxy_settings) { @@ -764,6 +759,9 @@ void LLFloaterPreference::onOpen(const LLSD& key) // Display selected maturity icons. onChangeMaturity(); + + // Load (double-)click to walk/teleport settings. + updateClickActionControls(); // Enabled/disabled popups, might have been changed by user actions // while preferences floater was closed. @@ -1708,100 +1706,60 @@ void LLFloaterPreference::onClickSortContacts() fs_contacts->sortFriendList(); } -void LLFloaterPreference::onDoubleClickCheckBox(LLUICtrl* ctrl) -{ - if (!ctrl) return; - mDoubleClickActionDirty = true; - LLRadioGroup* radio_double_click_action = getChild("double_click_action"); - if (!radio_double_click_action) return; - // select default value("teleport") in radio-group. - radio_double_click_action->setSelectedIndex(0); - // set radio-group enabled depending on state of checkbox - radio_double_click_action->setEnabled(ctrl->getValue()); -} - -void LLFloaterPreference::onDoubleClickRadio() -{ - mDoubleClickActionDirty = true; -} - -void LLFloaterPreference::updateDoubleClickSettings() -{ - LLCheckBoxCtrl* double_click_action_cb = getChild("double_click_chkbox"); - if (!double_click_action_cb) return; - bool enable = double_click_action_cb->getValue().asBoolean(); - - LLRadioGroup* radio_double_click_action = getChild("double_click_action"); - if (!radio_double_click_action) return; - - // enable double click radio-group depending on state of checkbox - radio_double_click_action->setEnabled(enable); - - if (!enable) - { - // set double click action settings values to false if checkbox was unchecked - gSavedSettings.setBOOL("DoubleClickAutoPilot", false); - gSavedSettings.setBOOL("DoubleClickTeleport", false); - } - else - { - std::string selected = radio_double_click_action->getValue().asString(); - bool teleport_selected = selected == "radio_teleport"; - // set double click action settings values depending on chosen radio-button - gSavedSettings.setBOOL( "DoubleClickTeleport", teleport_selected ); - gSavedSettings.setBOOL( "DoubleClickAutoPilot", !teleport_selected ); - } -} - -//[FIX FIRE-1927 - enable DoubleClickTeleport shortcut : SJ] -void LLFloaterPreference::onChangeDoubleClickSettings() -{ - bool double_click_action_enabled = gSavedSettings.getBOOL("DoubleClickAutoPilot") || gSavedSettings.getBOOL("DoubleClickTeleport"); - LLCheckBoxCtrl* double_click_action_cb = getChild("double_click_chkbox"); - if (double_click_action_cb) - { - // check checkbox if one of double-click actions settings enabled, uncheck otherwise - double_click_action_cb->setValue(double_click_action_enabled); - } - LLRadioGroup* double_click_action_radio = getChild("double_click_action"); - if (!double_click_action_radio) return; - // set radio-group enabled if one of double-click actions settings enabled - double_click_action_radio->setEnabled(double_click_action_enabled); - if (gSavedSettings.getBOOL("DoubleClickTeleport")) - { - double_click_action_radio->setSelectedIndex(0); - } - else - { - double_click_action_radio->setSelectedIndex(1); - } - - -} - void LLFloaterPreference::onClickProxySettings() { LLFloaterReg::showInstance("prefs_proxy"); } -void LLFloaterPreference::updateDoubleClickControls() +void LLFloaterPreference::onClickActionChange() { - // check is one of double-click actions settings enabled - bool double_click_action_enabled = gSavedSettings.getBOOL("DoubleClickAutoPilot") || gSavedSettings.getBOOL("DoubleClickTeleport"); - LLCheckBoxCtrl* double_click_action_cb = getChild("double_click_chkbox"); - if (double_click_action_cb) - { - // check checkbox if one of double-click actions settings enabled, uncheck otherwise - double_click_action_cb->setValue(double_click_action_enabled); - } - LLRadioGroup* double_click_action_radio = getChild("double_click_action"); - if (!double_click_action_radio) return; - // set radio-group enabled if one of double-click actions settings enabled - double_click_action_radio->setEnabled(double_click_action_enabled); - // select button in radio-group depending on setting - double_click_action_radio->setSelectedIndex(gSavedSettings.getBOOL("DoubleClickAutoPilot")); + mClickActionDirty = true; } +void LLFloaterPreference::updateClickActionSettings() +{ + const int single_clk_action = getChild("single_click_action_combo")->getValue().asInteger(); + const int double_clk_action = getChild("double_click_action_combo")->getValue().asInteger(); + + gSavedSettings.setBOOL("ClickToWalk", single_clk_action == 1); + gSavedSettings.setBOOL("DoubleClickAutoPilot", double_clk_action == 1); + gSavedSettings.setBOOL("DoubleClickTeleport", double_clk_action == 2); +} + +void LLFloaterPreference::updateClickActionControls() +{ + const bool click_to_walk = gSavedSettings.getBOOL("ClickToWalk"); + const bool dbl_click_to_walk = gSavedSettings.getBOOL("DoubleClickAutoPilot"); + const bool dbl_click_to_teleport = gSavedSettings.getBOOL("DoubleClickTeleport"); + getChild("single_click_action_combo")->setValue((int)click_to_walk); + getChild("double_click_action_combo")->setValue(dbl_click_to_teleport ? 2 : (int)dbl_click_to_walk); +} + + +//[FIX FIRE-1927 - enable DoubleClickTeleport shortcut : SJ] +//void LLFloaterPreference::onChangeDoubleClickSettings() +//{ +// bool double_click_action_enabled = gSavedSettings.getBOOL("DoubleClickAutoPilot") || gSavedSettings.getBOOL("DoubleClickTeleport"); +// LLCheckBoxCtrl* double_click_action_cb = getChild("double_click_chkbox"); +// if (double_click_action_cb) +// { +// // check checkbox if one of double-click actions settings enabled, uncheck otherwise +// double_click_action_cb->setValue(double_click_action_enabled); +// } +// LLRadioGroup* double_click_action_radio = getChild("double_click_action"); +// if (!double_click_action_radio) return; +// // set radio-group enabled if one of double-click actions settings enabled +// double_click_action_radio->setEnabled(double_click_action_enabled); +// if (gSavedSettings.getBOOL("DoubleClickTeleport")) +// { +// double_click_action_radio->setSelectedIndex(0); +// } +// else +// { +// double_click_action_radio->setSelectedIndex(1); +// } +//} + void LLFloaterPreference::applyUIColor(LLUICtrl* ctrl, const LLSD& param) { LLUIColorTable::instance().setColor(param.asString(), LLColor4(ctrl->getValue())); diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h index 9beed86aa0..5bff7df6fa 100644 --- a/indra/newview/llfloaterpreference.h +++ b/indra/newview/llfloaterpreference.h @@ -109,14 +109,13 @@ protected: void setHardwareDefaults(); // callback for when client turns on shaders void onVertexShaderEnable(); - // callback for changing double click action checkbox - void onDoubleClickCheckBox(LLUICtrl* ctrl); - // callback for selecting double click action radio-button - void onDoubleClickRadio(); - // updates double-click action settings depending on controls from preferences - void updateDoubleClickSettings(); - // updates double-click action controls depending on values from settings.xml - void updateDoubleClickControls(); + + // callback for commit in the "Single click on land" and "Double click on land" comboboxes. + void onClickActionChange(); + // updates click/double-click action settings depending on controls values + void updateClickActionSettings(); + // updates click/double-click action controls depending on values from settings.xml + void updateClickActionControls(); // This function squirrels away the current values of the controls so that // cancel() can restore them. @@ -175,16 +174,12 @@ public: void onClickProxySettings(); void applyUIColor(LLUICtrl* ctrl, const LLSD& param); void getUIColor(LLUICtrl* ctrl, const LLSD& param); -//[FIX FIRE-1927 - enable DoubleClickTeleport shortcut : SJ] - void onChangeDoubleClickSettings(); void buildPopupLists(); static void refreshSkin(void* data); private: static std::string sSkin; - // set true if state of double-click action checkbox or radio-group was changed by user - // (reset back to false on apply or cancel) - bool mDoubleClickActionDirty; + bool mClickActionDirty; ///< Set to true when the click/double-click options get changed by user. bool mGotPersonalInfo; bool mOriginalIMViaEmail; bool mLanguageChanged; diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 7a6404bdf9..b63faeaac1 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -172,30 +172,9 @@ bool estate_dispatch_initialized = false; LLUUID LLFloaterRegionInfo::sRequestInvoice; -void LLFloaterRegionInfo::onConsoleReplyReceived(const std::string& output) -{ - llwarns << "here is what they're giving us: " << output << llendl; - - if (output.find("FALSE") != std::string::npos) - { - getChild("mesh_rez_enabled_check")->setValue(FALSE); - } - else - { - getChild("mesh_rez_enabled_check")->setValue(TRUE); - } -} - - LLFloaterRegionInfo::LLFloaterRegionInfo(const LLSD& seed) : LLFloater(seed) -{ - mConsoleReplySignalConnection = LLFloaterRegionDebugConsole::setConsoleReplyCallback( - boost::bind( - &LLFloaterRegionInfo::onConsoleReplyReceived, - this, - _1)); -} +{} BOOL LLFloaterRegionInfo::postBuild() { @@ -246,9 +225,7 @@ BOOL LLFloaterRegionInfo::postBuild() } LLFloaterRegionInfo::~LLFloaterRegionInfo() -{ - mConsoleReplySignalConnection.disconnect(); -} +{} void LLFloaterRegionInfo::onOpen(const LLSD& key) { @@ -638,9 +615,6 @@ bool LLPanelRegionGeneralInfo::refreshFromRegion(LLViewerRegion* region) getChildView("im_btn")->setEnabled(allow_modify); getChildView("manage_telehub_btn")->setEnabled(allow_modify); - const bool enable_mesh = gMeshRepo.meshRezEnabled(); - getChildView("mesh_rez_enabled_check")->setVisible(enable_mesh); - getChildView("mesh_rez_enabled_check")->setEnabled(getChildView("mesh_rez_enabled_check")->getEnabled() && enable_mesh); // Data gets filled in by processRegionInfo return LLPanelRegionInfo::refreshFromRegion(region); @@ -659,7 +633,6 @@ BOOL LLPanelRegionGeneralInfo::postBuild() initCtrl("access_combo"); initCtrl("restrict_pushobject"); initCtrl("block_parcel_search_check"); - initCtrl("mesh_rez_enabled_check"); childSetAction("kick_btn", boost::bind(&LLPanelRegionGeneralInfo::onClickKick, this)); childSetAction("kick_all_btn", onClickKickAll, this); @@ -875,27 +848,6 @@ BOOL LLPanelRegionGeneralInfo::sendUpdate() sendEstateOwnerMessage(gMessageSystem, "setregioninfo", invoice, strings); } - std::string sim_console_url = gAgent.getRegion()->getCapability("SimConsoleAsync"); - - if (!sim_console_url.empty()) - { - std::string update_str = "set mesh_rez_enabled "; - if (getChild("mesh_rez_enabled_check")->getValue().asBoolean()) - { - update_str += "true"; - } - else - { - update_str += "false"; - } - - LLHTTPClient::post( - sim_console_url, - LLSD(update_str), - new ConsoleUpdateResponder); - } - - // if we changed access levels, tell user about it LLViewerRegion* region = gAgent.getRegion(); if (region && (getChild("access_combo")->getValue().asInteger() != region->getSimAccess()) ) diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h index f913e7c08f..7f126c6409 100644 --- a/indra/newview/llfloaterregioninfo.h +++ b/indra/newview/llfloaterregioninfo.h @@ -100,10 +100,6 @@ private: LLFloaterRegionInfo(const LLSD& seed); ~LLFloaterRegionInfo(); - - void onConsoleReplyReceived(const std::string& output); - - boost::signals2::connection mConsoleReplySignalConnection;; protected: void onTabSelected(const LLSD& param); diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp index d616d4f2c2..a8fb64da1c 100644 --- a/indra/newview/llfloatertools.cpp +++ b/indra/newview/llfloatertools.cpp @@ -42,6 +42,7 @@ #include "llfloaterbuildoptions.h" #include "llfloatermediasettings.h" #include "llfloateropenobject.h" +#include "llfloaterobjectweights.h" #include "llfloaterreg.h" #include "llfocusmgr.h" #include "llmediaentry.h" @@ -55,6 +56,7 @@ #include "llpanelobject.h" #include "llpanelvolume.h" #include "llpanelpermissions.h" +#include "llparcel.h" #include "llradiogroup.h" #include "llresmgr.h" #include "llselectmgr.h" @@ -87,7 +89,6 @@ #include "lluictrlfactory.h" #include "qtoolalign.h" #include "llselectmgr.h" -#include "llaccountingquotamanager.h" #include "llmeshrepository.h" // Globals @@ -122,6 +123,24 @@ void commit_radio_group_land(LLUICtrl* ctrl); void commit_grid_mode(LLUICtrl *); void commit_slider_zoom(LLUICtrl *ctrl); +/** + * Class LLLandImpactsObserver + * + * An observer class to monitor parcel selection and update + * the land impacts data from a parcel containing the selected object. + */ +class LLLandImpactsObserver : public LLParcelObserver +{ +public: + virtual void changed() + { + LLFloaterTools* tools_floater = LLFloaterReg::getTypedInstance("build"); + if(tools_floater) + { + tools_floater->updateLandImpacts(); + } + } +}; //static void* LLFloaterTools::createPanelPermissions(void* data) @@ -378,6 +397,9 @@ LLFloaterTools::LLFloaterTools(const LLSD& key) mCostTextBorder(NULL), mTabLand(NULL), + + mLandImpactsObserver(NULL), + mDirty(TRUE), mNeedMediaTitle(TRUE) { @@ -412,12 +434,18 @@ LLFloaterTools::LLFloaterTools(const LLSD& key) mCommitCallbackRegistrar.add("BuildTool.CopyKeys", boost::bind(&LLFloaterTools::onClickBtnCopyKeys,this)); mCommitCallbackRegistrar.add("BuildTool.Expand", boost::bind(&LLFloaterTools::onClickExpand,this)); + + mLandImpactsObserver = new LLLandImpactsObserver(); + LLViewerParcelMgr::getInstance()->addObserver(mLandImpactsObserver); } LLFloaterTools::~LLFloaterTools() { // children automatically deleted gFloaterTools = NULL; + + LLViewerParcelMgr::getInstance()->removeObserver(mLandImpactsObserver); + delete mLandImpactsObserver; } void LLFloaterTools::setStatusText(const std::string& text) @@ -547,7 +575,8 @@ void LLFloaterTools::refresh() if (sShowObjectCost) { std::string prim_cost_string; - LLResMgr::getInstance()->getIntegerString(prim_cost_string, calcRenderCost()); + S32 render_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedObjectRenderCost(); + LLResMgr::getInstance()->getIntegerString(prim_cost_string, render_cost); getChild("RenderingCost")->setTextArg("[COUNT]", prim_cost_string); } @@ -561,49 +590,44 @@ void LLFloaterTools::refresh() else #endif { - F32 link_phys_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetPhysicsCost(); F32 link_cost = LLSelectMgr::getInstance()->getSelection()->getSelectedLinksetCost(); - S32 prim_count = LLSelectMgr::getInstance()->getSelection()->getObjectCount(); S32 link_count = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount(); + LLCrossParcelFunctor func; + if (LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, true)) + { + // Selection crosses parcel bounds. + // We don't display remaining land capacity in this case. + const LLStringExplicit empty_str(""); + childSetTextArg("remaining_capacity", "[CAPACITY_STRING]", empty_str); + } + else + { + LLViewerObject* selected_object = mObjectSelection->getFirstObject(); + if (selected_object) + { + // Select a parcel at the currently selected object's position. + LLViewerParcelMgr::getInstance()->selectParcelAt(selected_object->getPositionGlobal()); + } + else + { + llwarns << "Failed to get selected object" << llendl; + } + } + LLStringUtil::format_map_t selection_args; selection_args["OBJ_COUNT"] = llformat("%.1d", link_count); - selection_args["PRIM_COUNT"] = llformat("%.1d", prim_count); + selection_args["LAND_IMPACT"] = llformat("%.1d", (S32)link_cost); std::ostringstream selection_info; - bool show_adv_weight = gSavedSettings.getBOOL("ShowAdvancedBuilderOptions"); - bool show_mesh_cost = gMeshRepo.meshRezEnabled(); - - if (show_mesh_cost) - { - LLStringUtil::format_map_t prim_equiv_args; - prim_equiv_args["SEL_WEIGHT"] = llformat("%.1d", (S32)link_cost); - selection_args["PE_STRING"] = getString("status_selectprimequiv", prim_equiv_args); - } - else - { - selection_args["PE_STRING"] = ""; - } - selection_info << getString("status_selectcount", selection_args); - if (show_adv_weight) - { - selection_info << ","; - - childSetTextArg("selection_weight", "[PHYS_WEIGHT]", llformat("%.1f", link_phys_cost)); - childSetTextArg("selection_weight", "[DISP_WEIGHT]", llformat("%.1d", calcRenderCost())); - } - else - { - selection_info<<"."; - } getChild("selection_count")->setText(selection_info.str()); bool have_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty(); childSetVisible("selection_count", have_selection); - childSetVisible("selection_weight", have_selection && show_adv_weight); + childSetVisible("remaining_capacity", have_selection); childSetVisible("selection_empty", !have_selection); } @@ -622,6 +646,13 @@ void LLFloaterTools::refresh() refreshMedia(); mPanelContents->refresh(); mPanelLandInfo->refresh(); + + // Refresh the advanced weights floater + LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::getTypedInstance("object_weights"); + if(object_weights_floater && object_weights_floater->getVisible()) + { + object_weights_floater->refresh(); + } } void LLFloaterTools::draw() @@ -923,7 +954,7 @@ void LLFloaterTools::updatePopup(LLCoordGL center, MASK mask) bool have_selection = !LLSelectMgr::getInstance()->getSelection()->isEmpty(); getChildView("selection_count")->setVisible(!land_visible && have_selection); - getChildView("selection_weight")->setVisible(!land_visible && have_selection && gSavedSettings.getBOOL("ShowAdvancedBuilderOptions")); + getChildView("remaining_capacity")->setVisible(!land_visible && have_selection); getChildView("selection_empty")->setVisible(!land_visible && !have_selection); //mTab->setVisible(!land_visible); @@ -1001,6 +1032,9 @@ void LLFloaterTools::onClose(bool app_quitting) //gMenuBarView->setItemVisible("BuildTools", FALSE); LLFloaterReg::hideInstance("media_settings"); + + // hide the advanced object weights floater + LLFloaterReg::hideInstance("object_weights"); } void click_popup_info(void*) @@ -1198,35 +1232,6 @@ void LLFloaterTools::onClickGridOptions() //floaterp->addDependentFloater(LLFloaterBuildOptions::getInstance(), FALSE); } -S32 LLFloaterTools::calcRenderCost() -{ - S32 cost = 0; - std::set textures; - - for (LLObjectSelection::iterator selection_iter = LLSelectMgr::getInstance()->getSelection()->begin(); - selection_iter != LLSelectMgr::getInstance()->getSelection()->end(); - ++selection_iter) - { - LLSelectNode *select_node = *selection_iter; - if (select_node) - { - LLViewerObject *vobj = select_node->getObject(); - if (vobj->getVolume()) - { - LLVOVolume* volume = (LLVOVolume*) vobj; - - cost += volume->getRenderCost(textures); - cost += textures.size() * LLVOVolume::ARC_TEXTURE_COST; - textures.clear(); - } - } - } - - - return cost; -} - - // static void LLFloaterTools::setEditTool(void* tool_pointer) { @@ -1302,6 +1307,37 @@ bool LLFloaterTools::selectedMediaEditable() return selected_Media_editable; } +void LLFloaterTools::updateLandImpacts() +{ + LLParcel *parcel = mParcelSelection->getParcel(); + if (!parcel) + { + return; + } + + S32 rezzed_prims = parcel->getSimWidePrimCount(); + S32 total_capacity = parcel->getSimWideMaxPrimCapacity(); + + std::string remaining_capacity_str = ""; + + bool show_mesh_cost = gMeshRepo.meshRezEnabled(); + if (show_mesh_cost) + { + LLStringUtil::format_map_t remaining_capacity_args; + remaining_capacity_args["LAND_CAPACITY"] = llformat("%d", total_capacity - rezzed_prims); + remaining_capacity_str = getString("status_remaining_capacity", remaining_capacity_args); + } + + childSetTextArg("remaining_capacity", "[CAPACITY_STRING]", remaining_capacity_str); + + // Update land impacts info in the weights floater + LLFloaterObjectWeights* object_weights_floater = LLFloaterReg::getTypedInstance("object_weights"); + if(object_weights_floater) + { + object_weights_floater->updateLandImpacts(parcel); + } +} + void LLFloaterTools::getMediaState() { LLObjectSelectionHandle selected_objects =LLSelectMgr::getInstance()->getSelection(); diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h index 5115c7e438..e9fe7fcb2e 100644 --- a/indra/newview/llfloatertools.h +++ b/indra/newview/llfloatertools.h @@ -48,6 +48,7 @@ class LLMediaCtrl; class LLTool; class LLParcelSelection; class LLObjectSelection; +class LLLandImpactsObserver; typedef LLSafeHandle LLObjectSelectionHandle; @@ -104,6 +105,7 @@ public: void updateMediaTitle(); void navigateToTitleMedia( const std::string url ); bool selectedMediaEditable(); + void updateLandImpacts(); void onClickBtnCopyKeys(); void onClickExpand(); @@ -117,7 +119,6 @@ private: static bool multipleFacesSelectedConfirm(const LLSD& notification, const LLSD& response); static void setObjectType( LLPCode pcode ); void onClickGridOptions(); - S32 calcRenderCost(); public: LLButton *mBtnFocus; @@ -189,6 +190,8 @@ public: LLTabContainer* mTabLand; + LLLandImpactsObserver* mLandImpactsObserver; + LLParcelSelectionHandle mParcelSelection; LLObjectSelectionHandle mObjectSelection; diff --git a/indra/newview/llfloatervoiceeffect.cpp b/indra/newview/llfloatervoiceeffect.cpp index 2a3950f9b1..030fed0575 100644 --- a/indra/newview/llfloatervoiceeffect.cpp +++ b/indra/newview/llfloatervoiceeffect.cpp @@ -145,7 +145,7 @@ void LLFloaterVoiceEffect::refreshEffectList() for (voice_effect_list_t::const_iterator it = template_list.begin(); it != template_list.end(); ++it) { const LLUUID& effect_id = it->second; - std::string effect_name = it->first; + std::string effect_name = getString("effect_" + it->first); // will throw an error if the effect is not listed in the XML LLSD effect_properties = effect_interface->getVoiceEffectProperties(effect_id); diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp index 03e90a3d27..2c9a736aff 100644 --- a/indra/newview/llfloaterwebcontent.cpp +++ b/indra/newview/llfloaterwebcontent.cpp @@ -229,10 +229,8 @@ void LLFloaterWebContent::open_media(const Params& p) getChild("status_bar")->setVisible(p.show_chrome); getChild("nav_controls")->setVisible(p.show_chrome); bool address_entry_enabled = p.allow_address_entry && !p.trusted_content; - // disable components of combo box so that we can still select and copy text from address bar (a disabled line editor still allows this, but not if its parent is disabled) - getChildView("address")->getChildView("Combo Text Entry")->setEnabled(address_entry_enabled); - getChildView("address")->getChildView("Combobox Button")->setEnabled(address_entry_enabled); - getChildView("address")->getChildView("ComboBox")->setEnabled(address_entry_enabled); + getChildView("address")->setEnabled(address_entry_enabled); + getChildView("popexternal")->setEnabled(address_entry_enabled); if (!address_entry_enabled) { diff --git a/indra/newview/llfolderview.cpp b/indra/newview/llfolderview.cpp index 42ee36a21b..56712b8920 100644 --- a/indra/newview/llfolderview.cpp +++ b/indra/newview/llfolderview.cpp @@ -181,6 +181,7 @@ LLFolderView::Params::Params() // Default constructor LLFolderView::LLFolderView(const Params& p) : LLFolderViewFolder(p), + mRunningHeight(0), mScrollContainer( NULL ), mPopupMenuHandle(), mAllowMultiSelect(p.allow_multiselect), @@ -480,6 +481,7 @@ S32 LLFolderView::arrange( S32* unused_width, S32* unused_height, S32 filter_gen target_height = running_height; } + mRunningHeight = running_height; LLRect scroll_rect = mScrollContainer->getContentWindowRect(); reshape( llmax(scroll_rect.getWidth(), total_width), running_height ); @@ -525,9 +527,11 @@ void LLFolderView::reshape(S32 width, S32 height, BOOL called_from_parent) LLRect scroll_rect; if (mScrollContainer) { + LLView::reshape(width, height, called_from_parent); scroll_rect = mScrollContainer->getContentWindowRect(); } width = llmax(mMinWidth, scroll_rect.getWidth()); + height = llmax(mRunningHeight, scroll_rect.getHeight()); // restrict width with scroll container's width if (mUseEllipses) @@ -721,8 +725,8 @@ void LLFolderView::sanitizeSelection() // is a good candidate for further optimizations. if( !mSelectionChanged ) return; - mSelectionChanged = false; + LLFastTimer _(FTM_SANITIZE_SELECTION); // store off current item in case it is automatically deselected // and we want to preserve context @@ -1017,6 +1021,33 @@ void LLFolderView::removeSelectedItems( void ) LLNotificationsUtil::add("DeleteItems", args, LLSD(), boost::bind(&LLFolderView::onItemsRemovalConfirmation, this, _1, _2)); } +bool isDescendantOfASelectedItem(LLFolderViewItem* item, const std::vector& selectedItems) +{ + LLFolderViewItem* item_parent = dynamic_cast(item->getParent()); + + if (item_parent) + { + for(std::vector::const_iterator it = selectedItems.begin(); it != selectedItems.end(); ++it) + { + const LLFolderViewItem* const selected_item = (*it); + + LLFolderViewItem* parent = item_parent; + + while (parent) + { + if (selected_item == parent) + { + return true; + } + + parent = dynamic_cast(parent->getParent()); + } + } + } + + return false; +} + void LLFolderView::onItemsRemovalConfirmation(const LLSD& notification, const LLSD& response) { S32 option = LLNotificationsUtil::getSelectedOption(notification, response); @@ -1091,7 +1122,7 @@ void LLFolderView::onItemsRemovalConfirmation(const LLSD& notification, const LL if (!new_selection) { new_selection = last_item->getPreviousOpenNode(FALSE); - while (new_selection && new_selection->isSelected()) + while (new_selection && (new_selection->isSelected() || isDescendantOfASelectedItem(new_selection, items))) { new_selection = new_selection->getPreviousOpenNode(FALSE); } @@ -1715,7 +1746,7 @@ BOOL LLFolderView::handleUnicodeCharHere(llwchar uni_char) } BOOL handled = FALSE; - if (gFocusMgr.childHasKeyboardFocus(getRoot())) + if (mParentPanel->hasFocus()) { // SL-51858: Key presses are not being passed to the Popup menu. // A proper fix is non-trivial so instead just close the menu. @@ -1928,21 +1959,26 @@ BOOL LLFolderView::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, std::string& tooltip_msg) { mDragAndDropThisFrame = TRUE; + // have children handle it first BOOL handled = LLView::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); - // When there are no visible children drag and drop is handled + // when drop is not handled by child, it should be handled // by the folder which is the hierarchy root. - if (!handled && !hasVisibleChildren()) + if (!handled) { - if (mFolders.empty()) - { - handled = handleDragAndDropFromChild(mask,drop,cargo_type,cargo_data,accept,tooltip_msg); - } + if (getListener()->getUUID().notNull()) + { + handled = LLFolderViewFolder::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); + } else { - handled = mFolders.front()->handleDragAndDropFromChild(mask,drop,cargo_type,cargo_data,accept,tooltip_msg); - } + if (!mFolders.empty()) + { + // dispatch to last folder as a hack to support "Contents" folder in object inventory + handled = mFolders.back()->handleDragAndDropFromChild(mask,drop,cargo_type,cargo_data,accept,tooltip_msg); + } + } } if (handled) @@ -2067,8 +2103,10 @@ void LLFolderView::removeItemID(const LLUUID& id) mItemMap.erase(id); } +LLFastTimer::DeclareTimer FTM_GET_ITEM_BY_ID("Get FolderViewItem by ID"); LLFolderViewItem* LLFolderView::getItemByID(const LLUUID& id) { + LLFastTimer _(FTM_GET_ITEM_BY_ID); if (id == getListener()->getUUID()) { return this; diff --git a/indra/newview/llfolderview.h b/indra/newview/llfolderview.h index b5513cae67..22551329c9 100644 --- a/indra/newview/llfolderview.h +++ b/indra/newview/llfolderview.h @@ -315,6 +315,7 @@ protected: signal_t mReshapeSignal; S32 mSignalSelectCallback; S32 mMinWidth; + S32 mRunningHeight; std::map mItemMap; BOOL mDragAndDropThisFrame; diff --git a/indra/newview/llfoldervieweventlistener.h b/indra/newview/llfoldervieweventlistener.h index 3bfbf36110..aee31ca033 100644 --- a/indra/newview/llfoldervieweventlistener.h +++ b/indra/newview/llfoldervieweventlistener.h @@ -96,7 +96,8 @@ public: // otherwise FALSE. virtual BOOL dragOrDrop(MASK mask, BOOL drop, EDragAndDropType cargo_type, - void* cargo_data) = 0; + void* cargo_data, + std::string& tooltip_msg) = 0; }; #endif diff --git a/indra/newview/llfolderviewitem.cpp b/indra/newview/llfolderviewitem.cpp index 2ceef6ddbc..c954d730f6 100644 --- a/indra/newview/llfolderviewitem.cpp +++ b/indra/newview/llfolderviewitem.cpp @@ -105,10 +105,7 @@ LLFolderViewItem::Params::Params() item_height("item_height"), item_top_pad("item_top_pad"), creation_date() -{ - mouse_opaque(true); - follows.flags(FOLLOWS_LEFT|FOLLOWS_TOP|FOLLOWS_RIGHT); -} +{} // Default constructor LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p) @@ -136,7 +133,8 @@ LLFolderViewItem::LLFolderViewItem(const LLFolderViewItem::Params& p) mIconOpen(p.icon_open), mIconOverlay(p.icon_overlay), mListener(p.listener), - mShowLoadStatus(false) + mShowLoadStatus(false), + mIsMouseOverTitle(false) { } @@ -288,9 +286,9 @@ void LLFolderViewItem::refreshFromListener() setToolTip(mLabel); setIcon(mListener->getIcon()); time_t creation_date = mListener->getCreationDate(); - if (mCreationDate != creation_date) + if ((creation_date > 0) && (mCreationDate != creation_date)) { - setCreationDate(mListener->getCreationDate()); + setCreationDate(creation_date); dirtyFilter(); } if (mRoot->useLabelSuffix()) @@ -728,6 +726,8 @@ BOOL LLFolderViewItem::handleMouseDown( S32 x, S32 y, MASK mask ) BOOL LLFolderViewItem::handleHover( S32 x, S32 y, MASK mask ) { + mIsMouseOverTitle = (y > (getRect().getHeight() - mItemHeight)); + if( hasMouseCapture() && isMovable() ) { S32 screen_x; @@ -834,6 +834,11 @@ BOOL LLFolderViewItem::handleMouseUp( S32 x, S32 y, MASK mask ) return TRUE; } +void LLFolderViewItem::onMouseLeave(S32 x, S32 y, MASK mask) +{ + mIsMouseOverTitle = false; +} + BOOL LLFolderViewItem::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void* cargo_data, @@ -844,7 +849,7 @@ BOOL LLFolderViewItem::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, BOOL handled = FALSE; if(mListener) { - accepted = mListener->dragOrDrop(mask,drop,cargo_type,cargo_data); + accepted = mListener->dragOrDrop(mask,drop,cargo_type,cargo_data, tooltip_msg); handled = accepted; if (accepted) { @@ -884,6 +889,7 @@ void LLFolderViewItem::draw() static LLUIColor sLinkColor = LLUIColorTable::instance().getColor("InventoryItemLinkColor", DEFAULT_WHITE); static LLUIColor sSearchStatusColor = LLUIColorTable::instance().getColor("InventorySearchStatusColor", DEFAULT_WHITE); static LLUIColor sProtectedColor = LLUIColorTable::instance().getColor("InventoryProtectedColor", DEFAULT_WHITE); // ## Zi: Animation Overrider + static LLUIColor sMouseOverColor = LLUIColorTable::instance().getColor("InventoryMouseOverColor", DEFAULT_WHITE); const Params& default_params = LLUICtrlFactory::getDefaultParams(); const S32 TOP_PAD = default_params.item_top_pad; @@ -965,6 +971,14 @@ void LLFolderViewItem::draw() } } } + else if (mIsMouseOverTitle) + { + gl_rect_2d(FOCUS_LEFT, + focus_top, + getRect().getWidth() - 2, + focus_bottom, + sMouseOverColor, FALSE); + } //--------------------------------------------------------------------------------// // Draw DragNDrop highlight @@ -2064,23 +2078,42 @@ BOOL LLFolderViewFolder::isRemovable() BOOL LLFolderViewFolder::addItem(LLFolderViewItem* item) { mItems.push_back(item); + if (item->isSelected()) { recursiveIncrementNumDescendantsSelected(1); } + item->setRect(LLRect(0, 0, getRect().getWidth(), 0)); item->setVisible(FALSE); - addChild( item ); + + addChild(item); + item->dirtyFilter(); + + // Update the folder creation date if the child is newer than our current date + setCreationDate(llmax(mCreationDate, item->getCreationDate())); + + // Handle sorting requestArrange(); requestSort(); + + // Traverse parent folders and update creation date and resort, if necessary LLFolderViewFolder* parentp = getParentFolder(); - while (parentp && parentp->mSortFunction.isByDate()) + while (parentp) { - // parent folder doesn't have a time stamp yet, so get it from us - parentp->requestSort(); + // Update the folder creation date if the child is newer than our current date + parentp->setCreationDate(llmax(parentp->mCreationDate, item->getCreationDate())); + + if (parentp->mSortFunction.isByDate()) + { + // parent folder doesn't have a time stamp yet, so get it from us + parentp->requestSort(); + } + parentp = parentp->getParentFolder(); } + return TRUE; } @@ -2195,7 +2228,7 @@ BOOL LLFolderViewFolder::handleDragAndDropFromChild(MASK mask, EAcceptance* accept, std::string& tooltip_msg) { - BOOL accepted = mListener && mListener->dragOrDrop(mask,drop,c_type,cargo_data); + BOOL accepted = mListener && mListener->dragOrDrop(mask,drop,c_type,cargo_data, tooltip_msg); if (accepted) { mDragAndDropTarget = TRUE; @@ -2287,7 +2320,7 @@ BOOL LLFolderViewFolder::handleDragAndDrop(S32 x, S32 y, MASK mask, if (!handled) { - BOOL accepted = mListener && mListener->dragOrDrop(mask, drop,cargo_type,cargo_data); + BOOL accepted = mListener && mListener->dragOrDrop(mask, drop,cargo_type,cargo_data, tooltip_msg); if (accepted) { @@ -2332,6 +2365,8 @@ BOOL LLFolderViewFolder::handleRightMouseDown( S32 x, S32 y, MASK mask ) BOOL LLFolderViewFolder::handleHover(S32 x, S32 y, MASK mask) { + mIsMouseOverTitle = (y > (getRect().getHeight() - mItemHeight)); + BOOL handled = LLView::handleHover(x, y, mask); if (!handled) @@ -2451,41 +2486,6 @@ void LLFolderViewFolder::draw() time_t LLFolderViewFolder::getCreationDate() const { - // folders have no creation date try to create one from an item somewhere in our folder hierarchy - if (!mCreationDate) - { - for (items_t::const_iterator iit = mItems.begin(); - iit != mItems.end(); ++iit) - { - LLFolderViewItem* itemp = (*iit); - - const time_t item_creation_date = itemp->getCreationDate(); - - if (item_creation_date) - { - setCreationDate(item_creation_date); - break; - } - } - - if (!mCreationDate) - { - for (folders_t::const_iterator fit = mFolders.begin(); - fit != mFolders.end(); ++fit) - { - LLFolderViewFolder* folderp = (*fit); - - const time_t folder_creation_date = folderp->getCreationDate(); - - if (folder_creation_date) - { - setCreationDate(folder_creation_date); - break; - } - } - } - } - return llmax(mCreationDate, mSubtreeCreationDate); } diff --git a/indra/newview/llfolderviewitem.h b/indra/newview/llfolderviewitem.h index 03eb1b4363..914ef02df0 100644 --- a/indra/newview/llfolderviewitem.h +++ b/indra/newview/llfolderviewitem.h @@ -136,7 +136,7 @@ protected: std::string mSearchableLabel; S32 mLabelWidth; bool mLabelWidthDirty; - mutable time_t mCreationDate; + time_t mCreationDate; LLFolderViewFolder* mParentFolder; LLFolderViewEventListener* mListener; BOOL mIsCurSelection; @@ -159,6 +159,7 @@ protected: BOOL mIsLoading; LLTimer mTimeSinceRequestStart; bool mShowLoadStatus; + bool mIsMouseOverTitle; // helper function to change the selection from the root. void changeSelectionFromRoot(LLFolderViewItem* selection, BOOL selected); @@ -173,7 +174,7 @@ protected: static LLFontGL* getLabelFontForStyle(U8 style); - virtual void setCreationDate(time_t creation_date_utc) const { mCreationDate = creation_date_utc; } + virtual void setCreationDate(time_t creation_date_utc) { mCreationDate = creation_date_utc; } public: BOOL postBuild(); @@ -328,6 +329,8 @@ public: virtual BOOL handleMouseUp( S32 x, S32 y, MASK mask ); virtual BOOL handleDoubleClick( S32 x, S32 y, MASK mask ); + virtual void onMouseLeave(S32 x, S32 y, MASK mask); + virtual LLView* findChildView(const std::string& name, BOOL recurse) const { return NULL; } // virtual void handleDropped(); diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp index 7138d3f242..dc6703d447 100644 --- a/indra/newview/llinventorybridge.cpp +++ b/indra/newview/llinventorybridge.cpp @@ -78,6 +78,9 @@ #include "aoengine.h" //-TT +// Marketplace outbox current disabled +#define ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU 0 // keep in sync with ENABLE_INVENTORY_DISPLAY_OUTBOX, ENABLE_MERCHANT_OUTBOX_PANEL + typedef std::pair two_uuids_t; typedef std::list two_uuids_list_t; @@ -118,6 +121,23 @@ bool confirm_attachment_rez(const LLSD& notification, const LLSD& response); void teleport_via_landmark(const LLUUID& asset_id); static BOOL can_move_to_outfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit); +// Helper functions + +bool isAddAction(const std::string& action) +{ + return ("wear" == action || "attach" == action || "activate" == action); +} + +bool isRemoveAction(const std::string& action) +{ + return ("take_off" == action || "detach" == action || "deactivate" == action); +} + +bool isMarketplaceCopyAction(const std::string& action) +{ + return (("copy_to_outbox" == action) || ("move_to_outbox" == action)); +} + // +=================================================+ // | LLInvFVBridge | // +=================================================+ @@ -568,10 +588,14 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, { items.push_back(std::string("Find Links")); } - items.push_back(std::string("Rename")); - if (!isItemRenameable() || (flags & FIRST_SELECTED_ITEM) == 0 || isProtectedFolder()) + + if (!isInboxFolder()) { - disabled_items.push_back(std::string("Rename")); + items.push_back(std::string("Rename")); + if (!isItemRenameable() || (flags & FIRST_SELECTED_ITEM) == 0 || isProtectedFolder()) + { + disabled_items.push_back(std::string("Rename")); + } } if (show_asset_id) @@ -592,16 +616,26 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, disabled_items.push_back(std::string("Copy Asset UUID")); } } -/* - items.push_back(std::string("Copy Separator")); - - items.push_back(std::string("Copy")); - if (!isItemCopyable()) + + if (canListOnMarketplace()) { - disabled_items.push_back(std::string("Copy")); + items.push_back(std::string("Marketplace Separator")); + + bool copyable = true; + LLViewerInventoryItem* inv_item = gInventory.getItem(mUUID); + if (inv_item) + { + copyable = inv_item->getPermissions().allowCopyBy(gAgent.getID()); + } + + const std::string merchant_action = ((copyable == true) ? "Merchant Copy" : "Merchant Move"); + items.push_back(merchant_action); + + if (!canListOnMarketplaceNow()) + { + disabled_items.push_back(merchant_action); + } } -*/ - items.push_back(std::string("Cut")); } } @@ -616,11 +650,10 @@ void LLInvFVBridge::getClipboardEntries(bool show_asset_id, // [/SL:KB] // Don't allow items to be pasted directly into the COF or the inbox - if (!isCOFFolder() && !isInboxFolder() + if (!isCOFFolder() && !isInboxFolder() && !isOutboxFolder() //-TT Client LSL Bridge (also for #AO) - && !isProtectedFolder() + && !isProtectedFolder()) //-TT - ) { items.push_back(std::string("Paste")); } @@ -661,6 +694,10 @@ void LLInvFVBridge::buildContextMenu(LLMenuGL& menu, U32 flags) if(isItemInTrash()) { addTrashContextMenuOptions(items, disabled_items); + } + else if(isOutboxFolder()) + { + items.push_back(std::string("Delete")); } else { @@ -894,6 +931,25 @@ BOOL LLInvFVBridge::isInboxFolder() const return gInventory.isObjectDescendentOf(mUUID, inbox_id); } +BOOL LLInvFVBridge::isOutboxFolder() const +{ + const LLUUID outbox_id = getOutboxFolder(); + + if (outbox_id.isNull()) + { + return FALSE; + } + + return gInventory.isObjectDescendentOf(mUUID, outbox_id); +} + +const LLUUID LLInvFVBridge::getOutboxFolder() const +{ + const LLUUID outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false); + + return outbox_id; +} + BOOL LLInvFVBridge::isItemPermissive() const { return FALSE; @@ -1038,9 +1094,14 @@ LLInvFVBridge* LLInvFVBridge::createBridge(LLAssetType::EType asset_type, new_listener = new LLMeshBridge(inventory, root, uuid); break; + case LLAssetType::AT_IMAGE_TGA: + case LLAssetType::AT_IMAGE_JPEG: + //llwarns << LLAssetType::lookup(asset_type) << " asset type is unhandled for uuid " << uuid << llendl; + break; + default: llinfos << "Unhandled asset type (llassetstorage.h): " - << (S32)asset_type << llendl; + << (S32)asset_type << " (" << LLAssetType::lookup(asset_type) << ")" << llendl; break; } @@ -1089,6 +1150,65 @@ BOOL LLInvFVBridge::canShare() const return FALSE; } +BOOL LLInvFVBridge::canListOnMarketplace() const +{ +#if ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU + LLInventoryModel * model = getInventoryModel(); + const LLViewerInventoryCategory * cat = model->getCategory(mUUID); + if (cat && LLFolderType::lookupIsProtectedType(cat->getPreferredType())) + { + return FALSE; + } + + if (!isAgentInventory()) + { + return FALSE; + } + + if (getOutboxFolder().isNull()) + { + return FALSE; + } + + if (isInboxFolder() || isOutboxFolder()) + { + return FALSE; + } + + LLViewerInventoryItem * item = model->getItem(mUUID); + if (item && !item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID())) + { + return FALSE; + } + + return TRUE; +#else + return FALSE; +#endif +} + +BOOL LLInvFVBridge::canListOnMarketplaceNow() const +{ +#if ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU + if (get_is_item_worn(mUUID)) + { + return FALSE; + } + + // Loop through all items worn by avatar and check to see if they are descendants + // of the item we are trying to list on the marketplace + if (get_is_parent_to_worn_item(mUUID)) + { + return FALSE; + } + + return TRUE; +#else + return FALSE; +#endif +} + + // +=================================================+ // | InventoryFVBridgeBuilder | // +=================================================+ @@ -1191,6 +1311,16 @@ void LLItemBridge::performAction(LLInventoryModel* model, std::string action) folder_view_itemp->getListener()->pasteLinkFromClipboard(); return; } + else if (isMarketplaceCopyAction(action)) + { + llinfos << "Copy item to marketplace action!" << llendl; + + LLInventoryItem* itemp = model->getItem(mUUID); + if (!itemp) return; + + const LLUUID outbox_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false); + copy_item_to_outbox(itemp, outbox_id, LLUUID::null); + } } void LLItemBridge::selectItem() @@ -1331,7 +1461,7 @@ std::string LLItemBridge::getLabelSuffix() const { // String table is loaded before login screen and inventory items are // loaded after login, so LLTrans should be ready. - static std::string NO_COPY =LLTrans::getString("no_copy"); + static std::string NO_COPY = LLTrans::getString("no_copy"); static std::string NO_MOD = LLTrans::getString("no_modify"); static std::string NO_XFER = LLTrans::getString("no_transfer"); static std::string LINK = LLTrans::getString("link"); @@ -1340,16 +1470,17 @@ std::string LLItemBridge::getLabelSuffix() const LLInventoryItem* item = getItem(); if(item) { - // it's a bit confusing to put nocopy/nomod/etc on calling cards. + // Any type can have the link suffix... + BOOL broken_link = LLAssetType::lookupIsLinkType(item->getType()); + if (broken_link) return BROKEN_LINK; + + BOOL link = item->getIsLinkType(); + if (link) return LINK; + + // ...but it's a bit confusing to put nocopy/nomod/etc suffixes on calling cards. if(LLAssetType::AT_CALLINGCARD != item->getType() && item->getPermissions().getOwner() == gAgent.getID()) { - BOOL broken_link = LLAssetType::lookupIsLinkType(item->getType()); - if (broken_link) return BROKEN_LINK; - - BOOL link = item->getIsLinkType(); - if (link) return LINK; - BOOL copy = item->getPermissions().allowCopyBy(gAgent.getID()); if (!copy) { @@ -1399,6 +1530,11 @@ BOOL LLItemBridge::isItemRenameable() const return FALSE; } + if (isInboxFolder()) + { + return FALSE; + } + // [RLVa:KB] - Checked: 2011-03-29 (RLVa-1.3.0g) | Modified: RLVa-1.3.0g if ( (rlv_handler_t::isEnabled()) && (!RlvFolderLocks::instance().canRenameItem(mUUID)) ) { @@ -1588,16 +1724,6 @@ BOOL LLItemBridge::isItemPermissive() const return FALSE; } -bool LLItemBridge::isAddAction(std::string action) const -{ - return ("wear" == action || "attach" == action || "activate" == action); -} - -bool LLItemBridge::isRemoveAction(std::string action) const -{ - return ("take_off" == action || "detach" == action || "deactivate" == action); -} - // +=================================================+ // | LLFolderBridge | // +=================================================+ @@ -1779,8 +1905,77 @@ BOOL LLFolderBridge::isClipboardPasteableAsLink() const } +static BOOL can_move_to_outbox(LLInventoryItem* inv_item, std::string& tooltip_msg) +{ + bool worn = get_is_item_worn(inv_item->getUUID()); + bool allow_transfer = inv_item->getPermissions().allowOperationBy(PERM_TRANSFER, gAgent.getID()); + + if (!allow_transfer) + { + tooltip_msg = LLTrans::getString("TooltipOutboxNoTransfer"); + } + else if(worn) + { + tooltip_msg = LLTrans::getString("TooltipOutboxWorn"); + } + + return !worn && allow_transfer; +} + + + +void LLFolderBridge::dropFolderToOutbox(LLInventoryCategory* inv_cat) +{ + copy_folder_to_outbox(inv_cat, getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false), inv_cat->getUUID()); +} + + + +int get_folder_levels(LLInventoryCategory* inv_cat) +{ + LLInventoryModel::cat_array_t* cats; + LLInventoryModel::item_array_t* items; + gInventory.getDirectDescendentsOf(inv_cat->getUUID(), cats, items); + + int max_child_levels = 0; + + for (S32 i=0; i < cats->count(); ++i) + { + LLInventoryCategory* category = cats->get(i); + max_child_levels = llmax(max_child_levels, get_folder_levels(category)); + } + + return 1 + max_child_levels; +} + +int get_folder_path_length(const LLUUID& ancestor_id, const LLUUID& descendant_id) +{ + int depth = 0; + + if (ancestor_id == descendant_id) return depth; + + const LLInventoryCategory* category = gInventory.getCategory(descendant_id); + + while(category) + { + LLUUID parent_id = category->getParentUUID(); + + if (parent_id.isNull()) break; + + depth++; + + if (parent_id == ancestor_id) return depth; + + category = gInventory.getCategory(parent_id); + } + + llwarns << "get_folder_path_length() couldn't trace a path from the descendant to the ancestor" << llendl; + return -1; +} + BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, - BOOL drop) + BOOL drop, + std::string& tooltip_msg) { LLInventoryModel* model = getInventoryModel(); @@ -1805,10 +2000,13 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, const LLUUID &cat_id = inv_cat->getUUID(); const LLUUID &trash_id = model->findCategoryUUIDForType(LLFolderType::FT_TRASH, false); const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false); - + const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false); + const BOOL move_is_into_trash = (mUUID == trash_id) || model->isObjectDescendentOf(mUUID, trash_id); const BOOL move_is_into_outfit = getCategory() && (getCategory()->getPreferredType() == LLFolderType::FT_OUTFIT); const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id); + const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id); + const BOOL move_is_from_outbox = model->isObjectDescendentOf(inv_cat->getUUID(), outbox_id); //-------------------------------------------------------------------------------- // Determine if folder can be moved. @@ -1861,6 +2059,27 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, } } } + if (move_is_into_outbox) + { + for (S32 i=0; i < descendent_items.count(); ++i) + { + LLInventoryItem* item = descendent_items[i]; + if (!can_move_to_outbox(item, tooltip_msg)) + { + is_movable = FALSE; + break; + } + } + + int nested_folder_levels = get_folder_path_length(outbox_id, mUUID) + get_folder_levels(inv_cat); + + if (nested_folder_levels > 4) + { + tooltip_msg = LLTrans::getString("TooltipOutboxFolderLevels"); + is_movable = FALSE; + } + + } // [RLVa:KB] - Checked: 2011-03-29 (RLVa-1.3.0g) | Added: RLVa-1.3.0g if ( (is_movable) && (rlv_handler_t::isEnabled()) && (RlvFolderLocks::instance().hasLockedFolder(RLV_LOCK_ANY)) ) @@ -1935,6 +2154,10 @@ BOOL LLFolderBridge::dragCategoryIntoFolder(LLInventoryCategory* inv_cat, #endif } } + if (move_is_into_outbox && !move_is_from_outbox) + { + dropFolderToOutbox(inv_cat); + } else { if (gInventory.isObjectDescendentOf(inv_cat->getUUID(), gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false))) @@ -2379,6 +2602,16 @@ void LLFolderBridge::performAction(LLInventoryModel* model, std::string action) removeSystemFolder(); } #endif + else if (isMarketplaceCopyAction(action)) + { + llinfos << "Copy folder to marketplace action!" << llendl; + + LLInventoryCategory * cat = gInventory.getCategory(mUUID); + if (!cat) return; + + const LLUUID outbox_id = getInventoryModel()->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false); + copy_folder_to_outbox(cat, outbox_id, cat->getUUID()); + } } void LLFolderBridge::openItem() @@ -2714,6 +2947,7 @@ void LLFolderBridge::folderOptionsMenu() if (trash_id == mUUID) return; if (isItemInTrash()) return; if (!isAgentInventory()) return; + if (isOutboxFolder()) return; LLFolderType::EType type = category->getPreferredType(); const bool is_system_folder = LLFolderType::lookupIsProtectedType(type); @@ -2859,6 +3093,10 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) mItems.clear(); // clear any items that used to exist addTrashContextMenuOptions(mItems, mDisabledItems); } + else if(isOutboxFolder()) + { + mItems.push_back(std::string("Delete")); + } else if(isAgentInventory() //-TT Client LSL Bridge (also for #AO) && !isProtectedFolder() @@ -2870,7 +3108,7 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) // Not sure what the right thing is to do here. if (!isCOFFolder() && cat && (cat->getPreferredType() != LLFolderType::FT_OUTFIT)) { - if (!isInboxFolder()) // don't allow creation in inbox + if (!isInboxFolder() && !isOutboxFolder()) // don't allow creation in inbox { // Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694. if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat)) @@ -2945,10 +3183,13 @@ void LLFolderBridge::buildContextMenu(LLMenuGL& menu, U32 flags) mDisabledItems.push_back(std::string("Delete System Folder")); } - mItems.push_back(std::string("Share")); - if (!canShare()) + if (!isOutboxFolder()) { - mDisabledItems.push_back(std::string("Share")); + mItems.push_back(std::string("Share")); + if (!canShare()) + { + mDisabledItems.push_back(std::string("Share")); + } } hide_context_entries(menu, mItems, mDisabledItems); @@ -2989,7 +3230,8 @@ BOOL LLFolderBridge::hasChildren() const BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop, EDragAndDropType cargo_type, - void* cargo_data) + void* cargo_data, + std::string& tooltip_msg) { LLInventoryItem* inv_item = (LLInventoryItem*)cargo_data; @@ -3009,7 +3251,7 @@ BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop, case DAD_ANIMATION: case DAD_GESTURE: case DAD_MESH: - accept = dragItemIntoFolder(inv_item, drop); + accept = dragItemIntoFolder(inv_item, drop, tooltip_msg); break; case DAD_LINK: // DAD_LINK type might mean one of two asset types: AT_LINK or AT_LINK_FOLDER. @@ -3020,12 +3262,12 @@ BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop, LLInventoryCategory* linked_category = gInventory.getCategory(inv_item->getLinkedUUID()); if (linked_category) { - accept = dragCategoryIntoFolder((LLInventoryCategory*)linked_category, drop); + accept = dragCategoryIntoFolder((LLInventoryCategory*)linked_category, drop, tooltip_msg); } } else { - accept = dragItemIntoFolder(inv_item, drop); + accept = dragItemIntoFolder(inv_item, drop, tooltip_msg); } break; case DAD_CATEGORY: @@ -3035,7 +3277,7 @@ BOOL LLFolderBridge::dragOrDrop(MASK mask, BOOL drop, } else { - accept = dragCategoryIntoFolder((LLInventoryCategory*)cargo_data, drop); + accept = dragCategoryIntoFolder((LLInventoryCategory*)cargo_data, drop, tooltip_msg); } break; case DAD_ROOT_CATEGORY: @@ -3299,7 +3541,8 @@ void LLFolderBridge::dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_c // into the folder, as well as performing the actual drop, depending // if drop == TRUE. BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, - BOOL drop) + BOOL drop, + std::string& tooltip_msg) { LLInventoryModel* model = getInventoryModel(); @@ -3313,11 +3556,14 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, const LLUUID ¤t_outfit_id = model->findCategoryUUIDForType(LLFolderType::FT_CURRENT_OUTFIT, false); const LLUUID &favorites_id = model->findCategoryUUIDForType(LLFolderType::FT_FAVORITE, false); const LLUUID &landmarks_id = model->findCategoryUUIDForType(LLFolderType::FT_LANDMARK, false); + const LLUUID &outbox_id = model->findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false); const BOOL move_is_into_current_outfit = (mUUID == current_outfit_id); const BOOL move_is_into_favorites = (mUUID == favorites_id); const BOOL move_is_into_outfit = (getCategory() && getCategory()->getPreferredType()==LLFolderType::FT_OUTFIT); const BOOL move_is_into_landmarks = (mUUID == landmarks_id) || model->isObjectDescendentOf(mUUID, landmarks_id); + const BOOL move_is_into_outbox = model->isObjectDescendentOf(mUUID, outbox_id); //(mUUID == outbox_id); + const BOOL move_is_from_outbox = model->isObjectDescendentOf(inv_item->getUUID(), outbox_id); LLToolDragAndDrop::ESource source = LLToolDragAndDrop::getInstance()->getSource(); BOOL accept = FALSE; @@ -3401,6 +3647,10 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, { accept = can_move_to_landmarks(inv_item); } + else if (move_is_into_outbox) + { + accept = can_move_to_outbox(inv_item, tooltip_msg); + } if(accept && drop) { @@ -3451,6 +3701,10 @@ BOOL LLFolderBridge::dragItemIntoFolder(LLInventoryItem* inv_item, { dropToOutfit(inv_item, move_is_into_current_outfit); } + else if (move_is_into_outbox && !move_is_from_outbox) + { + copy_item_to_outbox(inv_item, outbox_id, LLUUID::null); + } // NORMAL or TRASH folder // (move the item, restamp if into trash) else @@ -3651,6 +3905,10 @@ void LLTextureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) if(isItemInTrash()) { addTrashContextMenuOptions(items, disabled_items); + } + else if(isOutboxFolder()) + { + items.push_back(std::string("Delete")); } else { @@ -3727,6 +3985,10 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags) if(isItemInTrash()) { addTrashContextMenuOptions(items, disabled_items); + } + else if(isOutboxFolder()) + { + items.push_back(std::string("Delete")); } else { @@ -3741,8 +4003,11 @@ void LLSoundBridge::buildContextMenu(LLMenuGL& menu, U32 flags) getClipboardEntries(true, items, disabled_items, flags); } - items.push_back(std::string("Sound Separator")); - items.push_back(std::string("Sound Play")); + if (!isOutboxFolder()) + { + items.push_back(std::string("Sound Separator")); + items.push_back(std::string("Sound Play")); + } hide_context_entries(menu, items, disabled_items); } @@ -3778,6 +4043,10 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags) if(isItemInTrash()) { addTrashContextMenuOptions(items, disabled_items); + } + else if(isOutboxFolder()) + { + items.push_back(std::string("Delete")); } else { @@ -3792,8 +4061,11 @@ void LLLandmarkBridge::buildContextMenu(LLMenuGL& menu, U32 flags) getClipboardEntries(true, items, disabled_items, flags); } - items.push_back(std::string("Landmark Separator")); - items.push_back(std::string("About Landmark")); + if (!isOutboxFolder()) + { + items.push_back(std::string("Landmark Separator")); + items.push_back(std::string("About Landmark")); + } // Disable "About Landmark" menu item for // multiple landmarks selected. Only one landmark @@ -4010,6 +4282,10 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags) if(isItemInTrash()) { addTrashContextMenuOptions(items, disabled_items); + } + else if(isOutboxFolder()) + { + items.push_back(std::string("Delete")); } else { @@ -4052,7 +4328,8 @@ void LLCallingCardBridge::buildContextMenu(LLMenuGL& menu, U32 flags) BOOL LLCallingCardBridge::dragOrDrop(MASK mask, BOOL drop, EDragAndDropType cargo_type, - void* cargo_data) + void* cargo_data, + std::string& tooltip_msg) { LLViewerInventoryItem* item = getItem(); BOOL rv = FALSE; @@ -4267,6 +4544,10 @@ void LLGestureBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { addTrashContextMenuOptions(items, disabled_items); } + else if(isOutboxFolder()) + { + items.push_back(std::string("Delete")); + } else { items.push_back(std::string("Share")); @@ -4320,6 +4601,10 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags) if(isItemInTrash()) { addTrashContextMenuOptions(items, disabled_items); + } + else if(isOutboxFolder()) + { + items.push_back(std::string("Delete")); } else { @@ -4334,9 +4619,12 @@ void LLAnimationBridge::buildContextMenu(LLMenuGL& menu, U32 flags) getClipboardEntries(true, items, disabled_items, flags); } - items.push_back(std::string("Animation Separator")); - items.push_back(std::string("Animation Play")); - items.push_back(std::string("Animation Audition")); + if (!isOutboxFolder()) + { + items.push_back(std::string("Animation Separator")); + items.push_back(std::string("Animation Play")); + items.push_back(std::string("Animation Audition")); + } hide_context_entries(menu, items, disabled_items); @@ -4627,6 +4915,10 @@ void LLObjectBridge::buildContextMenu(LLMenuGL& menu, U32 flags) if(isItemInTrash()) { addTrashContextMenuOptions(items, disabled_items); + } + else if(isOutboxFolder()) + { + items.push_back(std::string("Delete")); } else { @@ -4987,6 +5279,10 @@ void LLWearableBridge::buildContextMenu(LLMenuGL& menu, U32 flags) { addTrashContextMenuOptions(items, disabled_items); } + else if(isOutboxFolder()) + { + items.push_back(std::string("Delete")); + } else { // FWIW, it looks like SUPPRESS_OPEN_ITEM is not set anywhere BOOL can_open = ((flags & SUPPRESS_OPEN_ITEM) != SUPPRESS_OPEN_ITEM); @@ -5287,42 +5583,26 @@ BOOL LLWearableBridge::canRemoveFromAvatar(void* user_data) // static void LLWearableBridge::removeAllClothesFromAvatar() { - // Remove COF links. - for (S32 itype = LLWearableType::WT_SHAPE; itype < LLWearableType::WT_COUNT; ++itype) - { - if (itype == LLWearableType::WT_SHAPE || itype == LLWearableType::WT_SKIN || itype == LLWearableType::WT_HAIR || itype == LLWearableType::WT_EYES) - continue; - -// for (S32 index = gAgentWearables.getWearableCount(itype)-1; index >= 0 ; --index) -// [SL:KB] - Patch: Appearance-Misc | Checked: 2010-09-04 (Catznip-2.6.0a) | Added: Catznip-2.1.2a - for (S32 index = gAgentWearables.getWearableCount((LLWearableType::EType)itype)-1; index >= 0 ; --index) -// [/SL:KB] - { - LLViewerInventoryItem *item = dynamic_cast( - gAgentWearables.getWearableInventoryItem((LLWearableType::EType)itype, index)); - if (!item) - continue; - const LLUUID &item_id = item->getUUID(); - const LLWearable *wearable = gAgentWearables.getWearableFromItemID(item_id); - if (!wearable) - continue; + // Fetch worn clothes (i.e. the ones in COF). + LLInventoryModel::item_array_t clothing_items; + LLInventoryModel::cat_array_t dummy; + LLIsType is_clothing(LLAssetType::AT_CLOTHING); + gInventory.collectDescendentsIf(LLAppearanceMgr::instance().getCOF(), + dummy, + clothing_items, + LLInventoryModel::EXCLUDE_TRASH, + is_clothing, + false); + // Take them off by removing from COF. + for (LLInventoryModel::item_array_t::const_iterator it = clothing_items.begin(); it != clothing_items.end(); ++it) + { // [RLVa:KB] - Checked: 2010-05-14 (RLVa-1.2.0g) | Modified: RLVa-1.2.0g - if ( (rlv_handler_t::isEnabled()) && (!gRlvWearableLocks.canRemove(item)) ) + if ( (rlv_handler_t::isEnabled()) && (!gRlvWearableLocks.canRemove(*it)) ) continue; // [/RLVa:KB] - - // Find and remove this item from the COF. - LLAppearanceMgr::instance().removeCOFItemLinks(item_id,false); - } - } - gInventory.notifyObservers(); - - // Remove wearables from gAgentWearables -// LLAgentWearables::userRemoveAllClothes(); -// [RLVa:KB] - Checked: 2010-05-14 (RLVa-1.2.0g) | Modified: RLVa-1.2.0g - LLAppearanceMgr::instance().updateAppearanceFromCOF(); -// [/RLVa:KB] + LLAppearanceMgr::instance().removeItemFromAvatar((*it)->getUUID()); + } } // static @@ -5425,6 +5705,10 @@ void LLMeshBridge::buildContextMenu(LLMenuGL& menu, U32 flags) items.push_back(std::string("Restore Item")); } + else if(isOutboxFolder()) + { + items.push_back(std::string("Delete")); + } else { items.push_back(std::string("Properties")); diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h index 7b6d788489..329ded0648 100644 --- a/indra/newview/llinventorybridge.h +++ b/indra/newview/llinventorybridge.h @@ -52,7 +52,7 @@ typedef std::vector menuentry_vec_t; // // You'll want to call LLInvItemFVELister::createBridge() to actually create // an instance of this class. This helps encapsulate the -// funcationality a bit. (except for folders, you can create those +// functionality a bit. (except for folders, you can create those // manually...) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class LLInvFVBridge : public LLFolderViewEventListener @@ -70,6 +70,8 @@ public: virtual ~LLInvFVBridge() {} BOOL canShare() const; + BOOL canListOnMarketplace() const; + BOOL canListOnMarketplaceNow() const; //-------------------------------------------------------------------- // LLInvFVBridge functionality @@ -115,7 +117,8 @@ public: virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const; virtual BOOL dragOrDrop(MASK mask, BOOL drop, EDragAndDropType cargo_type, - void* cargo_data) { return FALSE; } + void* cargo_data, + std::string& tooltip_msg) { return FALSE; } virtual LLInventoryType::EType getInventoryType() const { return mInvType; } virtual LLWearableType::EType getWearableType() const { return LLWearableType::WT_NONE; } @@ -147,6 +150,9 @@ protected: BOOL isProtectedFolder() const; //-TT BOOL isInboxFolder() const; // true if COF or descendent of marketplace inbox + BOOL isOutboxFolder() const; // true if COF or descendent of marketplace outbox + const LLUUID getOutboxFolder() const; + virtual BOOL isItemPermissive() const; static void changeItemParent(LLInventoryModel* model, LLViewerInventoryItem* item, @@ -215,8 +221,7 @@ public: /*virtual*/ void clearDisplayName() { mDisplayName.clear(); } LLViewerInventoryItem* getItem() const; - bool isAddAction(std::string action) const; - bool isRemoveAction(std::string action) const; + protected: BOOL confirmRemoveItem(const LLSD& notification, const LLSD& response); virtual BOOL isItemPermissive() const; @@ -235,8 +240,9 @@ public: mCallingCards(FALSE), mWearables(FALSE) {} - BOOL dragItemIntoFolder(LLInventoryItem* inv_item, BOOL drop); - BOOL dragCategoryIntoFolder(LLInventoryCategory* inv_category, BOOL drop); + + BOOL dragItemIntoFolder(LLInventoryItem* inv_item, BOOL drop, std::string& tooltip_msg); + BOOL dragCategoryIntoFolder(LLInventoryCategory* inv_category, BOOL drop, std::string& tooltip_msg); virtual void performAction(LLInventoryModel* model, std::string action); virtual void openItem(); @@ -262,7 +268,8 @@ public: virtual BOOL hasChildren() const; virtual BOOL dragOrDrop(MASK mask, BOOL drop, EDragAndDropType cargo_type, - void* cargo_data); + void* cargo_data, + std::string& tooltip_msg); virtual BOOL isItemRemovable() const; virtual BOOL isItemMovable() const ; @@ -309,6 +316,8 @@ protected: void dropToFavorites(LLInventoryItem* inv_item); void dropToOutfit(LLInventoryItem* inv_item, BOOL move_is_into_current_outfit); + void dropToOutbox(LLInventoryItem* inv_item); + void dropFolderToOutbox(LLInventoryCategory* inv_cat); //-------------------------------------------------------------------- // Messy hacks for handling folder options @@ -388,7 +397,8 @@ public: virtual void buildContextMenu(LLMenuGL& menu, U32 flags); virtual BOOL dragOrDrop(MASK mask, BOOL drop, EDragAndDropType cargo_type, - void* cargo_data); + void* cargo_data, + std::string& tooltip_msg); void refreshFolderViewItem(); protected: LLCallingCardObserver* mObserver; diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp index 8996c82ddf..252eac1b60 100644 --- a/indra/newview/llinventoryfilter.cpp +++ b/indra/newview/llinventoryfilter.cpp @@ -270,16 +270,20 @@ std::string::size_type LLInventoryFilter::getStringMatchOffset() const // has user modified default filter params? BOOL LLInventoryFilter::isNotDefault() const { - return mFilterOps.mFilterObjectTypes != mDefaultFilterOps.mFilterObjectTypes - || mFilterOps.mFilterCategoryTypes != mDefaultFilterOps.mFilterCategoryTypes - || mFilterOps.mFilterWearableTypes != mDefaultFilterOps.mFilterWearableTypes - || mFilterOps.mFilterTypes != FILTERTYPE_OBJECT - || mFilterOps.mFilterLinks != FILTERLINK_INCLUDE_LINKS - || mFilterSubString.size() - || mFilterOps.mPermissions != mDefaultFilterOps.mPermissions - || mFilterOps.mMinDate != mDefaultFilterOps.mMinDate - || mFilterOps.mMaxDate != mDefaultFilterOps.mMaxDate - || mFilterOps.mHoursAgo != mDefaultFilterOps.mHoursAgo; + BOOL not_default = FALSE; + + not_default |= (mFilterOps.mFilterObjectTypes != mDefaultFilterOps.mFilterObjectTypes); + not_default |= (mFilterOps.mFilterCategoryTypes != mDefaultFilterOps.mFilterCategoryTypes); + not_default |= (mFilterOps.mFilterWearableTypes != mDefaultFilterOps.mFilterWearableTypes); + not_default |= (mFilterOps.mFilterTypes != mDefaultFilterOps.mFilterTypes); + not_default |= (mFilterOps.mFilterLinks != mDefaultFilterOps.mFilterLinks); + not_default |= (mFilterSubString.size()); + not_default |= (mFilterOps.mPermissions != mDefaultFilterOps.mPermissions); + not_default |= (mFilterOps.mMinDate != mDefaultFilterOps.mMinDate); + not_default |= (mFilterOps.mMaxDate != mDefaultFilterOps.mMaxDate); + not_default |= (mFilterOps.mHoursAgo != mDefaultFilterOps.mHoursAgo); + + return not_default; } BOOL LLInventoryFilter::isActive() const diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp index 6da1940b3e..f75ae63fbd 100644 --- a/indra/newview/llinventoryfunctions.cpp +++ b/indra/newview/llinventoryfunctions.cpp @@ -62,6 +62,7 @@ #include "llinventorypanel.h" #include "lllineeditor.h" #include "llmenugl.h" +#include "llnotificationsutil.h" #include "llpanelmaininventory.h" #include "llpreviewanim.h" #include "llpreviewgesture.h" @@ -240,6 +241,58 @@ void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::s model->notifyObservers(); } +class LLInventoryCollectAllItems : public LLInventoryCollectFunctor +{ +public: + virtual bool operator()(LLInventoryCategory* cat, LLInventoryItem* item) + { + return true; + } +}; + +BOOL get_is_parent_to_worn_item(const LLUUID& id) +{ + const LLViewerInventoryCategory* cat = gInventory.getCategory(id); + if (!cat) + { + return FALSE; + } + + LLInventoryModel::cat_array_t cats; + LLInventoryModel::item_array_t items; + LLInventoryCollectAllItems collect_all; + gInventory.collectDescendentsIf(LLAppearanceMgr::instance().getCOF(), cats, items, LLInventoryModel::EXCLUDE_TRASH, collect_all); + + for (LLInventoryModel::item_array_t::const_iterator it = items.begin(); it != items.end(); ++it) + { + const LLViewerInventoryItem * const item = *it; + + llassert(item->getIsLinkType()); + + LLUUID linked_id = item->getLinkedUUID(); + const LLViewerInventoryItem * const linked_item = gInventory.getItem(linked_id); + + if (linked_item) + { + LLUUID parent_id = linked_item->getParentUUID(); + + while (!parent_id.isNull()) + { + LLInventoryCategory * parent_cat = gInventory.getCategory(parent_id); + + if (cat == parent_cat) + { + return TRUE; + } + + parent_id = parent_cat->getParentUUID(); + } + } + } + + return FALSE; +} + BOOL get_is_item_worn(const LLUUID& id) { const LLViewerInventoryItem* item = gInventory.getItem(id); @@ -558,6 +611,133 @@ void show_item_original(const LLUUID& item_uuid) } } +void move_to_outbox_cb(const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + if (option != 0) return; // canceled + + LLViewerInventoryItem * viitem = gInventory.getItem(notification["payload"]["item_id"].asUUID()); + LLUUID dest_folder_id = notification["payload"]["dest_folder_id"].asUUID(); + + if (viitem) + { + // when moving item directly into outbox create folder with that name + if (dest_folder_id == gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false)) + { + dest_folder_id = gInventory.createNewCategory(dest_folder_id, LLFolderType::FT_NONE, viitem->getName()); + gInventory.notifyObservers(); + } + + LLUUID parent = viitem->getParentUUID(); + + change_item_parent( + &gInventory, + viitem, + dest_folder_id, + false); + + LLUUID top_level_folder = notification["payload"]["top_level_folder"].asUUID(); + + if (top_level_folder != LLUUID::null) + { + LLViewerInventoryCategory* category; + + while (parent.notNull()) + { + LLInventoryModel::cat_array_t* cat_array; + LLInventoryModel::item_array_t* item_array; + gInventory.getDirectDescendentsOf(parent,cat_array,item_array); + + LLUUID next_parent; + + category = gInventory.getCategory(parent); + + if (!category) break; + + next_parent = category->getParentUUID(); + + if (cat_array->empty() && item_array->empty()) + { + remove_category(&gInventory, parent); + } + + if (parent == top_level_folder) + { + break; + } + + parent = next_parent; + } + } + + } +} + + +void copy_item_to_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, const LLUUID& top_level_folder) +{ + if (inv_item->getPermissions().allowOperationBy(PERM_COPY, gAgent.getID(), gAgent.getGroupID())) + { + // when moving item directly into outbox create folder with that name + if (dest_folder == gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false)) + { + dest_folder = gInventory.createNewCategory(dest_folder, LLFolderType::FT_NONE, inv_item->getName()); + gInventory.notifyObservers(); + } + + copy_inventory_item( + gAgent.getID(), + inv_item->getPermissions().getOwner(), + inv_item->getUUID(), + dest_folder, + inv_item->getName(), + LLPointer(NULL)); + } + else + { + LLSD args; + args["ITEM_NAME"] = inv_item->getName(); + LLSD payload; + payload["item_id"] = inv_item->getUUID(); + payload["dest_folder_id"] = dest_folder; + payload["top_level_folder"] = top_level_folder; + LLNotificationsUtil::add("ConfirmNoCopyToOutbox", args, payload, boost::bind(&move_to_outbox_cb, _1, _2)); + } +} + +void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, const LLUUID& top_level_folder) +{ + LLUUID new_folder_id = gInventory.createNewCategory(dest_folder, LLFolderType::FT_NONE, inv_cat->getName()); + gInventory.notifyObservers(); + + LLInventoryModel::cat_array_t* cat_array; + LLInventoryModel::item_array_t* item_array; + gInventory.getDirectDescendentsOf(inv_cat->getUUID(),cat_array,item_array); + + // copy the vector because otherwise the iterator won't be happy if we delete from it + LLInventoryModel::item_array_t item_array_copy = *item_array; + + for (LLInventoryModel::item_array_t::iterator iter = item_array_copy.begin(); iter != item_array_copy.end(); iter++) + { + LLInventoryItem* item = *iter; + copy_item_to_outbox(item, new_folder_id, top_level_folder); + } + + LLInventoryModel::cat_array_t cat_array_copy = *cat_array; + + for (LLInventoryModel::cat_array_t::iterator iter = cat_array_copy.begin(); iter != cat_array_copy.end(); iter++) + { + LLViewerInventoryCategory* category = *iter; + copy_folder_to_outbox(category, new_folder_id, top_level_folder); + } + + // delete the folder if we have emptied it + //if (cat_array->empty() && item_array->empty()) + //{ + // remove_category(inventory_model, inv_cat->getUUID()); + //} +} + ///---------------------------------------------------------------------------- /// LLInventoryCollectFunctor implementations ///---------------------------------------------------------------------------- diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h index 62b741cd65..d43b9e1044 100644 --- a/indra/newview/llinventoryfunctions.h +++ b/indra/newview/llinventoryfunctions.h @@ -41,6 +41,9 @@ ** MISCELLANEOUS GLOBAL FUNCTIONS **/ +// Is this a parent folder to a worn item +BOOL get_is_parent_to_worn_item(const LLUUID& id); + // Is this item or its baseitem is worn, attached, etc... BOOL get_is_item_worn(const LLUUID& id); @@ -75,6 +78,10 @@ void rename_category(LLInventoryModel* model, const LLUUID& cat_id, const std::s // Generates a string containing the path to the item specified by item_id. void append_path(const LLUUID& id, std::string& path); +void copy_item_to_outbox(LLInventoryItem* inv_item, LLUUID dest_folder, const LLUUID& top_level_folder); + +void copy_folder_to_outbox(LLInventoryCategory* inv_cat, const LLUUID& dest_folder, const LLUUID& top_level_folder); + /** Miscellaneous global functions ** ** *******************************************************************************/ diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp index a8dbcedf26..72749991a2 100644 --- a/indra/newview/llinventorypanel.cpp +++ b/indra/newview/llinventorypanel.cpp @@ -132,6 +132,7 @@ LLInventoryPanel::LLInventoryPanel(const LLInventoryPanel::Params& p) : mScroller(NULL), mSortOrderSetting(p.sort_order_setting), mInventory(p.inventory), + mAcceptsDragAndDrop(p.accepts_drag_and_drop), mAllowMultiSelect(p.allow_multi_select), mShowItemLinkOverlays(p.show_item_link_overlays), mShowLoadStatus(p.show_load_status), @@ -166,49 +167,6 @@ void LLInventoryPanel::buildFolderView(const LLInventoryPanel::Params& params) { root_id = gInventory.getLibraryRootFolderID(); } - // leslie -- temporary HACK to work around sim not creating inbox and outbox with proper system folder type - else if (preferred_type == LLFolderType::FT_INBOX) - { - LLInventoryModel::cat_array_t* cats; - LLInventoryModel::item_array_t* items; - - gInventory.getDirectDescendentsOf(gInventory.getRootFolderID(), cats, items); - - if (cats) - { - for (LLInventoryModel::cat_array_t::const_iterator cat_it = cats->begin(); cat_it != cats->end(); ++cat_it) - { - LLInventoryCategory* cat = *cat_it; - - if (cat->getName() == "Received Items") - { - root_id = cat->getUUID(); - } - } - } - } - // leslie -- temporary HACK to work around sim not creating inbox and outbox with proper system folder type - else if (preferred_type == LLFolderType::FT_OUTBOX) - { - LLInventoryModel::cat_array_t* cats; - LLInventoryModel::item_array_t* items; - - gInventory.getDirectDescendentsOf(gInventory.getRootFolderID(), cats, items); - - if (cats) - { - for (LLInventoryModel::cat_array_t::const_iterator cat_it = cats->begin(); cat_it != cats->end(); ++cat_it) - { - LLInventoryCategory* cat = *cat_it; - - if (cat->getName() == "Merchant Outbox") - { - root_id = cat->getUUID(); - } - } - } - } - // leslie -- end temporary HACK else { root_id = (preferred_type != LLFolderType::FT_NONE) @@ -280,10 +238,10 @@ void LLInventoryPanel::initFromParams(const LLInventoryPanel::Params& params) { setSortOrder(gSavedSettings.getU32(DEFAULT_SORT_ORDER)); } - mFolderRoot->setSortOrder(getFilter()->getSortOrder()); // hide inbox getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() & ~(1ULL << LLFolderType::FT_INBOX)); + getFilter()->setFilterCategoryTypes(getFilter()->getFilterCategoryTypes() & ~(1ULL << LLFolderType::FT_OUTBOX)); // Initialize base class params. LLPanel::initFromParams(params); @@ -392,6 +350,10 @@ U32 LLInventoryPanel::getSortOrder() const return mFolderRoot->getSortOrder(); } +void LLInventoryPanel::requestSort() +{ + mFolderRoot->requestSort(); +} void LLInventoryPanel::setSinceLogoff(BOOL sl) { @@ -899,19 +861,24 @@ BOOL LLInventoryPanel::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EAcceptance* accept, std::string& tooltip_msg) { - BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); + BOOL handled = FALSE; - // If folder view is empty the (x, y) point won't be in its rect - // so the handler must be called explicitly. - // but only if was not handled before. See EXT-6746. - if (!handled && !mFolderRoot->hasVisibleChildren()) + if (mAcceptsDragAndDrop) { - handled = mFolderRoot->handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); - } + handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); - if (handled) - { - mFolderRoot->setDragAndDropThisFrame(); + // If folder view is empty the (x, y) point won't be in its rect + // so the handler must be called explicitly. + // but only if was not handled before. See EXT-6746. + if (!handled && !mFolderRoot->hasVisibleChildren()) + { + handled = mFolderRoot->handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); + } + + if (handled) + { + mFolderRoot->setDragAndDropThisFrame(); + } } return handled; diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h index 662f53e358..b18be2d348 100644 --- a/indra/newview/llinventorypanel.h +++ b/indra/newview/llinventorypanel.h @@ -86,6 +86,7 @@ public: Optional use_label_suffix; Optional show_load_status; Optional scroll; + Optional accepts_drag_and_drop; Params() : sort_order_setting("sort_order_setting"), @@ -96,7 +97,8 @@ public: start_folder("start_folder"), use_label_suffix("use_label_suffix", true), show_load_status("show_load_status"), - scroll("scroll") + scroll("scroll"), + accepts_drag_and_drop("accepts_drag_and_drop") {} }; @@ -183,6 +185,7 @@ protected: LLInventoryModel* mInventory; LLInventoryObserver* mInventoryObserver; LLInvPanelComplObserver* mCompletionObserver; + BOOL mAcceptsDragAndDrop; BOOL mAllowMultiSelect; BOOL mShowItemLinkOverlays; // Shows link graphic over inventory item icons BOOL mShowLoadStatus; @@ -214,6 +217,8 @@ public: void setSortOrder(U32 order); U32 getSortOrder() const; + void requestSort(); + private: std::string mSortOrderSetting; diff --git a/indra/newview/lljoystickbutton.h b/indra/newview/lljoystickbutton.h index 93e2e7128b..8d76aa9531 100644 --- a/indra/newview/lljoystickbutton.h +++ b/indra/newview/lljoystickbutton.h @@ -57,7 +57,7 @@ public: Params() : quadrant("quadrant", JQ_ORIGIN) { - label = ""; + changeDefault(label, ""); } }; LLJoystick(const Params&); @@ -137,7 +137,7 @@ public: { Params() { - held_down_delay.seconds(0.0); + changeDefault(held_down_delay.seconds, 0.0); } }; diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp index 00de6a86e1..f00d6087f9 100644 --- a/indra/newview/lllogininstance.cpp +++ b/indra/newview/lllogininstance.cpp @@ -568,6 +568,7 @@ void LLLoginInstance::constructAuthParams(LLPointer user_credentia else { requested_options.append("basic-mode"); + //requested_options.append("inventory-basic"); } #endif diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp index 5bbef78dd4..0bdeb114f5 100644 --- a/indra/newview/llmediactrl.cpp +++ b/indra/newview/llmediactrl.cpp @@ -79,7 +79,6 @@ LLMediaCtrl::Params::Params() trusted_content("trusted_content", false), focus_on_click("focus_on_click", true) { - tab_stop(false); } LLMediaCtrl::LLMediaCtrl( const Params& p) : diff --git a/indra/newview/llmemoryview.h b/indra/newview/llmemoryview.h index 9bdc59ab10..dc4849a9c4 100644 --- a/indra/newview/llmemoryview.h +++ b/indra/newview/llmemoryview.h @@ -38,8 +38,8 @@ public: { Params() { - mouse_opaque = true; - visible = false; + changeDefault(mouse_opaque, true); + changeDefault(visible, false); } }; LLMemoryView(const LLMemoryView::Params&); diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp old mode 100755 new mode 100644 index 439c3aa4bd..1af44d9931 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -411,7 +411,6 @@ public: cc = llsd_from_file("fake_upload_error.xml"); } - //assert_main_thread(); mThread->mPendingUploads--; dump_llsd_to_file(cc,make_dump_name("whole_model_upload_response_",dump_num)); @@ -445,7 +444,7 @@ public: }; LLMeshRepoThread::LLMeshRepoThread() -: LLThread("mesh repo", NULL) +: LLThread("mesh repo") { mWaiting = false; mMutex = new LLMutex(NULL); @@ -1321,6 +1320,7 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures) std::map mesh_index; std::string model_name; + std::string model_metric; S32 instance_num = 0; @@ -1342,6 +1342,11 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures) model_name = data.mBaseModel->getName(); } + if (model_metric.empty()) + { + model_metric = data.mBaseModel->getMetric(); + } + std::stringstream ostr; LLModel::Decomposition& decomp = @@ -1455,6 +1460,8 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures) if (model_name.empty()) model_name = "mesh model"; result["name"] = model_name; + if (model_metric.empty()) model_metric = "MUT_Unspecified"; + res["metric"] = model_metric; result["asset_resources"] = res; dump_llsd_to_file(result,make_dump_name("whole_model_",dump_num)); @@ -1463,51 +1470,57 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures) void LLMeshUploadThread::generateHulls() { + bool has_valid_requests = false ; + for (instance_map::iterator iter = mInstance.begin(); iter != mInstance.end(); ++iter) + { + LLMeshUploadData data; + data.mBaseModel = iter->first; + + LLModelInstance& instance = *(iter->second.begin()); + + for (S32 i = 0; i < 5; i++) { - LLMeshUploadData data; - data.mBaseModel = iter->first; - - LLModelInstance& instance = *(iter->second.begin()); - - for (S32 i = 0; i < 5; i++) - { - data.mModel[i] = instance.mLOD[i]; - } - - //queue up models for hull generation - LLModel* physics = NULL; - - if (data.mModel[LLModel::LOD_PHYSICS].notNull()) - { - physics = data.mModel[LLModel::LOD_PHYSICS]; - } - else if (data.mModel[LLModel::LOD_LOW].notNull()) - { - physics = data.mModel[LLModel::LOD_LOW]; - } - else if (data.mModel[LLModel::LOD_MEDIUM].notNull()) - { - physics = data.mModel[LLModel::LOD_MEDIUM]; - } - else - { - physics = data.mModel[LLModel::LOD_HIGH]; - } - - llassert(physics != NULL); - - DecompRequest* request = new DecompRequest(physics, data.mBaseModel, this); - if(request->isValid()) - { - gMeshRepo.mDecompThread->submitRequest(request); - } + data.mModel[i] = instance.mLOD[i]; } + //queue up models for hull generation + LLModel* physics = NULL; + + if (data.mModel[LLModel::LOD_PHYSICS].notNull()) + { + physics = data.mModel[LLModel::LOD_PHYSICS]; + } + else if (data.mModel[LLModel::LOD_LOW].notNull()) + { + physics = data.mModel[LLModel::LOD_LOW]; + } + else if (data.mModel[LLModel::LOD_MEDIUM].notNull()) + { + physics = data.mModel[LLModel::LOD_MEDIUM]; + } + else + { + physics = data.mModel[LLModel::LOD_HIGH]; + } + + llassert(physics != NULL); + + DecompRequest* request = new DecompRequest(physics, data.mBaseModel, this); + if(request->isValid()) + { + gMeshRepo.mDecompThread->submitRequest(request); + has_valid_requests = true ; + } + } + + if(has_valid_requests) + { while (!mPhysicsComplete) { apr_sleep(100); } + } } void LLMeshUploadThread::doWholeModelUpload() @@ -1688,6 +1701,7 @@ void LLMeshRepository::cacheOutgoingMesh(LLMeshUploadData& data, LLSD& header) { LLPointer volume = new LLVolume(volume_params, LLVolumeLODGroup::getVolumeScaleFromDetail(i)); volume->copyVolumeFaces(data.mModel[i]); + volume->setMeshAssetLoaded(TRUE); } } @@ -2141,11 +2155,6 @@ S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_para if (volume) { - if (volume->getNumVolumeFaces() == 0 && !volume->isTetrahedron()) - { - volume->makeTetrahedron(); - } - LLVolumeParams params = volume->getParams(); LLVolumeLODGroup* group = LLPrimitive::getVolumeManager()->getGroup(params); @@ -2156,7 +2165,7 @@ S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_para if (last_lod >= 0) { LLVolume* lod = group->refLOD(last_lod); - if (lod && !lod->isTetrahedron() && lod->getNumVolumeFaces() > 0) + if (lod && lod->isMeshAssetLoaded() && lod->getNumVolumeFaces() > 0) { group->derefLOD(lod); return last_lod; @@ -2168,7 +2177,7 @@ S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_para for (S32 i = detail-1; i >= 0; --i) { LLVolume* lod = group->refLOD(i); - if (lod && !lod->isTetrahedron() && lod->getNumVolumeFaces() > 0) + if (lod && lod->isMeshAssetLoaded() && lod->getNumVolumeFaces() > 0) { group->derefLOD(lod); return i; @@ -2181,7 +2190,7 @@ S32 LLMeshRepository::loadMesh(LLVOVolume* vobj, const LLVolumeParams& mesh_para for (S32 i = detail+1; i < 4; ++i) { LLVolume* lod = group->refLOD(i); - if (lod && !lod->isTetrahedron() && lod->getNumVolumeFaces() > 0) + if (lod && lod->isMeshAssetLoaded() && lod->getNumVolumeFaces() > 0) { group->derefLOD(lod); return i; @@ -2432,7 +2441,6 @@ void LLMeshRepository::notifyMeshLoaded(const LLVolumeParams& mesh_params, LLVol if (volume->getNumVolumeFaces() <= 0) { llwarns << "Mesh loading returned empty volume." << llendl; - volume->makeTetrahedron(); } { //update system volume @@ -2440,6 +2448,7 @@ void LLMeshRepository::notifyMeshLoaded(const LLVolumeParams& mesh_params, LLVol if (sys_volume) { sys_volume->copyVolumeFaces(volume); + sys_volume->setMeshAssetLoaded(TRUE); LLPrimitive::getVolumeManager()->unrefVolume(sys_volume); } else @@ -2496,7 +2505,7 @@ S32 LLMeshRepository::getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lo return mThread->getActualMeshLOD(mesh_params, lod); } -const LLMeshSkinInfo* LLMeshRepository::getSkinInfo(const LLUUID& mesh_id, LLVOVolume* requesting_obj) +const LLMeshSkinInfo* LLMeshRepository::getSkinInfo(const LLUUID& mesh_id, const LLVOVolume* requesting_obj) { if (mesh_id.notNull()) { @@ -2752,7 +2761,7 @@ void LLMeshRepository::uploadError(LLSD& args) } //static -F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod) +F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32* bytes_visible, S32 lod, F32 *unscaled_value) { F32 max_distance = 512.f; @@ -2841,6 +2850,11 @@ F32 LLMeshRepository::getStreamingCost(LLSD& header, F32 radius, S32* bytes, S32 triangles_low*low_area + triangles_lowest*lowest_area; + if (unscaled_value) + { + *unscaled_value = weighted_avg; + } + return weighted_avg/gSavedSettings.getU32("MeshTriangleBudget")*15000.f; } @@ -3163,32 +3177,33 @@ void LLPhysicsDecomp::doDecompositionSingleHull() llwarns << "Could not execute decomposition stage when attempting to create single hull." << llendl; make_box(mCurRequest); } - - mMutex->lock(); - mCurRequest->mHull.clear(); - mCurRequest->mHull.resize(1); - mCurRequest->mHullMesh.clear(); - mMutex->unlock(); - - std::vector p; - LLCDHull hull; - - // if LLConvexDecomposition is a stub, num_hulls should have been set to 0 above, and we should not reach this code - decomp->getSingleHull(&hull); - - const F32* v = hull.mVertexBase; - - for (S32 j = 0; j < hull.mNumVertices; ++j) + else { - LLVector3 vert(v[0], v[1], v[2]); - p.push_back(vert); - v = (F32*) (((U8*) v) + hull.mVertexStrideBytes); - } + mMutex->lock(); + mCurRequest->mHull.clear(); + mCurRequest->mHull.resize(1); + mCurRequest->mHullMesh.clear(); + mMutex->unlock(); + + std::vector p; + LLCDHull hull; + + // if LLConvexDecomposition is a stub, num_hulls should have been set to 0 above, and we should not reach this code + decomp->getSingleHull(&hull); + + const F32* v = hull.mVertexBase; + + for (S32 j = 0; j < hull.mNumVertices; ++j) + { + LLVector3 vert(v[0], v[1], v[2]); + p.push_back(vert); + v = (F32*) (((U8*) v) + hull.mVertexStrideBytes); + } - mMutex->lock(); - mCurRequest->mHull[0] = p; - mMutex->unlock(); - + mMutex->lock(); + mCurRequest->mHull[0] = p; + mMutex->unlock(); + } #else setMeshData(mesh, false); @@ -3583,8 +3598,7 @@ void LLMeshRepository::buildPhysicsMesh(LLModel::Decomposition& decomp) bool LLMeshRepository::meshUploadEnabled() { LLViewerRegion *region = gAgent.getRegion(); - if(gSavedSettings.getBOOL("MeshEnabled") && - LLViewerParcelMgr::getInstance()->allowAgentBuild() && + if(gSavedSettings.getBOOL("MeshEnabled") && region) { return region->meshUploadEnabled(); diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h old mode 100755 new mode 100644 index 35a7314cd5..31b84ea0d9 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -445,7 +445,7 @@ public: static U32 sCacheBytesWritten; static U32 sPeakKbps; - static F32 getStreamingCost(LLSD& header, F32 radius, S32* bytes = NULL, S32* visible_bytes = NULL, S32 detail = -1); + static F32 getStreamingCost(LLSD& header, F32 radius, S32* bytes = NULL, S32* visible_bytes = NULL, S32 detail = -1, F32 *unscaled_value = NULL); LLMeshRepository(); @@ -464,7 +464,7 @@ public: S32 getActualMeshLOD(const LLVolumeParams& mesh_params, S32 lod); static S32 getActualMeshLOD(LLSD& header, S32 lod); - const LLMeshSkinInfo* getSkinInfo(const LLUUID& mesh_id, LLVOVolume* requesting_obj); + const LLMeshSkinInfo* getSkinInfo(const LLUUID& mesh_id, const LLVOVolume* requesting_obj); LLModel::Decomposition* getDecomposition(const LLUUID& mesh_id); void fetchPhysicsShape(const LLUUID& mesh_id); bool hasPhysicsShape(const LLUUID& mesh_id); diff --git a/indra/newview/llmorphview.h b/indra/newview/llmorphview.h index 1d8ee8e944..318d49bba5 100644 --- a/indra/newview/llmorphview.h +++ b/indra/newview/llmorphview.h @@ -40,8 +40,8 @@ public: { Params() { - mouse_opaque(false); - follows.flags(FOLLOWS_ALL); + changeDefault(mouse_opaque, false); + changeDefault(follows.flags, FOLLOWS_ALL); } }; LLMorphView(const LLMorphView::Params&); diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index 8be3d8ebc1..8befdacc2a 100644 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -57,7 +57,6 @@ LLNameListCtrl::Params::Params() allow_calling_card_drop("allow_calling_card_drop", false), short_names("short_names", false) { - name = "name_list"; } LLNameListCtrl::LLNameListCtrl(const LLNameListCtrl::Params& p) diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp index a9031716f8..34ae950812 100644 --- a/indra/newview/llpanelavatar.cpp +++ b/indra/newview/llpanelavatar.cpp @@ -68,8 +68,8 @@ public: Params() : agent_id("agent_id") { - mouse_opaque(false); - follows.flags(FOLLOWS_ALL); + changeDefault(mouse_opaque, false); + changeDefault(follows.flags, FOLLOWS_ALL); } }; diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp index fae976c8fb..af44df2cdd 100644 --- a/indra/newview/llpanelcontents.cpp +++ b/indra/newview/llpanelcontents.cpp @@ -211,7 +211,7 @@ void LLPanelContents::onClickNewScript(void *userdata) LLUUID::null, LLAssetType::AT_LSL_TEXT, LLInventoryType::IT_LSL, - LLTrans::getString("PanelContentsNewScript"), + "New Script", desc, LLSaleInfo::DEFAULT, LLInventoryItemFlags::II_FLAGS_NONE, diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp index b1ed3d4f77..e86bba618d 100644 --- a/indra/newview/llpanelgroupgeneral.cpp +++ b/indra/newview/llpanelgroupgeneral.cpp @@ -584,6 +584,11 @@ void LLPanelGroupGeneral::update(LLGroupChange gc) } + // After role member data was changed in Roles->Members + // need to update role titles. See STORM-918. + if (gc == GC_ROLE_MEMBER_DATA) + LLGroupMgr::getInstance()->sendGroupTitlesRequest(mGroupID); + // If this was just a titles update, we are done. if (gc == GC_TITLES) return; diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp index c011c23c8e..53e2c351a0 100644 --- a/indra/newview/llpanelgroupnotices.cpp +++ b/indra/newview/llpanelgroupnotices.cpp @@ -82,8 +82,8 @@ public: : panel("panel"), group_id("group_id") { - mouse_opaque(false); - follows.flags(FOLLOWS_ALL); + changeDefault(mouse_opaque, false); + changeDefault(follows.flags, FOLLOWS_ALL); } }; LLGroupDropTarget(const Params&); diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp index b4ac160d4e..e1361eadde 100644 --- a/indra/newview/llpanellogin.cpp +++ b/indra/newview/llpanellogin.cpp @@ -1349,7 +1349,7 @@ void LLPanelLogin::onModeChangeConfirm(const LLSD& original_value, const LLSD& n { case 0: gSavedSettings.getControl("SessionSettingsFile")->set(new_value); - LLAppViewer::instance()->forceQuit(); + LLAppViewer::instance()->requestQuit(); break; case 1: // revert to original value diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h index 21a3d1f7a4..0d96e49ed9 100644 --- a/indra/newview/llpanellogin.h +++ b/indra/newview/llpanellogin.h @@ -89,6 +89,8 @@ private: void reshapeBrowser(); void addFavoritesToStartLocation(); void addUsersWithFavoritesToUsername(); + void onModeChange(const LLSD& original_value, const LLSD& new_value); + void onModeChangeConfirm(const LLSD& original_value, const LLSD& new_value, const LLSD& notification, const LLSD& response); static void onClickConnect(void*); static void onClickNewAccount(void*); static void onClickVersion(void*); @@ -103,9 +105,6 @@ private: static void updateServerCombo(); static void updateSavedLoginsCombo(); static void updateStartSLURL(); - void onModeChange(const LLSD& original_value, const LLSD& new_value); - void onModeChangeConfirm(const LLSD& original_value, const LLSD& new_value, const LLSD& notification, const LLSD& response); - static void updateLoginPanelLinks(); // Helper for making a standardized saved login name, depending on user name and grid name diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp index 2c73a1453d..0579ecbb90 100644 --- a/indra/newview/llpanelmarketplaceinbox.cpp +++ b/indra/newview/llpanelmarketplaceinbox.cpp @@ -53,10 +53,6 @@ LLPanelMarketplaceInbox::LLPanelMarketplaceInbox(const Params& p) LLPanelMarketplaceInbox::~LLPanelMarketplaceInbox() { - if (getChild("inbox_btn")->getToggleState()) - { - gSavedPerAccountSettings.setString("LastInventoryInboxExpand", LLDate::now().asString()); - } } // virtual @@ -93,12 +89,17 @@ LLInventoryPanel * LLPanelMarketplaceInbox::setupInventoryPanel() inbox_inventory_parent, LLInventoryPanel::child_registry_t::instance()); + llassert(mInventoryPanel); + // Reshape the inventory to the proper size LLRect inventory_placeholder_rect = inbox_inventory_placeholder->getRect(); mInventoryPanel->setShape(inventory_placeholder_rect); - // Set the sort order newest to oldest, and a selection change callback + // Set the sort order newest to oldest mInventoryPanel->setSortOrder(LLInventoryFilter::SO_DATE); + mInventoryPanel->getFilter()->markDefault(); + + // Set selection callback for proper update of inventory status buttons mInventoryPanel->setSelectCallback(boost::bind(&LLPanelMarketplaceInbox::onSelectionChange, this)); // Set up the note to display when the inbox is empty @@ -113,8 +114,10 @@ LLInventoryPanel * LLPanelMarketplaceInbox::setupInventoryPanel() void LLPanelMarketplaceInbox::onFocusReceived() { LLSidepanelInventory * sidepanel_inventory = LLSideTray::getInstance()->getPanel("sidepanel_inventory"); - + sidepanel_inventory->clearSelections(true, false, true); + + gSavedPerAccountSettings.setU32("LastInventoryInboxActivity", time_corrected()); } BOOL LLPanelMarketplaceInbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void *cargo_data, EAcceptance *accept, std::string& tooltip_msg) diff --git a/indra/newview/llpanelmarketplaceinbox.h b/indra/newview/llpanelmarketplaceinbox.h index 7b4ed137db..705a095cf0 100644 --- a/indra/newview/llpanelmarketplaceinbox.h +++ b/indra/newview/llpanelmarketplaceinbox.h @@ -37,9 +37,7 @@ class LLPanelMarketplaceInbox : public LLPanel, public LLSideTrayTabBadgeDriver public: struct Params : public LLInitParam::Block - { - Params() {} - }; + {}; LOG_CLASS(LLPanelMarketplaceInbox); diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp index 2c97d539a1..2e4bf55d51 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.cpp +++ b/indra/newview/llpanelmarketplaceinboxinventory.cpp @@ -37,6 +37,8 @@ #include "llviewerfoldertype.h" +#define DEBUGGING_FRESHNESS 0 + // // statics // @@ -66,7 +68,7 @@ void LLInboxInventoryPanel::buildFolderView(const LLInventoryPanel::Params& para LLUUID root_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_INBOX, false, false); - // leslie -- temporary HACK to work around sim not creating inbox and outbox with proper system folder type + // leslie -- temporary HACK to work around sim not creating inbox with proper system folder type if (root_id.isNull()) { std::string start_folder_name(params.start_folder()); @@ -133,6 +135,27 @@ LLFolderViewFolder * LLInboxInventoryPanel::createFolderViewFolder(LLInvFVBridge return LLUICtrlFactory::create(params); } +LLFolderViewItem * LLInboxInventoryPanel::createFolderViewItem(LLInvFVBridge * bridge) +{ + LLFolderViewItem::Params params; + + params.name = bridge->getDisplayName(); + params.icon = bridge->getIcon(); + params.icon_open = bridge->getOpenIcon(); + + if (mShowItemLinkOverlays) // if false, then links show up just like normal items + { + params.icon_overlay = LLUI::getUIImage("Inv_Link"); + } + + params.creation_date = bridge->getCreationDate(); + params.root = mFolderRoot; + params.listener = bridge; + params.rect = LLRect (0, 0, 0, 0); + params.tool_tip = params.name; + + return LLUICtrlFactory::create(params); +} // // LLInboxFolderViewFolder Implementation @@ -141,7 +164,7 @@ LLFolderViewFolder * LLInboxInventoryPanel::createFolderViewFolder(LLInvFVBridge LLInboxFolderViewFolder::LLInboxFolderViewFolder(const Params& p) : LLFolderViewFolder(p) , LLBadgeOwner(getHandle()) - , mFresh(true) + , mFresh(false) { #if SUPPORTING_FRESH_ITEM_COUNT initBadgeParams(p.new_badge()); @@ -152,19 +175,6 @@ LLInboxFolderViewFolder::~LLInboxFolderViewFolder() { } -// virtual -time_t LLInboxFolderViewFolder::getCreationDate() const -{ - time_t ret_val = LLFolderViewFolder::getCreationDate(); - - if (!mCreationDate) - { - updateFlag(); - } - - return ret_val; -} - // virtual void LLInboxFolderViewFolder::draw() { @@ -180,29 +190,65 @@ void LLInboxFolderViewFolder::draw() LLFolderViewFolder::draw(); } -void LLInboxFolderViewFolder::updateFlag() const +void LLInboxFolderViewFolder::computeFreshness() { - LLDate saved_freshness_date = LLDate(gSavedPerAccountSettings.getString("LastInventoryInboxExpand")); - mFresh = (mCreationDate > saved_freshness_date.secondsSinceEpoch()); + const U32 last_expansion_utc = gSavedPerAccountSettings.getU32("LastInventoryInboxActivity"); + + if (last_expansion_utc > 0) + { + mFresh = (mCreationDate > last_expansion_utc); + +#if DEBUGGING_FRESHNESS + if (mFresh) + { + llinfos << "Item is fresh! -- creation " << mCreationDate << ", saved_freshness_date " << last_expansion_utc << llendl; + } +#endif + } + else + { + mFresh = true; + } +} + +void LLInboxFolderViewFolder::deFreshify() +{ + mFresh = false; + + gSavedPerAccountSettings.setU32("LastInventoryInboxActivity", time_corrected()); } void LLInboxFolderViewFolder::selectItem() { - mFresh = false; LLFolderViewFolder::selectItem(); + + deFreshify(); } void LLInboxFolderViewFolder::toggleOpen() { - mFresh = false; LLFolderViewFolder::toggleOpen(); + + deFreshify(); } -void LLInboxFolderViewFolder::setCreationDate(time_t creation_date_utc) const +void LLInboxFolderViewFolder::setCreationDate(time_t creation_date_utc) { mCreationDate = creation_date_utc; - updateFlag(); + + if (mParentFolder == mRoot) + { + computeFreshness(); + } } +// +// LLInboxFolderViewItem Implementation +// + +BOOL LLInboxFolderViewItem::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + return TRUE; +} // eof diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h index 8946b9dc98..46eeb9ea7f 100644 --- a/indra/newview/llpanelmarketplaceinboxinventory.h +++ b/indra/newview/llpanelmarketplaceinboxinventory.h @@ -33,7 +33,7 @@ #include "llfolderviewitem.h" -#define SUPPORTING_FRESH_ITEM_COUNT 0 +#define SUPPORTING_FRESH_ITEM_COUNT 1 @@ -41,9 +41,7 @@ class LLInboxInventoryPanel : public LLInventoryPanel { public: struct Params : public LLInitParam::Block - { - Params() {} - }; + {}; LLInboxInventoryPanel(const Params& p); ~LLInboxInventoryPanel(); @@ -52,7 +50,8 @@ public: void buildFolderView(const LLInventoryPanel::Params& params); // virtual - class LLFolderViewFolder* createFolderViewFolder(LLInvFVBridge * bridge); + LLFolderViewFolder * createFolderViewFolder(LLInvFVBridge * bridge); + LLFolderViewItem * createFolderViewItem(LLInvFVBridge * bridge); }; @@ -72,21 +71,32 @@ public: LLInboxFolderViewFolder(const Params& p); ~LLInboxFolderViewFolder(); - time_t getCreationDate() const; - void draw(); - void updateFlag() const; + void computeFreshness(); + void deFreshify(); + void selectItem(); void toggleOpen(); bool isFresh() const { return mFresh; } protected: - void setCreationDate(time_t creation_date_utc) const; + void setCreationDate(time_t creation_date_utc); - mutable bool mFresh; + bool mFresh; }; +class LLInboxFolderViewItem : public LLFolderViewItem +{ +public: + LLInboxFolderViewItem(const Params& p) + : LLFolderViewItem(p) + { + } + + BOOL handleDoubleClick(S32 x, S32 y, MASK mask); +}; + #endif //LL_INBOXINVENTORYPANEL_H diff --git a/indra/newview/llpanelmarketplaceoutbox.cpp b/indra/newview/llpanelmarketplaceoutbox.cpp index d51a0d78fe..3c587a70c7 100644 --- a/indra/newview/llpanelmarketplaceoutbox.cpp +++ b/indra/newview/llpanelmarketplaceoutbox.cpp @@ -27,6 +27,7 @@ #include "llviewerprecompiledheaders.h" #include "llpanelmarketplaceoutbox.h" +#include "llpanelmarketplaceoutboxinventory.h" #include "llappviewer.h" #include "llbutton.h" @@ -34,11 +35,17 @@ #include "lleventcoro.h" #include "llinventorypanel.h" #include "llloadingindicator.h" +#include "llnotificationsutil.h" #include "llpanelmarketplaceinbox.h" +#include "llsdutil.h" #include "llsidepanelinventory.h" #include "llsidetray.h" #include "lltimer.h" - +#include "llviewernetwork.h" +#include "llagent.h" +#include "llviewermedia.h" +#include "llfolderview.h" +#include "llinventoryfunctions.h" static LLRegisterPanelClassWrapper t_panel_marketplace_outbox("panel_marketplace_outbox"); @@ -83,7 +90,7 @@ void LLPanelMarketplaceOutbox::handleLoginComplete() void LLPanelMarketplaceOutbox::onFocusReceived() { LLSidepanelInventory * sidepanel_inventory = LLSideTray::getInstance()->getPanel("sidepanel_inventory"); - + sidepanel_inventory->clearSelections(true, true, false); } @@ -96,7 +103,7 @@ void LLPanelMarketplaceOutbox::onSelectionChange() LLInventoryPanel * LLPanelMarketplaceOutbox::setupInventoryPanel() { - LLView * outbox_inventory_placeholder = getChild("outbox_inventory_placeholder"); + LLView * outbox_inventory_placeholder = getChild("outbox_inventory_placeholder_panel"); LLView * outbox_inventory_parent = outbox_inventory_placeholder->getParent(); mInventoryPanel = @@ -104,12 +111,17 @@ LLInventoryPanel * LLPanelMarketplaceOutbox::setupInventoryPanel() outbox_inventory_parent, LLInventoryPanel::child_registry_t::instance()); + llassert(mInventoryPanel); + // Reshape the inventory to the proper size LLRect inventory_placeholder_rect = outbox_inventory_placeholder->getRect(); mInventoryPanel->setShape(inventory_placeholder_rect); - // Set the sort order newest to oldest, and a selection change callback + // Set the sort order newest to oldest mInventoryPanel->setSortOrder(LLInventoryFilter::SO_DATE); + mInventoryPanel->getFilter()->markDefault(); + + // Set selection callback for proper update of inventory status buttons mInventoryPanel->setSelectCallback(boost::bind(&LLPanelMarketplaceOutbox::onSelectionChange, this)); // Set up the note to display when the outbox is empty @@ -121,11 +133,30 @@ LLInventoryPanel * LLPanelMarketplaceOutbox::setupInventoryPanel() return mInventoryPanel; } +BOOL LLPanelMarketplaceOutbox::handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data, + EAcceptance* accept, + std::string& tooltip_msg) +{ + BOOL handled = LLPanel::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); + + if (!handled && mInventoryPanel && mInventoryPanel->getRootFolder()) + { + handled = mInventoryPanel->getRootFolder()->handleDragAndDropFromChild(mask,drop,cargo_type,cargo_data,accept,tooltip_msg); + + if (handled) + { + mInventoryPanel->getRootFolder()->setDragAndDropThisFrame(); + } + } + + return handled; +} + bool LLPanelMarketplaceOutbox::isOutboxEmpty() const { - // TODO: Check for contents of outbox - - return false; + return (getTotalItemCount() == 0); } bool LLPanelMarketplaceOutbox::isSyncInProgress() const @@ -149,28 +180,120 @@ void timeDelay(LLCoros::self& self, LLPanelMarketplaceOutbox* outboxPanel) waitForEventOn(self, "mainloop"); } - outboxPanel->onSyncComplete(); + outboxPanel->onSyncComplete(true, LLSD::emptyMap()); gTimeDelayDebugFunc = ""; } + +class LLInventorySyncResponder : public LLHTTPClient::Responder +{ +public: + LLInventorySyncResponder(LLPanelMarketplaceOutbox * outboxPanel) + : LLCurl::Responder() + , mOutboxPanel(outboxPanel) + { + } + + void completed(U32 status, const std::string& reason, const LLSD& content) + { + llinfos << "inventory_import complete status: " << status << ", reason: " << reason << llendl; + + if (isGoodStatus(status)) + { + // Complete success + llinfos << "success" << llendl; + } + else + { + llwarns << "failed" << llendl; + } + + mOutboxPanel->onSyncComplete(isGoodStatus(status), content); + } + +private: + LLPanelMarketplaceOutbox * mOutboxPanel; +}; + void LLPanelMarketplaceOutbox::onSyncButtonClicked() { - // TODO: Actually trigger sync to marketplace - + // Get the sync animation going mSyncInProgress = true; updateSyncButtonStatus(); - // Set a timer (for testing only) + // Make the url for the inventory import request + std::string url = "https://marketplace.secondlife.com/"; - gTimeDelayDebugFunc = LLCoros::instance().launch("LLPanelMarketplaceOutbox timeDelay", boost::bind(&timeDelay, _1, this)); + //if (!LLGridManager::getInstance()->isInProductionGrid()) + if (LLGridManager::getInstance()->isInSLBeta())// + { + std::string gridLabel = LLGridManager::getInstance()->getGridLabel(); + url = llformat("https://marketplace.%s.lindenlab.com/", utf8str_tolower(gridLabel).c_str()); + + // TEMP for Jim's pdp + //url = "http://pdp24.lindenlab.com:3000/"; + } + + url += "api/1/users/"; + url += gAgent.getID().getString(); + url += "/inventory_import"; + + llinfos << "http get: " << url << llendl; + LLHTTPClient::get(url, new LLInventorySyncResponder(this), LLViewerMedia::getHeaders()); + + // Set a timer (for testing only) + //gTimeDelayDebugFunc = LLCoros::instance().launch("LLPanelMarketplaceOutbox timeDelay", boost::bind(&timeDelay, _1, this)); } -void LLPanelMarketplaceOutbox::onSyncComplete() +void LLPanelMarketplaceOutbox::onSyncComplete(bool goodStatus, const LLSD& content) { mSyncInProgress = false; - updateSyncButtonStatus(); + + const LLSD& errors_list = content["errors"]; + + if (goodStatus && (errors_list.size() == 0)) + { + LLNotificationsUtil::add("OutboxUploadComplete", LLSD::emptyMap(), LLSD::emptyMap()); + } + else + { + LLNotificationsUtil::add("OutboxUploadHadErrors", LLSD::emptyMap(), LLSD::emptyMap()); + } + + llinfos << "Marketplace upload llsd:" << llendl; + llinfos << ll_pretty_print_sd(content) << llendl; + llinfos << llendl; + + const LLSD& imported_list = content["imported"]; + LLSD::array_const_iterator it = imported_list.beginArray(); + for ( ; it != imported_list.endArray(); ++it) + { + LLUUID imported_folder = (*it).asUUID(); + llinfos << "Successfully uploaded folder " << imported_folder.asString() << " to marketplace." << llendl; + } + + for (it = errors_list.beginArray(); it != errors_list.endArray(); ++it) + { + const LLSD& item_error_map = (*it); + + LLUUID error_folder = item_error_map["folder_id"].asUUID(); + const std::string& error_string = item_error_map["identifier"].asString(); + LLUUID error_item = item_error_map["item_id"].asUUID(); + const std::string& error_item_name = item_error_map["item_name"].asString(); + const std::string& error_message = item_error_map["message"].asString(); + + llinfos << "Error item " << error_folder.asString() << ", " << error_string << ", " + << error_item.asString() << ", " << error_item_name << ", " << error_message << llendl; + + LLFolderViewFolder * item_folder = mInventoryPanel->getRootFolder()->getFolderByID(error_folder); + LLOutboxFolderViewFolder * outbox_item_folder = dynamic_cast(item_folder); + + llassert(outbox_item_folder); + + outbox_item_folder->setErrorString(error_string); + } } void LLPanelMarketplaceOutbox::updateSyncButtonStatus() @@ -192,3 +315,46 @@ void LLPanelMarketplaceOutbox::updateSyncButtonStatus() mSyncButton->setEnabled(!isOutboxEmpty()); } } + +U32 LLPanelMarketplaceOutbox::getTotalItemCount() const +{ + U32 item_count = 0; + + if (mInventoryPanel) + { + const LLFolderViewFolder * outbox_folder = mInventoryPanel->getRootFolder(); + + if (outbox_folder) + { + item_count += outbox_folder->getFoldersCount(); + } + } + + return item_count; +} + +void LLPanelMarketplaceOutbox::draw() +{ + const U32 item_count = getTotalItemCount(); + const bool not_empty = (item_count > 0); + + if (not_empty) + { + std::string item_count_str = llformat("%d", item_count); + + LLStringUtil::format_map_t args; + args["[NUM]"] = item_count_str; + getChild("outbox_btn")->setLabel(getString("OutboxLabelWithArg", args)); + } + else + { + getChild("outbox_btn")->setLabel(getString("OutboxLabelNoArg")); + } + + if (!isSyncInProgress()) + { + mSyncButton->setEnabled(not_empty); + } + + LLPanel::draw(); +} diff --git a/indra/newview/llpanelmarketplaceoutbox.h b/indra/newview/llpanelmarketplaceoutbox.h index 8e2c35914d..c6b4a5abe2 100644 --- a/indra/newview/llpanelmarketplaceoutbox.h +++ b/indra/newview/llpanelmarketplaceoutbox.h @@ -40,9 +40,7 @@ class LLPanelMarketplaceOutbox : public LLPanel public: struct Params : public LLInitParam::Block - { - Params() {} - }; + {}; LOG_CLASS(LLPanelMarketplaceOutbox); @@ -54,12 +52,22 @@ public: /*virtual*/ BOOL postBuild(); + /*virtual*/ void draw(); + LLInventoryPanel * setupInventoryPanel(); + U32 getTotalItemCount() const; + bool isOutboxEmpty() const; bool isSyncInProgress() const; - void onSyncComplete(); + void onSyncComplete(bool goodStatus, const LLSD& content); + + /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, + EDragAndDropType cargo_type, + void* cargo_data, + EAcceptance* accept, + std::string& tooltip_msg); protected: void onSyncButtonClicked(); diff --git a/indra/newview/llpanelmarketplaceoutboxinventory.cpp b/indra/newview/llpanelmarketplaceoutboxinventory.cpp new file mode 100644 index 0000000000..ed1206aec8 --- /dev/null +++ b/indra/newview/llpanelmarketplaceoutboxinventory.cpp @@ -0,0 +1,271 @@ +/** + * @file llpanelmarketplaceoutboxinventory.cpp + * @brief LLOutboxInventoryPanel class definition + * + * $LicenseInfo:firstyear=2009&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" + +#include "llpanelmarketplaceoutboxinventory.h" + +#include "llfolderview.h" +#include "llfoldervieweventlistener.h" +#include "llinventorybridge.h" +#include "llinventoryfunctions.h" +#include "llpanellandmarks.h" +#include "llplacesinventorybridge.h" +#include "lltrans.h" +#include "llviewerfoldertype.h" + + +// +// statics +// + +static LLDefaultChildRegistry::Register r1("outbox_inventory_panel"); +static LLDefaultChildRegistry::Register r2("outbox_folder_view_folder"); + + +// +// Marketplace errors +// + +enum +{ + MKTERR_NONE = 0, + + MKTERR_NOT_MERCHANT, + MKTERR_FOLDER_EMPTY, + MKTERR_UNASSOCIATED_PRODUCTS, + MKTERR_OBJECT_LIMIT, + MKTERR_FOLDER_DEPTH, + MKTERR_UNSELLABLE_ITEM, + MKTERR_INTERNAL_IMPORT, + + MKTERR_COUNT +}; + +static const std::string MARKETPLACE_ERROR_STRINGS[MKTERR_COUNT] = +{ + "NO_ERROR", + "NOT_MERCHANT_ERROR", + "FOLDER_EMPTY_ERROR", + "UNASSOCIATED_PRODUCTS_ERROR", + "OBJECT_LIMIT_ERROR", + "FOLDER_DEPTH_ERROR", + "UNSELLABLE_ITEM_FOUND", + "INTERNAL_IMPORT_ERROR", +}; + +static const std::string MARKETPLACE_ERROR_NAMES[MKTERR_COUNT] = +{ + "Marketplace Error None", + "Marketplace Error Not Merchant", + "Marketplace Error Empty Folder", + "Marketplace Error Unassociated Products", + "Marketplace Error Object Limit", + "Marketplace Error Folder Depth", + "Marketplace Error Unsellable Item", + "Marketplace Error Internal Import", +}; + + +// +// LLOutboxInventoryPanel Implementation +// + +LLOutboxInventoryPanel::LLOutboxInventoryPanel(const LLOutboxInventoryPanel::Params& p) + : LLInventoryPanel(p) +{ +} + +LLOutboxInventoryPanel::~LLOutboxInventoryPanel() +{ +} + +// virtual +void LLOutboxInventoryPanel::buildFolderView(const LLInventoryPanel::Params& params) +{ + // Determine the root folder in case specified, and + // build the views starting with that folder. + + LLUUID root_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false); + + // leslie -- temporary HACK to work around sim not creating outbox with proper system folder type + if (root_id.isNull()) + { + std::string start_folder_name(params.start_folder()); + + LLInventoryModel::cat_array_t* cats; + LLInventoryModel::item_array_t* items; + + gInventory.getDirectDescendentsOf(gInventory.getRootFolderID(), cats, items); + + if (cats) + { + for (LLInventoryModel::cat_array_t::const_iterator cat_it = cats->begin(); cat_it != cats->end(); ++cat_it) + { + LLInventoryCategory* cat = *cat_it; + + if (cat->getName() == start_folder_name) + { + root_id = cat->getUUID(); + break; + } + } + } + + if (root_id == LLUUID::null) + { + llwarns << "No category found that matches outbox inventory panel start_folder: " << start_folder_name << llendl; + } + } + // leslie -- end temporary HACK + + if (root_id == LLUUID::null) + { + llwarns << "Outbox inventory panel has no root folder!" << llendl; + root_id = LLUUID::generateNewID(); + } + + LLInvFVBridge* new_listener = mInvFVBridgeBuilder->createBridge(LLAssetType::AT_CATEGORY, + LLAssetType::AT_CATEGORY, + LLInventoryType::IT_CATEGORY, + this, + NULL, + root_id); + + mFolderRoot = createFolderView(new_listener, params.use_label_suffix()); +} + +LLFolderViewFolder * LLOutboxInventoryPanel::createFolderViewFolder(LLInvFVBridge * bridge) +{ + LLOutboxFolderViewFolder::Params params; + + params.name = bridge->getDisplayName(); + params.icon = bridge->getIcon(); + params.icon_open = bridge->getOpenIcon(); + + if (mShowItemLinkOverlays) // if false, then links show up just like normal items + { + params.icon_overlay = LLUI::getUIImage("Inv_Link"); + } + + params.root = mFolderRoot; + params.listener = bridge; + params.tool_tip = params.name; + + return LLUICtrlFactory::create(params); +} + +LLFolderViewItem * LLOutboxInventoryPanel::createFolderViewItem(LLInvFVBridge * bridge) +{ + LLFolderViewItem::Params params; + + params.name = bridge->getDisplayName(); + params.icon = bridge->getIcon(); + params.icon_open = bridge->getOpenIcon(); + + if (mShowItemLinkOverlays) // if false, then links show up just like normal items + { + params.icon_overlay = LLUI::getUIImage("Inv_Link"); + } + + params.creation_date = bridge->getCreationDate(); + params.root = mFolderRoot; + params.listener = bridge; + params.rect = LLRect (0, 0, 0, 0); + params.tool_tip = params.name; + + return LLUICtrlFactory::create(params); +} + +// +// LLOutboxFolderViewFolder Implementation +// + +LLOutboxFolderViewFolder::LLOutboxFolderViewFolder(const Params& p) + : LLFolderViewFolder(p) + , LLBadgeOwner(getHandle()) + , mError(0) +{ + initBadgeParams(p.error_badge()); +} + +LLOutboxFolderViewFolder::~LLOutboxFolderViewFolder() +{ +} + +// virtual +void LLOutboxFolderViewFolder::draw() +{ + if (!badgeHasParent()) + { + addBadgeToParentPanel(); + } + + setBadgeVisibility(hasError()); + + LLFolderViewFolder::draw(); +} + +void LLOutboxFolderViewFolder::setErrorString(const std::string& errorString) +{ + S32 error_code = MKTERR_NONE; + + for (S32 i = 1; i < MKTERR_COUNT; ++i) + { + if (MARKETPLACE_ERROR_STRINGS[i] == errorString) + { + error_code = i; + break; + } + } + + setError(error_code); +} + +void LLOutboxFolderViewFolder::setError(S32 errorCode) +{ + mError = errorCode; + + if (hasError()) + { + setToolTip(LLTrans::getString(MARKETPLACE_ERROR_NAMES[mError])); + } + else + { + setToolTip(LLStringExplicit("")); + } +} + +// +// LLOutboxFolderViewItem Implementation +// + +BOOL LLOutboxFolderViewItem::handleDoubleClick(S32 x, S32 y, MASK mask) +{ + return TRUE; +} + +// eof diff --git a/indra/newview/llpanelmarketplaceoutboxinventory.h b/indra/newview/llpanelmarketplaceoutboxinventory.h new file mode 100644 index 0000000000..346680a79d --- /dev/null +++ b/indra/newview/llpanelmarketplaceoutboxinventory.h @@ -0,0 +1,97 @@ +/** + * @file llpanelmarketplaceoutboxinventory.h + * @brief LLOutboxInventoryPanel class declaration + * + * $LicenseInfo:firstyear=2009&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#ifndef LL_OUTBOXINVENTORYPANEL_H +#define LL_OUTBOXINVENTORYPANEL_H + + +#include "llbadgeowner.h" +#include "llinventorypanel.h" +#include "llfolderviewitem.h" + + +class LLOutboxInventoryPanel : public LLInventoryPanel +{ +public: + struct Params : public LLInitParam::Block + { + Params() {} + }; + + LLOutboxInventoryPanel(const Params& p); + ~LLOutboxInventoryPanel(); + + // virtual + void buildFolderView(const LLInventoryPanel::Params& params); + + // virtual + LLFolderViewFolder * createFolderViewFolder(LLInvFVBridge * bridge); + LLFolderViewItem * createFolderViewItem(LLInvFVBridge * bridge); +}; + + +class LLOutboxFolderViewFolder : public LLFolderViewFolder, public LLBadgeOwner +{ +public: + struct Params : public LLInitParam::Block + { + Optional error_badge; + + Params() + : error_badge("error_badge") + { + } + }; + + LLOutboxFolderViewFolder(const Params& p); + ~LLOutboxFolderViewFolder(); + + void draw(); + + void setErrorString(const std::string& errorString); + void setError(S32 errorCode); + + bool hasError() const { return (mError != 0); } + +protected: + S32 mError; +}; + + +class LLOutboxFolderViewItem : public LLFolderViewItem +{ +public: + LLOutboxFolderViewItem(const Params& p) + : LLFolderViewItem(p) + { + } + + // virtual + BOOL handleDoubleClick(S32 x, S32 y, MASK mask); +}; + + +#endif //LL_OUTBOXINVENTORYPANEL_H diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp index 0602ee222e..8a66d3332f 100644 --- a/indra/newview/llpanelobject.cpp +++ b/indra/newview/llpanelobject.cpp @@ -1298,7 +1298,16 @@ void LLPanelObject::getState( ) if (mCtrlSculptType) { - mCtrlSculptType->setCurrentByIndex(sculpt_stitching); + if (sculpt_stitching == LL_SCULPT_TYPE_NONE) + { + // since 'None' is no longer an option in the combo box + // use 'Plane' as an equivalent sculpt type + mCtrlSculptType->setSelectedByValue(LLSD(LL_SCULPT_TYPE_PLANE), true); + } + else + { + mCtrlSculptType->setSelectedByValue(LLSD(sculpt_stitching), true); + } mCtrlSculptType->setEnabled(editable && !isMesh); } @@ -2033,7 +2042,7 @@ void LLPanelObject::sendSculpt() U8 sculpt_type = 0; if (mCtrlSculptType) - sculpt_type |= mCtrlSculptType->getCurrentIndex(); + sculpt_type |= mCtrlSculptType->getValue().asInteger(); bool enabled = sculpt_type != LL_SCULPT_TYPE_MESH; diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp index cf557a9830..2ebad885f9 100644 --- a/indra/newview/llpanelobjectinventory.cpp +++ b/indra/newview/llpanelobjectinventory.cpp @@ -86,6 +86,7 @@ protected: LLAssetType::EType mAssetType; LLInventoryType::EType mInventoryType; + LLInventoryObject* findInvObject() const; LLInventoryItem* findItem() const; public: @@ -142,7 +143,8 @@ public: virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const; virtual BOOL dragOrDrop(MASK mask, BOOL drop, EDragAndDropType cargo_type, - void* cargo_data); + void* cargo_data, + std::string& tooltip_msg); }; LLTaskInvFVBridge::LLTaskInvFVBridge( @@ -165,16 +167,22 @@ LLTaskInvFVBridge::LLTaskInvFVBridge( } } -LLInventoryItem* LLTaskInvFVBridge::findItem() const +LLInventoryObject* LLTaskInvFVBridge::findInvObject() const { LLViewerObject* object = gObjectList.findObject(mPanel->getTaskUUID()); - if(object) + if (object) { - return dynamic_cast(object->getInventoryObject(mUUID)); + return object->getInventoryObject(mUUID); } return NULL; } + +LLInventoryItem* LLTaskInvFVBridge::findItem() const +{ + return dynamic_cast(findInvObject()); +} + void LLTaskInvFVBridge::showProperties() { //show_task_item_profile(mUUID, mPanel->getTaskUUID()); @@ -300,21 +308,15 @@ const std::string& LLTaskInvFVBridge::getDisplayName() const if(item) { - if(item->getParentUUID().isNull()) + mDisplayName.assign(item->getName()); + + // Localize "New Script", "New Script 1", "New Script 2", etc. + if (item->getType() == LLAssetType::AT_LSL_TEXT && + LLStringUtil::startsWith(item->getName(), "New Script")) { - if(item->getName() == "Contents") - { - mDisplayName.assign(LLTrans::getString("ViewerObjectContents")); - } - else - { - mDisplayName.assign(item->getName()); - } - } - else - { - mDisplayName.assign(item->getName()); + LLStringUtil::replaceString(mDisplayName, "New Script", LLTrans::getString("PanelContentsNewScript")); } + const LLPermissions& perm(item->getPermissions()); BOOL copy = gAgent.allowOperation(PERM_COPY, perm, GP_OBJECT_MANIPULATE); BOOL mod = gAgent.allowOperation(PERM_MODIFY, perm, GP_OBJECT_MANIPULATE); @@ -641,7 +643,8 @@ BOOL LLTaskInvFVBridge::startDrag(EDragAndDropType* type, LLUUID* id) const BOOL LLTaskInvFVBridge::dragOrDrop(MASK mask, BOOL drop, EDragAndDropType cargo_type, - void* cargo_data) + void* cargo_data, + std::string& tooltip_msg) { //llinfos << "LLTaskInvFVBridge::dragOrDrop()" << llendl; return FALSE; @@ -786,7 +789,7 @@ public: const std::string& name); virtual LLUIImagePtr getIcon() const; - virtual const std::string& getDisplayName() const { return getName(); } + virtual const std::string& getDisplayName() const; virtual BOOL isItemRenameable() const; // virtual BOOL isItemCopyable() const { return FALSE; } virtual BOOL renameItem(const std::string& new_name); @@ -796,7 +799,8 @@ public: virtual BOOL startDrag(EDragAndDropType* type, LLUUID* id) const; virtual BOOL dragOrDrop(MASK mask, BOOL drop, EDragAndDropType cargo_type, - void* cargo_data); + void* cargo_data, + std::string& tooltip_msg); virtual BOOL canOpenItem() const { return TRUE; } virtual void openItem(); }; @@ -814,6 +818,27 @@ LLUIImagePtr LLTaskCategoryBridge::getIcon() const return LLUI::getUIImage("Inv_FolderClosed"); } +// virtual +const std::string& LLTaskCategoryBridge::getDisplayName() const +{ + LLInventoryObject* cat = findInvObject(); + + if (cat) + { + // Localize "Contents" folder. + if (cat->getParentUUID().isNull() && cat->getName() == "Contents") + { + mDisplayName.assign(LLTrans::getString("ViewerObjectContents")); + } + else + { + mDisplayName.assign(cat->getName()); + } + } + + return mDisplayName; +} + BOOL LLTaskCategoryBridge::isItemRenameable() const { return FALSE; @@ -869,7 +894,8 @@ BOOL LLTaskCategoryBridge::startDrag(EDragAndDropType* type, LLUUID* id) const BOOL LLTaskCategoryBridge::dragOrDrop(MASK mask, BOOL drop, EDragAndDropType cargo_type, - void* cargo_data) + void* cargo_data, + std::string& tooltip_msg) { //llinfos << "LLTaskCategoryBridge::dragOrDrop()" << llendl; BOOL accept = FALSE; diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp index bb87601d20..12eea7844d 100644 --- a/indra/newview/llpanelvolume.cpp +++ b/indra/newview/llpanelvolume.cpp @@ -351,7 +351,7 @@ void LLPanelVolume::getState( ) getChild("Flexible1D Checkbox Ctrl")->setValue(is_flexible); if (is_flexible || (volobjp && volobjp->canBeFlexible())) { - getChildView("Flexible1D Checkbox Ctrl")->setEnabled(editable && single_volume && volobjp); + getChildView("Flexible1D Checkbox Ctrl")->setEnabled(editable && single_volume && volobjp && !volobjp->isMesh()); } else { diff --git a/indra/newview/llsearchcombobox.cpp b/indra/newview/llsearchcombobox.cpp index 6558c9a7fa..2824c70582 100644 --- a/indra/newview/llsearchcombobox.cpp +++ b/indra/newview/llsearchcombobox.cpp @@ -52,10 +52,9 @@ protected: }; LLSearchComboBox::Params::Params() -: search_button("search_button") -, dropdown_button_visible("dropdown_button_visible", false) -{ -} +: search_button("search_button"), + dropdown_button_visible("dropdown_button_visible", false) +{} LLSearchComboBox::LLSearchComboBox(const Params&p) : LLComboBox(p) diff --git a/indra/newview/llsecapi.h b/indra/newview/llsecapi.h index 3ac74da3e0..d9d0b63a49 100644 --- a/indra/newview/llsecapi.h +++ b/indra/newview/llsecapi.h @@ -132,7 +132,7 @@ protected: // LLCertificates are considered unmodifiable // Certificates are pulled out of stores, or created via // factory calls -class LLCertificate : public LLRefCount +class LLCertificate : public LLThreadSafeRefCount { LOG_CLASS(LLCertificate); public: @@ -170,7 +170,7 @@ public: // base iterator implementation class, providing // the functionality needed for the iterator class. - class iterator_impl : public LLRefCount + class iterator_impl : public LLThreadSafeRefCount { public: iterator_impl() {}; @@ -289,7 +289,7 @@ bool operator!=(const LLCertificateVector::iterator& _lhs, const LLCertificateVe // * Persistence of credential information based on some identifier/grid name (for saving username/password) // * Serialization to an OGP identifier/authenticator pair // -class LLCredential : public LLRefCount +class LLCredential : public LLThreadSafeRefCount { public: @@ -424,7 +424,7 @@ protected: // LLSecAPIHandler Class // Interface handler class for the various security storage handlers. -class LLSecAPIHandler : public LLRefCount +class LLSecAPIHandler : public LLThreadSafeRefCount { public: diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp index 5715803bb6..a3daf7c19c 100644 --- a/indra/newview/llsechandler_basic.cpp +++ b/indra/newview/llsechandler_basic.cpp @@ -1005,6 +1005,8 @@ void LLBasicCertificateStore::validate(int validation_policy, LLPointer cert_chain, const LLSD& validation_params) { + // If --no-verify-ssl-cert was passed on the command line, stop right now. + if (gSavedSettings.getBOOL("NoVerifySSLCert")) return; if(cert_chain->size() < 1) { diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index 9b0bb1e858..a4344b971c 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -6651,32 +6651,75 @@ U32 LLObjectSelection::getSelectedObjectTriangleCount() return count; } -/*S32 LLObjectSelection::getSelectedObjectRenderCost() +S32 LLObjectSelection::getSelectedObjectRenderCost() { S32 cost = 0; LLVOVolume::texture_cost_t textures; + typedef std::set uuid_list_t; + uuid_list_t computed_objects; + + typedef std::list > child_list_t; + typedef const child_list_t const_child_list_t; + + // add render cost of complete linksets first, to get accurate texture counts for (list_t::iterator iter = mList.begin(); iter != mList.end(); ++iter) { LLSelectNode* node = *iter; + LLVOVolume* object = (LLVOVolume*)node->getObject(); - if (object) + if (object && object->isRootEdit()) { - cost += object->getRenderCost(textures); - } + cost += object->getRenderCost(textures); + computed_objects.insert(object->getID()); - for (LLVOVolume::texture_cost_t::iterator iter = textures.begin(); iter != textures.end(); ++iter) - { - // add the cost of each individual texture in the linkset - cost += iter->second; + const_child_list_t children = object->getChildren(); + for (const_child_list_t::const_iterator child_iter = children.begin(); + child_iter != children.end(); + ++child_iter) + { + LLViewerObject* child_obj = *child_iter; + LLVOVolume *child = dynamic_cast( child_obj ); + if (child) + { + cost += child->getRenderCost(textures); + computed_objects.insert(child->getID()); + } + } + + for (LLVOVolume::texture_cost_t::iterator iter = textures.begin(); iter != textures.end(); ++iter) + { + // add the cost of each individual texture in the linkset + cost += iter->second; + } + + textures.clear(); } - textures.clear(); } + + // add any partial linkset objects, texture cost may be slightly misleading + for (list_t::iterator iter = mList.begin(); iter != mList.end(); ++iter) + { + LLSelectNode* node = *iter; + LLVOVolume* object = (LLVOVolume*)node->getObject(); + if (object && computed_objects.find(object->getID()) == computed_objects.end() ) + { + cost += object->getRenderCost(textures); + computed_objects.insert(object->getID()); + } + + for (LLVOVolume::texture_cost_t::iterator iter = textures.begin(); iter != textures.end(); ++iter) + { + // add the cost of each individual texture in the linkset + cost += iter->second; + } + + textures.clear(); + } return cost; -}*/ - +} //----------------------------------------------------------------------------- // getTECount() diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp index 134e038fc1..2b1d0f76eb 100644 --- a/indra/newview/llsidepanelinventory.cpp +++ b/indra/newview/llsidepanelinventory.cpp @@ -53,7 +53,10 @@ #include "llsidepaneltaskinfo.h" #include "llstring.h" #include "lltabcontainer.h" +#include "lltextbox.h" +#include "lltrans.h" #include "llviewermedia.h" +#include "llviewernetwork.h" #include "llweb.h" static LLRegisterPanelClassWrapper t_inventory("sidepanel_inventory"); @@ -62,16 +65,25 @@ static LLRegisterPanelClassWrapper t_inventory("sidepanel_ // Constants // +// No longer want the inbox panel to auto-expand since it creates issues with the "new" tag time stamp +#define AUTO_EXPAND_INBOX 0 + +// Temporarily disabling the outbox until we straighten out the API +#define ENABLE_MERCHANT_OUTBOX_PANEL 0 // keep in sync with ENABLE_INVENTORY_DISPLAY_OUTBOX, ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU + static const char * const INBOX_BUTTON_NAME = "inbox_btn"; static const char * const OUTBOX_BUTTON_NAME = "outbox_btn"; static const char * const INBOX_LAYOUT_PANEL_NAME = "inbox_layout_panel"; static const char * const OUTBOX_LAYOUT_PANEL_NAME = "outbox_layout_panel"; + +static const char * const INBOX_OUTBOX_LAYOUT_PANEL_NAME = "inbox_outbox_layout_panel"; static const char * const MAIN_INVENTORY_LAYOUT_PANEL_NAME = "main_inventory_layout_panel"; static const char * const INBOX_INVENTORY_PANEL = "inventory_inbox"; static const char * const OUTBOX_INVENTORY_PANEL = "inventory_outbox"; +static const char * const INBOX_OUTBOX_LAYOUT_STACK_NAME = "inbox_outbox_layout_stack"; static const char * const INVENTORY_LAYOUT_STACK_NAME = "inventory_layout_stack"; static const char * const MARKETPLACE_INBOX_PANEL = "marketplace_inbox"; @@ -236,16 +248,20 @@ BOOL LLSidepanelInventory::postBuild() // Marketplace inbox/outbox setup { - LLLayoutStack* stack = getChild(INVENTORY_LAYOUT_STACK_NAME); + LLLayoutStack* inv_stack = getChild(INVENTORY_LAYOUT_STACK_NAME); // Disable user_resize on main inventory panel by default - stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL_NAME, false); - stack->setPanelUserResize(INBOX_LAYOUT_PANEL_NAME, false); - stack->setPanelUserResize(OUTBOX_LAYOUT_PANEL_NAME, false); + inv_stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL_NAME, false); + inv_stack->setPanelUserResize(INBOX_OUTBOX_LAYOUT_PANEL_NAME, false); + + // Collapse marketplace panel by default + inv_stack->collapsePanel(getChild(INBOX_OUTBOX_LAYOUT_PANEL_NAME), true); + + LLLayoutStack* inout_stack = getChild(INBOX_OUTBOX_LAYOUT_STACK_NAME); // Collapse both inbox and outbox panels - stack->collapsePanel(getChild(INBOX_LAYOUT_PANEL_NAME), true); - stack->collapsePanel(getChild(OUTBOX_LAYOUT_PANEL_NAME), true); + inout_stack->collapsePanel(getChild(INBOX_LAYOUT_PANEL_NAME), true); + inout_stack->collapsePanel(getChild(OUTBOX_LAYOUT_PANEL_NAME), true); // Set up button states and callbacks LLButton * inbox_button = getChild(INBOX_BUTTON_NAME); @@ -298,15 +314,16 @@ void LLSidepanelInventory::handleLoginComplete() enableInbox(true); } +#if ENABLE_MERCHANT_OUTBOX_PANEL // Set up observer for outbox changes, if we have an outbox already if (!outbox_id.isNull()) { observeOutboxModifications(outbox_id); // Enable the display of the outbox if it exists - //enableOutbox(true); - // leslie NOTE: Disabling outbox until we support it officially. + enableOutbox(true); } +#endif } void LLSidepanelInventory::observeInboxOutboxCreation() @@ -389,96 +406,159 @@ void LLSidepanelInventory::observeOutboxModifications(const LLUUID& outboxID) void LLSidepanelInventory::enableInbox(bool enabled) { mInboxEnabled = enabled; - getChild(INBOX_LAYOUT_PANEL_NAME)->setVisible(enabled); + + LLLayoutPanel * inbox_layout_panel = getChild(INBOX_LAYOUT_PANEL_NAME); + inbox_layout_panel->setVisible(enabled); + + if (mInboxEnabled) + { + LLLayoutPanel * inout_layout_panel = getChild(INBOX_OUTBOX_LAYOUT_PANEL_NAME); + + inout_layout_panel->setVisible(TRUE); + + if (mOutboxEnabled) + { + S32 inbox_min_dim = inbox_layout_panel->getMinDim(); + S32 outbox_min_dim = getChild(OUTBOX_LAYOUT_PANEL_NAME)->getMinDim(); + + inout_layout_panel->setMinDim(inbox_min_dim + outbox_min_dim); + } + } } void LLSidepanelInventory::enableOutbox(bool enabled) { mOutboxEnabled = enabled; - getChild(OUTBOX_LAYOUT_PANEL_NAME)->setVisible(enabled); + + LLLayoutPanel * outbox_layout_panel = getChild(OUTBOX_LAYOUT_PANEL_NAME); + outbox_layout_panel->setVisible(enabled); + + if (mOutboxEnabled) + { + LLLayoutPanel * inout_layout_panel = getChild(INBOX_OUTBOX_LAYOUT_PANEL_NAME); + + inout_layout_panel->setVisible(TRUE); + + if (mInboxEnabled) + { + S32 inbox_min_dim = getChild(INBOX_LAYOUT_PANEL_NAME)->getMinDim(); + S32 outbox_min_dim = outbox_layout_panel->getMinDim(); + + inout_layout_panel->setMinDim(inbox_min_dim + outbox_min_dim); + } + + updateOutboxUserStatus(); + } } void LLSidepanelInventory::onInboxChanged(const LLUUID& inbox_id) { // Trigger a load of the entire inbox so we always know the contents and their creation dates for sorting LLInventoryModelBackgroundFetch::instance().start(inbox_id); - - // Expand the inbox since we have fresh items - LLPanelMarketplaceInbox * inbox = findChild(MARKETPLACE_INBOX_PANEL); - if (inbox) + +#if AUTO_EXPAND_INBOX + // If the outbox is expanded, don't auto-expand the inbox + if (mOutboxEnabled) + { + if (getChild(OUTBOX_BUTTON_NAME)->getToggleState()) + { + return; + } + } + + // Expand the inbox since we have fresh items and the outbox is not expanded + if (mInboxEnabled) { getChild(INBOX_BUTTON_NAME)->setToggleState(true); onToggleInboxBtn(); - } + } +#endif } void LLSidepanelInventory::onOutboxChanged(const LLUUID& outbox_id) { - // Perhaps use this to track outbox changes? + // Expand the outbox since we have new items in it + if (mOutboxEnabled) + { + getChild(OUTBOX_BUTTON_NAME)->setToggleState(true); + onToggleOutboxBtn(); + } } -bool manageInboxOutboxPanels(LLLayoutStack * stack, - LLButton * pressedButton, LLLayoutPanel * pressedPanel, +bool LLSidepanelInventory::manageInboxOutboxPanels(LLButton * pressedButton, LLLayoutPanel * pressedPanel, LLButton * otherButton, LLLayoutPanel * otherPanel) { bool expand = pressedButton->getToggleState(); bool otherExpanded = otherButton->getToggleState(); - // - // NOTE: Ideally we could have two panel sizes stored for a collapsed and expanded minimum size. - // For now, leave this code disabled because it creates some bad artifacts when expanding - // and collapsing the inbox/outbox. - // - //S32 smallMinSize = (expand ? pressedPanel->getMinDim() : otherPanel->getMinDim()); - //S32 pressedMinSize = (expand ? 2 * smallMinSize : smallMinSize); - //otherPanel->setMinDim(smallMinSize); - //pressedPanel->setMinDim(pressedMinSize); + LLLayoutStack* inv_stack = getChild(INVENTORY_LAYOUT_STACK_NAME); + LLLayoutStack* inout_stack = getChild(INBOX_OUTBOX_LAYOUT_STACK_NAME); + LLLayoutPanel* inout_panel = getChild(INBOX_OUTBOX_LAYOUT_PANEL_NAME); + // Enable user_resize on main inventory panel only when a marketplace box is expanded + inv_stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL_NAME, expand); + inv_stack->collapsePanel(inout_panel, !expand); + + // Collapse other marketplace panel if it is expanded if (expand && otherExpanded) { // Reshape pressedPanel to the otherPanel's height so we preserve the marketplace panel size pressedPanel->reshape(pressedPanel->getRect().getWidth(), otherPanel->getRect().getHeight()); - stack->collapsePanel(otherPanel, true); + inout_stack->collapsePanel(otherPanel, true); otherButton->setToggleState(false); } + else + { + // NOTE: This is an attempt to reshape the inventory panel to the proper size but it doesn't seem to propagate + // properly to the child panels. - stack->collapsePanel(pressedPanel, !expand); + S32 new_height = inout_panel->getRect().getHeight(); - // Enable user_resize on main inventory panel only when a marketplace box is expanded - stack->setPanelUserResize(MAIN_INVENTORY_LAYOUT_PANEL_NAME, expand); + if (otherPanel->getVisible()) + { + new_height -= otherPanel->getMinDim(); + } + + pressedPanel->reshape(pressedPanel->getRect().getWidth(), new_height); + } + + // Expand/collapse the indicated panel + inout_stack->collapsePanel(pressedPanel, !expand); return expand; } void LLSidepanelInventory::onToggleInboxBtn() { - LLLayoutStack* stack = getChild(INVENTORY_LAYOUT_STACK_NAME); - LLButton* pressedButton = getChild(INBOX_BUTTON_NAME); - LLLayoutPanel* pressedPanel = getChild(INBOX_LAYOUT_PANEL_NAME); - LLButton* otherButton = getChild(OUTBOX_BUTTON_NAME); - LLLayoutPanel* otherPanel = getChild(OUTBOX_LAYOUT_PANEL_NAME); + LLButton* inboxButton = getChild(INBOX_BUTTON_NAME); + LLLayoutPanel* inboxPanel = getChild(INBOX_LAYOUT_PANEL_NAME); + LLButton* outboxButton = getChild(OUTBOX_BUTTON_NAME); + LLLayoutPanel* outboxPanel = getChild(OUTBOX_LAYOUT_PANEL_NAME); - manageInboxOutboxPanels(stack, pressedButton, pressedPanel, otherButton, otherPanel); + const bool inbox_expanded = manageInboxOutboxPanels(inboxButton, inboxPanel, outboxButton, outboxPanel); - gSavedPerAccountSettings.setString("LastInventoryInboxExpand", LLDate::now().asString()); + if (inbox_expanded && inboxPanel->isInVisibleChain()) + { + gSavedPerAccountSettings.setU32("LastInventoryInboxActivity", time_corrected()); + } } void LLSidepanelInventory::onToggleOutboxBtn() { - LLLayoutStack* stack = getChild(INVENTORY_LAYOUT_STACK_NAME); - LLButton* pressedButton = getChild(OUTBOX_BUTTON_NAME); - LLLayoutPanel* pressedPanel = getChild(OUTBOX_LAYOUT_PANEL_NAME); - LLButton* otherButton = getChild(INBOX_BUTTON_NAME); - LLLayoutPanel* otherPanel = getChild(INBOX_LAYOUT_PANEL_NAME); + LLButton* inboxButton = getChild(INBOX_BUTTON_NAME); + LLLayoutPanel* inboxPanel = getChild(INBOX_LAYOUT_PANEL_NAME); + LLButton* outboxButton = getChild(OUTBOX_BUTTON_NAME); + LLLayoutPanel* outboxPanel = getChild(OUTBOX_LAYOUT_PANEL_NAME); - manageInboxOutboxPanels(stack, pressedButton, pressedPanel, otherButton, otherPanel); + manageInboxOutboxPanels(outboxButton, outboxPanel, inboxButton, inboxPanel); } void LLSidepanelInventory::onOpen(const LLSD& key) { LLFirstUse::newInventory(false); +#if AUTO_EXPAND_INBOX // Expand the inbox if we have fresh items LLPanelMarketplaceInbox * inbox = findChild(MARKETPLACE_INBOX_PANEL); if (inbox && (inbox->getFreshItemCount() > 0)) @@ -486,6 +566,12 @@ void LLSidepanelInventory::onOpen(const LLSD& key) getChild(INBOX_BUTTON_NAME)->setToggleState(true); onToggleInboxBtn(); } +#else + if (mInboxEnabled && getChild(INBOX_BUTTON_NAME)->getToggleState()) + { + gSavedPerAccountSettings.setU32("LastInventoryInboxActivity", time_corrected()); + } +#endif if(key.size() == 0) { @@ -642,6 +728,78 @@ void LLSidepanelInventory::showInventoryPanel() updateVerbs(); } +void LLSidepanelInventory::updateOutboxUserStatus() +{ + const bool isMerchant = (gSavedSettings.getString("InventoryMarketplaceUserStatus") == "merchant"); + const bool hasOutbox = !gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false, false).isNull(); + + LLView * outbox_placeholder = getChild("outbox_inventory_placeholder_panel"); + LLView * outbox_placeholder_parent = outbox_placeholder->getParent(); + + LLTextBox * outbox_title_box = outbox_placeholder->getChild("outbox_inventory_placeholder_title"); + LLTextBox * outbox_text_box = outbox_placeholder->getChild("outbox_inventory_placeholder_text"); + + std::string outbox_text; + std::string outbox_title; + std::string outbox_tooltip; + + if (isMerchant) + { + if (hasOutbox) + { + outbox_text = LLTrans::getString("InventoryOutboxNoItems"); + outbox_title = LLTrans::getString("InventoryOutboxNoItemsTitle"); + outbox_tooltip = LLTrans::getString("InventoryOutboxNoItemsTooltip"); + } + else + { + outbox_text = LLTrans::getString("InventoryOutboxCreationError"); + outbox_title = LLTrans::getString("InventoryOutboxCreationErrorTitle"); + outbox_tooltip = LLTrans::getString("InventoryOutboxCreationErrorTooltip"); + } + } + else + { + // + // The string to become a merchant contains 3 URL's which need the domain name patched in. + // + + std::string domain = "secondlife.com"; + + //if (!LLGridManager::getInstance()->isInProductionGrid()) + if (LLGridManager::getInstance()->isInSLBeta())// + { + std::string gridLabel = LLGridManager::getInstance()->getGridLabel(); + domain = llformat("%s.lindenlab.com", utf8str_tolower(gridLabel).c_str()); + } + + LLStringUtil::format_map_t domain_arg; + domain_arg["[DOMAIN_NAME]"] = domain; + + std::string marketplace_url = LLTrans::getString("MarketplaceURL", domain_arg); + std::string marketplace_url_create = LLTrans::getString("MarketplaceURL_CreateStore", domain_arg); + std::string marketplace_url_info = LLTrans::getString("MarketplaceURL_LearnMore", domain_arg); + + LLStringUtil::format_map_t args1, args2, args3; + args1["[MARKETPLACE_URL]"] = marketplace_url; + args2["[LEARN_MORE_URL]"] = marketplace_url_info; + args3["[CREATE_STORE_URL]"] = marketplace_url_create; + + // NOTE: This is dumb, ridiculous and very finicky. The order of these is very important + // to have these three string substitutions work properly. + outbox_text = LLTrans::getString("InventoryOutboxNotMerchant", args1); + LLStringUtil::format(outbox_text, args2); + LLStringUtil::format(outbox_text, args3); + + outbox_title = LLTrans::getString("InventoryOutboxNotMerchantTitle"); + outbox_tooltip = LLTrans::getString("InventoryOutboxNotMerchantTooltip"); + } + + outbox_text_box->setValue(outbox_text); + outbox_title_box->setValue(outbox_title); + outbox_placeholder_parent->setToolTip(outbox_tooltip); +} + void LLSidepanelInventory::updateVerbs() { mInfoBtn->setEnabled(FALSE); @@ -759,7 +917,7 @@ U32 LLSidepanelInventory::getSelectedCount() count += selection_list.size(); } - + if ((count == 0) && mOutboxEnabled && (mInventoryPanelOutbox != NULL)) { selection_list = mInventoryPanelOutbox->getRootFolder()->getSelectionList(); diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h index 2a65905c9b..334afb05f8 100644 --- a/indra/newview/llsidepanelinventory.h +++ b/indra/newview/llsidepanelinventory.h @@ -29,11 +29,13 @@ #include "llpanel.h" +class LLButton; class LLFolderViewItem; class LLInboxOutboxAddedObserver; class LLInventoryCategoriesObserver; class LLInventoryItem; class LLInventoryPanel; +class LLLayoutPanel; class LLPanelMainInventory; class LLSidepanelItemInfo; class LLSidepanelTaskInfo; @@ -74,10 +76,11 @@ public: void enableInbox(bool enabled); void enableOutbox(bool enabled); - + bool isInboxEnabled() const { return mInboxEnabled; } bool isOutboxEnabled() const { return mOutboxEnabled; } + void updateOutboxUserStatus(); void updateVerbs(); protected: @@ -93,6 +96,8 @@ protected: void onInboxChanged(const LLUUID& inbox_id); void onOutboxChanged(const LLUUID& outbox_id); + bool manageInboxOutboxPanels(LLButton * pressedButton, LLLayoutPanel * pressedPanel, LLButton * otherButton, LLLayoutPanel * otherPanel); + // // UI Elements // diff --git a/indra/newview/llsidetray.cpp b/indra/newview/llsidetray.cpp index 81658a7fd9..05313e5f7b 100644 --- a/indra/newview/llsidetray.cpp +++ b/indra/newview/llsidetray.cpp @@ -63,6 +63,8 @@ using namespace std; using namespace LLNotificationsUI; +class LLSideTrayButton; + static LLRootViewRegistry::Register t1("side_tray"); static LLDefaultChildRegistry::Register t2("sidetray_tab"); @@ -96,6 +98,164 @@ bool LLSideTray::instanceCreated () //-TT 2.6.9 LLSideTrayTab declaration is in llsidetraytab.h - leaving it there +////////////////////////////////////////////////////////////////////////////// +// LLSideTrayButton +// Side Tray tab button with "tear off" handling. +////////////////////////////////////////////////////////////////////////////// + +class LLSideTrayButton : public LLButton +{ +public: + /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask) + { + // Route future Mouse messages here preemptively. (Release on mouse up.) + // No handler needed for focus lost since this class has no state that depends on it. + gFocusMgr.setMouseCapture(this); + + localPointToScreen(x, y, &mDragLastScreenX, &mDragLastScreenY); + + // Note: don't pass on to children + return TRUE; + } + + /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask) + { + // We only handle the click if the click both started and ended within us + if( !hasMouseCapture() ) return FALSE; + + S32 screen_x; + S32 screen_y; + localPointToScreen(x, y, &screen_x, &screen_y); + + S32 delta_x = screen_x - mDragLastScreenX; + S32 delta_y = screen_y - mDragLastScreenY; + + LLSideTray* side_tray = LLSideTray::getInstance(); + + // Check if the tab we are dragging is docked. + if (!side_tray->isTabAttached(mTabName)) return FALSE; + + // Same value is hardcoded in LLDragHandle::handleHover(). + const S32 undock_threshold = 12; + + // Detach a tab if it has been pulled further than undock_threshold. + if (delta_x <= -undock_threshold || delta_x >= undock_threshold || + delta_y <= -undock_threshold || delta_y >= undock_threshold) + { + LLSideTrayTab* tab = side_tray->getTab(mTabName); + if (!tab) return FALSE; + + //tab->setDocked(false); + tab->toggleTabDocked(false); + + LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab->getName()); + if (!floater_tab) return FALSE; + + LLRect original_rect = floater_tab->getRect(); + S32 header_snap_y = floater_tab->getHeaderHeight() / 2; + S32 snap_x = screen_x - original_rect.mLeft - original_rect.getWidth() / 2; + S32 snap_y = screen_y - original_rect.mTop + header_snap_y; + + // Move the floater to appear "under" the mouse pointer. + floater_tab->setRect(original_rect.translate(snap_x, snap_y)); + + // Snap the mouse pointer to the center of the floater header + // and call 'mouse down' event handler to begin dragging. + floater_tab->handleMouseDown(original_rect.getWidth() / 2, + original_rect.getHeight() - header_snap_y, + mask); + + return TRUE; + } + + return FALSE; + } + + void setBadgeDriver(LLSideTrayTabBadgeDriver* driver) + { + mBadgeDriver = driver; + } + +// [SL:KB] - Patch: UI-SideTrayDndButtonCommit | Checked: 2011-06-19 (Catznip-2.6.0c) | Added: Catznip-2.6.0c + /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void* cargo_data, + EAcceptance* accept, std::string& tooltip_msg) + { + if ( (getEnabled()) && (!mDragCommitDelayTimer.getStarted()) ) + { + const LLSideTray* pSideTray = LLSideTray::getInstance(); + if ( (pSideTray->getCollapsed()) || ((pSideTray->getActiveTab()) && (pSideTray->getActiveTab()->getName() != getName())) ) + mDragCommitDelayTimer.start(); + } + else if ( (mDragCommitDelayTimer.getStarted()) && (mDragCommitDelayTimer.getElapsedTimeF32() > DELAY_DRAG_HOVER_COMMIT) ) + { + onCommit(); + mDragCommitDelayTimer.stop(); + return TRUE; + } + return LLButton::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); + + } + + /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask) + { + mDragCommitDelayTimer.stop(); + LLButton::onMouseLeave(x, y, mask); + } +// [/SL:KB] + + + void setVisible(BOOL visible) + { + setBadgeVisibility(visible); + + LLButton::setVisible(visible); + } + +protected: + LLSideTrayButton(const LLButton::Params& p) + : LLButton(p) + , mDragLastScreenX(0) + , mDragLastScreenY(0) + , mBadgeDriver(NULL) + { + // Find out the tab name to use in handleHover(). + size_t pos = getName().find("_button"); + llassert(pos != std::string::npos); + mTabName = getName().substr(0, pos); +// [SL:KB] - Patch: UI-SideTrayDndButtonCommit | Checked: 2011-06-19 (Catznip-2.6.0c) | Added: Catznip-2.6.0c + mDragCommitDelayTimer.stop(); +// [/SL:KB] + + } + + friend class LLUICtrlFactory; + + void draw() + { + if (mBadgeDriver) + { + setBadgeLabel(mBadgeDriver->getBadgeString()); + } + + LLButton::draw(); + } + +private: + S32 mDragLastScreenX; + S32 mDragLastScreenY; + + std::string mTabName; +// [SL:KB] - Patch: UI-SideTrayDndButtonCommit | Checked: 2011-06-19 (Catznip-2.6.0c) | Added: Catznip-2.6.0c + LLFrameTimer mDragCommitDelayTimer; +// [/SL:KB] + LLSideTrayTabBadgeDriver* mBadgeDriver; +}; + + +//////////////////////////////////////////////////// +// LLSideTrayTab implementation +//////////////////////////////////////////////////// + LLSideTrayTab::LLSideTrayTab(const Params& p) : LLPanel(), mTabTitle(p.tab_title), @@ -103,7 +263,8 @@ LLSideTrayTab::LLSideTrayTab(const Params& p) mImageSelected(p.image_selected), mDescription(p.description), mMainPanel(NULL), - mBadgeParams(p.badge) + mBadgeParams(p.badge), + mSideTrayButton(NULL) { mHasBadge = p.badge.isProvided(); } @@ -233,6 +394,11 @@ void LLSideTrayTab::toggleTabDocked(bool toggle_floater /* = true */) bool docking = !isDocked(); + if (mSideTrayButton) + { + mSideTrayButton->setVisible(docking); + } + // Hide the "Tear Off" button when a tab gets undocked // and show "Dock" button instead. getChild("undock")->setVisible(docking); @@ -474,146 +640,6 @@ LLSideTrayTab* LLSideTrayTab::createInstance () template <> LLPanel* tab_cast(LLSideTrayTab* tab) { return tab; } -////////////////////////////////////////////////////////////////////////////// -// LLSideTrayButton -// Side Tray tab button with "tear off" handling. -////////////////////////////////////////////////////////////////////////////// - -class LLSideTrayButton : public LLButton -{ -public: - /*virtual*/ BOOL handleMouseDown(S32 x, S32 y, MASK mask) - { - // Route future Mouse messages here preemptively. (Release on mouse up.) - // No handler needed for focus lost since this class has no state that depends on it. - gFocusMgr.setMouseCapture(this); - - localPointToScreen(x, y, &mDragLastScreenX, &mDragLastScreenY); - - // Note: don't pass on to children - return TRUE; - } - - /*virtual*/ BOOL handleHover(S32 x, S32 y, MASK mask) - { - // We only handle the click if the click both started and ended within us - if( !hasMouseCapture() ) return FALSE; - - S32 screen_x; - S32 screen_y; - localPointToScreen(x, y, &screen_x, &screen_y); - - S32 delta_x = screen_x - mDragLastScreenX; - S32 delta_y = screen_y - mDragLastScreenY; - - LLSideTray* side_tray = LLSideTray::getInstance(); - - // Check if the tab we are dragging is docked. - if (!side_tray->isTabAttached(getName())) return FALSE; - - // Same value is hardcoded in LLDragHandle::handleHover(). - const S32 undock_threshold = 12; - - // Detach a tab if it has been pulled further than undock_threshold. - if (delta_x <= -undock_threshold || delta_x >= undock_threshold || - delta_y <= -undock_threshold || delta_y >= undock_threshold) - { - LLSideTrayTab* tab = side_tray->getTab(getName()); - if (!tab) return FALSE; - - //tab->setDocked(false); - tab->toggleTabDocked(false); - - LLFloater* floater_tab = LLFloaterReg::getInstance("side_bar_tab", tab->getName()); - if (!floater_tab) return FALSE; - - LLRect original_rect = floater_tab->getRect(); - S32 header_snap_y = floater_tab->getHeaderHeight() / 2; - S32 snap_x = screen_x - original_rect.mLeft - original_rect.getWidth() / 2; - S32 snap_y = screen_y - original_rect.mTop + header_snap_y; - - // Move the floater to appear "under" the mouse pointer. - floater_tab->setRect(original_rect.translate(snap_x, snap_y)); - - // Snap the mouse pointer to the center of the floater header - // and call 'mouse down' event handler to begin dragging. - floater_tab->handleMouseDown(original_rect.getWidth() / 2, - original_rect.getHeight() - header_snap_y, - mask); - - return TRUE; - } - - return FALSE; - } - - void setBadgeDriver(LLSideTrayTabBadgeDriver* driver) - { - mBadgeDriver = driver; - } - - // [SL:KB] - Patch: UI-SideTrayDndButtonCommit | Checked: 2011-06-19 (Catznip-2.6.0c) | Added: Catznip-2.6.0c - /*virtual*/ BOOL handleDragAndDrop(S32 x, S32 y, MASK mask, BOOL drop, EDragAndDropType cargo_type, void* cargo_data, - EAcceptance* accept, std::string& tooltip_msg) - { - if ( (getEnabled()) && (!mDragCommitDelayTimer.getStarted()) ) - { - const LLSideTray* pSideTray = LLSideTray::getInstance(); - if ( (pSideTray->getCollapsed()) || ((pSideTray->getActiveTab()) && (pSideTray->getActiveTab()->getName() != getName())) ) - mDragCommitDelayTimer.start(); - } - else if ( (mDragCommitDelayTimer.getStarted()) && (mDragCommitDelayTimer.getElapsedTimeF32() > DELAY_DRAG_HOVER_COMMIT) ) - { - onCommit(); - mDragCommitDelayTimer.stop(); - return TRUE; - } - return LLButton::handleDragAndDrop(x, y, mask, drop, cargo_type, cargo_data, accept, tooltip_msg); - - } - - /*virtual*/ void onMouseLeave(S32 x, S32 y, MASK mask) - { - mDragCommitDelayTimer.stop(); - LLButton::onMouseLeave(x, y, mask); - } -// [/SL:KB] - -protected: - LLSideTrayButton(const LLButton::Params& p) - : LLButton(p) - , mDragLastScreenX(0) - , mDragLastScreenY(0) - , mBadgeDriver(NULL) -// {} -// [SL:KB] - Patch: UI-SideTrayDndButtonCommit | Checked: 2011-06-19 (Catznip-2.6.0c) | Added: Catznip-2.6.0c - { - mDragCommitDelayTimer.stop(); - } -// [/SL:KB] - - - friend class LLUICtrlFactory; - - void draw() - { - if (mBadgeDriver) - { - setBadgeLabel(mBadgeDriver->getBadgeString()); - } - - LLButton::draw(); - } - -private: - S32 mDragLastScreenX; - S32 mDragLastScreenY; -// [SL:KB] - Patch: UI-SideTrayDndButtonCommit | Checked: 2011-06-19 (Catznip-2.6.0c) | Added: Catznip-2.6.0c - LLFrameTimer mDragCommitDelayTimer; -// [/SL:KB] - LLSideTrayTabBadgeDriver* mBadgeDriver; -}; - ////////////////////////////////////////////////////////////////////////////// // LLSideTray ////////////////////////////////////////////////////////////////////////////// @@ -898,7 +924,7 @@ bool LLSideTray::selectTabByName(const std::string& name, bool keep_prev_visible { // Keep previously active tab visible if requested. if (keep_prev_visible) tab_to_keep_visible = mActiveTab; - toggleTabButton(mActiveTab); + toggleTabButton(mActiveTab); } //select new tab @@ -906,9 +932,9 @@ bool LLSideTray::selectTabByName(const std::string& name, bool keep_prev_visible if (mActiveTab) { - toggleTabButton(mActiveTab); - LLSD key;//empty - mActiveTab->onOpen(key); + toggleTabButton(mActiveTab); + LLSD key;//empty + mActiveTab->onOpen(key); } //arrange(); @@ -1093,7 +1119,9 @@ LLButton* LLSideTrayTab::createButton(bool allowTearOff, LLUICtrl::commit_callba LLButton* button; if (allowTearOff) { - button = LLUICtrlFactory::create(bparams); + mSideTrayButton = LLUICtrlFactory::create(bparams); + + button = mSideTrayButton; } else { @@ -1619,7 +1647,7 @@ void LLSideTray::updateSidetrayVisibility() parent->setVisible(new_visibility); // Signal change of visible width. - llinfos << "Visible: " << new_visibility << llendl; + //llinfos << "Visible: " << new_visibility << llendl; mVisibleWidthChangeSignal(this, new_visibility); } } diff --git a/indra/newview/llsidetray.h b/indra/newview/llsidetray.h index 8f88cefbc2..61f4dd608d 100644 --- a/indra/newview/llsidetray.h +++ b/indra/newview/llsidetray.h @@ -28,18 +28,19 @@ #define LL_LLSIDETRAY_H_ #include "llpanel.h" +#include "llsidetraytab.h" #include "string" class LLAccordionCtrl; -class LLSideTrayTab; // Define an interface for side tab button badge values class LLSideTrayTabBadgeDriver { public: - virtual std::string getBadgeString() const = 0; + virtual std::string getBadgeString() const = 0; }; + // Deal with LLSideTrayTab being opaque. Generic do-nothing cast... template T tab_cast(LLSideTrayTab* tab) { return tab; } diff --git a/indra/newview/llsidetraypanelcontainer.cpp b/indra/newview/llsidetraypanelcontainer.cpp index 214f595772..95a12c7c23 100644 --- a/indra/newview/llsidetraypanelcontainer.cpp +++ b/indra/newview/llsidetraypanelcontainer.cpp @@ -32,10 +32,10 @@ static LLDefaultChildRegistry::Register r2("panel_cont std::string LLSideTrayPanelContainer::PARAM_SUB_PANEL_NAME = "sub_panel_name"; LLSideTrayPanelContainer::Params::Params() - : default_panel_name("default_panel_name") +: default_panel_name("default_panel_name") { // Always hide tabs. - hide_tabs(true); + changeDefault(hide_tabs, true); } LLSideTrayPanelContainer::LLSideTrayPanelContainer(const Params& p) diff --git a/indra/newview/llsidetraytab.h b/indra/newview/llsidetraytab.h index e04874409e..31652bc23f 100644 --- a/indra/newview/llsidetraytab.h +++ b/indra/newview/llsidetraytab.h @@ -22,12 +22,15 @@ * $/LicenseInfo$ */ +#ifndef LLSIDETRAYTAB +#define LLSIDETRAYTAB -#include "llsidetray.h" #include "llpanel.h" - +#include "llbadge.h" +#include "llfloater.h" class LLSideTray; +class LLSideTrayButton; ////////////////////////////////////////////////////////////////////////////// // LLSideTrayTab @@ -36,6 +39,7 @@ class LLSideTray; class LLSideTrayTab: public LLPanel { + LOG_CLASS(LLSideTrayTab); friend class LLUICtrlFactory; friend class LLSideTray; public: @@ -88,9 +92,9 @@ public: BOOL handleScrollWheel(S32 x, S32 y, S32 clicks); - LLPanel *getPanel(); + LLPanel* getPanel(); - LLButton *createButton(bool allowTearOff, LLUICtrl::commit_callback_t callback); + LLButton* createButton(bool allowTearOff, LLUICtrl::commit_callback_t callback); private: std::string mTabTitle; @@ -102,4 +106,6 @@ private: bool mHasBadge; LLBadge::Params mBadgeParams; + LLSideTrayButton* mSideTrayButton; }; +#endif diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp index 9c1e6402ff..a734d471a7 100644 --- a/indra/newview/llslurl.cpp +++ b/indra/newview/llslurl.cpp @@ -324,11 +324,11 @@ LLSLURL::LLSLURL(const std::string& slurl) path_array.erase(0); - // parse the x, y, z - if(path_array.size() >= 3) + // parse the x, y, and optionally z + if(path_array.size() >= 2) { - mPosition = LLVector3(path_array); + mPosition = LLVector3(path_array); // this construction handles LLSD without all components (values default to 0.f) if((F32(mPosition[VX]) < 0.f) || (mPosition[VX] > REGION_WIDTH_METERS) || (F32(mPosition[VY]) < 0.f) || diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index e8721fb2ee..5f405ca81e 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -523,6 +523,11 @@ void LLSpatialGroup::clearDrawMap() mDrawMap.clear(); } +BOOL LLSpatialGroup::isHUDGroup() +{ + return mSpatialPartition && mSpatialPartition->isHUDPartition() ; +} + BOOL LLSpatialGroup::isRecentlyVisible() const { return (LLDrawable::getCurrentFrame() - mVisible[LLViewerCamera::sCurCameraID]) < LLDrawable::getMinVisFrameRange() ; @@ -2758,6 +2763,115 @@ void renderUpdateType(LLDrawable* drawablep) } } +void renderComplexityDisplay(LLDrawable* drawablep) +{ + LLViewerObject* vobj = drawablep->getVObj(); + if (!vobj) + { + return; + } + + LLVOVolume *voVol = dynamic_cast(vobj); + + if (!voVol) + { + return; + } + + if (!voVol->isRoot()) + { + return; + } + + LLVOVolume::texture_cost_t textures; + F32 cost = (F32) voVol->getRenderCost(textures); + + // add any child volumes + LLViewerObject::const_child_list_t children = voVol->getChildren(); + for (LLViewerObject::const_child_list_t::const_iterator iter = children.begin(); iter != children.end(); ++iter) + { + const LLViewerObject *child = *iter; + const LLVOVolume *child_volume = dynamic_cast(child); + if (child_volume) + { + cost += child_volume->getRenderCost(textures); + } + } + + // add texture cost + for (LLVOVolume::texture_cost_t::iterator iter = textures.begin(); iter != textures.end(); ++iter) + { + // add the cost of each individual texture in the linkset + cost += iter->second; + } + + F32 cost_max = (F32) LLVOVolume::getRenderComplexityMax(); + + + + // allow user to set a static color scale + if (gSavedSettings.getS32("RenderComplexityStaticMax") > 0) + { + cost_max = gSavedSettings.getS32("RenderComplexityStaticMax"); + } + + F32 cost_ratio = cost / cost_max; + + // cap cost ratio at 1.0f in case cost_max is at a low threshold + cost_ratio = cost_ratio > 1.0f ? 1.0f : cost_ratio; + + LLGLEnable blend(GL_BLEND); + + LLColor4 color; + const LLColor4 color_min = gSavedSettings.getColor4("RenderComplexityColorMin"); + const LLColor4 color_mid = gSavedSettings.getColor4("RenderComplexityColorMid"); + const LLColor4 color_max = gSavedSettings.getColor4("RenderComplexityColorMax"); + + if (cost_ratio < 0.5f) + { + color = color_min * (1 - cost_ratio * 2) + color_mid * (cost_ratio * 2); + } + else + { + color = color_mid * (1 - (cost_ratio - 0.5) * 2) + color_max * ((cost_ratio - 0.5) * 2); + } + + LLSD color_val = color.getValue(); + + // don't highlight objects below the threshold + if (cost > gSavedSettings.getS32("RenderComplexityThreshold")) + { + glColor4f(color[0],color[1],color[2],0.5f); + + + S32 num_faces = drawablep->getNumFaces(); + if (num_faces) + { + for (S32 i = 0; i < num_faces; ++i) + { + pushVerts(drawablep->getFace(i), LLVertexBuffer::MAP_VERTEX); + } + } + LLViewerObject::const_child_list_t children = voVol->getChildren(); + for (LLViewerObject::const_child_list_t::const_iterator iter = children.begin(); iter != children.end(); ++iter) + { + const LLViewerObject *child = *iter; + if (child) + { + num_faces = child->getNumFaces(); + if (num_faces) + { + for (S32 i = 0; i < num_faces; ++i) + { + pushVerts(child->mDrawable->getFace(i), LLVertexBuffer::MAP_VERTEX); + } + } + } + } + } + + voVol->setDebugText(llformat("%4.0f", cost)); +} void renderBoundingBox(LLDrawable* drawable, BOOL set_color = TRUE) { @@ -3862,6 +3976,10 @@ public: { renderUpdateType(drawable); } + if(gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_RENDER_COMPLEXITY)) + { + renderComplexityDisplay(drawable); + } LLVOAvatar* avatar = dynamic_cast(drawable->getVObj().get()); @@ -4110,7 +4228,8 @@ void LLSpatialPartition::renderDebug() LLPipeline::RENDER_DEBUG_AVATAR_VOLUME | LLPipeline::RENDER_DEBUG_AGENT_TARGET | //LLPipeline::RENDER_DEBUG_BUILD_QUEUE | - LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA)) + LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA | + LLPipeline::RENDER_DEBUG_RENDER_COMPLEXITY)) { return; } @@ -4155,6 +4274,10 @@ void LLSpatialGroup::drawObjectBox(LLColor4 col) drawBox(mObjectBounds[0], size); } +bool LLSpatialPartition::isHUDPartition() +{ + return mPartitionType == LLViewerRegion::PARTITION_HUD ; +} BOOL LLSpatialPartition::isVisible(const LLVector3& v) { diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 54d5d36f6e..11955540c6 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -282,6 +282,7 @@ public: LLSpatialGroup(OctreeNode* node, LLSpatialPartition* part); + BOOL isHUDGroup() ; BOOL isDead() { return isState(DEAD); } BOOL isState(U32 state) const; BOOL isOcclusionState(U32 state) const { return mOcclusionState[LLViewerCamera::sCurCameraID] & state ? TRUE : FALSE; } @@ -470,6 +471,7 @@ public: S32 cull(LLCamera &camera, std::vector* results = NULL, BOOL for_select = FALSE); // Cull on arbitrary frustum BOOL isVisible(const LLVector3& v); + bool isHUDPartition() ; virtual LLSpatialBridge* asBridge() { return NULL; } virtual BOOL isBridge() { return asBridge() != NULL; } diff --git a/indra/newview/llspeakbutton.cpp b/indra/newview/llspeakbutton.cpp index d3e96f8dfb..bbe573c546 100644 --- a/indra/newview/llspeakbutton.cpp +++ b/indra/newview/llspeakbutton.cpp @@ -47,12 +47,10 @@ static LLDefaultChildRegistry::Register t1("talk_button"); ////////////////////////////////////////////////////////////////////////// LLSpeakButton::Params::Params() - : speak_button("speak_button") - , show_button("show_button") - , monitor("monitor") -{ - // See widgets/talk_button.xml -} +: speak_button("speak_button"), + show_button("show_button"), + monitor("monitor") +{} LLSpeakButton::LLSpeakButton(const Params& p) : LLUICtrl(p) diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp index 13d741552e..c80348ec99 100644 --- a/indra/newview/llstartup.cpp +++ b/indra/newview/llstartup.cpp @@ -669,9 +669,6 @@ bool idle_startup() LL_INFOS("AppInit") << "Message System Initialized." << LL_ENDL; - //------------------------------------------------- - - // if(!gSavedSettings.getBOOL("GridListDownload")) { @@ -859,7 +856,13 @@ bool idle_startup() timeout_count = 0; + // Login screen needs menus for preferences, but we can enter + // this startup phase more than once. + if (gLoginMenuBarView == NULL) + { initialize_edit_menu(); + init_menus(); + } if (show_connect_box) { @@ -894,19 +897,6 @@ bool idle_startup() LLStartUp::setStartupState( STATE_LOGIN_CLEANUP ); } - // *NOTE: This is where LLViewerParcelMgr::getInstance() used to get allocated before becoming LLViewerParcelMgr::getInstance(). - - // *NOTE: This is where gHUDManager used to bet allocated before becoming LLHUDManager::getInstance(). - - // *NOTE: This is where gMuteList used to get allocated before becoming LLMuteList::getInstance(). - - // Login screen needs menus for preferences, but we can enter - // this startup phase more than once. - if (gLoginMenuBarView == NULL) - { - init_menus(); - } - gViewerWindow->setNormalControlsVisible( FALSE ); gLoginMenuBarView->setVisible( TRUE ); gLoginMenuBarView->setEnabled( TRUE ); @@ -1766,6 +1756,12 @@ bool idle_startup() } } + LLSD inv_basic = response["inventory-basic"]; + if(inv_basic.isDefined()) + { + llinfos << "Basic inventory root folder id is " << inv_basic["folder_id"] << llendl; + } + LLSD buddy_list = response["buddy-list"]; if(buddy_list.isDefined()) { @@ -2732,22 +2728,32 @@ void init_start_screen(S32 location_id) else if(!start_image_bmp->load(temp_str) ) { LL_WARNS("AppInit") << "Bitmap load failed" << LL_ENDL; - return; - } - - gStartImageWidth = start_image_bmp->getWidth(); - gStartImageHeight = start_image_bmp->getHeight(); - - LLPointer raw = new LLImageRaw; - if (!start_image_bmp->decode(raw, 0.0f)) - { - LL_WARNS("AppInit") << "Bitmap decode failed" << LL_ENDL; gStartTexture = NULL; - return; + } + else + { + gStartImageWidth = start_image_bmp->getWidth(); + gStartImageHeight = start_image_bmp->getHeight(); + + LLPointer raw = new LLImageRaw; + if (!start_image_bmp->decode(raw, 0.0f)) + { + LL_WARNS("AppInit") << "Bitmap decode failed" << LL_ENDL; + gStartTexture = NULL; + } + else + { + raw->expandToPowerOfTwo(); + gStartTexture = LLViewerTextureManager::getLocalTexture(raw.get(), FALSE) ; + } } - raw->expandToPowerOfTwo(); - gStartTexture = LLViewerTextureManager::getLocalTexture(raw.get(), FALSE) ; + if(gStartTexture.isNull()) + { + gStartTexture = LLViewerTexture::sBlackImagep ; + gStartImageWidth = gStartTexture->getWidth() ; + gStartImageHeight = gStartTexture->getHeight() ; + } } diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp index 0676973afc..80dac8fa3f 100644 --- a/indra/newview/llstatusbar.cpp +++ b/indra/newview/llstatusbar.cpp @@ -219,6 +219,8 @@ BOOL LLStatusBar::handleRightMouseDown(S32 x, S32 y, MASK mask) BOOL LLStatusBar::postBuild() { + LLControlVariablePtr mode_control = gSavedSettings.getControl("SessionSettingsFile"); + gMenuBarView->setRightMouseDownCallback(boost::bind(&show_navbar_context_menu, _1, _2, _3)); mTextTime = getChild("TimeText" ); @@ -330,9 +332,40 @@ BOOL LLStatusBar::postBuild() mParcelMgrConnection = LLViewerParcelMgr::getInstance()->addAgentParcelChangedCallback( boost::bind(&LLStatusBar::onAgentParcelChange, this)); + LLUICtrl& mode_combo = getChildRef("mode_combo"); + mode_combo.setValue(gSavedSettings.getString("SessionSettingsFile")); + mode_combo.setCommitCallback(boost::bind(&LLStatusBar::onModeChange, this, getChild("mode_combo")->getValue(), _2)); + + return TRUE; } +void LLStatusBar::onModeChange(const LLSD& original_value, const LLSD& new_value) +{ + if (original_value.asString() != new_value.asString()) + { + LLNotificationsUtil::add("ModeChange", LLSD(), LLSD(), boost::bind(&LLStatusBar::onModeChangeConfirm, this, original_value, new_value, _1, _2)); + } +} + +void LLStatusBar::onModeChangeConfirm(const LLSD& original_value, const LLSD& new_value, const LLSD& notification, const LLSD& response) +{ + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + switch (option) + { + case 0: + gSavedSettings.getControl("SessionSettingsFile")->set(new_value); + LLAppViewer::instance()->requestQuit(); + break; + case 1: + // revert to original value + getChild("mode_combo")->setValue(original_value); + break; + default: + break; + } +} + // Per-frame updates of visibility void LLStatusBar::refresh() { diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h index ae8581f549..555ef858d9 100644 --- a/indra/newview/llstatusbar.h +++ b/indra/newview/llstatusbar.h @@ -138,6 +138,8 @@ private: void onMouseEnterVolume(); void onMouseEnterNearbyMedia(); void onClickScreen(S32 x, S32 y); + void onModeChange(const LLSD& original_value, const LLSD& new_value); + void onModeChangeConfirm(const LLSD& original_value, const LLSD& new_value, const LLSD& notification, const LLSD& response); static void onClickStreamToggle(void* data); // ## Zi: Media/Stream separation static void onClickMediaToggle(void* data); diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 9b417307fd..70b0a31308 100644 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -36,6 +36,7 @@ // Included to allow LLTextureCache::purgeTextures() to pause watchdog timeout #include "llappviewer.h" +#include "llmemory.h" // Cache organization: // cache/texture.entries @@ -113,7 +114,7 @@ public: ~LLTextureCacheWorker() { llassert_always(!haveWork()); - delete[] mReadData; + FREE_MEM(LLImageBase::getPrivatePool(), mReadData); } // override this interface @@ -215,7 +216,7 @@ bool LLTextureCacheLocalFileWorker::doRead() mDataSize = 0; return true; } - mReadData = new U8[mDataSize]; + mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize); mBytesRead = -1; mBytesToRead = mDataSize; setPriority(LLWorkerThread::PRIORITY_LOW | mPriority); @@ -233,7 +234,7 @@ bool LLTextureCacheLocalFileWorker::doRead() // << " Bytes: " << mDataSize << " Offset: " << mOffset // << " / " << mDataSize << llendl; mDataSize = 0; // failed - delete[] mReadData; + FREE_MEM(LLImageBase::getPrivatePool(), mReadData); mReadData = NULL; } return true; @@ -248,7 +249,7 @@ bool LLTextureCacheLocalFileWorker::doRead() { mDataSize = local_size; } - mReadData = new U8[mDataSize]; + mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize); S32 bytes_read = LLAPRFile::readEx(mFileName, mReadData, mOffset, mDataSize, mCache->getLocalAPRFilePool()); @@ -258,7 +259,7 @@ bool LLTextureCacheLocalFileWorker::doRead() // << " Bytes: " << mDataSize << " Offset: " << mOffset // << " / " << mDataSize << llendl; mDataSize = 0; - delete[] mReadData; + FREE_MEM(LLImageBase::getPrivatePool(), mReadData); mReadData = NULL; } else @@ -377,7 +378,7 @@ bool LLTextureCacheRemoteWorker::doRead() mDataSize = local_size; } // Allocate read buffer - mReadData = new U8[mDataSize]; + mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize); S32 bytes_read = LLAPRFile::readEx(local_filename, mReadData, mOffset, mDataSize, mCache->getLocalAPRFilePool()); if (bytes_read != mDataSize) @@ -386,7 +387,7 @@ bool LLTextureCacheRemoteWorker::doRead() << " Bytes: " << mDataSize << " Offset: " << mOffset << " / " << mDataSize << llendl; mDataSize = 0; - delete[] mReadData; + FREE_MEM(LLImageBase::getPrivatePool(), mReadData); mReadData = NULL; } else @@ -429,7 +430,7 @@ bool LLTextureCacheRemoteWorker::doRead() S32 size = TEXTURE_CACHE_ENTRY_SIZE - mOffset; size = llmin(size, mDataSize); // Allocate the read buffer - mReadData = new U8[size]; + mReadData = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), size); S32 bytes_read = LLAPRFile::readEx(mCache->mHeaderDataFileName, mReadData, offset, size, mCache->getLocalAPRFilePool()); if (bytes_read != size) @@ -437,7 +438,7 @@ bool LLTextureCacheRemoteWorker::doRead() llwarns << "LLTextureCacheWorker: " << mID << " incorrect number of bytes read from header: " << bytes_read << " / " << size << llendl; - delete[] mReadData; + FREE_MEM(LLImageBase::getPrivatePool(), mReadData); mReadData = NULL; mDataSize = -1; // failed done = true; @@ -467,7 +468,7 @@ bool LLTextureCacheRemoteWorker::doRead() S32 data_offset, file_size, file_offset; // Reserve the whole data buffer first - U8* data = new U8[mDataSize]; + U8* data = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mDataSize); // Set the data file pointers taking the read offset into account. 2 cases: if (mOffset < TEXTURE_CACHE_ENTRY_SIZE) @@ -480,7 +481,7 @@ bool LLTextureCacheRemoteWorker::doRead() // Copy the raw data we've been holding from the header cache into the new sized buffer llassert_always(mReadData); memcpy(data, mReadData, data_offset); - delete[] mReadData; + FREE_MEM(LLImageBase::getPrivatePool(), mReadData); mReadData = NULL; } else @@ -506,7 +507,7 @@ bool LLTextureCacheRemoteWorker::doRead() llwarns << "LLTextureCacheWorker: " << mID << " incorrect number of bytes read from body: " << bytes_read << " / " << file_size << llendl; - delete[] mReadData; + FREE_MEM(LLImageBase::getPrivatePool(), mReadData); mReadData = NULL; mDataSize = -1; // failed done = true; @@ -598,11 +599,11 @@ bool LLTextureCacheRemoteWorker::doWrite() { // We need to write a full record in the header cache so, if the amount of data is smaller // than a record, we need to transfer the data to a buffer padded with 0 and write that - U8* padBuffer = new U8[TEXTURE_CACHE_ENTRY_SIZE]; + U8* padBuffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), TEXTURE_CACHE_ENTRY_SIZE); memset(padBuffer, 0, TEXTURE_CACHE_ENTRY_SIZE); // Init with zeros memcpy(padBuffer, mWriteData, mDataSize); // Copy the write buffer bytes_written = LLAPRFile::writeEx(mCache->mHeaderDataFileName, padBuffer, offset, size, mCache->getLocalAPRFilePool()); - delete [] padBuffer; + FREE_MEM(LLImageBase::getPrivatePool(), padBuffer); } else { @@ -698,7 +699,7 @@ void LLTextureCacheWorker::finishWork(S32 param, bool completed) } else { - delete[] mReadData; + FREE_MEM(LLImageBase::getPrivatePool(), mReadData); mReadData = NULL; } } diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h index 22a4e7ec82..531c79667b 100644 --- a/indra/newview/lltexturectrl.h +++ b/indra/newview/lltexturectrl.h @@ -92,11 +92,7 @@ public: multiselect_text("multiselect_text"), caption_text("caption_text"), border("border") - { - name = "texture picker"; - mouse_opaque(true); - follows.flags(FOLLOWS_LEFT | FOLLOWS_TOP); - } + {} }; protected: LLTextureCtrl(const Params&); diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 46b24f0dcb..17ecc307fb 100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp @@ -817,7 +817,7 @@ void LLTextureFetchWorker::setImagePriority(F32 priority) void LLTextureFetchWorker::resetFormattedData() { - delete[] mBuffer; + FREE_MEM(LLImageBase::getPrivatePool(), mBuffer); mBuffer = NULL; mBufferSize = 0; if (mFormattedImage.notNull()) @@ -888,7 +888,7 @@ bool LLTextureFetchWorker::doWork(S32 param) mSentRequest = UNSENT; mDecoded = FALSE; mWritten = FALSE; - delete[] mBuffer; + FREE_MEM(LLImageBase::getPrivatePool(), mBuffer); mBuffer = NULL; mBufferSize = 0; mHaveAllData = FALSE; @@ -1313,7 +1313,7 @@ bool LLTextureFetchWorker::doWork(S32 param) llassert_always(mBufferSize == cur_size + mRequestedSize); if(!mBufferSize)//no data received. { - delete[] mBuffer; + FREE_MEM(LLImageBase::getPrivatePool(), mBuffer); mBuffer = NULL; //abort. @@ -1341,7 +1341,7 @@ bool LLTextureFetchWorker::doWork(S32 param) mFileSize = mBufferSize + 1 ; //flag the file is not fully loaded. } - U8* buffer = new U8[mBufferSize]; + U8* buffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), mBufferSize); if (cur_size > 0) { memcpy(buffer, mFormattedImage->getData(), cur_size); @@ -1350,7 +1350,7 @@ bool LLTextureFetchWorker::doWork(S32 param) // NOTE: setData releases current data and owns new data (buffer) mFormattedImage->setData(buffer, mBufferSize); // delete temp data - delete[] mBuffer; // Note: not 'buffer' (assigned in setData()) + FREE_MEM(LLImageBase::getPrivatePool(), mBuffer); // Note: not 'buffer' (assigned in setData()) mBuffer = NULL; mBufferSize = 0; mLoadedDiscard = mRequestedDiscard; @@ -1647,7 +1647,7 @@ bool LLTextureFetchWorker::processSimulatorPackets() if (buffer_size > cur_size) { /// We have new data - U8* buffer = new U8[buffer_size]; + U8* buffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), buffer_size); S32 offset = 0; if (cur_size > 0 && mFirstPacket > 0) { @@ -1699,7 +1699,7 @@ S32 LLTextureFetchWorker::callbackHttpGet(const LLChannelDescriptors& channels, if (data_size > 0) { // *TODO: set the formatted image data here directly to avoid the copy - mBuffer = new U8[data_size]; + mBuffer = (U8*)ALLOCATE_MEM(LLImageBase::getPrivatePool(), data_size); buffer->readAfter(channels.in(), NULL, mBuffer, data_size); mBufferSize += data_size; if (data_size < mRequestedSize && mRequestedDiscard == 0) @@ -1840,7 +1840,7 @@ bool LLTextureFetchWorker::writeToCacheComplete() // public LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* imagedecodethread, bool threaded, bool qa_mode) - : LLWorkerThread("TextureFetch", threaded), + : LLWorkerThread("TextureFetch", threaded, true), mDebugCount(0), mDebugPause(FALSE), mPacketCount(0), diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp index 0115115a23..6547154bc4 100644 --- a/indra/newview/lltextureview.cpp +++ b/indra/newview/lltextureview.cpp @@ -94,7 +94,7 @@ public: Params() : texture_view("texture_view") { - mouse_opaque(false); + changeDefault(mouse_opaque, false); } }; LLTextureBar(const Params& p) @@ -387,7 +387,7 @@ public: : texture_view("texture_view") { S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); - rect(LLRect(0,0,100,line_height * 4)); + changeDefault(rect, LLRect(0,0,100,line_height * 4)); } }; @@ -486,7 +486,7 @@ public: : texture_view("texture_view") { S32 line_height = (S32)(LLFontGL::getFontMonospace()->getLineHeight() + .5f); - rect(LLRect(0,0,100,line_height * 4)); + changeDefault(rect, LLRect(0,0,100,line_height * 4)); } }; diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp index 91a192ff4f..62e7f0a5e4 100644 --- a/indra/newview/lltoastnotifypanel.cpp +++ b/indra/newview/lltoastnotifypanel.cpp @@ -311,8 +311,14 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vectorgetRect().getWidth(); LLButton* ignore_btn = NULL; + LLButton* mute_btn = NULL; for (std::vector::const_iterator it = buttons.begin(); it != buttons.end(); it++) { + if (-2 == it->first) + { + mute_btn = it->second; + continue; + } if (it->first == -1) { ignore_btn = it->second; @@ -332,6 +338,8 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vectoraddChild(btn, -1); } + + U32 ignore_btn_width = 0; if (mIsScriptDialog && ignore_btn != NULL) { LLRect ignore_btn_rect(ignore_btn->getRect()); @@ -344,8 +352,25 @@ void LLToastNotifyPanel::updateButtonsLayout(const std::vectorsetRect(ignore_btn_rect); + ignore_btn_width = ignore_btn_rect.getWidth(); mControlPanel->addChild(ignore_btn, -1); } + + if (mIsScriptDialog && mute_btn != NULL) + { + LLRect mute_btn_rect(mute_btn->getRect()); + S32 buttons_per_row = max_width / BUTTON_WIDTH; //assume that h_pad far less than BUTTON_WIDTH + // Place mute (Block) button to the left of the ignore button. + S32 mute_btn_left = buttons_per_row * BUTTON_WIDTH + (buttons_per_row - 1) * h_pad - mute_btn_rect.getWidth() - ignore_btn_width - (h_pad / 2); + if (mute_btn_left + mute_btn_rect.getWidth() > max_width) // make sure that the mute button is in panel + { + mute_btn_left = max_width - mute_btn_rect.getWidth() - 2 * HPAD; + } + mute_btn_rect.setOriginAndSize(mute_btn_left, BOTTOM_PAD,// always move mute button at the bottom + mute_btn_rect.getWidth(), mute_btn_rect.getHeight()); + mute_btn->setRect(mute_btn_rect); + mControlPanel->addChild(mute_btn); + } } void LLToastNotifyPanel::adjustPanelForScriptNotice(S32 button_panel_width, S32 button_panel_height) diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp index 6bd5d5bd65..34d157ad4d 100644 --- a/indra/newview/lltooldraganddrop.cpp +++ b/indra/newview/lltooldraganddrop.cpp @@ -619,6 +619,7 @@ BOOL LLToolDragAndDrop::handleToolTip(S32 x, S32 y, MASK mask) { if (!mToolTipMsg.empty()) { + LLToolTipMgr::instance().unblockToolTips(); LLToolTipMgr::instance().show(LLToolTip::Params() .message(mToolTipMsg) .delay_time(gSavedSettings.getF32( "DragAndDropToolTipDelay" ))); @@ -1696,6 +1697,12 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv( return ACCEPT_NO; } + const LLUUID &outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false); + if(gInventory.isObjectDescendentOf(item->getUUID(), outbox_id)) + { + return ACCEPT_NO; + } + // [RLVa:KB] - Checked: 2010-09-28 (RLVa-1.2.1f) | Modified: RLVa-1.2.1f if ( (rlv_handler_t::isEnabled()) && (gRlvAttachmentLocks.hasLockedAttachmentPoint(RLV_LOCK_ANY)) ) { @@ -1705,6 +1712,7 @@ EAcceptance LLToolDragAndDrop::dad3dRezAttachmentFromInv( } // [/RLVa:KB] + if( drop ) { if(mSource == SOURCE_LIBRARY) @@ -2145,6 +2153,12 @@ EAcceptance LLToolDragAndDrop::dad3dWearCategory( return ACCEPT_NO; } + const LLUUID &outbox_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_OUTBOX, false); + if(gInventory.isObjectDescendentOf(category->getUUID(), outbox_id)) + { + return ACCEPT_NO; + } + if(drop) { BOOL append = ( (mask & MASK_SHIFT) ? TRUE : FALSE ); diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 77d23f70ce..f0321f0d55 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -35,7 +35,6 @@ #include "llagent.h" #include "llagentcamera.h" #include "llavatarnamecache.h" -#include "llviewercontrol.h" #include "llfocusmgr.h" #include "llfirstuse.h" #include "llfloaterland.h" @@ -59,6 +58,7 @@ #include "lltrans.h" #include "llviewercamera.h" #include "llviewerparcelmedia.h" +#include "llviewercontrol.h" #include "llviewermenu.h" #include "llviewerobjectlist.h" #include "llviewerobject.h" @@ -82,7 +82,6 @@ static void handle_click_action_play(); static void handle_click_action_open_media(LLPointer objectp); static ECursorType cursor_from_parcel_media(U8 click_action); - LLToolPie::LLToolPie() : LLTool(std::string("Pie")), mMouseButtonDown( false ), @@ -508,6 +507,18 @@ void LLToolPie::resetSelection() mClickAction = 0; } +void LLToolPie::walkToClickedLocation() +{ + if(mAutoPilotDestination) { mAutoPilotDestination->markDead(); } + mAutoPilotDestination = (LLHUDEffectBlob *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BLOB, FALSE); + mAutoPilotDestination->setPositionGlobal(mPick.mPosGlobal); + mAutoPilotDestination->setPixelSize(5); + mAutoPilotDestination->setColor(LLColor4U(170, 210, 190)); + mAutoPilotDestination->setDuration(3.f); + + handle_go_to(); +} + // When we get object properties after left-clicking on an object // with left-click = buy, if it's the same object, do the buy. @@ -717,18 +728,9 @@ BOOL LLToolPie::handleMouseUp(S32 x, S32 y, MASK mask) mPick.mPosGlobal = gAgent.getPositionGlobal() + LLVector3d(LLViewerCamera::instance().getAtAxis()) * SELF_CLICK_WALK_DISTANCE; } gAgentCamera.setFocusOnAvatar(TRUE, TRUE); - if(mAutoPilotDestination) { mAutoPilotDestination->markDead(); } - mAutoPilotDestination = (LLHUDEffectBlob *)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_BLOB, FALSE); - mAutoPilotDestination->setPositionGlobal(mPick.mPosGlobal); - mAutoPilotDestination->setPixelSize(5); - mAutoPilotDestination->setColor(LLColor4U(170, 210, 190)); - mAutoPilotDestination->setDuration(3.f); - - handle_go_to(); + walkToClickedLocation(); LLFirstUse::notMoving(false); - mBlockClickToWalk = false; - return TRUE; } gViewerWindow->setCursor(UI_CURSOR_ARROW); @@ -763,16 +765,10 @@ BOOL LLToolPie::handleDoubleClick(S32 x, S32 y, MASK mask) if (gSavedSettings.getBOOL("DoubleClickAutoPilot")) { - if (mPick.mPickType == LLPickInfo::PICK_LAND - && !mPick.mPosGlobal.isExactlyZero()) + if ((mPick.mPickType == LLPickInfo::PICK_LAND && !mPick.mPosGlobal.isExactlyZero()) || + (mPick.mObjectID.notNull() && !mPick.mPosGlobal.isExactlyZero())) { - handle_go_to(); - return TRUE; - } - else if (mPick.mObjectID.notNull() - && !mPick.mPosGlobal.isExactlyZero()) - { - handle_go_to(); + walkToClickedLocation(); return TRUE; } } diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h index 8faf6fcf68..213fc982a1 100644 --- a/indra/newview/lltoolpie.h +++ b/indra/newview/lltoolpie.h @@ -69,6 +69,7 @@ public: LLViewerObject* getClickActionObject() { return mClickActionObject; } LLObjectSelection* getLeftClickSelection() { return (LLObjectSelection*)mLeftClickSelection; } void resetSelection(); + void walkToClickedLocation(); void blockClickToWalk() { mBlockClickToWalk = true; } void stopClickToWalk(); diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index decb853efc..6622934277 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -152,7 +152,6 @@ static bool handleRenderPerfTestChanged(const LLSD& newvalue) LLPipeline::RENDER_TYPE_WATER, LLPipeline::RENDER_TYPE_PASS_GRASS, LLPipeline::RENDER_TYPE_HUD, - LLPipeline::RENDER_TYPE_PARTICLES, LLPipeline::RENDER_TYPE_CLOUDS, LLPipeline::RENDER_TYPE_HUD_PARTICLES, LLPipeline::END_RENDER_TYPES); @@ -168,7 +167,6 @@ static bool handleRenderPerfTestChanged(const LLSD& newvalue) LLPipeline::RENDER_TYPE_WATER, LLPipeline::RENDER_TYPE_PASS_GRASS, LLPipeline::RENDER_TYPE_HUD, - LLPipeline::RENDER_TYPE_PARTICLES, LLPipeline::RENDER_TYPE_CLOUDS, LLPipeline::RENDER_TYPE_HUD_PARTICLES, LLPipeline::END_RENDER_TYPES); @@ -178,6 +176,11 @@ static bool handleRenderPerfTestChanged(const LLSD& newvalue) return true; } +bool handleRenderAvatarComplexityLimitChanged(const LLSD& newvalue) +{ + return true; +} + bool handleRenderTransparentWaterChanged(const LLSD& newvalue) { LLWorld::getInstance()->updateWaterObjects(); @@ -695,6 +698,7 @@ void settings_setup_listeners() gSavedSettings.getControl("WindLightUseAtmosShaders")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); gSavedSettings.getControl("RenderGammaFull")->getSignal()->connect(boost::bind(&handleSetShaderChanged, _2)); gSavedSettings.getControl("RenderAvatarMaxVisible")->getSignal()->connect(boost::bind(&handleAvatarMaxVisibleChanged, _2)); + gSavedSettings.getControl("RenderAvatarComplexityLimit")->getSignal()->connect(boost::bind(&handleRenderAvatarComplexityLimitChanged, _2)); gSavedSettings.getControl("RenderVolumeLODFactor")->getSignal()->connect(boost::bind(&handleVolumeLODChanged, _2)); gSavedSettings.getControl("RenderAvatarLODFactor")->getSignal()->connect(boost::bind(&handleAvatarLODChanged, _2)); gSavedSettings.getControl("RenderAvatarPhysicsLODFactor")->getSignal()->connect(boost::bind(&handleAvatarPhysicsLODChanged, _2)); diff --git a/indra/newview/llviewercontrollistener.cpp b/indra/newview/llviewercontrollistener.cpp index 8bc25fa281..361b96221c 100644 --- a/indra/newview/llviewercontrollistener.cpp +++ b/indra/newview/llviewercontrollistener.cpp @@ -31,99 +31,196 @@ #include "llviewercontrollistener.h" #include "llviewercontrol.h" +#include "llcontrol.h" +#include "llerror.h" +#include "llsdutil.h" +#include "stringize.h" +#include -LLViewerControlListener gSavedSettingsListener; +namespace { + +LLViewerControlListener sSavedSettingsListener; + +} // unnamed namespace LLViewerControlListener::LLViewerControlListener() : LLEventAPI("LLViewerControl", - "LLViewerControl listener: set, toggle or set default for various controls", - "group") + "LLViewerControl listener: set, toggle or set default for various controls") { - add("Global", - "Set gSavedSettings control [\"key\"] to value [\"value\"]", - boost::bind(&LLViewerControlListener::set, &gSavedSettings, _1)); - add("PerAccount", - "Set gSavedPerAccountSettings control [\"key\"] to value [\"value\"]", - boost::bind(&LLViewerControlListener::set, &gSavedPerAccountSettings, _1)); - add("Warning", - "Set gWarningSettings control [\"key\"] to value [\"value\"]", - boost::bind(&LLViewerControlListener::set, &gWarningSettings, _1)); - add("Crash", - "Set gCrashSettings control [\"key\"] to value [\"value\"]", - boost::bind(&LLViewerControlListener::set, &gCrashSettings, _1)); + std::ostringstream groupnames; + groupnames << "[\"group\"] is one of "; + const char* delim = ""; + for (LLControlGroup::key_iter cgki(LLControlGroup::beginKeys()), + cgkend(LLControlGroup::endKeys()); + cgki != cgkend; ++cgki) + { + groupnames << delim << '"' << *cgki << '"'; + delim = ", "; + } + groupnames << '\n'; + std::string grouphelp(groupnames.str()); + std::string replyhelp("If [\"reply\"] requested, send new [\"value\"] on specified LLEventPump\n"); -#if 0 - add(/*"toggleControl",*/ "Global", boost::bind(&LLViewerControlListener::toggleControl, &gSavedSettings, _1)); - add(/*"toggleControl",*/ "PerAccount", boost::bind(&LLViewerControlListener::toggleControl, &gSavedPerAccountSettings, _1)); - add(/*"toggleControl",*/ "Warning", boost::bind(&LLViewerControlListener::toggleControl, &gWarningSettings, _1)); - add(/*"toggleControl",*/ "Crash", boost::bind(&LLViewerControlListener::toggleControl, &gCrashSettings, _1)); - - add(/*"setDefault",*/ "Global", boost::bind(&LLViewerControlListener::setDefault, &gSavedSettings, _1)); - add(/*"setDefault",*/ "PerAccount", boost::bind(&LLViewerControlListener::setDefault, &gSavedPerAccountSettings, _1)); - add(/*"setDefault",*/ "Warning", boost::bind(&LLViewerControlListener::setDefault, &gWarningSettings, _1)); - add(/*"setDefault",*/ "Crash", boost::bind(&LLViewerControlListener::setDefault, &gCrashSettings, _1)); -#endif // 0 + add("set", + std::string("Set [\"group\"] control [\"key\"] to optional value [\"value\"]\n" + "If [\"value\"] omitted, set to control's defined default value\n") + + grouphelp + replyhelp, + &LLViewerControlListener::set, + LLSDMap("group", LLSD())("key", LLSD())); + add("toggle", + std::string("Toggle [\"group\"] control [\"key\"], if boolean\n") + grouphelp + replyhelp, + &LLViewerControlListener::toggle, + LLSDMap("group", LLSD())("key", LLSD())); + add("get", + std::string("Query [\"group\"] control [\"key\"], replying on LLEventPump [\"reply\"]\n") + + grouphelp, + &LLViewerControlListener::get, + LLSDMap("group", LLSD())("key", LLSD())("reply", LLSD())); + add("groups", + "Send on LLEventPump [\"reply\"] an array [\"groups\"] of valid group names", + &LLViewerControlListener::groups, + LLSDMap("reply", LLSD())); + add("vars", + std::string("For [\"group\"], send on LLEventPump [\"reply\"] an array [\"vars\"],\n" + "each of whose entries looks like:\n" + " [\"name\"], [\"type\"], [\"value\"], [\"comment\"]\n") + grouphelp, + &LLViewerControlListener::vars, + LLSDMap("group", LLSD())("reply", LLSD())); } -//static -void LLViewerControlListener::set(LLControlGroup * controls, LLSD const & event_data) +struct Info { - if(event_data.has("key")) + Info(const LLSD& request): + response(LLSD(), request), + groupname(request["group"]), + group(LLControlGroup::getInstance(groupname)), + key(request["key"]), + control(NULL) { - std::string key(event_data["key"]); + if (! group) + { + response.error(STRINGIZE("Unrecognized group '" << groupname << "'")); + return; + } - if(controls->controlExists(key)) + control = group->getControl(key); + if (! control) { - controls->setUntypedValue(key, event_data["value"]); + response.error(STRINGIZE("In group '" << groupname + << "', unrecognized control key '" << key << "'")); } - else + } + + ~Info() + { + // If in fact the request passed to our constructor names a valid + // group and key, grab the final value of the indicated control and + // stuff it in our response. Since this outer destructor runs before + // the contained Response destructor, this data will go into the + // response we send. + if (control) { - llwarns << "requested unknown control: \"" << key << '\"' << llendl; + response["name"] = control->getName(); + response["type"] = group->typeEnumToString(control->type()); + response["value"] = control->get(); + response["comment"] = control->getComment(); } } + + LLEventAPI::Response response; + std::string groupname; + LLControlGroup* group; + std::string key; + LLControlVariable* control; +}; + +//static +void LLViewerControlListener::set(LLSD const & request) +{ + Info info(request); + if (! info.control) + return; + + if (request.has("value")) + { + info.control->setValue(request["value"]); + } + else + { + info.control->resetToDefault(); + } } //static -void LLViewerControlListener::toggleControl(LLControlGroup * controls, LLSD const & event_data) +void LLViewerControlListener::toggle(LLSD const & request) { - if(event_data.has("key")) - { - std::string key(event_data["key"]); + Info info(request); + if (! info.control) + return; - if(controls->controlExists(key)) - { - LLControlVariable * control = controls->getControl(key); - if(control->isType(TYPE_BOOLEAN)) - { - control->set(!control->get().asBoolean()); - } - else - { - llwarns << "requested toggle of non-boolean control: \"" << key << "\", type is " << control->type() << llendl; - } - } - else - { - llwarns << "requested unknown control: \"" << key << '\"' << llendl; - } + if (info.control->isType(TYPE_BOOLEAN)) + { + info.control->set(! info.control->get().asBoolean()); + } + else + { + info.response.error(STRINGIZE("toggle of non-boolean '" << info.groupname + << "' control '" << info.key + << "', type is " + << info.group->typeEnumToString(info.control->type()))); } } -//static -void LLViewerControlListener::setDefault(LLControlGroup * controls, LLSD const & event_data) +void LLViewerControlListener::get(LLSD const & request) { - if(event_data.has("key")) - { - std::string key(event_data["key"]); + // The Info constructor and destructor actually do all the work here. + Info info(request); +} - if(controls->controlExists(key)) - { - LLControlVariable * control = controls->getControl(key); - control->resetToDefault(); - } - else - { - llwarns << "requested unknown control: \"" << key << '\"' << llendl; - } +void LLViewerControlListener::groups(LLSD const & request) +{ + // No Info, we're not looking up either a group or a control name. + Response response(LLSD(), request); + for (LLControlGroup::key_iter cgki(LLControlGroup::beginKeys()), + cgkend(LLControlGroup::endKeys()); + cgki != cgkend; ++cgki) + { + response["groups"].append(*cgki); } } + +struct CollectVars: public LLControlGroup::ApplyFunctor +{ + CollectVars(LLControlGroup* g): + mGroup(g) + {} + + virtual void apply(const std::string& name, LLControlVariable* control) + { + vars.append(LLSDMap + ("name", name) + ("type", mGroup->typeEnumToString(control->type())) + ("value", control->get()) + ("comment", control->getComment())); + } + + LLControlGroup* mGroup; + LLSD vars; +}; + +void LLViewerControlListener::vars(LLSD const & request) +{ + // This method doesn't use Info, because we're not looking up a specific + // control name. + Response response(LLSD(), request); + std::string groupname(request["group"]); + LLControlGroup* group(LLControlGroup::getInstance(groupname)); + if (! group) + { + return response.error(STRINGIZE("Unrecognized group '" << groupname << "'")); + } + + CollectVars collector(group); + group->applyToAll(&collector); + response["vars"] = collector.vars; +} diff --git a/indra/newview/llviewercontrollistener.h b/indra/newview/llviewercontrollistener.h index fd211b97af..2e72046924 100644 --- a/indra/newview/llviewercontrollistener.h +++ b/indra/newview/llviewercontrollistener.h @@ -40,11 +40,11 @@ public: LLViewerControlListener(); private: - static void set(LLControlGroup *controls, LLSD const & event_data); - static void toggleControl(LLControlGroup *controls, LLSD const & event_data); - static void setDefault(LLControlGroup *controls, LLSD const & event_data); + static void set(LLSD const & event_data); + static void toggle(LLSD const & event_data); + static void get(LLSD const & event_data); + static void groups(LLSD const & event_data); + static void vars(LLSD const & event_data); }; -extern LLViewerControlListener gSavedSettingsListener; - #endif // LL_LLVIEWERCONTROLLISTENER_H diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp index 5b6b5104e2..4004ee8447 100644 --- a/indra/newview/llviewerdisplay.cpp +++ b/indra/newview/llviewerdisplay.cpp @@ -206,6 +206,7 @@ void display_stats() gMemoryAllocated = LLMemory::getCurrentRSS(); U32 memory = (U32)(gMemoryAllocated / (1024*1024)); llinfos << llformat("MEMORY: %d MB", memory) << llendl; + LLMemory::logMemoryInfo(TRUE) ; gRecentMemoryTime.reset(); } } @@ -712,7 +713,11 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot) glh::matrix4f mod = glh_get_current_modelview(); glViewport(0,0,512,512); LLVOAvatar::updateFreezeCounter() ; - LLVOAvatar::updateImpostors(); + + if(!LLPipeline::sMemAllocationThrottled) + { + LLVOAvatar::updateImpostors(); + } glh_set_current_projection(proj); glh_set_current_modelview(mod); diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp index dc227a2f97..40015e582f 100644 --- a/indra/newview/llviewerfloaterreg.cpp +++ b/indra/newview/llviewerfloaterreg.cpp @@ -39,6 +39,7 @@ #include "lggbeammapfloater.h" #include "llcompilequeue.h" #include "llcallfloater.h" +#include "llfasttimerview.h" #include "llfloaterabout.h" #include "llfloateranimpreview.h" #include "llfloaterauction.h" @@ -86,6 +87,7 @@ #include "llfloatermodelwizard.h" #include "llfloaternamedesc.h" #include "llfloaternotificationsconsole.h" +#include "llfloaterobjectweights.h" #include "llfloateropenobject.h" #include "llfloaterpay.h" #include "llfloaterperms.h" @@ -184,6 +186,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterAboutUtil::registerFloater(); LLFloaterReg::add("autocorrect", "floater_autocorrect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); + LLFloaterReg::add("fast_timers", "floater_fast_timers.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("about_land", "floater_about_land.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("animation_overrider", "floater_ao.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); // ## Zi: Animation Overrider LLFloaterReg::add("area_search", "floater_fs_area_search.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); @@ -276,6 +279,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("notifications_console", "floater_notifications_console.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("notification_well_window", "floater_sys_well.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); + LLFloaterReg::add("object_weights", "floater_object_weights.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("openobject", "floater_openobject.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("outgoing_call", "floater_outgoing_call.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterPayUtil::registerFloater(); @@ -342,7 +346,7 @@ void LLViewerFloaterReg::registerFloaters() LLFloaterReg::add("voice_controls", "floater_voice_controls.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("voice_effect", "floater_voice_effect.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); - LLFloaterReg::add("web_content", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); + LLFloaterReg::add("web_content", "floater_web_content.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterReg::add("whitelist_entry", "floater_whitelist_entry.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); LLFloaterWindowSizeUtil::registerFloater(); LLFloaterReg::add("world_map", "floater_world_map.xml", (LLFloaterBuildFunc)&LLFloaterReg::build); diff --git a/indra/newview/llviewerjoystick.cpp b/indra/newview/llviewerjoystick.cpp index 55179c453f..07f43e79e1 100644 --- a/indra/newview/llviewerjoystick.cpp +++ b/indra/newview/llviewerjoystick.cpp @@ -51,9 +51,6 @@ #define RY_I 5 #define RZ_I 3 -// minimum time after setting away state before coming back -const F32 MIN_AFK_TIME = 2.f; - F32 LLViewerJoystick::sLastDelta[] = {0,0,0,0,0,0,0}; F32 LLViewerJoystick::sDelta[] = {0,0,0,0,0,0,0}; @@ -557,7 +554,7 @@ void LLViewerJoystick::moveObjects(bool reset) if (!is_zero) { // Clear AFK state if moved beyond the deadzone - if (gAwayTimer.getElapsedTimeF32() > MIN_AFK_TIME) + if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME) { gAgent.clearAFK(); } @@ -731,7 +728,7 @@ void LLViewerJoystick::moveAvatar(bool reset) if (!is_zero) { // Clear AFK state if moved beyond the deadzone - if (gAwayTimer.getElapsedTimeF32() > MIN_AFK_TIME) + if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME) { gAgent.clearAFK(); } @@ -947,7 +944,7 @@ void LLViewerJoystick::moveFlycam(bool reset) } // Clear AFK state if moved beyond the deadzone - if (!is_zero && gAwayTimer.getElapsedTimeF32() > MIN_AFK_TIME) + if (!is_zero && gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME) { gAgent.clearAFK(); } @@ -1008,7 +1005,7 @@ bool LLViewerJoystick::toggleFlycam() gAgentCamera.changeCameraToDefault(); } - if (gAwayTimer.getElapsedTimeF32() > MIN_AFK_TIME) + if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME) { gAgent.clearAFK(); } diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp index 8d38856859..c248bb5cfc 100644 --- a/indra/newview/llviewermedia.cpp +++ b/indra/newview/llviewermedia.cpp @@ -1382,6 +1382,10 @@ void LLViewerMedia::removeCookie(const std::string &name, const std::string &dom } +// This is defined in two files but I don't want to create a dependence between this and llsidepanelinventory +// just to be able to temporarily disable the outbox. +#define ENABLE_INVENTORY_DISPLAY_OUTBOX 0 // keep in sync with ENABLE_MERCHANT_OUTBOX_PANEL, ENABLE_MERCHANT_OUTBOX_CONTEXT_MENU + class LLInventoryUserStatusResponder : public LLHTTPClient::Responder { public: @@ -1394,8 +1398,18 @@ public: { if (isGoodStatus(status)) { + std::string merchantStatus = content[gAgent.getID().getString()].asString(); + llinfos << "Marketplace merchant status: " << merchantStatus << llendl; + + // Save the merchant status before turning on the display + gSavedSettings.setString("InventoryMarketplaceUserStatus", merchantStatus); + // Complete success gSavedSettings.setBOOL("InventoryDisplayInbox", true); + +#if ENABLE_INVENTORY_DISPLAY_OUTBOX + gSavedSettings.setBOOL("InventoryDisplayOutbox", true); +#endif } else if (status == 401) { @@ -1410,6 +1424,41 @@ public: } }; + +void doOnetimeEarlyHTTPRequests() +{ + std::string url = "https://marketplace.secondlife.com/"; + +// if (!LLGridManager::getInstance()->isInProductionGrid()) + if (LLGridManager::getInstance()->isInSLBeta())// + { + std::string gridLabel = LLGridManager::getInstance()->getGridLabel(); + url = llformat("https://marketplace.%s.lindenlab.com/", utf8str_tolower(gridLabel).c_str()); + } + +// needs coordinating with opensim devs + if (!LLGridManager::getInstance()->isInOpenSim())// + { + url += "api/1/users/"; + url += gAgent.getID().getString(); + url += "/user_status"; + + llinfos << "http get: " << url << llendl; + LLHTTPClient::get(url, new LLInventoryUserStatusResponder(), LLViewerMedia::getHeaders()); + } +} + + +LLSD LLViewerMedia::getHeaders() +{ + LLSD headers = LLSD::emptyMap(); + headers["Accept"] = "*/*"; + headers["Cookie"] = sOpenIDCookie; + headers["User-Agent"] = getCurrentUserAgent(); + + return headers; +} + ///////////////////////////////////////////////////////////////////////////////////////// // static void LLViewerMedia::setOpenIDCookie() @@ -1457,30 +1506,7 @@ void LLViewerMedia::setOpenIDCookie() new LLViewerMediaWebProfileResponder(raw_profile_url.getAuthority()), headers); - std::string url = "https://marketplace.secondlife.com/"; - -// if (LLGridManager::getInstance()->isInProductionGrid()) - if (LLGridManager::getInstance()->isInSLBeta())// - { - std::string gridLabel = LLGridManager::getInstance()->getGridLabel(); - url = llformat("https://marketplace.%s.lindenlab.com/", utf8str_tolower(gridLabel).c_str()); - } - - // needs coordinating with opensim devs - if (!LLGridManager::getInstance()->isInOpenSim())// - { - url += "api/1/users/"; - url += gAgent.getID().getString(); - url += "/user_status"; - - headers = LLSD::emptyMap(); - headers["Accept"] = "*/*"; - headers["Cookie"] = sOpenIDCookie; - headers["User-Agent"] = getCurrentUserAgent(); - - LLHTTPClient::get(url, new LLInventoryUserStatusResponder(), headers); - } - + doOnetimeEarlyHTTPRequests(); } } diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h index aeac6ba29a..0b69b8f0c1 100644 --- a/indra/newview/llviewermedia.h +++ b/indra/newview/llviewermedia.h @@ -162,6 +162,8 @@ public: static LLPluginClassMedia* getSpareBrowserMediaSource(); static void setOnlyAudibleMediaTextureID(const LLUUID& texture_id); + + static LLSD getHeaders(); private: static void setOpenIDCookie(); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 277a159440..8301a536cc 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -132,6 +132,8 @@ using namespace LLVOAvatarDefines; +typedef LLPointer LLViewerObjectPtr; + static boost::unordered_map sDefaultItemLabels; BOOL enable_land_build(void*); @@ -588,7 +590,7 @@ class LLAdvancedToggleConsole : public view_listener_t } else if ("fast timers" == console_type) { - toggle_visibility( (void*)gDebugView->mFastTimerView ); + LLFloaterReg::toggleInstance("fast_timers"); } else if ("scene view" == console_type) { @@ -628,7 +630,7 @@ class LLAdvancedCheckConsole : public view_listener_t } else if ("fast timers" == console_type) { - new_value = get_visibility( (void*)gDebugView->mFastTimerView ); + new_value = LLFloaterReg::instanceVisible("fast_timers"); } else if ("scene view" == console_type) { @@ -895,7 +897,8 @@ U32 feature_from_string(std::string feature) }; -class LLAdvancedToggleFeature : public view_listener_t{ +class LLAdvancedToggleFeature : public view_listener_t +{ bool handleEvent(const LLSD& userdata) { U32 feature = feature_from_string( userdata.asString() ); @@ -908,7 +911,8 @@ class LLAdvancedToggleFeature : public view_listener_t{ }; class LLAdvancedCheckFeature : public view_listener_t -{bool handleEvent(const LLSD& userdata) +{ + bool handleEvent(const LLSD& userdata) { U32 feature = feature_from_string( userdata.asString() ); bool new_value = false; @@ -4478,23 +4482,21 @@ void handle_god_request_avatar_geometry(void *) } } - -void derez_objects(EDeRezDestination dest, const LLUUID& dest_id) +static bool get_derezzable_objects( + EDeRezDestination dest, + std::string& error, + LLViewerRegion*& first_region, + LLDynamicArray* derez_objectsp, + bool only_check = false) { - if(gAgentCamera.cameraMouselook()) - { - gAgentCamera.changeCameraToDefault(); - } - //gInventoryView->setPanelOpen(TRUE); + bool found = false; - std::string error; - LLDynamicArray derez_objects; + LLObjectSelectionHandle selection = LLSelectMgr::getInstance()->getSelection(); // Check conditions that we can't deal with, building a list of // everything that we'll actually be derezzing. - LLViewerRegion* first_region = NULL; - for (LLObjectSelection::valid_root_iterator iter = LLSelectMgr::getInstance()->getSelection()->valid_root_begin(); - iter != LLSelectMgr::getInstance()->getSelection()->valid_root_end(); iter++) + for (LLObjectSelection::valid_root_iterator iter = selection->valid_root_begin(); + iter != selection->valid_root_end(); iter++) { LLSelectNode* node = *iter; LLViewerObject* object = node->getObject(); @@ -4561,10 +4563,55 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id) } if(can_derez_current) { - derez_objects.put(object); + found = true; + + if (only_check) + // one found, no need to traverse to the end + break; + + if (derez_objectsp) + derez_objectsp->put(object); + } } + return found; +} + +static bool can_derez(EDeRezDestination dest) +{ + LLViewerRegion* first_region = NULL; + std::string error; + return get_derezzable_objects(dest, error, first_region, NULL, true); +} + +static void derez_objects( + EDeRezDestination dest, + const LLUUID& dest_id, + LLViewerRegion*& first_region, + std::string& error, + LLDynamicArray* objectsp) +{ + LLDynamicArray derez_objects; + + if (!objectsp) // if objects to derez not specified + { + // get them from selection + if (!get_derezzable_objects(dest, error, first_region, &derez_objects, false)) + { + llwarns << "No objects to derez" << llendl; + return; + } + + objectsp = &derez_objects; + } + + + if(gAgentCamera.cameraMouselook()) + { + gAgentCamera.changeCameraToDefault(); + } + // This constant is based on (1200 - HEADER_SIZE) / 4 bytes per // root. I lopped off a few (33) to provide a bit // pad. HEADER_SIZE is currently 67 bytes, most of which is UUIDs. @@ -4572,13 +4619,13 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id) // satisfy anybody. const S32 MAX_ROOTS_PER_PACKET = 250; const S32 MAX_PACKET_COUNT = 254; - F32 packets = ceil((F32)derez_objects.count() / (F32)MAX_ROOTS_PER_PACKET); + F32 packets = ceil((F32)objectsp->count() / (F32)MAX_ROOTS_PER_PACKET); if(packets > (F32)MAX_PACKET_COUNT) { error = "AcquireErrorTooManyObjects"; } - if(error.empty() && derez_objects.count() > 0) + if(error.empty() && objectsp->count() > 0) { U8 d = (U8)dest; LLUUID tid; @@ -4603,11 +4650,11 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id) msg->addU8Fast(_PREHASH_PacketCount, packet_count); msg->addU8Fast(_PREHASH_PacketNumber, packet_number); objects_in_packet = 0; - while((object_index < derez_objects.count()) + while((object_index < objectsp->count()) && (objects_in_packet++ < MAX_ROOTS_PER_PACKET)) { - LLViewerObject* object = derez_objects.get(object_index++); + LLViewerObject* object = objectsp->get(object_index++); msg->nextBlockFast(_PREHASH_ObjectData); msg->addU32Fast(_PREHASH_ObjectLocalID, object->getLocalID()); // VEFFECT: DerezObject @@ -4632,6 +4679,13 @@ void derez_objects(EDeRezDestination dest, const LLUUID& dest_id) } } +static void derez_objects(EDeRezDestination dest, const LLUUID& dest_id) +{ + LLViewerRegion* first_region = NULL; + std::string error; + derez_objects(dest, dest_id, first_region, error, NULL); +} + void handle_take_copy() { if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return; @@ -4654,6 +4708,10 @@ void handle_take_copy() // You can return an object to its owner if it is on your land. class LLObjectReturn : public view_listener_t { +public: + LLObjectReturn() : mFirstRegion(NULL) {} + +private: bool handleEvent(const LLSD& userdata) { if (LLSelectMgr::getInstance()->getSelection()->isEmpty()) return true; @@ -4663,6 +4721,9 @@ class LLObjectReturn : public view_listener_t mObjectSelection = LLSelectMgr::getInstance()->getEditSelection(); + // Save selected objects, so that we still know what to return after the confirmation dialog resets selection. + get_derezzable_objects(DRD_RETURN_TO_OWNER, mError, mFirstRegion, &mReturnableObjects); + LLNotificationsUtil::add("ReturnToOwner", LLSD(), LLSD(), boost::bind(&LLObjectReturn::onReturnToOwner, this, _1, _2)); return true; } @@ -4673,16 +4734,23 @@ class LLObjectReturn : public view_listener_t if (0 == option) { // Ignore category ID for this derez destination. - derez_objects(DRD_RETURN_TO_OWNER, LLUUID::null); + derez_objects(DRD_RETURN_TO_OWNER, LLUUID::null, mFirstRegion, mError, &mReturnableObjects); } + mReturnableObjects.clear(); + mError.clear(); + mFirstRegion = NULL; + // drop reference to current selection mObjectSelection = NULL; return false; } -protected: LLObjectSelectionHandle mObjectSelection; + + LLDynamicArray mReturnableObjects; + std::string mError; + LLViewerRegion* mFirstRegion; }; @@ -4713,29 +4781,7 @@ class LLObjectEnableReturn : public view_listener_t } else { - LLViewerRegion* region = gAgent.getRegion(); - if (region) - { - // Estate owners and managers can always return objects. - if (region->canManageEstate()) - { - new_value = true; - } - else - { - struct f : public LLSelectedObjectFunctor - { - virtual bool apply(LLViewerObject* obj) - { - return - obj->permModify() || - obj->isReturnable(); - } - } func; - const bool firstonly = true; - new_value = LLSelectMgr::getInstance()->getSelection()->applyToRootObjects(&func, firstonly); - } - } + new_value = can_derez(DRD_RETURN_TO_OWNER); } #endif return new_value; @@ -8817,6 +8863,55 @@ class LLToggleUIHints : public view_listener_t } }; +class LLCheckSessionsSettings : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + std::string expected = userdata.asString(); + return gSavedSettings.getString("SessionSettingsFile") == expected; + } +}; + +class LLChangeMode : public view_listener_t +{ + bool handleEvent(const LLSD& userdata) + { + std::string mode = userdata.asString(); + if (mode == "basic") + { + if (gSavedSettings.getString("SessionSettingsFile") != "settings_minimal.xml") + { + LLNotificationsUtil::add("ModeChange", LLSD(), LLSD(), boost::bind(onModeChangeConfirm, "settings_minimal.xml", _1, _2)); + } + return true; + } + else if (mode == "advanced") + { + if (gSavedSettings.getString("SessionSettingsFile") != "") + { + LLNotificationsUtil::add("ModeChange", LLSD(), LLSD(), boost::bind(onModeChangeConfirm, "", _1, _2)); + } + return true; + } + return false; + } + + static void onModeChangeConfirm(const std::string& new_session_settings_file, const LLSD& notification, const LLSD& response) + { + S32 option = LLNotificationsUtil::getSelectedOption(notification, response); + switch (option) + { + case 0: + gSavedSettings.getControl("SessionSettingsFile")->set(new_session_settings_file); + LLAppViewer::instance()->requestQuit(); + break; + case 1: + default: + break; + } + } +}; + void LLUploadCostCalculator::calculateCost() { S32 upload_cost = LLGlobalEconomy::Singleton::getInstance()->getPriceUpload(); @@ -9346,6 +9441,8 @@ void initialize_menus() view_listener_t::addMenu(new LLEditableSelectedMono(), "EditableSelectedMono"); view_listener_t::addMenu(new LLToggleUIHints(), "ToggleUIHints"); + view_listener_t::addMenu(new LLCheckSessionsSettings(), "CheckSessionSettings"); + view_listener_t::addMenu(new LLChangeMode(), "ChangeMode"); // [RLVa:KB] - Checked: 2010-04-23 (RLVa-1.2.0g) | Added: RLVa-1.2.0 commit.add("RLV.ToggleEnabled", boost::bind(&rlvMenuToggleEnabled)); diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index 84c511d399..0173b58dd7 100644 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -1080,48 +1080,26 @@ void start_new_inventory_observer() class LLDiscardAgentOffer : public LLInventoryFetchItemsObserver { LOG_CLASS(LLDiscardAgentOffer); + public: LLDiscardAgentOffer(const LLUUID& folder_id, const LLUUID& object_id) : LLInventoryFetchItemsObserver(object_id), mFolderID(folder_id), mObjectID(object_id) {} - virtual ~LLDiscardAgentOffer() {} + virtual void done() { LL_DEBUGS("Messaging") << "LLDiscardAgentOffer::done()" << LL_ENDL; - const LLUUID trash_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_TRASH); - bool notify = false; - if(trash_id.notNull() && mObjectID.notNull()) - { - LLInventoryModel::update_list_t update; - LLInventoryModel::LLCategoryUpdate old_folder(mFolderID, -1); - update.push_back(old_folder); - LLInventoryModel::LLCategoryUpdate new_folder(trash_id, 1); - update.push_back(new_folder); - gInventory.accountForUpdate(update); - gInventory.moveObject(mObjectID, trash_id); - LLInventoryObject* obj = gInventory.getObject(mObjectID); - if(obj) - { - // no need to restamp since this is already a freshly - // stamped item. - obj->updateParentOnServer(FALSE); - notify = true; - } - } - else - { - LL_WARNS("Messaging") << "DiscardAgentOffer unable to find: " - << (trash_id.isNull() ? "trash " : "") - << (mObjectID.isNull() ? "object" : "") << LL_ENDL; - } + + // We're invoked from LLInventoryModel::notifyObservers(). + // If we now try to remove the inventory item, it will cause a nested + // notifyObservers() call, which won't work. + // So defer moving the item to trash until viewer gets idle (in a moment). + LLAppViewer::instance()->addOnIdleCallback(boost::bind(&LLInventoryModel::removeItem, &gInventory, mObjectID)); gInventory.removeObserver(this); - if(notify) - { - gInventory.notifyObservers(); - } delete this; } + protected: LLUUID mFolderID; LLUUID mObjectID; @@ -1352,29 +1330,12 @@ bool highlight_offered_object(const LLUUID& obj_id) void inventory_offer_mute_callback(const LLUUID& blocked_id, const std::string& full_name, - bool is_group, - boost::shared_ptr offer_ptr) + bool is_group) { - LLOfferInfo* offer = dynamic_cast(offer_ptr.get()); - - std::string from_name = full_name; - LLMute::EType type; - if (is_group) - { - type = LLMute::GROUP; - } - else if(offer && offer->mFromObject) - { - //we have to block object by name because blocked_id is an id of owner - type = LLMute::BY_NAME; - } - else - { - type = LLMute::AGENT; - } + // *NOTE: blocks owner if the offer came from an object + LLMute::EType mute_type = is_group ? LLMute::GROUP : LLMute::AGENT; - // id should be null for BY_NAME mute, see LLMuteList::add for details - LLMute mute(type == LLMute::BY_NAME ? LLUUID::null : blocked_id, from_name, type); + LLMute mute(blocked_id, full_name, mute_type); if (LLMuteList::getInstance()->add(mute)) { LLPanelBlockedList::showPanelAndSelect(blocked_id); @@ -1388,6 +1349,7 @@ void inventory_offer_mute_callback(const LLUUID& blocked_id, bool matches(const LLNotificationPtr notification) const { if(notification->getName() == "ObjectGiveItem" + || notification->getName() == "OwnObjectGiveItem" || notification->getName() == "UserGiveItem") { return (notification->getPayload()["from_id"].asUUID() == blocked_id); @@ -1534,7 +1496,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& LLChat chat; std::string log_message; S32 button = LLNotificationsUtil::getSelectedOption(notification, response); - + LLInventoryObserver* opener = NULL; LLViewerInventoryCategory* catp = NULL; catp = (LLViewerInventoryCategory*)gInventory.getCategory(mObjectID); @@ -1556,7 +1518,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& llassert(notification_ptr != NULL); if (notification_ptr != NULL) { - gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback,_1,_2,_3,notification_ptr->getResponderPtr())); + gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback, _1, _2, _3)); } } @@ -1566,7 +1528,7 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& // TODO: when task inventory offers can also be handled the new way, migrate the code that sets these strings here: from_string = chatHistory_string = mFromName; - bool busy=FALSE; + bool busy = gAgent.getBusy(); switch(button) { @@ -1638,9 +1600,6 @@ bool LLOfferInfo::inventory_offer_callback(const LLSD& notification, const LLSD& } break; - case IOR_BUSY: - //Busy falls through to decline. Says to make busy message. - busy=TRUE; case IOR_MUTE: // MUTE falls through to decline case IOR_DECLINE: @@ -1717,7 +1676,7 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const llassert(notification_ptr != NULL); if (notification_ptr != NULL) { - gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback,_1,_2,_3,notification_ptr->getResponderPtr())); + gCacheName->get(mFromID, mFromGroup, boost::bind(&inventory_offer_mute_callback, _1, _2, _3)); } } @@ -1801,7 +1760,7 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const from_string = chatHistory_string = mFromName; } - bool busy=FALSE; + bool busy = gAgent.getBusy(); // [RLVa:KB] - Checked: 2010-09-23 (RLVa-1.2.1e) | Added: RLVa-1.2.1e bool fRlvNotifyAccepted = false; @@ -1884,9 +1843,6 @@ bool LLOfferInfo::inventory_task_offer_callback(const LLSD& notification, const } // end switch (mIM) break; - case IOR_BUSY: - //Busy falls through to decline. Says to make busy message. - busy=TRUE; case IOR_MUTE: // MUTE falls through to decline case IOR_DECLINE: @@ -1961,6 +1917,7 @@ void LLOfferInfo::initRespondFunctionMap() if(mRespondFunctions.empty()) { mRespondFunctions["ObjectGiveItem"] = boost::bind(&LLOfferInfo::inventory_task_offer_callback, this, _1, _2); + mRespondFunctions["OwnObjectGiveItem"] = boost::bind(&LLOfferInfo::inventory_task_offer_callback, this, _1, _2); mRespondFunctions["UserGiveItem"] = boost::bind(&LLOfferInfo::inventory_offer_callback, this, _1, _2); } } @@ -1971,14 +1928,6 @@ void inventory_offer_handler(LLOfferInfo* info) if(NACLAntiSpamRegistry::checkQueue((U32)NACLAntiSpamRegistry::QUEUE_INVENTORY,info->mFromID)) return; // NaCl End - //Until throttling is implmented, busy mode should reject inventory instead of silently - //accepting it. SEE SL-39554 - if (gAgent.getBusy()) - { - info->forceResponse(IOR_BUSY); - return; - } - //If muted, don't even go through the messaging stuff. Just curtail the offer here. if (LLMuteList::getInstance()->isMuted(info->mFromID, info->mFromName)) { @@ -2064,7 +2013,7 @@ void inventory_offer_handler(LLOfferInfo* info) std::string verb = "select?name=" + LLURI::escape(msg); args["ITEM_SLURL"] = LLSLURL("inventory", info->mObjectID, verb.c_str()).getSLURLString(); - LLNotification::Params p("ObjectGiveItem"); + LLNotification::Params p; // Object -> Agent Inventory Offer if (info->mFromObject && !bAutoAccept ) // Nicky D. fall into the Avi->Avi branch for auto accepting items. @@ -2083,7 +2032,10 @@ void inventory_offer_handler(LLOfferInfo* info) // Note: sets inventory_task_offer_callback as the callback p.substitutions(args).payload(payload).functor.responder(LLNotificationResponderPtr(info)); info->mPersist = true; - p.name = "ObjectGiveItem"; + + // Offers from your own objects need a special notification template. + p.name = info->mFromID == gAgentID ? "OwnObjectGiveItem" : "ObjectGiveItem"; + // Pop up inv offer chiclet and let the user accept (keep), or reject (and silently delete) the inventory. LLPostponedNotification::add(p, info->mFromID, info->mFromGroup == TRUE); } @@ -2840,8 +2792,9 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) bucketp = (struct offer_agent_bucket_t*) &binary_bucket[0]; info->mType = (LLAssetType::EType) bucketp->asset_type; info->mObjectID = bucketp->object_id; + info->mFromObject = FALSE; } - else + else // IM_TASK_INVENTORY_OFFERED { if (sizeof(S8) != binary_bucket_size) { @@ -2851,6 +2804,7 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) } info->mType = (LLAssetType::EType) binary_bucket[0]; info->mObjectID = LLUUID::null; + info->mFromObject = TRUE; } info->mIM = dialog; @@ -2859,14 +2813,6 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) info->mTransactionID = session_id; info->mFolderID = gInventory.findCategoryUUIDForType(LLFolderType::assetTypeToFolderType(info->mType)); - if (dialog == IM_TASK_INVENTORY_OFFERED) - { - info->mFromObject = TRUE; - } - else - { - info->mFromObject = FALSE; - } info->mFromName = name; info->mDesc = message; info->mHost = msg->getSender(); @@ -2881,6 +2827,12 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) // Same as closing window info->forceResponse(IOR_DECLINE); } + else if (is_busy && dialog != IM_TASK_INVENTORY_OFFERED) // busy mode must not affect interaction with objects (STORM-565) + { + // Until throttling is implemented, busy mode should reject inventory instead of silently + // accepting it. SEE SL-39554 + info->forceResponse(IOR_DECLINE); + } else { inventory_offer_handler(info); @@ -3164,8 +3116,8 @@ void process_improved_im(LLMessageSystem *msg, void **user_data) else { LLVector3 pos, look_at; - U64 region_handle; - U8 region_access = SIM_ACCESS_MIN; + U64 region_handle(0); + U8 region_access(0); std::string region_info = ll_safe_string((char*)binary_bucket, binary_bucket_size); std::string region_access_str = LLStringUtil::null; std::string region_access_icn = LLStringUtil::null; @@ -7308,8 +7260,24 @@ bool callback_script_dialog(const LLSD& notification, const LLSD& response) rtn_text = LLNotification::getSelectedOptionName(response); } - // Didn't click "Ignore" - if (button_idx != -1) + // Button -2 = Mute + // Button -1 = Ignore - no processing needed for this button + // Buttons 0 and above = dialog choices + + if (-2 == button_idx) + { + std::string object_name = notification["payload"]["object_name"].asString(); + LLUUID object_id = notification["payload"]["object_id"].asUUID(); + LLMute mute(object_id, object_name, LLMute::OBJECT); + if (LLMuteList::getInstance()->add(mute)) + { + // This call opens the sidebar, displays the block list, and highlights the newly blocked + // object in the list so the user can see that their block click has taken effect. + LLPanelBlockedList::showPanelAndSelect(object_id); + } + } + + if (0 <= button_idx) { LLMessageSystem* msg = gMessageSystem; msg->newMessage("ScriptDialogReply"); @@ -7358,12 +7326,12 @@ void process_script_dialog(LLMessageSystem* msg, void**) std::string message; std::string first_name; std::string last_name; - std::string title; + std::string object_name; S32 chat_channel; msg->getString("Data", "FirstName", first_name); msg->getString("Data", "LastName", last_name); - msg->getString("Data", "ObjectName", title); + msg->getString("Data", "ObjectName", object_name); msg->getString("Data", "Message", message); msg->getS32("Data", "ChatChannel", chat_channel); @@ -7374,6 +7342,7 @@ void process_script_dialog(LLMessageSystem* msg, void**) payload["sender"] = msg->getSender().getIPandPort(); payload["object_id"] = object_id; payload["chat_channel"] = chat_channel; + payload["object_name"] = object_name; // build up custom form S32 button_count = msg->getNumberOfBlocks("Buttons"); @@ -7392,7 +7361,7 @@ void process_script_dialog(LLMessageSystem* msg, void**) } LLSD args; - args["TITLE"] = title; + args["TITLE"] = object_name; args["MESSAGE"] = message; LLNotificationPtr notification; if (!first_name.empty()) diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h index 1a5a596157..af8bd496df 100644 --- a/indra/newview/llviewermessage.h +++ b/indra/newview/llviewermessage.h @@ -57,7 +57,6 @@ enum InventoryOfferResponse IOR_ACCEPT, IOR_DECLINE, IOR_MUTE, - IOR_BUSY, IOR_SHOW }; diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp old mode 100644 new mode 100755 index 32babcb7d9..8b214d6568 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -104,11 +104,6 @@ #include "rlvhandler.h" #include "rlvlocks.h" // [/RLVa:KB] -#include "llaccountingquota.h" -// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1a) -#include "rlvhandler.h" -#include "rlvlocks.h" -// [/RLVa:KB] //#define DEBUG_UPDATE_TYPE @@ -148,6 +143,7 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco if (!gAgentAvatarp) { gAgentAvatarp = new LLVOAvatarSelf(id, pcode, regionp); + gAgentAvatarp->initInstance(); } else { @@ -157,9 +153,10 @@ LLViewerObject *LLViewerObject::createObject(const LLUUID &id, const LLPCode pco } else { - res = new LLVOAvatar(id, pcode, regionp); + LLVOAvatar *avatar = new LLVOAvatar(id, pcode, regionp); + avatar->initInstance(); + res = avatar; } - static_cast(res)->initInstance(); break; } case LL_PCODE_LEGACY_GRASS: @@ -645,6 +642,20 @@ void LLViewerObject::constructAndAddReturnable( std::vector boxes; + boxes.push_back(LLBBox(getPositionRegion(), getRotationRegion(), getScale() * -0.5f, getScale() * 0.5f).getAxisAligned()); + for (child_list_t::iterator iter = mChildList.begin(); + iter != mChildList.end(); iter++) + { + LLViewerObject* child = *iter; + boxes.push_back(LLBBox(child->getPositionRegion(), child->getRotationRegion(), child->getScale() * -0.5f, child->getScale() * 0.5f).getAxisAligned()); + } + + return mRegionp && mRegionp->objectsCrossParcel(boxes); +} + BOOL LLViewerObject::setParent(LLViewerObject* parent) { if(mParent != parent) @@ -2801,7 +2812,7 @@ void LLViewerObject::processTaskInv(LLMessageSystem* msg, void** user_data) LLPointer obj; obj = new LLInventoryObject(object->mID, LLUUID::null, LLAssetType::AT_CATEGORY, - LLTrans::getString("ViewerObjectContents").c_str()); + "Contents"); object->mInventory->push_front(obj); object->doInventoryCallback(); delete ft; @@ -2868,7 +2879,7 @@ void LLViewerObject::loadTaskInvFile(const std::string& filename) { LLPointer inv = new LLInventoryObject; inv->importLegacyStream(ifs); - inv->rename(LLTrans::getString("ViewerObjectContents").c_str()); + inv->rename("Contents"); mInventory->push_front(inv); } else @@ -5844,9 +5855,3 @@ public: LLHTTPRegistration gHTTPRegistrationObjectPhysicsProperties("/message/ObjectPhysicsProperties"); - -void LLViewerObject::updateQuota( const SelectionQuota& quota ) -{ - //update quotas - mSelectionQuota = quota; -} diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h index 5e10cda0a8..146a7520d3 100644 --- a/indra/newview/llviewerobject.h +++ b/indra/newview/llviewerobject.h @@ -43,7 +43,7 @@ #include "v3dmath.h" #include "v3math.h" #include "llvertexbuffer.h" -#include "llaccountingquota.h" +#include "llbbox.h" #include "llbbox.h" class LLAgent; // TODO: Get rid of this. @@ -243,6 +243,10 @@ public: void buildReturnablesForChildrenVO( std::vector& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion ); void constructAndAddReturnable( std::vector& returnables, LLViewerObject* pChild, LLViewerRegion* pTargetRegion ); + // This method returns true if the object crosses + // any parcel bounds in the region. + bool crossesParcelBounds(); + /* // This method will scan through this object, and then query the // selection manager to see if the local agent probably has the @@ -661,9 +665,7 @@ protected: void setParticleSource(const LLPartSysData& particle_parameters, const LLUUID& owner_id); public: - void updateQuota( const SelectionQuota& quota ); - const SelectionQuota& getQuota( void ) { return mSelectionQuota; } - + private: void setNameValueList(const std::string& list); // clears nv pairs and then individually adds \n separated NV pairs from \0 terminated string void deleteTEImages(); // correctly deletes list of images @@ -725,8 +727,6 @@ protected: F32 mPhysicsCost; F32 mLinksetPhysicsCost; - SelectionQuota mSelectionQuota; - bool mCostStale; mutable bool mPhysicsShapeUnknown; diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index e43b1a4ddd..5cc1cf73b0 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -58,6 +58,7 @@ #include "llviewerregion.h" #include "llviewerstats.h" #include "llviewerstatsrecorder.h" +#include "llvovolume.h" #include "llvoavatarself.h" #include "lltoolmgr.h" #include "lltoolpie.h" @@ -997,6 +998,9 @@ void LLViewerObjectList::update(LLAgent &agent, LLWorld &world) mNumSizeCulled = 0; mNumVisCulled = 0; + // update max computed render cost + LLVOVolume::updateRenderComplexity(); + // compute all sorts of time-based stats // don't factor frames that were paused into the stats if (! mWasPaused) @@ -1258,7 +1262,8 @@ void LLViewerObjectList::removeDrawable(LLDrawable* drawablep) BOOL LLViewerObjectList::killObject(LLViewerObject *objectp) { // Don't ever kill gAgentAvatarp, just force it to the agent's region - if (objectp == gAgentAvatarp) + // unless region is NULL which is assumed to mean you are logging out. + if ((objectp == gAgentAvatarp) && gAgent.getRegion()) { objectp->setRegion(gAgent.getRegion()); return FALSE; @@ -1281,6 +1286,7 @@ BOOL LLViewerObjectList::killObject(LLViewerObject *objectp) return TRUE; } + return FALSE; } @@ -1445,15 +1451,6 @@ void LLViewerObjectList::onObjectCostFetchFailure(const LLUUID& object_id) mPendingObjectCost.erase(object_id); } -void LLViewerObjectList::updateQuota( const LLUUID& objectId, const SelectionQuota& quota ) -{ - LLViewerObject* pVO = findObject( objectId ); - if ( pVO ) - { - pVO->updateQuota( quota ); - } -} - void LLViewerObjectList::updatePhysicsFlags(const LLViewerObject* object) { mStalePhysicsFlags.insert(object->getID()); diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h index f135f5e7cf..4aa09ac191 100644 --- a/indra/newview/llviewerobjectlist.h +++ b/indra/newview/llviewerobjectlist.h @@ -36,7 +36,6 @@ // project includes #include "llviewerobject.h" -#include "llaccountingquota.h" class LLCamera; class LLNetMap; @@ -102,8 +101,6 @@ public: F32 restitution, F32 gravity_multiplier); - void updateQuota( const LLUUID& objectId, const SelectionQuota& costs ); - void shiftObjects(const LLVector3 &offset); void repartitionObjects(); diff --git a/indra/newview/llviewerparceloverlay.cpp b/indra/newview/llviewerparceloverlay.cpp index eff16b6a6e..e619b89f9b 100644 --- a/indra/newview/llviewerparceloverlay.cpp +++ b/indra/newview/llviewerparceloverlay.cpp @@ -201,6 +201,65 @@ bool LLViewerParcelOverlay::encroachesOnUnowned(const std::vector& boxes return false; } +bool LLViewerParcelOverlay::encroachesOnNearbyParcel(const std::vector& boxes) const +{ + // boxes are expected to already be axis aligned + for (U32 i = 0; i < boxes.size(); ++i) + { + LLVector3 min = boxes[i].getMinAgent(); + LLVector3 max = boxes[i].getMaxAgent(); + + // If an object crosses region borders it crosses a parcel + if ( min.mV[VX] < 0 + || min.mV[VY] < 0 + || max.mV[VX] > REGION_WIDTH_METERS + || max.mV[VY] > REGION_WIDTH_METERS) + { + return true; + } + + S32 left = S32(llclamp((min.mV[VX] / PARCEL_GRID_STEP_METERS), 0.f, REGION_WIDTH_METERS - 1)); + S32 right = S32(llclamp((max.mV[VX] / PARCEL_GRID_STEP_METERS), 0.f, REGION_WIDTH_METERS - 1)); + S32 bottom = S32(llclamp((min.mV[VY] / PARCEL_GRID_STEP_METERS), 0.f, REGION_WIDTH_METERS - 1)); + S32 top = S32(llclamp((max.mV[VY] / PARCEL_GRID_STEP_METERS), 0.f, REGION_WIDTH_METERS - 1)); + + const S32 GRIDS_PER_EDGE = mParcelGridsPerEdge; + + for (S32 row = bottom; row <= top; row++) + { + for (S32 col = left; col <= right; col++) + { + // This is not the rightmost column + if (col < GRIDS_PER_EDGE-1) + { + U8 east_overlay = mOwnership[row*GRIDS_PER_EDGE+col+1]; + // If the column to the east of the current one marks + // the other parcel's west edge and the box extends + // to the west it crosses the parcel border. + if ((east_overlay & PARCEL_WEST_LINE) && col < right) + { + return true; + } + } + + // This is not the topmost column + if (row < GRIDS_PER_EDGE-1) + { + U8 north_overlay = mOwnership[(row+1)*GRIDS_PER_EDGE+col]; + // If the row to the north of the current one marks + // the other parcel's south edge and the box extends + // to the south it crosses the parcel border. + if ((north_overlay & PARCEL_SOUTH_LINE) && row < top) + { + return true; + } + } + } + } + } + return false; +} + BOOL LLViewerParcelOverlay::isSoundLocal(const LLVector3& pos) const { S32 row = S32(pos.mV[VY] / PARCEL_GRID_STEP_METERS); diff --git a/indra/newview/llviewerparceloverlay.h b/indra/newview/llviewerparceloverlay.h index 3c6794e7d0..7445d5bf1d 100644 --- a/indra/newview/llviewerparceloverlay.h +++ b/indra/newview/llviewerparceloverlay.h @@ -61,6 +61,7 @@ public: // bounding boxes which isn't perfect, but is close bool encroachesOwned(const std::vector& boxes) const; bool encroachesOnUnowned(const std::vector& boxes) const; + bool encroachesOnNearbyParcel(const std::vector& boxes) const; BOOL isSoundLocal(const LLVector3& pos) const; diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index 9001944dc3..2222b6e7c4 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -1493,11 +1493,8 @@ void LLViewerRegion::unpackRegionHandshake() msg->sendReliable(host); } - void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) { - capabilityNames.append("AccountingParcel"); - capabilityNames.append("AccountingSelection"); capabilityNames.append("AttachmentResources"); capabilityNames.append("AvatarPickerSearch"); capabilityNames.append("ChatSessionRequest"); @@ -1537,6 +1534,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("ProvisionVoiceAccountRequest"); capabilityNames.append("RemoteParcelRequest"); capabilityNames.append("RequestTextureDownload"); + capabilityNames.append("ResourceCostSelected"); capabilityNames.append("SearchStatRequest"); capabilityNames.append("SearchStatTracking"); capabilityNames.append("SendPostcard"); @@ -1562,10 +1560,6 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames) capabilityNames.append("ViewerMetrics"); capabilityNames.append("ViewerStartAuction"); capabilityNames.append("ViewerStats"); - //prep# Finalize these!!!!!!!!! - //capabilityNames.append("AccountingVO"); - capabilityNames.append("AccountingParcel"); - capabilityNames.append("AccountingRegion"); // Please add new capabilities alphabetically to reduce // merge conflicts. @@ -1796,6 +1790,11 @@ bool LLViewerRegion::childrenObjectReturnable( const std::vector& boxes return result; } +bool LLViewerRegion::objectsCrossParcel(const std::vector& boxes) const +{ + return mParcelOverlay && mParcelOverlay->encroachesOnNearbyParcel(boxes); +} + void LLViewerRegion::getNeighboringRegions( std::vector& uniqueRegions ) { mImpl->mLandp->getNeighboringRegions( uniqueRegions ); diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index 43b4aa506c..24c9bde87c 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -328,6 +328,7 @@ public: bool objectIsReturnable(const LLVector3& pos, const std::vector& boxes) const; bool childrenObjectReturnable( const std::vector& boxes ) const; + bool objectsCrossParcel(const std::vector& boxes) const; void getNeighboringRegions( std::vector& uniqueRegions ); diff --git a/indra/newview/llviewertexteditor.h b/indra/newview/llviewertexteditor.h index b521f4084b..b0a5dca893 100644 --- a/indra/newview/llviewertexteditor.h +++ b/indra/newview/llviewertexteditor.h @@ -36,12 +36,7 @@ class LLViewerTextEditor : public LLTextEditor { public: struct Params : public LLInitParam::Block - { - Params() - { - name = "text_editor"; - } - }; + {}; protected: LLViewerTextEditor(const Params&); diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index e2e0b3432a..e5d65760be 100644 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -66,6 +66,7 @@ // statics LLPointer LLViewerTexture::sNullImagep = NULL; +LLPointer LLViewerTexture::sBlackImagep = NULL; LLPointer LLViewerFetchedTexture::sMissingAssetImagep = NULL; LLPointer LLViewerFetchedTexture::sWhiteImagep = NULL; LLPointer LLViewerFetchedTexture::sDefaultImagep = NULL; @@ -295,17 +296,23 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromHost(const void LLViewerTextureManager::init() { - LLPointer raw = new LLImageRaw(1,1,3); - raw->clear(0x77, 0x77, 0x77, 0xFF); - LLViewerTexture::sNullImagep = LLViewerTextureManager::getLocalTexture(raw.get(), TRUE) ; - -#if 1 - LLPointer imagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT); - LLViewerFetchedTexture::sDefaultImagep = imagep; + { + LLPointer raw = new LLImageRaw(1,1,3); + raw->clear(0x77, 0x77, 0x77, 0xFF); + LLViewerTexture::sNullImagep = LLViewerTextureManager::getLocalTexture(raw.get(), TRUE) ; + } const S32 dim = 128; LLPointer image_raw = new LLImageRaw(dim,dim,3); U8* data = image_raw->getData(); + + memset(data, 0, dim * dim * 3) ; + LLViewerTexture::sBlackImagep = LLViewerTextureManager::getLocalTexture(image_raw.get(), TRUE) ; + +#if 1 + LLPointer imagep = LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT); + LLViewerFetchedTexture::sDefaultImagep = imagep; + for (S32 i = 0; i getDiscardLevel()) { @@ -3118,7 +3133,10 @@ void LLViewerLODTexture::scaleDown() { tester->setStablizingTime() ; } + + return true ; } + return false ; } //---------------------------------------------------------------------------------------------- //end of LLViewerLODTexture diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index 2ee25a1077..9b57a9cb2c 100644 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -330,6 +330,7 @@ public: static BOOL sUseTextureAtlas ; static LLPointer sNullImagep; // Null texture for non-textured objects. + static LLPointer sBlackImagep; // Texture to show NOTHING (pure black) }; @@ -596,7 +597,7 @@ public: private: void init(bool firstinit) ; - void scaleDown() ; + bool scaleDown() ; private: F32 mDiscardVirtualSize; // Virtual size used to calculate desired discard diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index a9ca621d4c..7d9f0bd95b 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include "llagent.h" #include "llagentcamera.h" @@ -198,6 +199,7 @@ #include "llfloaternotificationsconsole.h" #include "llnearbychat.h" +#include "llwindowlistener.h" #include "llviewerwindowlistener.h" #include "llpaneltopinfobar.h" @@ -243,7 +245,7 @@ BOOL gDisplayFOV = FALSE; static const U8 NO_FACE = 255; BOOL gQuietSnapshot = FALSE; -const F32 MIN_AFK_TIME = 2.f; // minimum time after setting away state before coming back +const F32 MIN_AFK_TIME = 6.f; // minimum time after setting away state before coming back static const F32 MIN_DISPLAY_SCALE = 0.75f; std::string LLViewerWindow::sSnapshotBaseName; @@ -659,6 +661,17 @@ public: addText(xpos, ypos, llformat("%d %d %d %d", color[0], color[1], color[2], color[3])); ypos += y_inc; } + + if (gSavedSettings.getBOOL("DebugShowPrivateMem")) + { + LLPrivateMemoryPoolManager::getInstance()->updateStatistics() ; + addText(xpos, ypos, llformat("Total Reserved(KB): %d", LLPrivateMemoryPoolManager::getInstance()->mTotalReservedSize / 1024)); + ypos += y_inc; + + addText(xpos, ypos, llformat("Total Allocated(KB): %d", LLPrivateMemoryPoolManager::getInstance()->mTotalAllocatedSize / 1024)); + ypos += y_inc; + } + // only display these messages if we are actually rendering beacons at this moment if (LLPipeline::getRenderBeacons(NULL) && LLFloaterReg::instanceVisible("beacons")) { @@ -1199,7 +1212,7 @@ void LLViewerWindow::handleMouseMove(LLWindow *window, LLCoordGL pos, MASK mask mWindow->showCursorFromMouseMove(); - if (gAwayTimer.getElapsedTimeF32() > MIN_AFK_TIME) + if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME) { gAgent.clearAFK(); } @@ -1287,7 +1300,7 @@ BOOL LLViewerWindow::handleTranslatedKeyDown(KEY key, MASK mask, BOOL repeated) // Let the voice chat code check for its PTT key. Note that this never affects event processing. LLVoiceClient::getInstance()->keyDown(key, mask); - if (gAwayTimer.getElapsedTimeF32() > MIN_AFK_TIME) + if (gAwayTimer.getElapsedTimeF32() > LLAgent::MIN_AFK_TIME) { gAgent.clearAFK(); } @@ -1337,6 +1350,7 @@ BOOL LLViewerWindow::handleActivate(LLWindow *window, BOOL activated) { mActive = FALSE; + // if the user has chosen to go Away automatically after some time, then go Away when minimizing if (gSavedSettings.getS32("AFKTimeout")) { gAgent.setAFK(); @@ -1532,7 +1546,12 @@ LLViewerWindow::LLViewerWindow( mResDirty(false), mStatesDirty(false), mCurrResolutionIndex(0), - mViewerWindowListener(new LLViewerWindowListener(this)), + // gKeyboard is still NULL, so it doesn't do LLWindowListener any good to + // pass its value right now. Instead, pass it a nullary function that + // will, when we later need it, return the value of gKeyboard. + // boost::lambda::var() constructs such a functor on the fly. + mWindowListener(new LLWindowListener(this, boost::lambda::var(gKeyboard))), + mViewerWindowListener(new LLViewerWindowListener(this)), mProgressView(NULL) { LLNotificationChannel::buildChannel("VW_alerts", "Visible", LLNotificationFilters::filterBy(&LLNotification::getType, "alert")); @@ -1625,6 +1644,7 @@ LLViewerWindow::LLViewerWindow( } LLVertexBuffer::initClass(gSavedSettings.getBOOL("RenderVBOEnable"), gSavedSettings.getBOOL("RenderVBOMappingDisable")); LL_INFOS("RenderInit") << "LLVertexBuffer initialization done." << LL_ENDL ; + gGL.init() ; if (LLFeatureManager::getInstance()->isSafe() || (gSavedSettings.getS32("LastFeatureVersion") != LLFeatureManager::getInstance()->getVersion()) @@ -2039,15 +2059,17 @@ void LLViewerWindow::shutdownGL() llinfos << "All textures and llimagegl images are destroyed!" << llendl ; llinfos << "Cleaning up select manager" << llendl; - LLSelectMgr::getInstance()->cleanup(); - - LLVertexBuffer::cleanupClass(); + LLSelectMgr::getInstance()->cleanup(); llinfos << "Stopping GL during shutdown" << llendl; stopGL(FALSE); stop_glerror(); gGL.shutdown(); + + LLVertexBuffer::cleanupClass(); + + llinfos << "LLVertexBuffer cleaned." << llendl ; } // shutdownViews() and shutdownGL() need to be called first @@ -4198,6 +4220,19 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei { return FALSE; } + //check if there is enough memory for the snapshot image + if(LLPipeline::sMemAllocationThrottled) + { + return FALSE ; //snapshot taking is disabled due to memory restriction. + } + if(image_width * image_height > (1 << 22)) //if snapshot image is larger than 2K by 2K + { + if(!LLMemory::tryToAlloc(NULL, image_width * image_height * 3)) + { + llwarns << "No enough memory to take the snapshot with size (w : h): " << image_width << " : " << image_height << llendl ; + return FALSE ; //there is no enough memory for taking this snapshot. + } + } // PRE SNAPSHOT gDisplaySwapBuffers = FALSE; diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index 53914396ae..2b8c055292 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -62,6 +62,7 @@ class LLImageFormatted; class LLHUDIcon; class LLWindow; class LLRootView; +class LLWindowListener; class LLViewerWindowListener; class LLPopupView; @@ -459,7 +460,8 @@ protected: bool mStatesDirty; U32 mCurrResolutionIndex; - boost::scoped_ptr mViewerWindowListener; + boost::scoped_ptr mWindowListener; + boost::scoped_ptr mViewerWindowListener; protected: static std::string sSnapshotBaseName; diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp index 987455cbb8..25e33b449c 100644 --- a/indra/newview/llvoavatar.cpp +++ b/indra/newview/llvoavatar.cpp @@ -2835,10 +2835,49 @@ void LLVOAvatar::idleUpdateLoadingEffect() } else { - if (!isSelf() && LLMuteList::getInstance()->isMuted(getID())) - setParticleSource(sCloudMuted, getID()); - else - setParticleSource(sCloud, getID()); +// [ LL Default Av Clouds ] +// LLPartSysData particle_parameters; +// +// // fancy particle cloud designed by Brent +// particle_parameters.mPartData.mMaxAge = 4.f; +// particle_parameters.mPartData.mStartScale.mV[VX] = 0.8f; +// particle_parameters.mPartData.mStartScale.mV[VX] = 0.8f; +// particle_parameters.mPartData.mStartScale.mV[VY] = 1.0f; +// particle_parameters.mPartData.mEndScale.mV[VX] = 0.02f; +// particle_parameters.mPartData.mEndScale.mV[VY] = 0.02f; +// particle_parameters.mPartData.mStartColor = LLColor4(1, 1, 1, 0.5f); +// particle_parameters.mPartData.mEndColor = LLColor4(1, 1, 1, 0.0f); +// particle_parameters.mPartData.mStartScale.mV[VX] = 0.8f; +// LLViewerTexture* cloud = LLViewerTextureManager::getFetchedTextureFromFile("cloud-particle.j2c"); +// particle_parameters.mPartImageID = cloud->getID(); +// particle_parameters.mMaxAge = 0.f; +// particle_parameters.mPattern = LLPartSysData::LL_PART_SRC_PATTERN_ANGLE_CONE; +// particle_parameters.mInnerAngle = F_PI; +// particle_parameters.mOuterAngle = 0.f; +// particle_parameters.mBurstRate = 0.02f; +// particle_parameters.mBurstRadius = 0.0f; +// particle_parameters.mBurstPartCount = 1; +// particle_parameters.mBurstSpeedMin = 0.1f; +// particle_parameters.mBurstSpeedMax = 1.f; +// particle_parameters.mPartData.mFlags = ( LLPartData::LL_PART_INTERP_COLOR_MASK | LLPartData::LL_PART_INTERP_SCALE_MASK | +// LLPartData::LL_PART_EMISSIVE_MASK | // LLPartData::LL_PART_FOLLOW_SRC_MASK | +// LLPartData::LL_PART_TARGET_POS_MASK ); +// +// if (!isTooComplex()) // do not generate particles for overly-complex avatars +// { +// setParticleSource(particle_parameters, getID()); +// } + + // Firestorm Clouds + if (!isTooComplex()) // do not generate particles for overly-complex avatars + { + if (!isSelf() && LLMuteList::getInstance()->isMuted(getID())) + setParticleSource(sCloudMuted, getID()); + else + setParticleSource(sCloud, getID()); + } + + } } } @@ -6621,8 +6660,15 @@ BOOL LLVOAvatar::getIsCloud() } if (muted_as_cloud && !isSelf() && LLMuteList::getInstance()->isMuted(getID())) + { return TRUE; + } + if (isTooComplex()) + { + return TRUE; + } + return FALSE; } @@ -6724,6 +6770,16 @@ BOOL LLVOAvatar::isFullyLoaded() const // [/SL:KB] } +bool LLVOAvatar::isTooComplex() const +{ + if (gSavedSettings.getS32("RenderAvatarComplexityLimit") > 0 && mVisualComplexity >= gSavedSettings.getS32("RenderAvatarComplexityLimit")) + { + return true; + } + + return false; +} + //----------------------------------------------------------------------------- // findMotion() @@ -8578,7 +8634,7 @@ void LLVOAvatar::getImpostorValues(LLVector4a* extents, LLVector3& angle, F32& d void LLVOAvatar::idleUpdateRenderCost() { - static const U32 ARC_BODY_PART_COST = 20; + static const U32 ARC_BODY_PART_COST = 200; static const U32 ARC_LIMIT = 2048; static std::set all_textures; @@ -8589,7 +8645,7 @@ void LLVOAvatar::idleUpdateRenderCost() } U32 cost = 0; - std::set textures; + LLVOVolume::texture_cost_t textures; for (U8 baked_index = 0; baked_index < BAKED_NUM_INDICES; baked_index++) { @@ -8604,6 +8660,7 @@ void LLVOAvatar::idleUpdateRenderCost() } } + for (attachment_map_t::const_iterator iter = mAttachmentPoints.begin(); iter != mAttachmentPoints.end(); ++iter) @@ -8616,6 +8673,7 @@ void LLVOAvatar::idleUpdateRenderCost() const LLViewerObject* attached_object = (*attachment_iter); if (attached_object && !attached_object->isHUDAttachment()) { + textures.clear(); const LLDrawable* drawable = attached_object->mDrawable; if (drawable) { @@ -8623,6 +8681,25 @@ void LLVOAvatar::idleUpdateRenderCost() if (volume) { cost += volume->getRenderCost(textures); + + const_child_list_t children = volume->getChildren(); + for (const_child_list_t::const_iterator child_iter = children.begin(); + child_iter != children.end(); + ++child_iter) + { + LLViewerObject* child_obj = *child_iter; + LLVOVolume *child = dynamic_cast( child_obj ); + if (child) + { + cost += child->getRenderCost(textures); + } + } + + for (LLVOVolume::texture_cost_t::iterator iter = textures.begin(); iter != textures.end(); ++iter) + { + // add the cost of each individual texture in the linkset + cost += iter->second; + } } } } @@ -8630,15 +8707,17 @@ void LLVOAvatar::idleUpdateRenderCost() } + + // Diagnostic output to identify all avatar-related textures. // Does not affect rendering cost calculation. // Could be wrapped in a debug option if output becomes problematic. if (isSelf()) { // print any attachment textures we didn't already know about. - for (std::set::iterator it = textures.begin(); it != textures.end(); ++it) + for (LLVOVolume::texture_cost_t::iterator it = textures.begin(); it != textures.end(); ++it) { - LLUUID image_id = *it; + LLUUID image_id = it->first; if( image_id.isNull() || image_id == IMG_DEFAULT || image_id == IMG_DEFAULT_AVATAR) continue; if (all_textures.find(image_id) == all_textures.end()) @@ -8670,9 +8749,8 @@ void LLVOAvatar::idleUpdateRenderCost() } } - cost += textures.size() * LLVOVolume::ARC_TEXTURE_COST; - setDebugText(llformat("%d", cost)); + mVisualComplexity = cost; F32 green = 1.f-llclamp(((F32) cost-(F32)ARC_LIMIT)/(F32)ARC_LIMIT, 0.f, 1.f); F32 red = llmin((F32) cost/(F32)ARC_LIMIT, 1.f); mText->setColor(LLColor4(red,green,0,1)); diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h index b8e6a48d0f..8e85c63677 100644 --- a/indra/newview/llvoavatar.h +++ b/indra/newview/llvoavatar.h @@ -275,6 +275,7 @@ public: //-------------------------------------------------------------------- public: BOOL isFullyLoaded() const; + bool isTooComplex() const; bool visualParamWeightsAreDefault(); protected: virtual BOOL getIsCloud(); @@ -287,6 +288,7 @@ private: BOOL mPreviousFullyLoaded; BOOL mFullyLoadedInitialized; S32 mFullyLoadedFrameCounter; + S32 mVisualComplexity; LLFrameTimer mFullyLoadedTimer; LLFrameTimer mRuthTimer; protected: diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp index f464d0f0a5..61049c9ca3 100644 --- a/indra/newview/llvocache.cpp +++ b/indra/newview/llvocache.cpp @@ -752,4 +752,3 @@ void LLVOCache::writeToCache(U64 handle, const LLUUID& id, const LLVOCacheEntry: return ; } - diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp index e99063ec2b..290dbca4b5 100644 --- a/indra/newview/llvoicevivox.cpp +++ b/indra/newview/llvoicevivox.cpp @@ -4498,17 +4498,25 @@ bool LLVivoxVoiceClient::parcelVoiceInfoReceived(state requesting_state) bool LLVivoxVoiceClient::requestParcelVoiceInfo() { - LL_DEBUGS("Voice") << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << LL_ENDL; - - // grab the cap for parcel voice info from the region. LLViewerRegion * region = gAgent.getRegion(); - if (region == NULL) + if (region == NULL || !region->capabilitiesReceived()) { + // we don't have the cap yet, so return false so the caller can try again later. + + LL_DEBUGS("Voice") << "ParcelVoiceInfoRequest capability not yet available, deferring" << LL_ENDL; return false; } + // grab the cap. std::string url = gAgent.getRegion()->getCapability("ParcelVoiceInfoRequest"); - if (!url.empty()) + if (url.empty()) + { + // Region dosn't have the cap. Stop probing. + LL_DEBUGS("Voice") << "ParcelVoiceInfoRequest capability not available in this region" << LL_ENDL; + setState(stateDisableCleanup); + return false; + } + else { // if we've already retrieved the cap from the region, go ahead and make the request, // and return true so we can go into the state that waits for the response. @@ -4517,18 +4525,11 @@ bool LLVivoxVoiceClient::requestParcelVoiceInfo() LL_DEBUGS("Voice") << "sending ParcelVoiceInfoRequest (" << mCurrentRegionName << ", " << mCurrentParcelLocalID << ")" << LL_ENDL; LLHTTPClient::post( - url, - data, - new LLVivoxVoiceClientCapResponder(getState())); + url, + data, + new LLVivoxVoiceClientCapResponder(getState())); return true; } - else - { - - // we don't have the cap yet, so return false so the caller can try again later. - LL_DEBUGS("Voice") << "ParcelVoiceInfoRequest cap not yet available, deferring" << LL_ENDL; - return false; - } } void LLVivoxVoiceClient::switchChannel( diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index e6c590cd9f..702adb7441 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -98,6 +98,8 @@ F32 LLVOVolume::sLODFactor = 1.f; F32 LLVOVolume::sLODSlopDistanceFactor = 0.5f; //Changing this to zero, effectively disables the LOD transition slop F32 LLVOVolume::sDistanceFactor = 1.0f; S32 LLVOVolume::sNumLODChanges = 0; +S32 LLVOVolume::mRenderComplexity_last = 0; +S32 LLVOVolume::mRenderComplexity_current = 0; LLPointer LLVOVolume::sObjectMediaClient = NULL; LLPointer LLVOVolume::sObjectMediaNavigateClient = NULL; @@ -376,6 +378,7 @@ U32 LLVOVolume::processUpdateMessage(LLMessageSystem *mesgsys, // // Unpack texture entry data // + S32 result = unpackTEMessage(mesgsys, _PREHASH_ObjectData, block_num); if (result & teDirtyBits) { @@ -713,19 +716,22 @@ BOOL LLVOVolume::isVisible() const return FALSE ; } -void LLVOVolume::updateTextureVirtualSize() +void LLVOVolume::updateTextureVirtualSize(bool forced) { LLFastTimer ftm(FTM_VOLUME_TEXTURES); // Update the pixel area of all faces - if(!isVisible()) + if(!forced) { - return ; - } + if(!isVisible()) + { + return ; + } - if (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SIMPLE)) - { - return; + if (!gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_SIMPLE)) + { + return; + } } static LLCachedControl dont_load_textures(gSavedSettings,"TextureDisable"); @@ -975,18 +981,14 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms_in, const S32 detail, bo S32 lod = mLOD; BOOL is404 = FALSE; - + if (isSculpted()) { // if it's a mesh if ((volume_params.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) { //meshes might not have all LODs, get the force detail to best existing LOD - LLUUID mesh_id = volume_params.getSculptID(); - //profile and path params don't matter for meshes - volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); - lod = gMeshRepo.getActualMeshLOD(volume_params, lod); if (lod == -1) { @@ -1042,14 +1044,13 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms_in, const S32 detail, bo updateSculptTexture(); - if (isSculpted()) { updateSculptTexture(); // if it's a mesh if ((volume_params.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH) { - if (getVolume()->getNumVolumeFaces() == 0 || getVolume()->isTetrahedron()) + if (!getVolume()->isMeshAssetLoaded()) { //load request not yet issued, request pipeline load this mesh LLUUID asset_id = volume_params.getSculptID(); @@ -1669,11 +1670,16 @@ BOOL LLVOVolume::updateGeometry(LLDrawable *drawable) compiled = TRUE; sNumLODChanges += new_num_faces ; + if((S32)getNumTEs() != getVolume()->getNumFaces()) + { + setNumTEs(getVolume()->getNumFaces()); //mesh loading may change number of faces. + } + drawable->setState(LLDrawable::REBUILD_VOLUME); // for face->genVolumeTriangles() { LLFastTimer t(FTM_GEN_TRIANGLES); - if (new_num_faces != old_num_faces) + if (new_num_faces != old_num_faces || mNumFaces != (S32)getNumTEs()) { regenFaces(); } @@ -2980,24 +2986,38 @@ const LLMatrix4 LLVOVolume::getRenderMatrix() const // total cost is returned value + 5 * size of the resulting set. // Cannot include cost of textures, as they may be re-used in linked // children, and cost should only be increased for unique textures -Nyx -U32 LLVOVolume::getRenderCost(std::set &textures) const +U32 LLVOVolume::getRenderCost(texture_cost_t &textures) const { - // base cost of each prim should be 10 points - static const U32 ARC_PRIM_COST = 10; + // Get access to params we'll need at various points. + // Skip if this is object doesn't have a volume (e.g. is an avatar). + BOOL has_volume = (getVolume() != NULL); + LLVolumeParams volume_params; + LLPathParams path_params; + LLProfileParams profile_params; + + U32 num_triangles = 0; + // per-prim costs - static const U32 ARC_INVISI_COST = 1; - static const U32 ARC_SHINY_COST = 1; - static const U32 ARC_GLOW_COST = 1; - static const U32 ARC_FLEXI_COST = 8; - static const U32 ARC_PARTICLE_COST = 16; - static const U32 ARC_BUMP_COST = 4; + static const U32 ARC_PARTICLE_COST = 1; // determined experimentally + static const U32 ARC_PARTICLE_MAX = 2048; // default values + static const U32 ARC_TEXTURE_COST = 16; // multiplier for texture resolution - performance tested + static const U32 ARC_LIGHT_COST = 500; // static cost for light-producing prims + static const U32 ARC_MEDIA_FACE_COST = 1500; // static cost per media-enabled face - // per-face costs - static const U32 ARC_PLANAR_COST = 1; - static const U32 ARC_ANIM_TEX_COST = 4; - static const U32 ARC_ALPHA_COST = 4; - U32 shame = ARC_PRIM_COST; + // per-prim multipliers + static const F32 ARC_GLOW_MULT = 1.5f; // tested based on performance + static const F32 ARC_BUMP_MULT = 1.25f; // tested based on performance + static const F32 ARC_FLEXI_MULT = 5; // tested based on performance + static const F32 ARC_SHINY_MULT = 1.6f; // tested based on performance + static const F32 ARC_INVISI_COST = 1.2f; // tested based on performance + static const F32 ARC_WEIGHTED_MESH = 1.2f; // tested based on performance + + static const F32 ARC_PLANAR_COST = 1.0f; // tested based on performance to have negligible impact + static const F32 ARC_ANIM_TEX_COST = 4.f; // tested based on performance + static const F32 ARC_ALPHA_COST = 4.f; // 4x max - based on performance + + F32 shame = 0; U32 invisi = 0; U32 shiny = 0; @@ -3006,9 +3026,72 @@ U32 LLVOVolume::getRenderCost(std::set &textures) const U32 flexi = 0; U32 animtex = 0; U32 particles = 0; - U32 scale = 0; U32 bump = 0; U32 planar = 0; + U32 weighted_mesh = 0; + U32 produces_light = 0; + U32 media_faces = 0; + + const LLDrawable* drawablep = mDrawable; + U32 num_faces = drawablep->getNumFaces(); + + if (has_volume) + { + volume_params = getVolume()->getParams(); + path_params = volume_params.getPathParams(); + profile_params = volume_params.getProfileParams(); + + F32 weighted_triangles = -1.0; + getStreamingCost(NULL, NULL, &weighted_triangles); + + if (weighted_triangles > 0.0) + { + num_triangles = (U32)(weighted_triangles); + } + } + + if (num_triangles == 0) + { + num_triangles = 4; + } + + if (isSculpted()) + { + if (isMesh()) + { + // base cost is dependent on mesh complexity + // note that 3 is the highest LOD as of the time of this coding. + S32 size = gMeshRepo.getMeshSize(volume_params.getSculptID(),3); + if ( size > 0) + { + if (gMeshRepo.getSkinInfo(volume_params.getSculptID(), this)) + { + // weighted attachment - 1 point for every 3 bytes + weighted_mesh = 1; + } + + } + else + { + // something went wrong - user should know their content isn't render-free + return 0; + } + } + else + { + const LLSculptParams *sculpt_params = (LLSculptParams *) getParameterEntry(LLNetworkData::PARAMS_SCULPT); + LLUUID sculpt_id = sculpt_params->getSculptTexture(); + if (textures.find(sculpt_id) == textures.end()) + { + LLViewerFetchedTexture *texture = LLViewerTextureManager::getFetchedTexture(sculpt_id); + if (texture) + { + S32 texture_cost = 256 + (S32)(ARC_TEXTURE_COST * (texture->getFullHeight() / 128.f + texture->getFullWidth() / 128.f)); + textures.insert(texture_cost_t::value_type(sculpt_id, texture_cost)); + } + } + } + } if (isFlexible()) { @@ -3019,19 +3102,12 @@ U32 LLVOVolume::getRenderCost(std::set &textures) const particles = 1; } - const LLVector3& sc = getScale(); - scale += (U32) sc.mV[0] + (U32) sc.mV[1] + (U32) sc.mV[2]; - - const LLDrawable* drawablep = mDrawable; - - if (isSculpted()) + if (getIsLight()) { - const LLSculptParams *sculpt_params = (LLSculptParams *) getParameterEntry(LLNetworkData::PARAMS_SCULPT); - LLUUID sculpt_id = sculpt_params->getSculptTexture(); - textures.insert(sculpt_id); + produces_light = 1; } - for (S32 i = 0; i < drawablep->getNumFaces(); ++i) + for (S32 i = 0; i < num_faces; ++i) { const LLFace* face = drawablep->getFace(i); const LLTextureEntry* te = face->getTextureEntry(); @@ -3039,77 +3115,137 @@ U32 LLVOVolume::getRenderCost(std::set &textures) const if (img) { - textures.insert(img->getID()); + if (textures.find(img->getID()) == textures.end()) + { + S32 texture_cost = 256 + (S32)(ARC_TEXTURE_COST * (img->getFullHeight() / 128.f + img->getFullWidth() / 128.f)); + textures.insert(texture_cost_t::value_type(img->getID(), texture_cost)); + } } if (face->getPoolType() == LLDrawPool::POOL_ALPHA) { - alpha++; + alpha = 1; } else if (img && img->getPrimaryFormat() == GL_ALPHA) { invisi = 1; } + if (face->hasMedia()) + { + media_faces++; + } if (te) { if (te->getBumpmap()) { + // bump is a multiplier, don't add per-face bump = 1; } if (te->getShiny()) { + // shiny is a multiplier, don't add per-face shiny = 1; } if (te->getGlow() > 0.f) { + // glow is a multiplier, don't add per-face glow = 1; } if (face->mTextureMatrix != NULL) { - animtex++; + animtex = 1; } if (te->getTexGen()) { - planar++; + planar = 1; } } } + // shame currently has the "base" cost of 1 point per 15 triangles, min 2. + shame = num_triangles * 5.f; + shame = shame < 2.f ? 2.f : shame; - shame += invisi * ARC_INVISI_COST; - shame += shiny * ARC_SHINY_COST; - shame += glow * ARC_GLOW_COST; - shame += alpha * ARC_ALPHA_COST; - shame += flexi * ARC_FLEXI_COST; - shame += animtex * ARC_ANIM_TEX_COST; - shame += particles * ARC_PARTICLE_COST; - shame += bump * ARC_BUMP_COST; - shame += planar * ARC_PLANAR_COST; - shame += scale; - - LLViewerObject::const_child_list_t& child_list = getChildren(); - for (LLViewerObject::child_list_t::const_iterator iter = child_list.begin(); - iter != child_list.end(); - ++iter) + // multiply by per-face modifiers + if (planar) { - const LLViewerObject* child_objectp = *iter; - const LLDrawable* child_drawablep = child_objectp->mDrawable; - if (child_drawablep) - { - const LLVOVolume* child_volumep = child_drawablep->getVOVolume(); - if (child_volumep) - { - shame += child_volumep->getRenderCost(textures); - } - } + shame *= planar * ARC_PLANAR_COST; } - return shame; + if (animtex) + { + shame *= animtex * ARC_ANIM_TEX_COST; + } + if (alpha) + { + shame *= alpha * ARC_ALPHA_COST; + } + + if(invisi) + { + shame *= invisi * ARC_INVISI_COST; + } + + if (glow) + { + shame *= glow * ARC_GLOW_MULT; + } + + if (bump) + { + shame *= bump * ARC_BUMP_MULT; + } + + if (shiny) + { + shame *= shiny * ARC_SHINY_MULT; + } + + + // multiply shame by multipliers + if (weighted_mesh) + { + shame *= weighted_mesh * ARC_WEIGHTED_MESH; + } + + if (flexi) + { + shame *= flexi * ARC_FLEXI_MULT; + } + + + // add additional costs + if (particles) + { + const LLPartSysData *part_sys_data = &(mPartSourcep->mPartSysData); + const LLPartData *part_data = &(part_sys_data->mPartData); + U32 num_particles = (U32)(part_sys_data->mBurstPartCount * llceil( part_data->mMaxAge / part_sys_data->mBurstRate)); + num_particles = num_particles > ARC_PARTICLE_MAX ? ARC_PARTICLE_MAX : num_particles; + F32 part_size = (llmax(part_data->mStartScale[0], part_data->mEndScale[0]) + llmax(part_data->mStartScale[1], part_data->mEndScale[1])) / 2.f; + shame += num_particles * part_size * ARC_PARTICLE_COST; + } + + if (produces_light) + { + shame += ARC_LIGHT_COST; + } + + if (media_faces) + { + shame += media_faces * ARC_MEDIA_FACE_COST; + } + + if (shame > mRenderComplexity_current) + { + mRenderComplexity_current = (S32)shame; + } + + return (U32)shame; } -F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes) +F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes, F32* unscaled_value) const { F32 radius = getScale().length()*0.5f; @@ -3117,7 +3253,7 @@ F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes) { LLSD& header = gMeshRepo.getMeshHeader(getVolume()->getParams().getSculptID()); - return LLMeshRepository::getStreamingCost(header, radius, bytes, visible_bytes, mLOD); + return LLMeshRepository::getStreamingCost(header, radius, bytes, visible_bytes, mLOD, unscaled_value); } else { @@ -3131,11 +3267,18 @@ F32 LLVOVolume::getStreamingCost(S32* bytes, S32* visible_bytes) header["medium_lod"]["size"] = counts[2] * 10; header["high_lod"]["size"] = counts[3] * 10; - return LLMeshRepository::getStreamingCost(header, radius); + return LLMeshRepository::getStreamingCost(header, radius, NULL, NULL, -1, unscaled_value); } } -U32 LLVOVolume::getTriangleCount() +//static +void LLVOVolume::updateRenderComplexity() +{ + mRenderComplexity_last = mRenderComplexity_current; + mRenderComplexity_current = 0; +} + +U32 LLVOVolume::getTriangleCount() const { U32 count = 0; LLVolume* volume = getVolume(); @@ -3162,7 +3305,7 @@ U32 LLVOVolume::getHighLODTriangleCount() else if (isMesh()) { LLVolume* ref = LLPrimitive::getVolumeManager()->refVolume(volume->getParams(), 3); - if (ref->isTetrahedron() || ref->getNumVolumeFaces() == 0) + if (!ref->isMeshAssetLoaded() || ref->getNumVolumeFaces() == 0) { gMeshRepo.loadMesh(this, volume->getParams(), LLModel::LOD_HIGH); } @@ -3448,7 +3591,7 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e bool special_cursor = specialHoverCursor(); for (S32 i = start_face; i < end_face; ++i) { - if (!special_cursor && !pick_transparent && getTE(i)->getColor().mV[3] == 0.f) + if (!special_cursor && !pick_transparent && getTE(i) && getTE(i)->getColor().mV[3] == 0.f) { //don't attempt to pick completely transparent faces unless //pick_transparent is true continue; @@ -4011,7 +4154,8 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) LLVOVolume* vobj = drawablep->getVOVolume(); - if (vobj->getVolume() && vobj->getVolume()->isTetrahedron() || (vobj->isMesh() && !gMeshRepo.meshRezEnabled())) + if (vobj->isMesh() && + (vobj->getVolume() && !vobj->getVolume()->isMeshAssetLoaded() || !gMeshRepo.meshRezEnabled())) { continue; } @@ -4038,7 +4182,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group) } // - vobj->updateTextureVirtualSize(); + vobj->updateTextureVirtualSize(true); vobj->preRebuild(); drawablep->clearState(LLDrawable::HAS_ALPHA); @@ -4527,6 +4671,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: std::sort(faces.begin(), faces.end(), LLFace::CompareDistanceGreater()); } + bool hud_group = group->isHUDGroup() ; std::vector::iterator face_iter = faces.begin(); LLSpatialGroup::buffer_map_t buffer_map; @@ -4797,7 +4942,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: registerFace(group, facep, LLRenderPass::PASS_INVISI_SHINY); registerFace(group, facep, LLRenderPass::PASS_INVISIBLE); } - else if (LLPipeline::sRenderDeferred) + else if (LLPipeline::sRenderDeferred && !hud_group) { //deferred rendering if (te->getFullbright()) { //register in post deferred fullbright shiny pass @@ -4835,7 +4980,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: else if (fullbright || bake_sunlight) { //fullbright registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT); - if (LLPipeline::sRenderDeferred && LLPipeline::sRenderBump && te->getBumpmap()) + if (LLPipeline::sRenderDeferred && !hud_group && LLPipeline::sRenderBump && te->getBumpmap()) { //if this is the deferred render and a bump map is present, register in post deferred bump registerFace(group, facep, LLRenderPass::PASS_POST_BUMP); } @@ -4861,7 +5006,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std:: } //not sure why this is here, and looks like it might cause bump mapped objects to get rendered redundantly -- davep 5/11/2010 - if (!is_alpha && !LLPipeline::sRenderDeferred) + if (!is_alpha && (hud_group || !LLPipeline::sRenderDeferred)) { llassert((mask & LLVertexBuffer::MAP_NORMAL) || fullbright); facep->setPoolType((fullbright) ? LLDrawPool::POOL_FULLBRIGHT : LLDrawPool::POOL_SIMPLE); diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h index 56e607b6d0..87f1c8932f 100644 --- a/indra/newview/llvovolume.h +++ b/indra/newview/llvovolume.h @@ -129,9 +129,11 @@ public: const LLMatrix4& getRelativeXform() const { return mRelativeXform; } const LLMatrix3& getRelativeXformInvTrans() const { return mRelativeXformInvTrans; } /*virtual*/ const LLMatrix4 getRenderMatrix() const; - U32 getRenderCost(std::set &textures) const; - /*virtual*/ F32 getStreamingCost(S32* bytes = NULL, S32* visible_bytes = NULL); - /*virtual*/ U32 getTriangleCount(); + typedef std::map texture_cost_t; + U32 getRenderCost(texture_cost_t &textures) const; + /*virtual*/ F32 getStreamingCost(S32* bytes = NULL, S32* visible_bytes = NULL, F32* unscaled_value = NULL) const; + + /*virtual*/ U32 getTriangleCount() const; /*virtual*/ U32 getHighLODTriangleCount(); /*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face = -1, // which face to check, -1 = ALL_SIDES @@ -206,7 +208,7 @@ public: /*virtual*/ BOOL updateLOD(); void updateRadius(); /*virtual*/ void updateTextures(); - void updateTextureVirtualSize(); + void updateTextureVirtualSize(bool forced = false); void updateFaceFlags(); void regenFaces(); @@ -321,11 +323,19 @@ protected: LLFace* addFace(S32 face_index); void updateTEData(); + // stats tracking for render complexity + static S32 mRenderComplexity_last; + static S32 mRenderComplexity_current; + void requestMediaDataUpdate(bool isNew); void cleanUpMediaImpls(); void addMediaImpl(LLViewerMediaImpl* media_impl, S32 texture_index) ; void removeMediaImpl(S32 texture_index) ; public: + + static S32 getRenderComplexityMax() {return mRenderComplexity_last;} + static void updateRenderComplexity(); + LLViewerTextureAnim *mTextureAnimp; U8 mTexAnimMode; F32 mVolumeSurfaceArea; // ZK LBG @@ -361,8 +371,6 @@ public: static LLPointer sObjectMediaClient; static LLPointer sObjectMediaNavigateClient; - static const U32 ARC_TEXTURE_COST = 5; - protected: static S32 sNumLODChanges; diff --git a/indra/newview/llwindowlistener.cpp b/indra/newview/llwindowlistener.cpp new file mode 100644 index 0000000000..28f959eb71 --- /dev/null +++ b/indra/newview/llwindowlistener.cpp @@ -0,0 +1,505 @@ +/** + * @file llwindowlistener.cpp + * @brief EventAPI interface for injecting input into LLWindow + * + * $LicenseInfo:firstyear=2001&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2010, Linden Research, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + * + * This library 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 + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + * + * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA + * $/LicenseInfo$ + */ + +#include "llviewerprecompiledheaders.h" +#include "linden_common.h" + +#include "llwindowlistener.h" + +#include "llcoord.h" +#include "llfocusmgr.h" +#include "llkeyboard.h" +#include "llwindowcallbacks.h" +#include "llui.h" +#include "llview.h" +#include "llviewinject.h" +#include "llviewerwindow.h" +#include "llviewerkeyboard.h" +#include "llrootview.h" +#include "llsdutil.h" +#include "stringize.h" +#include +#include +#include +#include +#include + +namespace bll = boost::lambda; + +LLWindowListener::LLWindowListener(LLViewerWindow *window, const KeyboardGetter& kbgetter) + : LLEventAPI("LLWindow", "Inject input events into the LLWindow instance"), + mWindow(window), + mKbGetter(kbgetter) +{ + std::string keySomething = + "Given [\"keysym\"], [\"keycode\"] or [\"char\"], inject the specified "; + std::string keyExplain = + "(integer keycode values, or keysym string from any addKeyName() call in\n" + "http://hg.secondlife.com/viewer-development/src/tip/indra/llwindow/llkeyboard.cpp )\n"; + std::string mask = + "Specify optional [\"mask\"] as an array containing any of \"CTL\", \"ALT\",\n" + "\"SHIFT\" or \"MAC_CONTROL\"; the corresponding modifier bits will be combined\n" + "to form the mask used with the event."; + + std::string given = "Given "; + std::string mouseParams = + "optional [\"path\"], optional [\"x\"] and [\"y\"], inject the requested mouse "; + std::string buttonParams = + std::string("[\"button\"], ") + mouseParams; + std::string buttonExplain = + "(button values \"LEFT\", \"MIDDLE\", \"RIGHT\")\n"; + std::string paramsExplain = + "[\"path\"] is as for LLUI::resolvePath(), described in\n" + "http://hg.secondlife.com/viewer-development/src/tip/indra/llui/llui.h\n" + "If you omit [\"path\"], you must specify both [\"x\"] and [\"y\"].\n" + "If you specify [\"path\"] without both [\"x\"] and [\"y\"], will synthesize (x, y)\n" + "in the center of the LLView selected by [\"path\"].\n" + "You may specify [\"path\"] with both [\"x\"] and [\"y\"], will use your (x, y).\n" + "This may cause the LLView selected by [\"path\"] to reject the event.\n" + "Optional [\"reply\"] requests a reply event on the named LLEventPump.\n" + "reply[\"error\"] isUndefined (None) on success, else an explanatory message.\n"; + + add("getInfo", + "Get information about the ui element specified by [\"path\"]", + &LLWindowListener::getInfo, + LLSDMap("reply", LLSD())); + add("getPaths", + "Send on [\"reply\"] an event in which [\"paths\"] is an array of valid LLView\n" + "pathnames. Optional [\"under\"] pathname specifies the base node under which\n" + "to list; all nodes from root if no [\"under\"].", + &LLWindowListener::getPaths, + LLSDMap("reply", LLSD())); + add("keyDown", + keySomething + "keypress event.\n" + keyExplain + mask, + &LLWindowListener::keyDown); + add("keyUp", + keySomething + "key release event.\n" + keyExplain + mask, + &LLWindowListener::keyUp); + add("mouseDown", + given + buttonParams + "click event.\n" + buttonExplain + paramsExplain + mask, + &LLWindowListener::mouseDown); + add("mouseUp", + given + buttonParams + "release event.\n" + buttonExplain + paramsExplain + mask, + &LLWindowListener::mouseUp); + add("mouseMove", + given + mouseParams + "movement event.\n" + paramsExplain + mask, + &LLWindowListener::mouseMove); + add("mouseScroll", + "Given an integer number of [\"clicks\"], inject the requested mouse scroll event.\n" + "(positive clicks moves downward through typical content)", + &LLWindowListener::mouseScroll); +} + +template +class StringLookup +{ +private: + std::string mDesc; + typedef std::map Map; + Map mMap; + +public: + StringLookup(const std::string& desc): mDesc(desc) {} + + MAPPED lookup(const typename Map::key_type& key) const + { + typename Map::const_iterator found = mMap.find(key); + if (found == mMap.end()) + { + LL_WARNS("LLWindowListener") << "Unknown " << mDesc << " '" << key << "'" << LL_ENDL; + return MAPPED(); + } + return found->second; + } + +protected: + void add(const typename Map::key_type& key, const typename Map::mapped_type& value) + { + mMap.insert(typename Map::value_type(key, value)); + } +}; + +namespace { + +// helper for getMask() +MASK lookupMask_(const std::string& maskname) +{ + // It's unclear to me whether MASK_MAC_CONTROL is important, but it's not + // supported by maskFromString(). Handle that specially. + if (maskname == "MAC_CONTROL") + { + return MASK_MAC_CONTROL; + } + else + { + // In case of lookup failure, return MASK_NONE, which won't affect our + // caller's OR. + MASK mask(MASK_NONE); + LLKeyboard::maskFromString(maskname, &mask); + return mask; + } +} + +MASK getMask(const LLSD& event) +{ + LLSD masknames(event["mask"]); + if (! masknames.isArray()) + { + // If event["mask"] is a single string, perform normal lookup on it. + return lookupMask_(masknames); + } + + // Here event["mask"] is an array of mask-name strings. OR together their + // corresponding bits. + MASK mask(MASK_NONE); + for (LLSD::array_const_iterator ai(masknames.beginArray()), aend(masknames.endArray()); + ai != aend; ++ai) + { + mask |= lookupMask_(*ai); + } + return mask; +} + +KEY getKEY(const LLSD& event) +{ + if (event.has("keysym")) + { + // Initialize to KEY_NONE; that way we can ignore the bool return from + // keyFromString() and, in the lookup-fail case, simply return KEY_NONE. + KEY key(KEY_NONE); + LLKeyboard::keyFromString(event["keysym"], &key); + return key; + } + else if (event.has("keycode")) + { + return KEY(event["keycode"].asInteger()); + } + else + { + return KEY(event["char"].asString()[0]); + } +} + +} // namespace + +void LLWindowListener::getInfo(LLSD const & evt) +{ + Response response(LLSD(), evt); + + if (evt.has("path")) + { + std::string path(evt["path"]); + LLView * target_view = LLUI::resolvePath(LLUI::getRootView(), path); + if (target_view != 0) + { + response.setResponse(target_view->getInfo()); + } + else + { + response.error(STRINGIZE(evt["op"].asString() << " request " + "specified invalid \"path\": '" << path << "'")); + } + } + else + { + response.error( + STRINGIZE(evt["op"].asString() << "request did not provide a path" )); + } +} + +void LLWindowListener::getPaths(LLSD const & request) +{ + Response response(LLSD(), request); + LLView *root(LLUI::getRootView()), *base(NULL); + // Capturing request["under"] as string means we conflate the case in + // which there is no ["under"] key with the case in which its value is the + // empty string. That seems to make sense to me. + std::string under(request["under"]); + + // Deal with optional "under" parameter + if (under.empty()) + { + base = root; + } + else + { + base = LLUI::resolvePath(root, under); + if (! base) + { + return response.error(STRINGIZE(request["op"].asString() << " request " + "specified invalid \"under\" path: '" << under << "'")); + } + } + + // Traverse the entire subtree under 'base', collecting pathnames + for (LLView::tree_iterator_t ti(base->beginTreeDFS()), tend(base->endTreeDFS()); + ti != tend; ++ti) + { + response["paths"].append((*ti)->getPathname()); + } +} + +void LLWindowListener::keyDown(LLSD const & evt) +{ + Response response(LLSD(), evt); + + if (evt.has("path")) + { + std::string path(evt["path"]); + LLView * target_view = LLUI::resolvePath(LLUI::getRootView(), path); + if (target_view == 0) + { + response.error(STRINGIZE(evt["op"].asString() << " request " + "specified invalid \"path\": '" << path << "'")); + } + else if(target_view->isAvailable()) + { + response.setResponse(target_view->getInfo()); + + gFocusMgr.setKeyboardFocus(target_view); + KEY key = getKEY(evt); + MASK mask = getMask(evt); + gViewerKeyboard.handleKey(key, mask, false); + if(key < 0x80) mWindow->handleUnicodeChar(key, mask); + } + else + { + response.error(STRINGIZE(evt["op"].asString() << " request " + "element specified by \"path\": '" << path << "'" + << " is not visible")); + } + } + else + { + mKbGetter()->handleTranslatedKeyDown(getKEY(evt), getMask(evt)); + } +} + +void LLWindowListener::keyUp(LLSD const & evt) +{ + Response response(LLSD(), evt); + + if (evt.has("path")) + { + std::string path(evt["path"]); + LLView * target_view = LLUI::resolvePath(LLUI::getRootView(), path); + if (target_view == 0 ) + { + response.error(STRINGIZE(evt["op"].asString() << " request " + "specified invalid \"path\": '" << path << "'")); + } + else if (target_view->isAvailable()) + { + response.setResponse(target_view->getInfo()); + + gFocusMgr.setKeyboardFocus(target_view); + mKbGetter()->handleTranslatedKeyUp(getKEY(evt), getMask(evt)); + } + else + { + response.error(STRINGIZE(evt["op"].asString() << " request " + "element specified byt \"path\": '" << path << "'" + << " is not visible")); + } + } + else + { + mKbGetter()->handleTranslatedKeyUp(getKEY(evt), getMask(evt)); + } +} + +// for WhichButton +typedef BOOL (LLWindowCallbacks::*MouseMethod)(LLWindow *, LLCoordGL, MASK); +struct Actions +{ + Actions(const MouseMethod& d, const MouseMethod& u): down(d), up(u), valid(true) {} + Actions(): valid(false) {} + MouseMethod down, up; + bool valid; +}; + +struct WhichButton: public StringLookup +{ + WhichButton(): StringLookup("mouse button") + { + add("LEFT", Actions(&LLWindowCallbacks::handleMouseDown, + &LLWindowCallbacks::handleMouseUp)); + add("RIGHT", Actions(&LLWindowCallbacks::handleRightMouseDown, + &LLWindowCallbacks::handleRightMouseUp)); + add("MIDDLE", Actions(&LLWindowCallbacks::handleMiddleMouseDown, + &LLWindowCallbacks::handleMiddleMouseUp)); + } +}; +static WhichButton buttons; + +typedef boost::function MouseFunc; + +static void mouseEvent(const MouseFunc& func, const LLSD& request) +{ + // Ensure we send response + LLEventAPI::Response response(LLSD(), request); + // We haven't yet established whether the incoming request has "x" and "y", + // but capture this anyway, with 0 for omitted values. + LLCoordGL pos(request["x"].asInteger(), request["y"].asInteger()); + bool has_pos(request.has("x") && request.has("y")); + + boost::scoped_ptr tempfunc; + + // Documentation for mouseDown(), mouseUp() and mouseMove() claims you + // must either specify ["path"], or both of ["x"] and ["y"]. You MAY + // specify all. Let's say that passing "path" as an empty string is + // equivalent to not passing it at all. + std::string path(request["path"]); + if (path.empty()) + { + // Without "path", you must specify both "x" and "y". + if (! has_pos) + { + return response.error(STRINGIZE(request["op"].asString() << " request " + "without \"path\" must specify both \"x\" and \"y\": " + << request)); + } + } + else // ! path.empty() + { + LLView* root = LLUI::getRootView(); + LLView* target = LLUI::resolvePath(root, path); + if (! target) + { + return response.error(STRINGIZE(request["op"].asString() << " request " + "specified invalid \"path\": '" << path << "'")); + } + + response.setResponse(target->getInfo()); + + // The intent of this test is to prevent trying to drill down to a + // widget in a hidden floater, or on a tab that's not current, etc. + if (! target->isInVisibleChain()) + { + return response.error(STRINGIZE(request["op"].asString() << " request " + "specified \"path\" not currently visible: '" + << path << "'")); + } + + // This test isn't folded in with the above error case since you can + // (e.g.) pop up a tooltip even for a disabled widget. + if (! target->isInEnabledChain()) + { + response.warn(STRINGIZE(request["op"].asString() << " request " + "specified \"path\" not currently enabled: '" + << path << "'")); + } + + if (! has_pos) + { + LLRect rect(target->calcScreenRect()); + pos.set(rect.getCenterX(), rect.getCenterY()); + // nonstandard warning tactic: probably usual case; we want event + // sender to know synthesized (x, y), but maybe don't need to log? + response["warnings"].append(STRINGIZE("using center point (" + << pos.mX << ", " << pos.mY << ")")); + } + +/*==========================================================================*| + // NEVER MIND: the LLView tree defines priority handler layers in + // front of the normal widget set, so this has never yet produced + // anything but spam warnings. (sigh) + + // recursive childFromPoint() should give us the frontmost, leafmost + // widget at the specified (x, y). + LLView* frontmost = root->childFromPoint(pos.mX, pos.mY, true); + if (frontmost != target) + { + response.warn(STRINGIZE(request["op"].asString() << " request " + "specified \"path\" = '" << path + << "', but frontmost LLView at (" << pos.mX << ", " << pos.mY + << ") is '" << LLView::getPathname(frontmost) << "'")); + } +|*==========================================================================*/ + + // Instantiate a TemporaryDrilldownFunc to route incoming mouse events + // to the target LLView*. But put it on the heap since "path" is + // optional. Nonetheless, manage it with a boost::scoped_ptr so it + // will be destroyed when we leave. + tempfunc.reset(new LLView::TemporaryDrilldownFunc(llview::TargetEvent(target))); + } + + // The question of whether the requested LLView actually handled the + // specified event is important enough, and its handling unclear enough, + // to warrant a separate response attribute. Instead of deciding here to + // make it a warning, or an error, let caller decide. + response["handled"] = func(pos, getMask(request)); + + // On exiting this scope, response will send, tempfunc will restore the + // normal pointInView(x, y) containment logic, etc. +} + +void LLWindowListener::mouseDown(LLSD const & request) +{ + Actions actions(buttons.lookup(request["button"])); + if (actions.valid) + { + // Normally you can pass NULL to an LLWindow* without compiler + // complaint, but going through boost::lambda::bind() evidently + // bypasses that special case: it only knows you're trying to pass an + // int to a pointer. Explicitly cast NULL to the desired pointer type. + mouseEvent(bll::bind(actions.down, mWindow, + static_cast(NULL), bll::_1, bll::_2), + request); + } +} + +void LLWindowListener::mouseUp(LLSD const & request) +{ + Actions actions(buttons.lookup(request["button"])); + if (actions.valid) + { + mouseEvent(bll::bind(actions.up, mWindow, + static_cast(NULL), bll::_1, bll::_2), + request); + } +} + +void LLWindowListener::mouseMove(LLSD const & request) +{ + // We want to call the same central mouseEvent() routine for + // handleMouseMove() as for button clicks. But handleMouseMove() returns + // void, whereas mouseEvent() accepts a function returning bool -- and + // uses that bool return. Use (void-lambda-expression, true) to construct + // a callable that returns bool anyway. Pass 'true' because we expect that + // our caller will usually treat 'false' as a problem. + mouseEvent((bll::bind(&LLWindowCallbacks::handleMouseMove, mWindow, + static_cast(NULL), bll::_1, bll::_2), + true), + request); +} + +void LLWindowListener::mouseScroll(LLSD const & request) +{ + S32 clicks = request["clicks"].asInteger(); + + mWindow->handleScrollWheel(NULL, clicks); +} diff --git a/indra/llwindow/llwindowlistener.h b/indra/newview/llwindowlistener.h similarity index 89% rename from indra/llwindow/llwindowlistener.h rename to indra/newview/llwindowlistener.h index 74e577ff93..7af5ab3b9f 100644 --- a/indra/llwindow/llwindowlistener.h +++ b/indra/newview/llwindowlistener.h @@ -31,14 +31,16 @@ #include class LLKeyboard; -class LLWindowCallbacks; +class LLViewerWindow; class LLWindowListener : public LLEventAPI { public: typedef boost::function KeyboardGetter; - LLWindowListener(LLWindowCallbacks * window, const KeyboardGetter& kbgetter); + LLWindowListener(LLViewerWindow * window, const KeyboardGetter& kbgetter); + void getInfo(LLSD const & evt); + void getPaths(LLSD const & evt); void keyDown(LLSD const & evt); void keyUp(LLSD const & evt); void mouseDown(LLSD const & evt); @@ -47,7 +49,7 @@ public: void mouseScroll(LLSD const & evt); private: - LLWindowCallbacks * mWindow; + LLViewerWindow * mWindow; KeyboardGetter mKbGetter; }; diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp index 6b771f6366..fa3959ad75 100644 --- a/indra/newview/llworld.cpp +++ b/indra/newview/llworld.cpp @@ -127,6 +127,12 @@ void LLWorld::destroyClass() LLVOCache::getInstance()->destroyClass() ; } LLViewerPartSim::getInstance()->destroyClass(); + + mDefaultWaterTexturep = NULL ; + for (S32 i = 0; i < 8; i++) + { + mEdgeWaterObjects[i] = NULL; + } } // void LLWorld::refreshLimits() diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 43489d67d1..726c7305c9 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -110,10 +110,8 @@ #include "rlvlocks.h" // [/RLVa:KB] #include "llcurl.h" -// [RLVa:KB] - Checked: 2011-05-22 (RLVa-1.3.1a) -#include "rlvhandler.h" -#include "rlvlocks.h" -// [/RLVa:KB] +#include "llnotifications.h" + void check_stack_depth(S32 stack_depth) { @@ -327,6 +325,7 @@ BOOL LLPipeline::sRenderFrameTest = FALSE; BOOL LLPipeline::sRenderAttachedLights = TRUE; BOOL LLPipeline::sRenderAttachedParticles = TRUE; BOOL LLPipeline::sRenderDeferred = FALSE; +BOOL LLPipeline::sMemAllocationThrottled = FALSE; S32 LLPipeline::sVisibleLightCount = 0; F32 LLPipeline::sMinRenderSize = 0.f; F32 LLPipeline::sVolumeSAFrame = 0.f; // ZK LBG @@ -581,6 +580,24 @@ void LLPipeline::destroyGL() static LLFastTimer::DeclareTimer FTM_RESIZE_SCREEN_TEXTURE("Resize Screen Texture"); +//static +void LLPipeline::throttleNewMemoryAllocation(BOOL disable) +{ + if(sMemAllocationThrottled != disable) + { + sMemAllocationThrottled = disable ; + + if(sMemAllocationThrottled) + { + //send out notification + LLNotification::Params params("LowMemory"); + LLNotifications::instance().add(params); + + //release some memory. + } + } +} + void LLPipeline::resizeScreenTexture() { LLFastTimer ft(FTM_RESIZE_SCREEN_TEXTURE); diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 88cffa8fdc..bbd8b87717 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -362,6 +362,8 @@ public: static void updateRenderDeferred(); static void refreshRenderDeferred(); + static void throttleNewMemoryAllocation(BOOL disable); + void addDebugBlip(const LLVector3& position, const LLColor4& color); private: @@ -459,6 +461,7 @@ public: RENDER_DEBUG_PHYSICS_SHAPES = 0x1000000, RENDER_DEBUG_NORMALS = 0x2000000, RENDER_DEBUG_LOD_INFO = 0x4000000, + RENDER_DEBUG_RENDER_COMPLEXITY = 0x8000000 }; public: @@ -517,9 +520,10 @@ public: static BOOL sRenderAttachedLights; static BOOL sRenderAttachedParticles; static BOOL sRenderDeferred; + static BOOL sMemAllocationThrottled; static S32 sVisibleLightCount; static F32 sMinRenderSize; - static F32 sVolumeSAFrame; + static F32 sVolumeSAFrame; //screen texture U32 mScreenWidth; diff --git a/indra/newview/res-sdl/firestorm_icon.BMP b/indra/newview/res-sdl/firestorm_icon.BMP new file mode 100644 index 0000000000..066b6244b0 Binary files /dev/null and b/indra/newview/res-sdl/firestorm_icon.BMP differ diff --git a/indra/newview/res-sdl/ll_icon.BMP b/indra/newview/res-sdl/ll_icon.BMP deleted file mode 100644 index 6f9366df41..0000000000 Binary files a/indra/newview/res-sdl/ll_icon.BMP and /dev/null differ diff --git a/indra/newview/res/ll_icon.BMP b/indra/newview/res/ll_icon.BMP deleted file mode 100644 index 3a9964cd95..0000000000 Binary files a/indra/newview/res/ll_icon.BMP and /dev/null differ diff --git a/indra/newview/res/ll_icon.ico b/indra/newview/res/ll_icon.ico deleted file mode 100644 index 87985b9285..0000000000 Binary files a/indra/newview/res/ll_icon.ico and /dev/null differ diff --git a/indra/newview/res/ll_icon.png b/indra/newview/res/ll_icon.png deleted file mode 100644 index ae573b3874..0000000000 Binary files a/indra/newview/res/ll_icon.png and /dev/null differ diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml index 1dde870649..d447fe23a1 100644 --- a/indra/newview/skins/default/colors.xml +++ b/indra/newview/skins/default/colors.xml @@ -58,9 +58,15 @@ + + @@ -123,6 +129,9 @@ name="LtYellow" value="1 1 .79 1" /> + @@ -436,7 +445,7 @@ value="0 0 0 1" /> + reference="Gray" /> @@ -658,6 +667,9 @@ + @@ -666,7 +678,7 @@ reference="EmphasisColor" /> + reference="White_25" /> @@ -750,6 +762,9 @@ + diff --git a/indra/newview/skins/default/textures/green_checkmark.png b/indra/newview/skins/default/textures/green_checkmark.png new file mode 100644 index 0000000000..d2a5b348dc Binary files /dev/null and b/indra/newview/skins/default/textures/green_checkmark.png differ diff --git a/indra/newview/skins/default/textures/red_x.png b/indra/newview/skins/default/textures/red_x.png new file mode 100644 index 0000000000..a61202f09b Binary files /dev/null and b/indra/newview/skins/default/textures/red_x.png differ diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml index 5dfc6470a3..3854e20bcb 100644 --- a/indra/newview/skins/default/textures/textures.xml +++ b/indra/newview/skins/default/textures/textures.xml @@ -72,6 +72,10 @@ with the same filename but different name + + + + @@ -319,10 +323,10 @@ with the same filename but different name - + - - + + diff --git a/indra/newview/skins/default/textures/widgets/Badge_Background_New.png b/indra/newview/skins/default/textures/widgets/Badge_Background_New.png deleted file mode 100644 index 9f114f2e4a..0000000000 Binary files a/indra/newview/skins/default/textures/widgets/Badge_Background_New.png and /dev/null differ diff --git a/indra/newview/skins/default/textures/widgets/Error_Tag_Background.png b/indra/newview/skins/default/textures/widgets/Error_Tag_Background.png new file mode 100644 index 0000000000..c8dbc8e87a Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/Error_Tag_Background.png differ diff --git a/indra/newview/skins/default/textures/widgets/New_Tag_Background.png b/indra/newview/skins/default/textures/widgets/New_Tag_Background.png new file mode 100644 index 0000000000..cd639dd80f Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/New_Tag_Background.png differ diff --git a/indra/newview/skins/default/textures/widgets/New_Tag_Border.png b/indra/newview/skins/default/textures/widgets/New_Tag_Border.png new file mode 100644 index 0000000000..56df0d0127 Binary files /dev/null and b/indra/newview/skins/default/textures/widgets/New_Tag_Border.png differ diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml index ca7587f60a..69b9764b04 100644 --- a/indra/newview/skins/default/xui/da/menu_viewer.xml +++ b/indra/newview/skins/default/xui/da/menu_viewer.xml @@ -140,7 +140,6 @@ - diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml index 252df4a911..4e2fa3e5f2 100644 --- a/indra/newview/skins/default/xui/da/notifications.xml +++ b/indra/newview/skins/default/xui/da/notifications.xml @@ -1335,7 +1335,7 @@ Prøv igen om lidt. Et object med navnet <nolink>[OBJECTFROMNAME]</nolink> ejet af [NAME_SLURL] har givet dig denne [OBJECTTYPE]: -[ITEM_SLURL] +<nolink>[ITEM_SLURL]</nolink>
diff --git a/indra/newview/skins/default/xui/de/menu_media_ctrl.xml b/indra/newview/skins/default/xui/de/menu_media_ctrl.xml index 781796670a..59c1c2ee86 100644 --- a/indra/newview/skins/default/xui/de/menu_media_ctrl.xml +++ b/indra/newview/skins/default/xui/de/menu_media_ctrl.xml @@ -3,4 +3,5 @@ + diff --git a/indra/newview/skins/default/xui/de/menu_mode_change.xml b/indra/newview/skins/default/xui/de/menu_mode_change.xml new file mode 100644 index 0000000000..b8090018b7 --- /dev/null +++ b/indra/newview/skins/default/xui/de/menu_mode_change.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml index 6c47f9b322..c9526ab570 100644 --- a/indra/newview/skins/default/xui/de/menu_viewer.xml +++ b/indra/newview/skins/default/xui/de/menu_viewer.xml @@ -165,7 +165,6 @@ - @@ -219,8 +218,7 @@ - - + @@ -338,6 +336,7 @@ + diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml index 2b569b820c..9a00608528 100644 --- a/indra/newview/skins/default/xui/de/notifications.xml +++ b/indra/newview/skins/default/xui/de/notifications.xml @@ -85,6 +85,19 @@ Stellen Sie sicher, dass Ihre Internetverbindung funktioniert. Änderung an aktueller Kleidung/Körperteil speichern? + + Ihnen fehlt die Berechtigung zum Kopieren dieses Artikels in die Händler-Outbox. Möchten Sie wirklich den folgenden Artikel verschieben? + [ITEM_NAME] + + + + Marktplatz-Upload abgeschlossen. + + + + Marktplatz-Upload mit Fehlern abgeschlossen. Korrigieren Sie die Fehler in Ihrer Outbox und versuchen Sie es erneut. Vielen Dank! + + Der Text für ein Skript konnte aus folgendem Grund nicht hochgeladen werden: [REASON]. Bitte versuchen Sie es erneut. @@ -2072,13 +2085,14 @@ Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dies - Sie müssen altersüberprüft sein, um diesen Bereich betreten zu können. Möchten Sie auf der [CURRENT_GRID]-Webseite Ihr Alter verifizieren lassen? + Um auf Adult-Inhalte und –Bereiche in [CURRENT_GRID] zuzugreifen, müssen Sie mindestens 18 Jahre alt sein. Bitte besuchen Sie die Altersüberprüfungsseite, um zu bestätigen, dass Sie mindestens 18 Jahre alt sind. +Hierzu wird Ihr Webbrowser geöffnet. [_URL] - https://secondlife.com/account/verification.php?lang=de + https://secondlife.com/my/account/verification.php - + Um diesen Bereich besuchen zu können, müssen Ihre Zahlungsinformationen gespeichert sein. Möchten Sie diese Einstellung auf der [CURRENT_GRID]-Webseite einrichten? @@ -2431,11 +2445,19 @@ Versuchen Sie es in einigen Minuten erneut. Ein Objekt namens <nolink>[OBJECTFROMNAME]</nolink>, das [NAME_SLURL] gehört, hat Ihnen folgende/n/s [OBJECTTYPE] übergeben: -[ITEM_SLURL] +<nolink>[ITEM_SLURL]</nolink> - diff --git a/indra/newview/skins/default/xui/en/panel_profile.xml b/indra/newview/skins/default/xui/en/panel_profile.xml index 5bf98f16cd..4d424f2afb 100644 --- a/indra/newview/skins/default/xui/en/panel_profile.xml +++ b/indra/newview/skins/default/xui/en/panel_profile.xml @@ -219,7 +219,7 @@ initial_value="(retrieving)" layout="topleft" left="0" - link="true" + parse_urls="true" name="partner_text" top="0" use_ellipses="true" diff --git a/indra/newview/skins/default/xui/en/panel_region_covenant.xml b/indra/newview/skins/default/xui/en/panel_region_covenant.xml index 8f3c1208f6..3fea010d11 100644 --- a/indra/newview/skins/default/xui/en/panel_region_covenant.xml +++ b/indra/newview/skins/default/xui/en/panel_region_covenant.xml @@ -112,8 +112,8 @@ left="10" max_length="65535" name="covenant_editor" - top_delta="30" - width="470" + top_delta="20" + width="460" word_wrap="true"> There is no Covenant provided for this Estate. diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml index 40a8d49ee5..09ca426e47 100644 --- a/indra/newview/skins/default/xui/en/panel_region_debug.xml +++ b/indra/newview/skins/default/xui/en/panel_region_debug.xml @@ -65,18 +65,18 @@ height="20" label="Apply" layout="topleft" - left="60" + left="20" name="apply_btn" top="100" width="100" /> - Object Return @@ -87,7 +87,7 @@ layout="topleft" left="30" name="resident_text_lbl" - top="175" + top_pad="5" width="60"> Resident: @@ -121,7 +121,7 @@ layout="topleft" left="30" name="options_text_lbl" - top="198" + top_pad="5" width="60"> Options: @@ -159,7 +159,7 @@ layout="topleft" left="20" name="return_btn" - top="263" + top_pad="5" width="80" /> diff --git a/indra/newview/skins/default/xui/en/widgets/color_swatch.xml b/indra/newview/skins/default/xui/en/widgets/color_swatch.xml index 48b987d7e8..ab3de1eaab 100644 --- a/indra/newview/skins/default/xui/en/widgets/color_swatch.xml +++ b/indra/newview/skins/default/xui/en/widgets/color_swatch.xml @@ -1,7 +1,7 @@ + name="colorswatch"> diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml index 95f5cf2ecd..77d8024cb2 100644 --- a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml +++ b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml @@ -10,10 +10,12 @@ label="New" label_offset_horiz="-1" location="right" - padding_horiz="4" - padding_vert="1" - location_percent_hcenter="70" - border_image="" - image="Badge_Background_New" + padding_horiz="12.5" + padding_vert="2" + location_offset_hcenter="-23" + border_image="New_Tag_Border" + border_color="DkGray2" + image="New_Tag_Background" + image_color="Black" /> diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml b/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml index 00f4c43915..eaf148c5e4 100644 --- a/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml +++ b/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml @@ -4,11 +4,12 @@ background_visible="true" background_opaque="true" show_load_status="true" + accepts_drag_and_drop="true" > + name="Inventory Scroller" + follows="all" + reserve_scroll_corner="true" + tab_stop="true" + /> diff --git a/indra/newview/skins/default/xui/en/widgets/layout_stack.xml b/indra/newview/skins/default/xui/en/widgets/layout_stack.xml new file mode 100644 index 0000000000..48bcb46533 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/layout_stack.xml @@ -0,0 +1,4 @@ + + + + diff --git a/indra/newview/skins/default/xui/en/widgets/menu.xml b/indra/newview/skins/default/xui/en/widgets/menu.xml index 58543338f6..13ac84beb2 100644 --- a/indra/newview/skins/default/xui/en/widgets/menu.xml +++ b/indra/newview/skins/default/xui/en/widgets/menu.xml @@ -1,5 +1,6 @@ - + diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item_separator.xml b/indra/newview/skins/default/xui/en/widgets/menu_item_separator.xml index e5cea476da..7452d685eb 100644 --- a/indra/newview/skins/default/xui/en/widgets/menu_item_separator.xml +++ b/indra/newview/skins/default/xui/en/widgets/menu_item_separator.xml @@ -1,6 +1,8 @@ + name="separator" + disabled_color="MenuItemDisabledColor" + highlight_bg_color="MenuItemHighlightBgColor" + highlight_fg_color="MenuItemHighlightFgColor" + label="-----------"> diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item_tear_off.xml b/indra/newview/skins/default/xui/en/widgets/menu_item_tear_off.xml index 185ed6ee3e..72af3924c1 100644 --- a/indra/newview/skins/default/xui/en/widgets/menu_item_tear_off.xml +++ b/indra/newview/skins/default/xui/en/widgets/menu_item_tear_off.xml @@ -1,7 +1,8 @@  - + name="tear_off" + label = "~~~~~~~~~~~" + disabled_color="MenuItemDisabledColor" + highlight_bg_color="MenuItemHighlightBgColor" + highlight_fg_color="MenuItemHighlightFgColor"/> diff --git a/indra/newview/skins/default/xui/en/widgets/multi_slider.xml b/indra/newview/skins/default/xui/en/widgets/multi_slider.xml index e0900b48f3..90b0625982 100644 --- a/indra/newview/skins/default/xui/en/widgets/multi_slider.xml +++ b/indra/newview/skins/default/xui/en/widgets/multi_slider.xml @@ -1,6 +1,7 @@ + mouse_opaque="true" + text_disabled_color="LabelDisabledColor" + draw_track="true" + use_triangle="false" + font="SansSerifSmall"/> diff --git a/indra/newview/skins/default/xui/en/widgets/multi_slider_bar.xml b/indra/newview/skins/default/xui/en/widgets/multi_slider_bar.xml index 04a2cd635c..bbcb008df4 100644 --- a/indra/newview/skins/default/xui/en/widgets/multi_slider_bar.xml +++ b/indra/newview/skins/default/xui/en/widgets/multi_slider_bar.xml @@ -1,5 +1,6 @@ - + thumb_width="8" + mouse_opaque="true" + follows="left|top"/> diff --git a/indra/newview/skins/default/xui/en/widgets/name_list.xml b/indra/newview/skins/default/xui/en/widgets/name_list.xml new file mode 100644 index 0000000000..3ae0f68227 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/name_list.xml @@ -0,0 +1,3 @@ + + diff --git a/indra/newview/skins/default/xui/en/widgets/outbox_folder_view_folder.xml b/indra/newview/skins/default/xui/en/widgets/outbox_folder_view_folder.xml new file mode 100644 index 0000000000..0792996107 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/outbox_folder_view_folder.xml @@ -0,0 +1,19 @@ + + + + diff --git a/indra/newview/skins/default/xui/en/widgets/outbox_inventory_panel.xml b/indra/newview/skins/default/xui/en/widgets/outbox_inventory_panel.xml new file mode 100644 index 0000000000..e3f2072819 --- /dev/null +++ b/indra/newview/skins/default/xui/en/widgets/outbox_inventory_panel.xml @@ -0,0 +1,2 @@ + + diff --git a/indra/newview/skins/default/xui/en/widgets/panel.xml b/indra/newview/skins/default/xui/en/widgets/panel.xml index 6053183880..1d10c57fb9 100644 --- a/indra/newview/skins/default/xui/en/widgets/panel.xml +++ b/indra/newview/skins/default/xui/en/widgets/panel.xml @@ -4,7 +4,8 @@ bg_opaque_image - image name for "in-front" panel look bg_alpha_image - image name for "in-back" or transparent panel look --> - - diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml index e6d4bff8b5..682dcf40d8 100644 --- a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml +++ b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml @@ -5,7 +5,8 @@ track_image_horizontal ="ScrollTrack_Horiz" track_color="ScrollbarTrackColor" thumb_color="ScrollbarThumbColor" - thickness="15"> + thickness="15" + tab_stop="false"> - diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_container.xml b/indra/newview/skins/default/xui/en/widgets/scroll_container.xml index 86356ff563..a6d096a964 100644 --- a/indra/newview/skins/default/xui/en/widgets/scroll_container.xml +++ b/indra/newview/skins/default/xui/en/widgets/scroll_container.xml @@ -1,5 +1,8 @@ - + max_auto_scroll_rate="500" + tab_stop="false" + mouse_opaque="true" /> diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_list.xml b/indra/newview/skins/default/xui/en/widgets/scroll_list.xml index dd93675807..e43989c6c7 100644 --- a/indra/newview/skins/default/xui/en/widgets/scroll_list.xml +++ b/indra/newview/skins/default/xui/en/widgets/scroll_list.xml @@ -1,5 +1,6 @@ - + \ No newline at end of file diff --git a/indra/newview/skins/default/xui/en/widgets/search_editor.xml b/indra/newview/skins/default/xui/en/widgets/search_editor.xml index 32e443a058..faa0404b35 100644 --- a/indra/newview/skins/default/xui/en/widgets/search_editor.xml +++ b/indra/newview/skins/default/xui/en/widgets/search_editor.xml @@ -1,5 +1,6 @@ - - diff --git a/indra/newview/skins/default/xui/en/widgets/texture_picker.xml b/indra/newview/skins/default/xui/en/widgets/texture_picker.xml index 757f0f49d1..ba2fdf4f1f 100644 --- a/indra/newview/skins/default/xui/en/widgets/texture_picker.xml +++ b/indra/newview/skins/default/xui/en/widgets/texture_picker.xml @@ -1,5 +1,9 @@ - + - + bevel_style="out" + mouse_opaque="false" + follows="all" /> diff --git a/indra/newview/skins/default/xui/en/widgets/web_browser.xml b/indra/newview/skins/default/xui/en/widgets/web_browser.xml index 118d63bbf0..676fafd828 100644 --- a/indra/newview/skins/default/xui/en/widgets/web_browser.xml +++ b/indra/newview/skins/default/xui/en/widgets/web_browser.xml @@ -1,2 +1,4 @@ - + diff --git a/indra/newview/skins/default/xui/es/floater_build_options.xml b/indra/newview/skins/default/xui/es/floater_build_options.xml index b886d7b0b8..aabb199d5c 100644 --- a/indra/newview/skins/default/xui/es/floater_build_options.xml +++ b/indra/newview/skins/default/xui/es/floater_build_options.xml @@ -5,6 +5,29 @@ + + Pantalla + + + Local + + + Mundo + + + Referencia + + + Adjunto + + + Modo + + + + + + Opacidad: diff --git a/indra/newview/skins/default/xui/es/floater_model_preview.xml b/indra/newview/skins/default/xui/es/floater_model_preview.xml index 0af44e1d91..36f988b25f 100644 --- a/indra/newview/skins/default/xui/es/floater_model_preview.xml +++ b/indra/newview/skins/default/xui/es/floater_model_preview.xml @@ -60,6 +60,9 @@ Simplificando... + + TBD + Nombre: @@ -80,23 +83,26 @@ Nivel de detalle: Mínimo - - - Coste de recursos: [COSTE] - - - Coste físico: [COSTE] - - - Cuota de carga: N/A - - - - [ESTADO] + + ATENCIÓN: + + + No podrás terminar de subir este modelo a los servidores de Second Life. [[VURL] Averigua cómo] puedes obtener autorización para subir modelos de malla. + + + Descargar: +Física: +Servidor: + +Equiv. en prims: + + + [ST] +[PH] +[SIM] + +[EQ] - diff --git a/indra/newview/skins/default/xui/es/menu_media_ctrl.xml b/indra/newview/skins/default/xui/es/menu_media_ctrl.xml index 8ea9286d8e..b4dfe9907a 100644 --- a/indra/newview/skins/default/xui/es/menu_media_ctrl.xml +++ b/indra/newview/skins/default/xui/es/menu_media_ctrl.xml @@ -3,4 +3,5 @@ + diff --git a/indra/newview/skins/default/xui/es/menu_mode_change.xml b/indra/newview/skins/default/xui/es/menu_mode_change.xml new file mode 100644 index 0000000000..608505d192 --- /dev/null +++ b/indra/newview/skins/default/xui/es/menu_mode_change.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml index d5b21f3de6..12b96e8331 100644 --- a/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml +++ b/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml @@ -1,5 +1,5 @@ - + diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml index 4b42b79c28..60dcd81a10 100644 --- a/indra/newview/skins/default/xui/es/menu_viewer.xml +++ b/indra/newview/skins/default/xui/es/menu_viewer.xml @@ -210,8 +210,7 @@ - - + @@ -306,9 +305,9 @@ - + diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml index 85c5561f0b..33bbea6e60 100644 --- a/indra/newview/skins/default/xui/es/notifications.xml +++ b/indra/newview/skins/default/xui/es/notifications.xml @@ -85,6 +85,19 @@ Asegúrate de que tu conexión a Internet está funcionando adecuadamente. ¿Guardar los cambios en las ropas o partes del cuerpo actuales? + + No tienes permiso para copiar este objeto en el Buzón de salida de comerciante. ¿Estás seguro de que quieres mover el objeto siguiente? + [ITEM_NAME] + + + + Envío al mercado finalizado. + + + + El envío al mercado ha tenido errores. Corrige los problemas de tu buzón de salida y repite la operación. Muchas gracias. + + Hubo un problema al subir el texto de un script por la siguiente razón: [REASON]. Por favor, inténtalo más tarde. @@ -2066,13 +2079,14 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p - Debes haber verificado tu edad para visitar este sitio. ¿Quieres ir al sitio web de [CURRENT_GRID] y verificarla? + Para acceder al contenido Adulto y los lugares de [CURRENT_GRID] con dicho carácter, debes tener por lo menos 18 años. Visita la página de verificación de edad para confirmar que tienes más de 18 años. +Al hacerlo se iniciará el navegador web. [_URL] - https://secondlife.com/account/verification.php?lang=es + https://secondlife.com/my/account/verification.php - + Para visitar este sitio debes haber aportado información de pago en tu cuenta. ¿Quieres ir al sitio web de [CURRENT_GRID] y configurar esto? @@ -2425,11 +2439,19 @@ Por favor, vuelve a intentarlo en unos momentos. Un objeto de nombre <nolink>[OBJECTFROMNAME]</nolink>, propiedad de [NAME_SLURL], te ha dado este [OBJECTTYPE]: -[ITEM_SLURL] +<nolink>[ITEM_SLURL]</nolink> +
+
diff --git a/indra/newview/skins/default/xui/fr/menu_media_ctrl.xml b/indra/newview/skins/default/xui/fr/menu_media_ctrl.xml index 787a5b3af2..1941ad2cbf 100644 --- a/indra/newview/skins/default/xui/fr/menu_media_ctrl.xml +++ b/indra/newview/skins/default/xui/fr/menu_media_ctrl.xml @@ -3,4 +3,5 @@ + diff --git a/indra/newview/skins/default/xui/fr/menu_mode_change.xml b/indra/newview/skins/default/xui/fr/menu_mode_change.xml new file mode 100644 index 0000000000..982a331c5b --- /dev/null +++ b/indra/newview/skins/default/xui/fr/menu_mode_change.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml index 594662380d..f06f511dbd 100644 --- a/indra/newview/skins/default/xui/fr/menu_viewer.xml +++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml @@ -140,7 +140,6 @@ -
@@ -161,7 +160,6 @@ - @@ -256,6 +254,7 @@ + diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml index 88e41b8ca1..87bb699ad8 100644 --- a/indra/newview/skins/default/xui/fr/notifications.xml +++ b/indra/newview/skins/default/xui/fr/notifications.xml @@ -85,6 +85,19 @@ Veuillez vérifier votre connexion Internet. Enregistrer les changements dans la partie du corps/les habits actuels ? + + Vous n'êtes pas autorisé à copier cet article dans la boîte d'envoi vers la Place du marché. Voulez-vous vraiment déplacer l'article suivant ? + [ITEM_NAME] + + + + Chargement sur la Place du marché terminé. + + + + Chargement sur la Place du marché effectué avec des erreurs ! Corrigez les problèmes dans votre boîte d'envoi et réessayez. Merci ! + + Une erreur est survenue lors du chargement du texte pour un script, suite au problème suivant : [REASON]. Veuillez réessayer ultérieurement. @@ -2057,13 +2070,14 @@ Liez-la à partir d'une page web pour permettre aux autres résidents d&apo - Pour pouvoir pénétrer dans cette zone, vous devez avoir procédé à la vérification de votre âge. Souhaitez-vous aller sur [CURRENT_GRID] et procéder à la vérification de votre âge ? + Vous devez avoir au moins 18 ans pour accéder au contenu et aux zones Adulte dans [CURRENT_GRID]. Visitez la page de vérification de l'âge afin de confirmer que vous avez plus de 18 ans. +Cette opération lancera votre navigateur Web. [_URL] - https://secondlife.com/account/verification.php?lang=fr + https://secondlife.com/my/account/verification.php - + Pour pouvoir pénétrer dans cette zone, vous devez avoir enregistré vos informations de paiement. Souhaitez-vous aller sur [CURRENT_GRID] et enregistrer vos informations de paiement ? @@ -2417,11 +2431,19 @@ Veuillez réessayer dans quelques minutes. Un objet nommé <nolink>[OBJECTFROMNAME]</nolink> appartenant à [NAME_SLURL] vous a donné un objet de type [OBJECTTYPE] : -[ITEM_SLURL] +<nolink>[ITEM_SLURL]</nolink> + + diff --git a/indra/newview/skins/default/xui/it/menu_media_ctrl.xml b/indra/newview/skins/default/xui/it/menu_media_ctrl.xml index a0e7370efd..aa9e583f8e 100644 --- a/indra/newview/skins/default/xui/it/menu_media_ctrl.xml +++ b/indra/newview/skins/default/xui/it/menu_media_ctrl.xml @@ -3,4 +3,5 @@ + diff --git a/indra/newview/skins/default/xui/it/menu_mode_change.xml b/indra/newview/skins/default/xui/it/menu_mode_change.xml new file mode 100644 index 0000000000..499dcf1873 --- /dev/null +++ b/indra/newview/skins/default/xui/it/menu_mode_change.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml index ba191f0fab..a11cd7ff6f 100644 --- a/indra/newview/skins/default/xui/it/menu_viewer.xml +++ b/indra/newview/skins/default/xui/it/menu_viewer.xml @@ -138,7 +138,6 @@ -
@@ -158,8 +157,7 @@ - - + @@ -249,6 +247,7 @@ + diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml index 8972affab8..e186fdbabf 100644 --- a/indra/newview/skins/default/xui/it/notifications.xml +++ b/indra/newview/skins/default/xui/it/notifications.xml @@ -85,6 +85,19 @@ Accertati che la tua connessione Internet stia funzionando correttamente. Salva i cambiamenti all'attuale parte del corpo/abito? + + Non hai l'autorizzazione necessaria per copiare questo oggetto nella casella in uscita di Marketplace. Sei sicuro di volere spostare gli oggetti seguenti? + [ITEM_NAME] + + + + Caricamento di Marketplace completato. + + + + Caricamento di Marketplace completato senza errori. Correggi i problemi nella casella in uscita e riprova. Grazie. + + C'è stato un problema importando il testo di uno script per la seguente ragione: [REASON]. Riprova più tardi. @@ -2064,13 +2077,14 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica - Per entrare in questa zona, devi avere eseguito la verifica dell'età. Vuoi andare sul sito di [CURRENT_GRID] per verificare la tua età? + Per accedere ai contenuti e alle aree per adulti in [CURRENT_GRID] devi avere almeno 18 anni. Visita la pagina di verifica dell'età per confermare di avere almeno 18 anni. +Verrà avviato il browser Web. [_URL] - https://secondlife.com/account/verification.php?lang=it + https://secondlife.com/my/account/verification.php - + Per poter visitare questa zona devi avere devi aver fornito informazioni di pagamento a Linden Lab. Vuoi andare sul sito di [CURRENT_GRID] ed impostarle? @@ -2420,11 +2434,19 @@ Riprova tra qualche istante. Un oggetto denominato <nolink>[OBJECTFROMNAME]</nolink> di proprietà di [NAME_SLURL] ti ha dato questo [OBJECTTYPE]: -[ITEM_SLURL] +<nolink>[ITEM_SLURL]</nolink> diff --git a/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml b/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml index d155dc17e0..faae4ef717 100644 --- a/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml +++ b/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml @@ -3,4 +3,5 @@ + diff --git a/indra/newview/skins/default/xui/ja/menu_mode_change.xml b/indra/newview/skins/default/xui/ja/menu_mode_change.xml new file mode 100644 index 0000000000..dff3392bd5 --- /dev/null +++ b/indra/newview/skins/default/xui/ja/menu_mode_change.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml index ffa09d806e..67ecb1937a 100644 --- a/indra/newview/skins/default/xui/ja/menu_viewer.xml +++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml @@ -138,7 +138,6 @@ - @@ -159,7 +158,6 @@ - @@ -254,6 +252,7 @@ + diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml index 9320dc59aa..5fb41e5fd7 100644 --- a/indra/newview/skins/default/xui/ja/notifications.xml +++ b/indra/newview/skins/default/xui/ja/notifications.xml @@ -84,6 +84,19 @@ ç¾åœ¨ã®è¡£é¡žã€èº«ä½“部ä½ã®å¤‰æ›´ã‚’ä¿å­˜ã—ã¾ã™ã‹ï¼Ÿ + + マーãƒãƒ£ãƒ³ãƒˆã®ã‚¢ã‚¦ãƒˆãƒœãƒƒã‚¯ã‚¹ã«ã“れをコピーã™ã‚‹æ¨©é™ãŒã‚りã¾ã™ã€‚次ã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’移動ã—ã¾ã™ã‹ï¼Ÿ +[ITEM_NAME] + + + + マーケットプレイスã¸ã®ã‚¢ãƒƒãƒ—ロードãŒå®Œäº†ã—ã¾ã—ãŸã€‚ + + + + マーケットプレイスã¸ã®ã‚¢ãƒƒãƒ—ロードã®å®Œäº†æ™‚ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚アウトボックスã®å•題を解決ã—ã¦ã€ã‚‚ã†ä¸€åº¦ãŠè©¦ã—ãã ã•ã„。ã‚りãŒã¨ã†ã”ã–ã„ã¾ã™ã€‚ + + 次ã®ç†ç”±ã§ã€ã‚¹ã‚¯ãƒªãƒ—ト用テキストã®ã‚¢ãƒƒãƒ—ロード時ã«å•題ãŒèµ·ã“りã¾ã—ãŸã€‚ [REASON] @@ -2105,13 +2118,14 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚» - 年齢確èªã‚’済ã¾ã›ã¦ã„ãªã„ã¨ã“ã®åŒºç”»ã‚’訪れるã“ã¨ãŒã§ãã¾ã›ã‚“。 [CURRENT_GRID] サイトã§å¹´é½¢ã®ç¢ºèªã‚’行ã„ã¾ã™ã‹ï¼Ÿ + [CURRENT_GRID] ã§ Adult 指定ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„や領域ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹ã®ã¯ 18 歳以上ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿ã§ã™ã€‚年齢確èªãƒšãƒ¼ã‚¸ã§ 18 歳以上ã§ã‚ã‚‹ã“ã¨ã‚’証明ã—ã¦ãã ã•ã„。 +ã“れをクリックã™ã‚‹ã¨ã‚¦ã‚§ãƒ–ブラウザãŒé–‹ãã¾ã™ã€‚ [_URL] - https://secondlife.com/account/verification.php?lang=ja + https://secondlife.com/my/account/verification.php - + 支払情報ãŒç™»éŒ²ã•れã¦ã„ãªã„ã¨ã“ã®ã‚¨ãƒªã‚¢ã‚’訪れるã“ã¨ãŒã§ãã¾ã›ã‚“。 [CURRENT_GRID] サイトã§ç™»éŒ²ã‚’行ã„ã¾ã™ã‹ï¼Ÿ @@ -2466,11 +2480,19 @@ Web ページã«ãƒªãƒ³ã‚¯ã™ã‚‹ã¨ã€ä»–人ãŒã“ã®å ´æ‰€ã«ç°¡å˜ã«ã‚¢ã‚¯ã‚» [NAME_SLURL] ãŒæ‰€æœ‰ã™ã‚‹ <nolink>[OBJECTFROMNAME]</nolink> ã¨ã„ã†åå‰ã®ã‚ªãƒ–ジェクトãŒã€ã‚ãªãŸã« [OBJECTTYPE] を渡ã—ã¾ã—ãŸï¼š -[ITEM_SLURL] +<nolink>[ITEM_SLURL]</nolink> diff --git a/indra/newview/skins/default/xui/pt/menu_media_ctrl.xml b/indra/newview/skins/default/xui/pt/menu_media_ctrl.xml index 44117c8865..ac84b02870 100644 --- a/indra/newview/skins/default/xui/pt/menu_media_ctrl.xml +++ b/indra/newview/skins/default/xui/pt/menu_media_ctrl.xml @@ -3,4 +3,5 @@ + diff --git a/indra/newview/skins/default/xui/pt/menu_mode_change.xml b/indra/newview/skins/default/xui/pt/menu_mode_change.xml new file mode 100644 index 0000000000..314d3e409b --- /dev/null +++ b/indra/newview/skins/default/xui/pt/menu_mode_change.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml index aa7e541635..c9b1a9ccd5 100644 --- a/indra/newview/skins/default/xui/pt/menu_viewer.xml +++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml @@ -138,7 +138,6 @@ - @@ -159,7 +158,6 @@ - @@ -249,6 +247,7 @@ + diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml index c6dfd3b7d3..27b2fa1a31 100644 --- a/indra/newview/skins/default/xui/pt/notifications.xml +++ b/indra/newview/skins/default/xui/pt/notifications.xml @@ -84,6 +84,19 @@ Verifique se a conexão à internet está funcionando. Salvar modificações? + + Você não tem permissão para copiar este item para a Caixa de saída do lojista. Tem certeza de que deseja mover o itens a seguir? + [ITEM_NAME] + + + + Envio para Mercado concluído. + + + + Envio para Mercado concluído com erros! Corrija os problemas em sua caixa de saída e tente novamente. Obrigado. + + Houve um problema com o carregamento do texto para um script devido à seguinte razão: [REASON]. Por favor, tente novamente mais tarde. @@ -2047,13 +2060,14 @@ Inclua um link para facilitar o acesso para visitantes. Teste o link na barra de - Ãrea restrita a residentes com idade comprovada. Deseja ir ao site do [CURRENT_GRID] para comprovar sua idade? + Você deve ter no mínimo 18 anos para acessar conteúdo e áreas adultas [CURRENT_GRID]. Visite nossa página de verificação de idade para confirmar que você tem mais de 18 anos. +Isso abrirá o seu navegador. [_URL] - https://secondlife.com/account/verification.php?lang=pt + https://secondlife.com/my/account/verification.php - + Ãrea restrita a residentes que já cadastraram seus dados de pagamento Deseja ir ao site do [CURRENT_GRID] para cuidar disso? @@ -2399,12 +2413,20 @@ Por favor, tente novamente em alguns instantes. Nenhum lote válido foi encontrado. - Um objeto chamado <nolink>[OBJECTFROMNAME]</nolink>, de [NAME_SLURL], lhe deu este(a) [OBJECTTYPE]: -[ITEM_SLURL] + Um objeto chamado <nolink>[OBJECTFROMNAME]</nolink>, de [NAME_SLURL], obteve este(a) [OBJECTTYPE]: +<nolink>[ITEM_SLURL]</nolink> - Packets Lost: [PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) + å°åŒ…æå¤±ï¼š[PACKETS_LOST,number,0]/[PACKETS_IN,number,0] ([PACKETS_PCT,number,1]%) @@ -77,7 +77,7 @@ google-perftools Copyright (c) 2005, Google Inc. All rights reserved. See licenses.txt for details. -Voice chat Audio coding: Polycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) +語音èŠå¤©éŸ³é »ç·¨ç¢¼ï¼šPolycom(R) Siren14(TM) (ITU-T Rec. G.722.1 Annex C) diff --git a/indra/newview/skins/default/xui/zh/floater_about_land.xml b/indra/newview/skins/default/xui/zh/floater_about_land.xml index efd8909e67..2568d492f0 100644 --- a/indra/newview/skins/default/xui/zh/floater_about_land.xml +++ b/indra/newview/skins/default/xui/zh/floater_about_land.xml @@ -30,7 +30,7 @@ Anyone - Area + å€åŸŸ [AREA] m² @@ -42,7 +42,7 @@ You must approve your purchase to modify this land. - ï¼ˆç¤¾åœ˜æ‰€æ“æœ‰ï¼‰ + ï¼ˆç¾¤çµ„æ‰€æ“æœ‰ï¼‰ 檔案 @@ -81,28 +81,28 @@ 分級: - æˆäºº + 完全æˆäºº æ“æœ‰è€…: - 社團: + 群組: - diff --git a/indra/newview/skins/metaharper/xui/en/panel_region_texture.xml b/indra/newview/skins/metaharper/xui/en/panel_region_texture.xml deleted file mode 100644 index 5d910ea659..0000000000 --- a/indra/newview/skins/metaharper/xui/en/panel_region_texture.xml +++ /dev/null @@ -1,327 +0,0 @@ - - - - Region: - - - unknown - - - Terrain Textures (requires 512x512, 24 bit .tga files) - - - - - - - 1 (Low) - - - 2 - - - 3 - - - 4 (High) - - - Texture Elevation Ranges - - - Northwest - - - Northeast - - - - - - - - - - - Southwest - - - Southeast - - - - - - - - - - - These values represent the blend range for the textures above. - - - Measured in meters, the LOW value is the MAXIMUM height of Texture #1, and the HIGH value is the MINIMUM height of Texture #4. - -